state-aware-resource
TypeScript icon, indicating that this package has built-in type declarations

0.5.0 • Public • Published

State Aware Resource

Lightweight reactive resource solution 🦾

Oftentimes, the applications we develop have one or more asynchronous events occurring while users interact.

This might include network requests, a long-lasting background task, or a persistence operation.

This module offers a Resource, or a wrapper object with a declarative interface, reducing boilerplate in the application.

The Resource object assumes that the consumed resources will follow this state flow.

Resource States

The module was build for Angular projects, therefore it is written in Typescript and contains extra interfaces that adapt to RxJs.

This repo contains the exported module on src, as well as a simple demo on demo-angular.

Usage

When making a http request, the original observable can be wrapped to return the Resource object instead:

getToDos(): Observable<Resource<ToDo[]>> {
  return resourceRequestObservable<ToDo[]>(this.http.get<ToDo[]>(this.todosUrl));
}

When consuming the function, onResource allows for a declarative interface.

this.todoService.getToDos()
  .subscribe(onResource<ToDo[]>({
    loading: () => {
      this.loading = true;
    },
    always: () => {
      this.loading = false;
    },
    empty: () => {
      this.showEmptyView = true;
    },
    failure: (error) => {
      this.error = error;
    },
    success: (data) => {
      this.todos = data;
    }
   }));

Installation

With npm:

npm install state-aware-resource --save

With yarn:

yarn add state-aware-resource

Changelog

  • 0.5.0: Update rxjs peer dependency to version ~7.5.0 for compatibility
  • 0.4.0: Move rxjs to peer dependencies and version ^6.4.0 for compatibility
  • 0.3.5: Public loading, empty, success and failure accessors for filter pipes.
  • 0.3.4: ES5 support for IE11 compatibility.

Package Sidebar

Install

npm i state-aware-resource

Weekly Downloads

1

Version

0.5.0

License

MIT

Unpacked Size

8.67 kB

Total Files

5

Last publish

Collaborators

  • fede_bossman