Files
2024-02-15 17:01:50 +00:00

66 lines
1.3 KiB
TypeScript

import {createStore} from 'reflux';
import type {CommonStoreDefinition} from './types';
type Preferences = {
/**
* Is the sidebar collapsed to the side
*/
collapsed?: boolean;
};
interface PreferenceStoreDefinition extends CommonStoreDefinition<Preferences> {
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;