diff --git a/src/storage_manager/index.ts b/src/storage_manager/index.ts index d76646e46..c1082dad3 100644 --- a/src/storage_manager/index.ts +++ b/src/storage_manager/index.ts @@ -19,18 +19,7 @@ * storageManager.add(...); * ``` * - * ## Available Events - * * `storage:start` - Before the storage request is started - * * `storage:start:store` - Before the store request. The object to store is passed as an argument (which you can edit) - * * `storage:start:load` - Before the load request. Items to load are passed as an argument (which you can edit) - * * `storage:load` - Triggered when something was loaded from the storage, loaded object passed as an argument - * * `storage:store` - Triggered when something is stored to the storage, stored object passed as an argument - * * `storage:end` - After the storage request is ended - * * `storage:end:store` - After the store request - * * `storage:end:load` - After the load request - * * `storage:error` - On any error on storage request, passes the error as an argument - * * `storage:error:store` - Error on store request, passes the error as an argument - * * `storage:error:load` - Error on load request, passes the error as an argument + * {REPLACE_EVENTS} * * ## Methods * * [getConfig](#getconfig) @@ -58,26 +47,13 @@ import LocalStorage from './model/LocalStorage'; import RemoteStorage from './model/RemoteStorage'; import EditorModel from '../editor/model/Editor'; import IStorage, { StorageOptions, ProjectData } from './model/IStorage'; +import StorageEvents from './types'; export type * from './model/IStorage'; -export type StorageEvent = - | 'storage:start' - | 'storage:start:store' - | 'storage:start:load' - | 'storage:load' - | 'storage:store' - | 'storage:end' - | 'storage:end:store' - | 'storage:end:load' - | 'storage:error' - | 'storage:error:store' - | 'storage:error:load'; - -const eventStart = 'storage:start'; -const eventAfter = 'storage:after'; -const eventEnd = 'storage:end'; -const eventError = 'storage:error'; +export type StorageEvent = `${StorageEvents}`; + +type StorageEventType = 'store' | 'load'; const STORAGE_LOCAL = 'local'; const STORAGE_REMOTE = 'remote'; @@ -86,6 +62,7 @@ export default class StorageManager extends Module< StorageManagerConfig & { name?: string; _disable?: boolean; currentStorage?: string } > { storages: Record = {}; + events = StorageEvents; constructor(em: EditorModel) { super(em, 'StorageManager', defaults); @@ -315,7 +292,7 @@ export default class StorageManager extends Module< result = (onLoad && (await onLoad(result, editor))) || result; } this.onAfter(ev, result, response); - this.onEnd(ev, result); + this.onEnd(ev, result, response); } catch (error) { this.onError(ev, error); throw error; @@ -347,11 +324,12 @@ export default class StorageManager extends Module< * On start callback * @private */ - onStart(ctx: string, data?: ProjectData) { + onStart(type: StorageEventType, data?: ProjectData) { const { em } = this; if (em) { - em.trigger(eventStart); - ctx && em.trigger(`${eventStart}:${ctx}`, data); + const ev = type === 'load' ? StorageEvents.startLoad : StorageEvents.startStore; + em.trigger(StorageEvents.start, type, data); + em.trigger(ev, data); } } @@ -359,12 +337,14 @@ export default class StorageManager extends Module< * On after callback (before passing data to the callback) * @private */ - onAfter(ctx: string, data: ProjectData, response: any) { + onAfter(type: StorageEventType, data: ProjectData, response: any) { const { em } = this; if (em) { - em.trigger(eventAfter); - em.trigger(`${eventAfter}:${ctx}`, data, response); - em.trigger(`storage:${ctx}`, data, response); + const evAfter = type === 'load' ? StorageEvents.afterLoad : StorageEvents.afterStore; + em.trigger(StorageEvents.after); + em.trigger(evAfter, data, response); + const ev = type === 'load' ? StorageEvents.load : StorageEvents.store; + em.trigger(ev, data, response); } } @@ -372,11 +352,12 @@ export default class StorageManager extends Module< * On end callback * @private */ - onEnd(ctx: string, data: ProjectData) { + onEnd(type: StorageEventType, data: ProjectData, response?: any) { const { em } = this; if (em) { - em.trigger(eventEnd); - ctx && em.trigger(`${eventEnd}:${ctx}`, data); + const ev = type === 'load' ? StorageEvents.endLoad : StorageEvents.endStore; + em.trigger(StorageEvents.end, type, data, response); + em.trigger(ev, data, response); } } @@ -384,12 +365,13 @@ export default class StorageManager extends Module< * On error callback * @private */ - onError(ctx: string, data: any) { + onError(type: StorageEventType, error: any) { const { em } = this; if (em) { - em.trigger(eventError, data); - ctx && em.trigger(`${eventError}:${ctx}`, data); - this.onEnd(ctx, data); + const ev = type === 'load' ? StorageEvents.errorLoad : StorageEvents.errorStore; + em.trigger(StorageEvents.error, error, type); + em.trigger(ev, error); + this.onEnd(type, error); } } diff --git a/src/storage_manager/types.ts b/src/storage_manager/types.ts index 5f95791dc..1a971c5e3 100644 --- a/src/storage_manager/types.ts +++ b/src/storage_manager/types.ts @@ -1,18 +1,9 @@ /**{START_EVENTS}*/ export enum StorageEvents { - /** - * @event `canvas:spot` Spots updated. - * @example - * editor.on('canvas:spot', () => { - * console.log('Spots', editor.Canvas.getSpots()); - * }); - */ - spot = 'canvas:spot', - /** * @event `storage:start` Storage request start. * @example - * editor.on('storage:start', () => { + * editor.on('storage:start', (type) => { * console.log('Storage start'); * }); */ @@ -22,7 +13,7 @@ export enum StorageEvents { * @event `storage:start:store` Storage store request start. * The project JSON object to store is passed as an argument (which you can edit). * @example - * editor.on('storage:start:store', () => { + * editor.on('storage:start:store', (data) => { * console.log('Storage start store'); * }); */ @@ -41,7 +32,7 @@ export enum StorageEvents { * @event `storage:load` Storage loaded the project. * The loaded project is passed as an argument. * @example - * editor.on('storage:load', () => { + * editor.on('storage:load', (data, res) => { * console.log('Storage loaded the project'); * }); */ @@ -51,16 +42,28 @@ export enum StorageEvents { * @event `storage:store` Storage stored the project. * The stored project is passed as an argument. * @example - * editor.on('storage:store', () => { + * editor.on('storage:store', (data, res) => { * console.log('Storage stored the project'); * }); */ store = 'storage:store', + /** + * @event `storage:after` Storage request completed. + * @example + * editor.on('storage:after', (type) => { + * console.log('Storage request completed'); + * }); + */ + after = 'storage:after', + afterStore = 'storage:after:store', + afterLoad = 'storage:after:load', + /** * @event `storage:end` Storage request ended. + * This event triggers also in case of errors. * @example - * editor.on('storage:end', () => { + * editor.on('storage:end', (type) => { * console.log('Storage request ended'); * }); */ @@ -68,6 +71,7 @@ export enum StorageEvents { /** * @event `storage:end:store` Storage store request ended. + * This event triggers also in case of errors. * @example * editor.on('storage:end:store', () => { * console.log('Storage store request ended'); @@ -77,6 +81,7 @@ export enum StorageEvents { /** * @event `storage:end:load` Storage load request ended. + * This event triggers also in case of errors. * @example * editor.on('storage:end:load', () => { * console.log('Storage load request ended'); @@ -87,7 +92,7 @@ export enum StorageEvents { /** * @event `storage:error` Error on storage request. * @example - * editor.on('storage:error', () => { + * editor.on('storage:error', (err) => { * console.log('Storage error'); * }); */ @@ -96,7 +101,7 @@ export enum StorageEvents { /** * @event `storage:error:store` Error on store request. * @example - * editor.on('storage:error:store', () => { + * editor.on('storage:error:store', (err) => { * console.log('Error on store'); * }); */ @@ -105,7 +110,7 @@ export enum StorageEvents { /** * @event `storage:error:load` Error on load request. * @example - * editor.on('storage:error:load', () => { + * editor.on('storage:error:load', (err) => { * console.log('Error on load'); * }); */