@snipsonian/observable-state
Version:
Observable-state snippets (redux-like)
15 lines (14 loc) • 579 B
JavaScript
import isSet from '@snipsonian/core/es/is/isSet';
import { AsyncOperation, AsyncStatus } from './types';
export function createAsyncEntityInitialState({ data, operations = [AsyncOperation.fetch], } = {}) {
const baseEntity = {
data: isSet(data) ? data : null,
};
if (!operations || operations.length === 0) {
return baseEntity;
}
return operations.reduce((accumulator, operation) => (Object.assign(Object.assign({}, accumulator), { [operation]: {
status: AsyncStatus.Initial,
error: null,
} })), baseEntity);
}