synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
75 lines (70 loc) • 4.3 kB
TypeScript
import { S as SelectorAPI } from './selector.interface-CA5y-kD_.js';
import { j as IStorage } from './storage.interface-2HKvqdAJ.js';
import { ComponentType } from 'react';
import { Observable } from 'rxjs';
import { b as SynapseStoreWithEffects, a as SynapseStoreWithDispatcher, S as SynapseStoreBasic } from './createSynapse-CzeX0ONj.js';
import './dispatcher.module-DjMloBXe.js';
interface UseSelectorOptions<T> {
/** Начальное значение до загрузки данных из селектора */
initialValue?: T;
/** Функция сравнения для предотвращения лишних ререндеров */
equals?: (a: T, b: T) => boolean;
/** Включать ли статус загрузки в возвращаемый результат */
withLoading?: boolean;
}
/**
* Хук для использования селекторов в компонентах React.
* Обеспечивает согласованность значений между всеми экземплярами хука.
*/
declare function useSelector<T>(selector: SelectorAPI<T>): T | undefined;
declare function useSelector<T>(selector: SelectorAPI<T>, options: UseSelectorOptions<T> & {
withLoading?: true;
}): {
data: T | undefined;
isLoading: boolean;
};
/**
* Хук для подписки на изменения в хранилище
*
* @template S - Тип состояния хранилища
* @template R - Тип возвращаемого значения
* @param storage - Экземпляр хранилища
* @param selector - Функция-селектор для выбора данных
* @returns Значение из хранилища
*/
declare const useStorageSubscribe: <S extends Record<string, any>, R = any>(storage: IStorage<S>, selector: (state: S) => R) => R | undefined;
interface Options<TStore extends Record<string, any>> {
loadingComponent?: any;
mergeFn?: (target: TStore, source: Record<string, any>) => void;
}
/**
* Перегрузки для createSynapseCtx в зависимости от типа хранилища
*/
declare function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(synapseStorePromise: Promise<SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>> | SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>, options?: Options<TStore>): {
contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps & {
contextProps?: PublicContextProps;
}>;
useSynapseStorage: () => TStorage;
useSynapseSelectors: () => TSelectors;
useSynapseActions: () => TActions;
useSynapseState$: () => Observable<TStore>;
cleanupSynapse: () => Promise<void>;
};
declare function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(synapseStorePromise: Promise<SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>> | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>, options?: Options<TStore>): {
contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps & {
contextProps?: PublicContextProps;
}>;
useSynapseStorage: () => TStorage;
useSynapseSelectors: () => TSelectors;
useSynapseActions: () => TActions;
cleanupSynapse: () => Promise<void>;
};
declare function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors>(synapseStorePromise: Promise<SynapseStoreBasic<TStore, TStorage, TSelectors>> | SynapseStoreBasic<TStore, TStorage, TSelectors>, options?: Options<TStore>): {
contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps & {
contextProps?: PublicContextProps;
}>;
useSynapseStorage: () => TStorage;
useSynapseSelectors: () => TSelectors;
cleanupSynapse: () => Promise<void>;
};
export { createSynapseCtx, useSelector, useStorageSubscribe };