From 1018dcdd4a8490ac90c92b5b37aa84a62cffd6ad Mon Sep 17 00:00:00 2001 From: Dawit Ameneshewa Date: Tue, 6 Dec 2022 10:11:45 +0300 Subject: [PATCH] Make `StorageApi` notify its subscribers when localStorage values change in other tabs/windows Signed-off-by: Dawit Ameneshewa --- .../src/apis/implementations/StorageApi/WebStorage.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/core-app-api/src/apis/implementations/StorageApi/WebStorage.ts b/packages/core-app-api/src/apis/implementations/StorageApi/WebStorage.ts index b0cbfbd883..c17cc56494 100644 --- a/packages/core-app-api/src/apis/implementations/StorageApi/WebStorage.ts +++ b/packages/core-app-api/src/apis/implementations/StorageApi/WebStorage.ts @@ -89,9 +89,19 @@ export class WebStorage implements StorageApi { observe$( key: string, ): Observable> { + this.addStorageEventListener(); return this.observable.filter(({ key: messageKey }) => messageKey === key); } + private addStorageEventListener() { + window.addEventListener('storage', event => { + if (event.key?.includes(this.namespace)) { + const key = event.key.replace(`${this.namespace}/`, ''); + this.notifyChanges(key); + } + }); + } + private getKeyName(key: string) { return `${this.namespace}/${encodeURIComponent(key)}`; }