mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
66 lines
1.3 KiB
TypeScript
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;
|