@o3r/core
Version:
Core of the Otter Framework
94 lines • 3.33 kB
JavaScript
export const asyncStoreItemAdapter = {
addRequest: (item, requestId) => {
return {
...item,
requestIds: [...item.requestIds, requestId],
isFailure: item.requestIds.length === 0 ? false : item.isFailure,
isPending: true
};
},
failRequest: (item, requestId) => {
const requestIds = requestId ? item.requestIds.filter((id) => id !== requestId) : item.requestIds;
return {
...item,
isFailure: true,
isPending: requestIds.length > 0,
requestIds
};
},
resolveRequest: (item, requestId) => {
const requestIds = requestId ? item.requestIds.filter((id) => id !== requestId) : item.requestIds;
return {
...item,
requestIds,
isPending: requestIds.length > 0
};
},
initialize: (entityItem) => {
return {
...entityItem,
requestIds: []
};
},
extractAsyncStoreItem: (entityItem) => {
return {
requestIds: [...entityItem.requestIds],
isFailure: entityItem.isFailure,
isPending: entityItem.isPending
};
},
clearAsyncStoreItem: (entityItem) => {
const { isPending, isFailure, ...newResponse } = { ...entityItem, requestIds: [] };
return newResponse;
},
merge: (...items) => {
return items.reduce((mergedItem, item) => item
? {
requestIds: [...mergedItem.requestIds, ...item.requestIds],
isFailure: mergedItem.isFailure || item.isFailure,
isPending: mergedItem.isPending || item.isPending
}
: mergedItem, asyncStoreItemAdapter.initialize({}));
},
entityStatusAddRequest: (status, subResource, requestId) => {
const currentSubStatus = status[subResource] || asyncStoreItemAdapter.initialize({});
return {
...status,
[subResource]: asyncStoreItemAdapter.addRequest(currentSubStatus, requestId)
};
},
entityStatusResolveRequest: (status, subResource, requestId) => {
const currentSubStatus = status[subResource];
return {
...status,
[subResource]: currentSubStatus ? asyncStoreItemAdapter.resolveRequest(currentSubStatus, requestId) : { requestIds: [] }
};
},
entityStatusFailRequest: (status, subResource, requestId) => {
const currentSubStatus = status[subResource];
return {
...status,
[subResource]: currentSubStatus ? asyncStoreItemAdapter.failRequest(currentSubStatus, requestId) : { requestIds: [], isFailure: true }
};
},
entityStatusResetFailure: (status, subResource) => {
const currentSubStatus = status[subResource];
return {
...status,
[subResource]: currentSubStatus ? asyncStoreItemAdapter.resetFailureStatus(currentSubStatus) : { requestIds: [] }
};
},
resetFailureStatus: (entityItem) => {
return {
...entityItem,
isFailure: false
};
},
setLoadingStatus: (entityItem) => {
return {
...entityItem,
isPending: true
};
}
};
//# sourceMappingURL=async.adapter.js.map