Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 66x 66x 10x 10x 10x 10x 1x 10x 10x 10x 10x 10x 10x 10x 10x | import { EnumValues, ObjectValues, DynamicSelectValues, RecordProps, ExtendDataNode, DataRefreshMode } from '@props/RecordProps'; export interface DataProps { data?: Array<RecordProps>; prevData?: Array<RecordProps>; selectedData?: Array<RecordProps>; selectedRowKeys?: Array<number>; enumValues?: EnumValues; objectValues?: ObjectValues, dynamicSelectValues?: DynamicSelectValues, //For master detail list component, tree data treeData?: Array<ExtendDataNode>, insertLines?: Array<RecordProps>, deleteLines?: Array<RecordProps>, updateLines?: Array<RecordProps>, refreshMode?: DataRefreshMode, dataChanged?: boolean, } export const initData = { data: [] as Array<RecordProps>, prevData: [] as Array<RecordProps>, selectedRowKeys: [] as Array<number>, selectedData: [] as Array<RecordProps>, enumValues: {} as EnumValues, objectValues: {} as ObjectValues, dynamicSelectValues: {} as DynamicSelectValues, treeData: [] as Array<ExtendDataNode>, refreshMode: "disable", } as DataProps; export const dataReducer = (state: DataProps, action: { type: 'set'; payload: DataProps; }): DataProps => { const { payload } = action; const { data: newData } = payload; const newDataNotNull = (newData != null); const insertLineThisTime: RecordProps | undefined = newDataNotNull ? newData?.find((d: RecordProps) => state?.data?.findIndex( (d2: RecordProps) => d2.id === d.id) === -1) : undefined; const deleteLineThisTime: RecordProps | undefined = newDataNotNull ? state?.data?.find((d: RecordProps) => newData?.findIndex( (d2: RecordProps) => d2.id === d.id) === -1) : undefined; const updateLinesThisTime: Array<RecordProps> = [] as Array<RecordProps>; // find changed attributes in the new data, compare to state.data newDataNotNull && state?.data?.forEach((d: RecordProps) => { const newLine = newData.find((d2: RecordProps) => d2.id === d.id); newLine && Object.keys(newLine).forEach((key: string) => { // Changed key is key, 如果未来希望标记出变化的列,则需要返回 key 信息 if (newLine[key] !== d[key]) { //Remove the old line with id equals to newLine.id updateLinesThisTime.splice(updateLinesThisTime.findIndex((d3: RecordProps) => d3.id === newLine.id), 1); updateLinesThisTime.push(newLine); } }); }); const dataChanged = (insertLineThisTime != null || deleteLineThisTime != null || updateLinesThisTime.length > 0); const newState = { data: action.payload.data ?? state.data, prevData: action.payload.data ? [...state.data ?? []] : state.prevData, selectedData: action.payload.selectedData ?? state.selectedData, selectedRowKeys: action.payload.selectedData?.map(d => d.id) ?? state.selectedRowKeys, enumValues: action.payload.enumValues ?? state.enumValues, objectValues: action.payload.objectValues ?? state.objectValues, dynamicSelectValues: action.payload.dynamicSelectValues ?? state.dynamicSelectValues, treeData: action.payload.treeData ?? state.treeData, insertLines: insertLineThisTime ? [insertLineThisTime] : [], deleteLines: deleteLineThisTime ? [deleteLineThisTime] : [], updateLines: updateLinesThisTime ?? [], refreshMode: action.payload.refreshMode ?? state.refreshMode, dataChanged: dataChanged, }; switch (action.type) { case 'set': state = newState; return newState; default: throw new Error("Not support action ", action.type); } }; |