easy-peasy-thunk-stages
Version:
Thunk stages in your model is easy-peasy!
17 lines (16 loc) • 924 B
TypeScript
import { Action, Generic, Thunk, ThunkOn } from 'easy-peasy';
export declare type ThunkStage = 'idle' | 'busy' | 'completed' | 'failed';
declare type ThunkNames<M extends unknown> = {
[K in keyof M]: M[K] extends Thunk<any, any, any, any, any> ? K : never;
}[keyof M];
export interface ThunkStagesModel<M extends unknown> {
thunkStages: Generic<Record<ThunkNames<Omit<M, keyof ThunkStagesModel<any>>>, ThunkStage>>;
setThunkStage: Action<ThunkStagesModel<M>, {
thunk: ThunkNames<Omit<M, keyof ThunkStagesModel<any>>>;
stage: ThunkStage;
}>;
resetThunkStages: Action<ThunkStagesModel<M>>;
setThunkStageOn: ThunkOn<ThunkStagesModel<M>>;
}
export declare const thunkStagesModel: <M extends unknown>(initialThunkStages: Record<ThunkNames<Pick<M, Exclude<keyof M, "thunkStages" | "setThunkStage" | "resetThunkStages" | "setThunkStageOn">>>, ThunkStage>) => ThunkStagesModel<M>;
export {};