import {createStore} from 'reflux'; import type {CommonStoreDefinition} from './types'; type Preferences = { /** * Is the sidebar collapsed to the side */ collapsed?: boolean; }; interface PreferenceStoreDefinition extends CommonStoreDefinition { getInitialState(): Preferences; hideSidebar(): void; loadInitialState(prefs: Preferences): void; prefs: Preferences; reset(): void; showSidebar(): void; } const storeConfig: PreferenceStoreDefinition = { prefs: {}, init() { // XXX: Do not use `this.listenTo` in this store. We avoid usage of reflux // listeners due to their leaky nature in tests. this.reset(); }, getInitialState() { return this.prefs; }, reset() { this.prefs = {collapsed: false}; }, loadInitialState(prefs) { this.prefs = {...prefs}; this.trigger(this.prefs); }, hideSidebar() { this.prefs = {...this.prefs, collapsed: true}; this.trigger(this.prefs); }, showSidebar() { this.prefs = {...this.prefs, collapsed: false}; this.trigger(this.prefs); }, getState() { return this.prefs; }, }; /** * This store is used to hold local user preferences * Side-effects (like reading/writing to cookies) are done in associated actionCreators */ const PreferenceStore = createStore(storeConfig); export default PreferenceStore;