import { ActionReducer, StateAction } from "../StateManager.js"; import { Action } from "../action/DataUnitAction.js"; import StateManager from "../StateManager.js"; import { Record } from "../../interfaces/dataUnit.js"; class AddedRecordsReducerImpl implements ActionReducer{ public sliceName: string = "hist::addedRecords"; public reduce(_stateManager:StateManager, currentState: Array, action: StateAction): Array|undefined { switch(action.type){ case Action.RECORDS_ADDED: case Action.RECORDS_COPIED: return (currentState||[]).concat(action.payload); case Action.DATA_SAVED: case Action.EDITION_CANCELED: return undefined; } return currentState; } } export const AddedRecordsReducer = new AddedRecordsReducerImpl(); export const getAddedRecords = (stateManager: StateManager): Array => { return stateManager.select(AddedRecordsReducer.sliceName, (state: Array) => state); }; export const isAddedRecord = (recordId: string, stateManager: StateManager): boolean => { const addedRecords = getAddedRecords(stateManager); if(addedRecords == undefined || addedRecords.length === 0){ return false; } return addedRecords.some(record => record.__record__id__ === recordId); } export const prepareAddedRecordId = (stateManager: StateManager, source: Array, parentRecordId?: string): Array => { let index = (getAddedRecords(stateManager) || []).length; return source.map(item => ({ ...item, __record__id__: `NEW_${index++}`, ...(parentRecordId && { __parent__record__id__: parentRecordId }), })); }; export const prepareCopiedRecord = (stateManager: StateManager, source: Array, parentRecordId?: string): Array => { let index = (getAddedRecords(stateManager)||[]).length; return source.map(item => ({ ...item, __record__id__: "NEW_" + (index++), ...(parentRecordId && { __parent__record__id__: parentRecordId }), __record__source__id__: item.__record__id__, __copy__: true}) ); };