UNPKG

@rest-api/react-models

Version:

[![npm version](https://img.shields.io/npm/v/@rest-api/react-models)](https://www.npmjs.com/package/@rest-api/react-models) [![codecov](https://codecov.io/gh/hector7/rest-api-react-models/branch/master/graph/badge.svg)](https://codecov.io/gh/hector7/rest-

168 lines (167 loc) 5.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getIdRequest = exports.storeItems = exports.storeItem = exports.storeRequest = exports.mapAllRequest = exports.storeIdRequest = exports.getGeneralRequest = exports.getMetadata = exports.getItems = exports.getResult = exports.getError = exports.isFetching = exports.isInitialized = exports.isInvalidated = exports.idAction = exports.generalAction = void 0; const __1 = require("../.."); const INIT_REQUEST = { didInvalidate: true, error: null, isFetching: false, lastUpdated: null, result: null, initialized: false }; function generalAction(state, uri, req) { return Object.assign({}, state.searchs, { [uri]: Object.assign(INIT_REQUEST, state.searchs[uri], req) }); } exports.generalAction = generalAction; function idAction(state, idKey, id, req) { return Object.assign({}, state, { [idKey]: Object.assign({}, state[idKey], { [id]: Object.assign(INIT_REQUEST, state[idKey][id], req) }) }); } exports.idAction = idAction; function isInvalidated(req) { if (req) return req.didInvalidate; return true; } exports.isInvalidated = isInvalidated; function isInitialized(req) { if (req) return req.initialized; return false; } exports.isInitialized = isInitialized; function isFetching(req) { if (req) return req.isFetching; return false; } exports.isFetching = isFetching; function getError(req) { if (req) return req.error; return null; } exports.getError = getError; function getResult(req) { return req && req.result !== null ? req.result : null; } exports.getResult = getResult; function getItems(state, idKey, uri) { const req = getGeneralRequest(state, uri); if (req.result) { return __1.filterNulls(req.result.ids.map(id => getResult(getIdRequest(state, idKey, id)))); } return []; } exports.getItems = getItems; function getMetadata(state, uri) { const req = getGeneralRequest(state, uri); if (req.result) { return req.result.metadata; } return null; } exports.getMetadata = getMetadata; function getGeneralRequest(state, uri) { if (state.searchs[uri]) { return state.searchs[uri]; } return INIT_REQUEST; } exports.getGeneralRequest = getGeneralRequest; function storeIdRequest(state, idKey, id, req) { return Object.assign({}, state, { ids: Object.assign({}, state.ids, { [idKey]: Object.assign({}, state.ids[idKey], { [id]: Object.assign({}, getIdRequest(state, idKey, id), req) }) }) }); } exports.storeIdRequest = storeIdRequest; function mapAllRequest(state, mapRequest) { return Object.assign({}, state, { searchs: Object.keys(state.searchs).map(uri => ({ uri, value: mapRequest(state.searchs[uri]) })).reduce((obj, next) => { obj[next.uri] = next.value; return obj; }, {}) }); } exports.mapAllRequest = mapAllRequest; function storeRequest(state, uri, req) { return Object.assign({}, state, { searchs: Object.assign({}, state.searchs, { [uri]: Object.assign({}, state.searchs[uri], Object.assign({}, getGeneralRequest(state, uri), req)) }) }); } exports.storeRequest = storeRequest; function storeItem(state, item, keys, lastUpdated) { return Object.assign({}, state, { ids: Object.assign({}, state.ids, ...keys.map(idKey => { const id = item[idKey]; if (typeof id !== 'string' && typeof id !== 'number') throw (new Error(`Invalid type for an id ${id}. Must be string or number.`)); return { [idKey]: Object.assign({}, state.ids[idKey], { [id]: Object.assign({}, INIT_REQUEST, { result: item, lastUpdated, didInvalidate: false, isFetching: false, initialized: true }) }) }; })) }); } exports.storeItem = storeItem; function storeItems(state, idKeys, lastUpdated, items) { return Object.assign({}, state.ids, idKeys.map(idKey => ({ idKey, value: Object.assign({}, state.ids[idKey], items.map(item => { const id = item[idKey]; if (typeof id !== 'string' && typeof id !== 'number') throw (new Error(`Invalid type for an id ${id}. Must be string or number.`)); return { id, value: Object.assign({}, INIT_REQUEST, { isFetching: false, result: item, lastUpdated, didInvalidate: false, initialized: true }) }; }).reduce((items, next) => { items[next.id] = next.value; return items; }, {})) })).reduce((items, next) => { items[next.idKey] = next.value; return items; }, {})); } exports.storeItems = storeItems; function getIdRequest(state, idKey, id) { if (typeof id !== 'string' && typeof id !== 'number') throw (new Error(`Invalid type for an id ${id}. Must be string or number.`)); if (state.ids[idKey]) { const res = state.ids[idKey][id]; if (res) { return res; } } return INIT_REQUEST; } exports.getIdRequest = getIdRequest;