@ngspot/remote-data
v1.2.1
Published
[]() []() [;
function userClickHandler() {
// set the data state tp "loading"
data = loadingState();
api.loadDataPromise()
.then((response) => {
// set the data state tp "success"
data = successState(response);
})
.catch(error) => {
// set the data state tp "error"
data = errorState(error);
}
}Rendering data using RemoteData
The RemoteData structure is convenient to use when rendering items in the template.
Here's one example of usage:
Angular
<!-- Show a spinner if state is loading -->
<my-loading-spinner *ngIf="data.state === 'loading'"></my-loading-spinner>
<!-- Show the data if state is loaded -->
<my-data-view
*ngIf="data.state === 'success'"
[data]="data.value"
></my-data-view>
<!-- Show an error message if state is error -->
<my-error-view
*ngIf="data.state === 'error'"
[error]="data.error"
></my-error-view>React
return (
<>
// Show a spinner if state is loading
{data.state === 'loading' && <my-loading-spinner></my-loading-spinner>}
// Show the data if state is loaded
{data.state === 'success' && (
<my-data-view data={data.value}></my-data-view>
)}
// Show an error message if state is error
{data.state === 'error' && (
<my-error-view error={data.error}></my-error-view>
)}
</>
);RemoteData guards
For convenience, the library provides type guard functions to the asset current state:
function isNotAskedState(data: RemoteData): data is NotAskedState;
function isLoadingState<T>(data: RemoteData<T>): data is LoadingState<T>;
function isSuccessState<T>(data: RemoteData<T>): data is SuccessState<T>;
function isErrorState<T, E>(data: RemoteData<T, E>): data is ErrorState<T, E>;Previous Art
The library is heavily inspired by:
- Kris Jenkins' blog post about How Elm slays a UI antipattern
- https://github.com/joanllenas/ngx-remotedata
- https://github.com/daiscog/ngx-http-request-state
License
MIT © Dmitry Efimenko
