amis-rpc-design/node_modules/@reduxjs/toolkit/dist/entities/models.d.ts
2023-10-07 19:42:30 +08:00

98 lines
4.0 KiB
TypeScript

import type { PayloadAction } from '../createAction';
import type { IsAny } from '../tsHelpers';
/**
* @public
*/
export declare type EntityId = number | string;
/**
* @public
*/
export declare type Comparer<T> = (a: T, b: T) => number;
/**
* @public
*/
export declare type IdSelector<T> = (model: T) => EntityId;
/**
* @public
*/
export interface DictionaryNum<T> {
[id: number]: T | undefined;
}
/**
* @public
*/
export interface Dictionary<T> extends DictionaryNum<T> {
[id: string]: T | undefined;
}
/**
* @public
*/
export declare type Update<T> = {
id: EntityId;
changes: Partial<T>;
};
/**
* @public
*/
export interface EntityState<T> {
ids: EntityId[];
entities: Dictionary<T>;
}
/**
* @public
*/
export interface EntityDefinition<T> {
selectId: IdSelector<T>;
sortComparer: false | Comparer<T>;
}
export declare type PreventAny<S, T> = IsAny<S, EntityState<T>, S>;
/**
* @public
*/
export interface EntityStateAdapter<T> {
addOne<S extends EntityState<T>>(state: PreventAny<S, T>, entity: T): S;
addOne<S extends EntityState<T>>(state: PreventAny<S, T>, action: PayloadAction<T>): S;
addMany<S extends EntityState<T>>(state: PreventAny<S, T>, entities: readonly T[] | Record<EntityId, T>): S;
addMany<S extends EntityState<T>>(state: PreventAny<S, T>, entities: PayloadAction<readonly T[] | Record<EntityId, T>>): S;
setOne<S extends EntityState<T>>(state: PreventAny<S, T>, entity: T): S;
setOne<S extends EntityState<T>>(state: PreventAny<S, T>, action: PayloadAction<T>): S;
setMany<S extends EntityState<T>>(state: PreventAny<S, T>, entities: readonly T[] | Record<EntityId, T>): S;
setMany<S extends EntityState<T>>(state: PreventAny<S, T>, entities: PayloadAction<readonly T[] | Record<EntityId, T>>): S;
setAll<S extends EntityState<T>>(state: PreventAny<S, T>, entities: readonly T[] | Record<EntityId, T>): S;
setAll<S extends EntityState<T>>(state: PreventAny<S, T>, entities: PayloadAction<readonly T[] | Record<EntityId, T>>): S;
removeOne<S extends EntityState<T>>(state: PreventAny<S, T>, key: EntityId): S;
removeOne<S extends EntityState<T>>(state: PreventAny<S, T>, key: PayloadAction<EntityId>): S;
removeMany<S extends EntityState<T>>(state: PreventAny<S, T>, keys: readonly EntityId[]): S;
removeMany<S extends EntityState<T>>(state: PreventAny<S, T>, keys: PayloadAction<readonly EntityId[]>): S;
removeAll<S extends EntityState<T>>(state: PreventAny<S, T>): S;
updateOne<S extends EntityState<T>>(state: PreventAny<S, T>, update: Update<T>): S;
updateOne<S extends EntityState<T>>(state: PreventAny<S, T>, update: PayloadAction<Update<T>>): S;
updateMany<S extends EntityState<T>>(state: PreventAny<S, T>, updates: ReadonlyArray<Update<T>>): S;
updateMany<S extends EntityState<T>>(state: PreventAny<S, T>, updates: PayloadAction<ReadonlyArray<Update<T>>>): S;
upsertOne<S extends EntityState<T>>(state: PreventAny<S, T>, entity: T): S;
upsertOne<S extends EntityState<T>>(state: PreventAny<S, T>, entity: PayloadAction<T>): S;
upsertMany<S extends EntityState<T>>(state: PreventAny<S, T>, entities: readonly T[] | Record<EntityId, T>): S;
upsertMany<S extends EntityState<T>>(state: PreventAny<S, T>, entities: PayloadAction<readonly T[] | Record<EntityId, T>>): S;
}
/**
* @public
*/
export interface EntitySelectors<T, V> {
selectIds: (state: V) => EntityId[];
selectEntities: (state: V) => Dictionary<T>;
selectAll: (state: V) => T[];
selectTotal: (state: V) => number;
selectById: (state: V, id: EntityId) => T | undefined;
}
/**
* @public
*/
export interface EntityAdapter<T> extends EntityStateAdapter<T> {
selectId: IdSelector<T>;
sortComparer: false | Comparer<T>;
getInitialState(): EntityState<T>;
getInitialState<S extends object>(state: S): EntityState<T> & S;
getSelectors(): EntitySelectors<T, EntityState<T>>;
getSelectors<V>(selectState: (state: V) => EntityState<T>): EntitySelectors<T, V>;
}