UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

120 lines (113 loc) 6.65 kB
import { j as IStorage, i as StorageInitStatus, U as UniversalStorageConfig, f as IPluginExecutor, m as IEventEmitter, n as ILogger } from './storage.interface-BA_ktyDz.js'; import { S as SelectorAPI } from './selector.interface-CA5y-kD_.js'; import * as react_jsx_runtime from 'react/jsx-runtime'; import { ReactNode, ComponentType } from 'react'; import { A as AnySynapseStore, b as SynapseStoreWithEffects, a as SynapseStoreWithDispatcher, S as SynapseStoreBasic } from './createSynapse-vkfKjRob.js'; import { Observable } from 'rxjs'; import './dispatcher.module-BOsMHbD5.js'; interface UseSynapseStorageOptions { /** * Автоматически инициализировать при монтировании */ autoInitialize?: boolean; /** * Уничтожать storage при размонтировании */ destroyOnUnmount?: boolean; } interface UseSynapseStorageReturn<T extends Record<string, any>> { storage: IStorage<T> | null; status: StorageInitStatus; initialize: () => Promise<void>; destroy: () => Promise<void>; isReady: boolean; isLoading: boolean; hasError: boolean; } declare function useCreateStorage<T extends Record<string, any>>(config: UniversalStorageConfig<T>, options?: UseSynapseStorageOptions, pluginExecutor?: IPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): UseSynapseStorageReturn<T>; 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 ReactAwaitSynapseOptions { loadingComponent?: ReactNode; errorComponent?: (error: Error) => ReactNode; } /** * React-обертка для фреймворк-независимой утилиты ожидания Synapse * Добавляет React-специфичные методы поверх createSynapseAwaiter */ declare function awaitSynapse<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors = any, TActions = any>(synapseStorePromise: Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>> | AnySynapseStore<TStore, TStorage, TSelectors, TActions>, options?: ReactAwaitSynapseOptions): { withSynapseReady: <ComponentProps>(Component: ComponentType<ComponentProps>) => { (props: ComponentProps): react_jsx_runtime.JSX.Element; displayName: string; }; useSynapseReady: () => { isReady: boolean; isError: boolean; isPending: boolean; store: AnySynapseStore<TStore, TStorage, TSelectors, TActions> | undefined; error: Error | null; }; waitForReady: () => Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>>; isReady: () => boolean; getStoreIfReady: () => AnySynapseStore<TStore, TStorage, TSelectors, TActions> | undefined; onReady: (callback: (store: AnySynapseStore<TStore, TStorage, TSelectors, TActions>) => void) => VoidFunction; onError: (callback: (error: Error) => void) => VoidFunction; getStatus: () => "pending" | "ready" | "error"; getError: () => Error | null; destroy: () => void; }; interface SimplifiedOptions { loadingComponent?: React.ReactNode; } /** * Перегрузки для 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?: SimplifiedOptions): { contextSynapse: <SelfComponentProps>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps>; 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?: SimplifiedOptions): { contextSynapse: <SelfComponentProps>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps>; 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?: SimplifiedOptions): { contextSynapse: <SelfComponentProps>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps>; useSynapseStorage: () => TStorage; useSynapseSelectors: () => TSelectors; cleanupSynapse: () => Promise<void>; }; export { type UseSynapseStorageOptions, type UseSynapseStorageReturn, awaitSynapse, createSynapseCtx, useCreateStorage, useSelector, useStorageSubscribe };