52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
import { STORAGE_KEYS } from '../constants'
|
|
import { configStore, eventStore } from '../stores'
|
|
|
|
class StorageListener {
|
|
constructor() {
|
|
this._storeSubscribers = new Set()
|
|
}
|
|
|
|
register() {
|
|
window.addEventListener('storage', this._handleStorageChange)
|
|
|
|
const unsubscribeConfigStore = configStore.subscribe(this._handleConfigStoreChange)
|
|
const unsubscribeEventStore = eventStore.subscribe(this._handleEventStoreChange)
|
|
|
|
this._storeSubscribers = new Set([
|
|
...this._storeSubscribers,
|
|
unsubscribeConfigStore,
|
|
unsubscribeEventStore,
|
|
])
|
|
}
|
|
|
|
unregister() {
|
|
window.removeEventListener('storage', this._handleStorageChange)
|
|
|
|
this._storeSubscribers.forEach((unsubscribe) => unsubscribe())
|
|
this._storeSubscribers.clear()
|
|
}
|
|
|
|
_handleStorageChange(event) {
|
|
switch (event.key) {
|
|
case STORAGE_KEYS.CONFIG:
|
|
configStore.set(JSON.parse(event.newValue))
|
|
break
|
|
case STORAGE_KEYS.EVENTS:
|
|
eventStore.set({ events: JSON.parse(event.newValue) })
|
|
break
|
|
default:
|
|
return
|
|
}
|
|
}
|
|
|
|
_handleConfigStoreChange(value) {
|
|
localStorage.setItem(STORAGE_KEYS.CONFIG, JSON.stringify(value))
|
|
}
|
|
|
|
_handleEventStoreChange(value) {
|
|
localStorage.setItem(STORAGE_KEYS.EVENTS, JSON.stringify(value.events || []))
|
|
}
|
|
}
|
|
|
|
export default new StorageListener()
|