forked from WorldBrain/Memex
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenhancer.js
48 lines (39 loc) · 1.67 KB
/
enhancer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import * as actions from './actions'
import * as selectors from './selectors'
import { STORAGE_KEYS } from './constants'
const hydrateImportsFromStorage = store => {
const hydrate = (key, action) =>
browser.storage.local.get(key).then(data => {
if (!data[key]) {
return
}
const parsedData =
typeof data[key] === 'string'
? JSON.parse(data[key])
: data[key]
store.dispatch(action(parsedData))
})
hydrate(STORAGE_KEYS.ALLOW_TYPES, actions.initAllowTypes)
hydrate(STORAGE_KEYS.DOWNLOAD_DATA, actions.initDownloadData)
hydrate(STORAGE_KEYS.TOTALS_STATE, actions.initTotalsCounts)
hydrate(STORAGE_KEYS.SUCCESS_STATE, actions.initSuccessCounts)
hydrate(STORAGE_KEYS.FAIL_STATE, actions.initFailCounts)
}
const syncImportsToStorage = store =>
store.subscribe(() => {
const dump = (key, data) => browser.storage.local.set({ [key]: data })
const state = store.getState()
dump(STORAGE_KEYS.ALLOW_TYPES, selectors.allowTypes(state))
dump(STORAGE_KEYS.DOWNLOAD_DATA, selectors.downloadData(state))
dump(STORAGE_KEYS.TOTALS_STATE, selectors.totals(state))
dump(STORAGE_KEYS.SUCCESS_STATE, selectors.success(state))
dump(STORAGE_KEYS.FAIL_STATE, selectors.fail(state))
})
export default storeCreator => (reducer, initState, enhancer) => {
const store = storeCreator(reducer, initState, enhancer)
// Subscribe to changes and update local storage
syncImportsToStorage(store)
// Rehydrate blacklist on init from localStorage
hydrateImportsFromStorage(store)
return store
}