diff --git a/packages/client/src/pizzax.ts b/packages/client/src/pizzax.ts index 396abc2418..6a876c0797 100644 --- a/packages/client/src/pizzax.ts +++ b/packages/client/src/pizzax.ts @@ -1,6 +1,6 @@ import { onUnmounted, Ref, ref, watch } from 'vue'; import { $i } from './account'; -import { api } from './os'; +import { api, stream } from './os'; type StateDef = Record { public readonly state: { [K in keyof T]: T[K]['default'] }; public readonly reactiveState: { [K in keyof T]: Ref }; + private connection = stream.useChannel('main'); + constructor(key: string, def: T) { this.key = key; this.keyForLocalStorage = 'pizzax::' + key; @@ -70,7 +72,14 @@ export class Storage { }); }, 1); - // TODO: streamingのuser storage updateイベントを監視して更新 + // streamingのuser storage updateイベントを監視して更新 + this.connection.on('registryUpdated', ({ scope, key, value }) => { + this.state[key] = value; + this.reactiveState[key].value = value; + const cache = JSON.parse(localStorage.getItem(this.keyForLocalStorage + '::cache::' + $i.id) || '{}'); + cache[key] = value; + localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); + }); } }