It simplifies the creation of actions for asynchronous requests that can succeed, fail or be aborted.
const set = createSet('source', 'name');
store.dispatch(set.dispatch());
store.dispatch(set.success());
store.dispatch(set.failure());
store.dispatch(set.abort());
More examples at:
Creator to be used when the request is aborted.
type IAbortCreator<TType extends string = string>
abort({ reason: 'reason' });
Creator to be used when the request fails.
type IFailureCreator<TType extends string = string>
failure({ error: 'error' });
Creator to be used when submitting a query to trigger the request.
type IQueryCreator<TQuery, TType extends string = string>
dispatch({ query: TQuery });
Creator to be used when receiving the request payload.
type IPayloadCreator<TPayload, TType extends string = string>
success({ payload: TPayload });
Creator to be used without passing data.
type IEmptyCreator<TType extends string>
dispatch();
success();
A set of creators related to a request.
interface ICreatorSet<
TDispatch extends ICreator<object, string> | IEmptyCreator<string>,
TSuccess extends ICreator<object, string> | IEmptyCreator<string>,
TReasonType extends string = string,
TErrorType extends string = string,
> {
abort: IAbortCreator<TReasonType>;
dispatch: TDispatch;
failure: IFailureCreator<TErrorType>;
success: TSuccess;
}
When neither dispatch nor success carry data.
type IEmptySet<
TSource extends string = string,
TName extends string = string,
> = ICreatorSet<
IEmptyCreator<IDispatchType<`${IType<TSource, TName>}`>>,
IEmptyCreator<ISuccessType<`${IType<TSource, TName>}`>>,
IAbortType<`${IType<TSource, TName>}`>,
IFailureType<`${IType<TSource, TName>}`>
>;
createSet('source', 'name'): IEmptySet<"source", "name">;
When the dispatch action carries data but success does not.
type IQuerySet<
TQuery,
TSource extends string,
TName extends string,
> = ICreatorSet<
IQueryCreator<TQuery, IDispatchType<`${IType<TSource, TName>}`>>,
IEmptyCreator<ISuccessType<`${IType<TSource, TName>}`>>,
IAbortType<`${IType<TSource, TName>}`>,
IFailureType<`${IType<TSource, TName>}`>
>;
createSet<IQuery>('source', 'name'): IQuerySet<IMyQuery, string, string>;
createSet<IQuery, 'source', 'name'>('source', 'name'): IQuerySet<IQuery, "source", "name">;
createSetCurry<IQuery>()('source', 'name'): IQuerySet<IQuery, "source", "name">;
When the dispatch action does not carry data but success does.
type IPayloadSet<
TPayload,
TSource extends string,
TName extends string,
> = ICreatorSet<
IEmptyCreator<IDispatchType<`${IType<TSource, TName>}`>>,
IPayloadCreator<TPayload, ISuccessType<`${IType<TSource, TName>}`>>,
IAbortType<`${IType<TSource, TName>}`>,
IFailureType<`${IType<TSource, TName>}`>
>;
createSet<void, IPayload>('source', 'name'): IPayloadSet<IPayload, string, string>;
createSet<void, IPayload, 'source', 'name'>('source', 'name'): IPayloadSet<IPayload, "source", "name">
createSetCurry<void, IPayload>()('source', 'name'): IPayloadSet<IPayload, "source", "name">;
createPayloadSetCurry<IPayload>()('source', 'name'): IPayloadSet<IPayload, "source", "name">;
When both the dispatch and success actions carry data.
type IFullSet<
TQuery,
TPayload,
TSource extends string,
TName extends string,
> = ICreatorSet<
IQueryCreator<TQuery, IDispatchType<`${IType<TSource, TName>}`>>,
IPayloadCreator<TPayload, ISuccessType<`${IType<TSource, TName>}`>>,
IAbortType<`${IType<TSource, TName>}`>,
IFailureType<`${IType<TSource, TName>}`>
>;
createSet<IQuery, IPayload>('source', 'name'): IFullSet<IQuery, IPayload, string, string>>;
createSet<IQuery, IPayload, 'source', 'name'>('source', 'name'): IFullSet<IQuery, IPayload, "source", "name">;
createSetCurry<IQuery, IPayload>()('source', 'name'): IFullSet<IQuery, IPayload, "source", "name">;
If you like ngrx-set
, please support it:
Thank you!
P.S. If you need help, feel free to
- Contact me on twitter or linkedin
- Open an issue