@mic-rexjs/usecases
Version:
Usecases of Clean Architecture
35 lines (34 loc) • 1.09 kB
JavaScript
import { entityUseCase } from '../entityUseCase';
import { getAccessorDescriptorMap } from './methods/getAccessorDescriptorMap';
export const objectUseCase = () => {
let hasAccessors = false;
let accessorDescriptors = null;
const entityReducers = entityUseCase();
const setEntity = function* (entity, settableEntity) {
let newEntity;
if (typeof settableEntity === 'function') {
newEntity = settableEntity(entity);
if (entity === newEntity) {
return newEntity;
}
}
else {
newEntity = {
...entity,
...settableEntity,
};
}
if (accessorDescriptors === null) {
accessorDescriptors = getAccessorDescriptorMap(entity);
hasAccessors = Object.keys(accessorDescriptors).length > 0;
}
if (hasAccessors) {
Object.defineProperties(newEntity, accessorDescriptors);
}
return yield newEntity;
};
return {
...entityReducers,
setEntity,
};
};