Code Monkey home page Code Monkey logo

ngrx-set's Introduction

NgRxSet

It simplifies the creation of actions for asynchronous requests that can succeed, fail or be aborted.

Usage

const set = createSet('source', 'name');
store.dispatch(set.dispatch());
store.dispatch(set.success());
store.dispatch(set.failure());
store.dispatch(set.abort());

Examples

More examples at:

store.ts#creators

example-effects.ts

API

IAbortCreator

Creator to be used when the request is aborted.

type IAbortCreator<TType extends string = string>

abort({ reason: 'reason' });

IFailureCreator

Creator to be used when the request fails.

type IFailureCreator<TType extends string = string>

failure({ error: 'error' });

IQueryCreator

Creator to be used when submitting a query to trigger the request.

type IQueryCreator<TQuery, TType extends string = string>

dispatch({ query: TQuery });

IPayloadCreator

Creator to be used when receiving the request payload.

type IPayloadCreator<TPayload, TType extends string = string>

success({ payload: TPayload });

IEmptyCreator

Creator to be used without passing data.

type IEmptyCreator<TType extends string>

dispatch(); success();

ICreatorSet

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;
}

ICreatorSet aliases

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">;

Support

If you like ngrx-set, please support it:

Thank you!

P.S. If you need help, feel free to

ngrx-set's People

Contributors

parloti avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.