UNPKG

@o3r/core

Version:
49 lines 2.58 kB
import { asyncStoreItemAdapter, } from './async.adapter'; /** * Create an Asynchronous Request Entity Adapter * @param adapter Entity Adapter */ export function createEntityAsyncRequestAdapter(adapter) { const addRequestOne = (state, id, requestId) => { const currentEntity = typeof id !== 'undefined' && id !== null && state.entities[id]; if (currentEntity) { const changes = asyncStoreItemAdapter.addRequest(asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity), requestId); return adapter.updateOne({ id, changes }, state); } return asyncStoreItemAdapter.addRequest(state, requestId); }; const addRequestMany = (state, ids, requestId) => adapter.updateMany(ids.filter((id) => !!state.entities[id]).map((id) => ({ id, changes: asyncStoreItemAdapter.addRequest(asyncStoreItemAdapter.extractAsyncStoreItem(state.entities[id]), requestId) })), state); const resolveRequestOne = (state, entity, requestId, idProperty = 'id') => { const currentEntity = state.entities[entity[idProperty]]; const newEntity = currentEntity ? asyncStoreItemAdapter.resolveRequest({ ...entity, ...asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity) }, requestId) : asyncStoreItemAdapter.initialize(entity); state = asyncStoreItemAdapter.resolveRequest(state, requestId); return adapter.upsertOne(newEntity, state); }; const resolveRequestMany = (state, entities, requestId, idProperty = 'id') => adapter.updateMany(entities.filter((entity) => !!state.entities[entity[idProperty]]).map((entity) => { const model = { ...entity, ...asyncStoreItemAdapter.extractAsyncStoreItem(state.entities[entity[idProperty]]) }; return { id: entity[idProperty], changes: asyncStoreItemAdapter.resolveRequest(model, requestId) }; }), state); const failRequestMany = (state, ids = [], requestId) => { if (ids.length > 0 && !ids.some((id) => state.entities[id] === undefined)) { return adapter.updateMany(ids.map((id) => ({ id, changes: asyncStoreItemAdapter.failRequest(asyncStoreItemAdapter.extractAsyncStoreItem(state.entities[id]), requestId) })), state); } return asyncStoreItemAdapter.failRequest(state, requestId); }; return { ...adapter, failRequestMany, addRequestOne, addRequestMany, resolveRequestOne, resolveRequestMany }; } //# sourceMappingURL=async-entity.adapter.js.map