synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
32 lines (31 loc) • 1.64 kB
TypeScript
import { Observable } from 'rxjs';
import { IStorageBase } from '../../../core';
/**
* Конвертирует хранилище (IStorageBase) в Observable потока состояния.
*
* Без `selector` поток эмитит всё состояние `T` на каждое изменение хранилища.
* С `selector` поток эмитит только выбранный срез и через `distinctUntilChanged`
* пропускает повторы (по умолчанию сравнение по `Object.is`, либо переданным
* `equals`) — компонент/эффект получает значение только когда срез реально менялся.
*
* @example
* ```ts
* import { toObservable } from 'synapse-storage/reactive'
*
* const auth$ = toObservable(authStorage)
*
* // Использование в createEffectConfig
* createEffectConfig: () => ({
* externalStates: { auth: auth$ },
* })
*
* // Поток только по срезу (эмитит лишь при изменении user.id):
* const userId$ = toObservable(authStorage, (s) => s.user.id)
* ```
*/
export declare function toObservable<T extends Record<string, any>>(storage: IStorageBase<T>): Observable<T>;
export declare function toObservable<T extends Record<string, any>, R>(storage: IStorageBase<T>, selector: (state: T) => R, equals?: (a: R, b: R) => boolean): Observable<R>;
/**
* Проверяет, является ли значение хранилищем (IStorageBase)
*/
export declare function isStorage(value: any): value is IStorageBase<any>;