From e6a086afac77d8da73f225dd0aa84b3d178ec47b Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sun, 15 Jan 2023 13:48:04 +0400 Subject: [PATCH] Pass storage response to `storage:load`/`storage:store` events --- src/storage_manager/index.ts | 15 ++++++++------- src/storage_manager/model/LocalStorage.ts | 1 + src/storage_manager/model/RemoteStorage.ts | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/storage_manager/index.ts b/src/storage_manager/index.ts index 7d5d4f458..4eaba72a7 100644 --- a/src/storage_manager/index.ts +++ b/src/storage_manager/index.ts @@ -287,19 +287,20 @@ export default class StorageManager extends Module< try { const editor = this.em?.getEditor(); + let response: any; if (data) { let toStore = (onStore && (await onStore(data, editor))) || data; toStore = (opts.onStore && (await opts.onStore(toStore, editor))) || toStore; - await storage.store(toStore, opts); + response = await storage.store(toStore, opts); result = data; } else { - result = await storage.load(opts); - result = this.__clearKeys(result); + response = await storage.load(opts); + result = this.__clearKeys(response); result = (opts.onLoad && (await opts.onLoad(result, editor))) || result; result = (onLoad && (await onLoad(result, editor))) || result; } - this.onAfter(ev, result); + this.onAfter(ev, result, response); this.onEnd(ev, result); } catch (error) { this.onError(ev, error); @@ -344,12 +345,12 @@ export default class StorageManager extends Module< * On after callback (before passing data to the callback) * @private */ - onAfter(ctx: string, data: ProjectData) { + onAfter(ctx: string, data: ProjectData, response: any) { const { em } = this; if (em) { em.trigger(eventAfter); - em.trigger(`${eventAfter}:${ctx}`, data); - em.trigger(`storage:${ctx}`, data); + em.trigger(`${eventAfter}:${ctx}`, data, response); + em.trigger(`storage:${ctx}`, data, response); } } diff --git a/src/storage_manager/model/LocalStorage.ts b/src/storage_manager/model/LocalStorage.ts index aec8a9897..f70a6b9b3 100644 --- a/src/storage_manager/model/LocalStorage.ts +++ b/src/storage_manager/model/LocalStorage.ts @@ -20,6 +20,7 @@ export default class LocalStorage implements IStorage { if (this.hasLocal(opts, true)) { localStorage.setItem(opts.key!, JSON.stringify(data)); } + return data; } async load(opts: LocalStorageConfig = {}) { diff --git a/src/storage_manager/model/RemoteStorage.ts b/src/storage_manager/model/RemoteStorage.ts index 4ecc64175..01c33134a 100644 --- a/src/storage_manager/model/RemoteStorage.ts +++ b/src/storage_manager/model/RemoteStorage.ts @@ -63,7 +63,7 @@ export interface RemoteStorageConfig { export default class RemoteStorage implements IStorage { async store(data: ProjectData, opts: RemoteStorageConfig = {}) { - await this.request(opts.urlStore!, this.__props(opts, data), opts); + return await this.request(opts.urlStore!, this.__props(opts, data), opts); } async load(opts: RemoteStorageConfig = {}) {