state-pool
Version:
Transform your React app with our state management library! Declare global and local states like variables, powered by the magic of React hooks 🪄✨
98 lines (97 loc) • 3.18 kB
TypeScript
import State from './State';
import { StateInitializer, Selector, Patcher, Reducer, SetState, UpdateState } from './types';
type StoreObserver = (key: string, value: unknown) => void;
type PersistenceConfig = {
saveState: (key: string, state: unknown, isInitialSet: boolean) => void;
loadState: (key: string, noState: Empty) => unknown;
removeState?: (key: string) => void;
clear?: () => void;
PERSIST_ENTIRE_STORE?: boolean;
};
type StoreInitializer = {
[key: string]: unknown;
} | (() => {
[key: string]: unknown;
});
declare class Empty {
}
export default class Store {
private states;
private subscribers;
private persistentStorage;
constructor(storeInitializer?: StoreInitializer);
subscribe(observer: StoreObserver): () => void;
private onStoreUpdate;
persist(config: PersistenceConfig): void;
setState<T>(key: string, initialValue: StateInitializer<T> | T, { persist }?: {
persist?: boolean;
}): void;
getState<T>(key: string, config?: {
default?: StateInitializer<T> | T;
persist?: boolean;
}): State<T>;
has(key: string): boolean;
items(): Array<[key: string, state: unknown, persist: boolean]>;
getStateValue<ST, T = unknown>(key: string, selector?: any): T | ST;
clear(fn?: () => void): void;
remove(Statekey: string | string[], fn?: () => void): void;
useState<T>(key: string, config?: {
default?: StateInitializer<T> | T;
persist?: boolean;
}): [
state: T,
setState: SetState<T>,
updateState: UpdateState<T>,
stateObject: State<T>
];
useState<ST, T>(key: string, config: {
selector: Selector<ST>;
default?: StateInitializer<T> | T;
persist?: boolean;
}): [
state: ST,
setState: SetState<T>,
updateState: UpdateState<T>,
stateObject: State<T>
];
useState<ST, T>(key: string, config: {
selector: Selector<ST>;
patcher: Patcher<ST>;
default?: StateInitializer<T> | T;
persist?: boolean;
}): [
state: ST,
setState: SetState<ST>,
updateState: UpdateState<ST>,
stateObject: State<T>
];
useReducer<T, A>(reducer: Reducer<T, A>, key: string, config?: {
default?: StateInitializer<T> | T;
persist?: boolean;
}): [
state: T,
dispatch: (action: A) => void,
stateObject: State<T>
];
useReducer<ST, A, T = unknown>(reducer: Reducer<ST, A>, key: string, config: {
selector?: Selector<ST>;
default?: StateInitializer<T> | T | never;
persist?: boolean;
}): [
state: ST,
dispatch: (action: A) => void,
stateObject: State<T>
];
useReducer<ST, A, T = unknown>(reducer: Reducer<ST, A>, key: string, config: {
selector?: Selector<ST>;
patcher?: Patcher<ST>;
default?: StateInitializer<T> | T | never;
persist?: boolean;
}): [
state: ST,
dispatch: (action: A) => void,
stateObject: State<T>
];
}
export declare function createStore(storeInitializer?: StoreInitializer): Store;
export {};