
Security News
/Research
Popular node-ipc npm Package Infected with Credential Stealer
Socket detected malicious node-ipc versions with obfuscated stealer/backdoor behavior in a developing npm supply chain attack.
@cala/remote-data
Advanced tools
RemoteData is an ADT (algebraic data type) described in this article. Heavily based on fp-ts lib.
devex-web-frontend/remote-data-ts?RemoteRefresh which captures the state where you have data, but you are
refreshing it from your remote data source.
Right
RemoteRefresh will be mapped over, etc.#toOption returns SomecaseOf method that is an object version of fold since there are so
many states! Inspired by daggy's #cata method.npm i --save @cala/remote-data-ts
RemoteData is an union of few types: RemoteInitial, RemotePending,
RemoteFailure, RemoteRefresh, and RemoteSuccess.
While your data in initial or pending state just use the initial or
pending constant.
import { initial, pending } from '@cala/remote-data-ts';
const customers = initial;
// or
const customers = pending;
When you receive data from server, use the failure or success constructor:
import { failure, success } from '@cala/remote-data-ts';
import { apiClient } from 'apiClient';
import { TCustomer } from './MyModel';
const getCustomers = (): RemoteData<Error, TCustomer[]> => {
const rawData: TCustomer[] = apiClient.get('/customers');
try {
const length = rawData.length;
return success(rawData);
}
catch(err) {
return failure(new Error('parse error'));
}
}
When you need to re-fetch or refresh your data, use the refresh constructor.
Finally you pass data to the component and want to render values, so now it's time to get our values back from RemoteData wrapper:
import { NoData, Pending, Failure } from './MyPlaceholders';
import { TCustomer } from './MyModel';
type TCustomersList = {
entities: RemoteData<TCustomer[]>;
};
const CustomersList: SFC<TCustomersList> = ({ entities }) => entities.foldL(
() => <NoData />,
() => <Pending />,
err => <Failure error={err} />,
stale => <Refreshing oldItems={stale} />
data => <ul>{data.map(item => <li>{item.name}</li>)}</ul>
);
// or caseOf
const CustomersList: SFC<TCustomersList> = ({ entities }) => entities.caseOf({
initial: <NoData />,
pending: <Pending />,
failure: err => <Failure error={err} />,
refresh: stale => <Refreshing oldItems={stale} />
success: data => <ul>{data.map(item => <li>{item.name}</li>)}</ul>
});
FAQs
Algebraic Data Type for Remote Data
We found that @cala/remote-data demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 7 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
/Research
Socket detected malicious node-ipc versions with obfuscated stealer/backdoor behavior in a developing npm supply chain attack.

Security News
TeamPCP and BreachForums are promoting a Shai-Hulud supply chain attack contest with a $1,000 prize for the biggest package compromise.

Security News
Packagist urges PHP projects to update Composer after a GitHub token format change exposed some GitHub Actions tokens in CI logs.