From 4d5492267402a9901d5cf844357eb1db4379ad0d Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 17 Mar 2022 15:27:02 +0100 Subject: [PATCH] Add onLoad/onStore --- src/storage_manager/config/config.js | 11 +++++++++++ src/storage_manager/index.js | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/storage_manager/config/config.js b/src/storage_manager/config/config.js index 65fb46b51..38eb52448 100644 --- a/src/storage_manager/config/config.js +++ b/src/storage_manager/config/config.js @@ -32,6 +32,17 @@ export default { // need to be done before save. Useful with remoteStorage to reduce remote calls stepsBeforeSave: 1, + /** + * Callback triggered before the store call (can be asynchronous). + * This can be used to enrich the project data to store. + */ + onStore: data => data, + + /** + * Callback triggered after the load call (can be asynchronous). + */ + onLoad: data => data, + // Default storage options options: { local: { diff --git a/src/storage_manager/index.js b/src/storage_manager/index.js index e0e65da9f..4e4105b0c 100644 --- a/src/storage_manager/index.js +++ b/src/storage_manager/index.js @@ -270,6 +270,7 @@ export default () => { async __exec(storage, opts, data) { const ev = data ? 'store' : 'load'; + const { onStore, onLoad } = this.getConfig(); let result; this.onStart(ev, data); @@ -280,13 +281,15 @@ export default () => { try { if (data) { - const toStore = (opts.onStore && (await opts.onStore(data))) || data; + let toStore = (onStore && (await onStore(data))) || data; + toStore = (opts.onStore && (await opts.onStore(toStore))) || toStore; await storage.store(toStore, opts); result = data; } else { result = await storage.load(opts); result = this.__clearKeys(result); result = (opts.onLoad && (await opts.onLoad(result))) || result; + result = (onLoad && (await onLoad(result))) || result; } this.onAfter(ev, result); this.onEnd(ev, result);