UNPKG

@mic-rexjs/usecases

Version:
35 lines (34 loc) 1.09 kB
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, }; };