import { SortByOptions } from './queryConfig'; import { BehaviorSubject, Observable } from 'rxjs'; import { QueryEntity } from './queryEntity'; export interface HashMap { [id: string]: T; } export interface EntityState { entities?: HashMap; ids?: IDType[]; loading?: boolean; error?: any; [key: string]: any; } export interface Entities { entities: HashMap; ids: ID[]; } export interface ActiveState { active: T | null; } export interface MultiActiveState { active: T[]; } export interface SelectOptions extends SortByOptions { asObject?: boolean; filterBy?: ((entity: E, index?: number) => boolean) | ((entity: E, index?: number) => boolean)[] | undefined; limitTo?: number; } export declare type StateWithActive = State & (ActiveState | MultiActiveState); export declare type UpdateStateCallback = Partial> = (state: State) => NewState | void; export declare type UpsertStateCallback = Partial> = (state: State | {}) => NewState; export declare type CreateStateCallback, IDType> = (id: IDType, newState: NewState) => State; export declare type UpdateEntityPredicate = (entity: E) => boolean; export declare type ID = number | string; export declare type IDS = ID | ID[]; export declare type PreAddEntity = (entity: Entity) => Entity; export declare type PreUpdateEntity = (prevEntity: Entity, nextEntity: Entity) => Entity; export declare type StoreCache = { active: BehaviorSubject; ttl: number; }; export declare type ArrayProperties = { [K in keyof T]: T[K] extends any[] ? K : never; }[keyof T]; export declare type ItemPredicate = (item: Item, index?: number) => boolean; export declare type MaybeAsync = Promise | Observable | T; export declare type EntityUICreateFn = EntityUI | ((entity: Entity) => EntityUI); export declare type Constructor = new (...args: any[]) => T; export declare type OrArray = Type | Type[]; export declare type getEntityType = S extends EntityState ? I : never; export declare type getIDType = S extends EntityState ? I : never; export declare type getQueryEntityState> = T extends QueryEntity ? S : never; export declare type ArrayFuncs = ((...a: any[]) => any)[]; export declare type ReturnTypes = { [P in keyof T]: T[P] extends (...a: any[]) => infer R ? R : never; };