@rest-api/react-models
Version:
[](https://www.npmjs.com/package/@rest-api/react-models) [](https://codecov.io/gh/hector7/rest-
168 lines (167 loc) • 5.54 kB
JavaScript
;
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;