synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
120 lines (113 loc) • 6.65 kB
TypeScript
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 };