xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 11.7 kB
Source Map (JSON)
{"version":3,"file":"useEditableRow.mjs","sources":["../../../src/table/hooks/useEditableRow.ts"],"sourcesContent":["import { ref, computed } from 'vue';\nimport get from 'lodash/get';\nimport isFunction from 'lodash/isFunction';\nimport { PrimaryTableProps } from '../interface';\nimport { getEditableKeysMap } from '../utils';\nimport { validate } from '../../form/form-model';\nimport {\n PrimaryTableRowEditContext,\n TableRowData,\n TableErrorListMap,\n PrimaryTableInstanceFunctions,\n ErrorListObjectType,\n} from '../type';\nimport { getCellKey } from './useRowspanAndColspan';\nimport { OnEditableChangeContext } from '../editable-cell';\n\nexport interface TablePromiseErrorData {\n errors: ErrorListObjectType<TableRowData>[];\n errorMap: TableErrorListMap;\n}\n\nconst cellRuleMap = new Map<any, PrimaryTableRowEditContext<TableRowData>[]>();\n\nexport default function useRowEdit(props: PrimaryTableProps) {\n // 校验不通过的错误信息,其中 key 值为 [rowValue, col.colKey].join('__')\n const errorListMap = ref<TableErrorListMap>({});\n // 处于编辑态的表格行\n const editableKeysMap = computed(() => getEditableKeysMap(props.editableRowKeys, props.data, props.rowKey || 'id'));\n // 当前编辑的单元格\n const editingCells = ref<{ [cellKey: string]: OnEditableChangeContext<TableRowData> }>({});\n\n const getErrorListMapByErrors = (errors: ErrorListObjectType<TableRowData>[]): TableErrorListMap => {\n const errorMap: TableErrorListMap = {};\n errors.forEach(({ row, col, errorList }) => {\n const rowValue = get(row, props.rowKey || 'id');\n const key = [rowValue, col.colKey].join('__');\n if (errorList?.length) {\n errorMap[key] = errorList;\n } else {\n delete errorMap[key];\n }\n });\n return errorMap;\n };\n\n // 校验一行的数据\n const validateOneRowData = (rowValue: any) => {\n const rowRules = cellRuleMap.get(rowValue);\n if (!rowRules) return;\n const list = rowRules.map(\n (item) =>\n new Promise<ErrorListObjectType<TableRowData>>((resolve) => {\n const { editedRow, col } = item;\n const rules = isFunction(col.edit.rules) ? col.edit.rules(item) : col.edit.rules;\n if (!col.edit || !rules || !rules.length) {\n resolve({ ...item, errorList: [] });\n return;\n }\n validate(get(editedRow, col.colKey), rules).then((r) => {\n resolve({ ...item, errorList: r.filter((t) => !t.result) });\n });\n }),\n );\n return new Promise<TablePromiseErrorData>((resolve, reject) => {\n Promise.all(list).then((errors) => {\n resolve({\n errors: errors.filter((t) => t.errorList?.length),\n errorMap: getErrorListMapByErrors(errors),\n });\n }, reject);\n });\n };\n\n /**\n * 校验表格单行数据(对外开放方法,修改时需慎重)\n * @param rowValue 行唯一标识\n */\n const validateRowData: PrimaryTableInstanceFunctions['validateRowData'] = (rowValue: any) =>\n new Promise((resolve, reject) => {\n validateOneRowData(rowValue).then(({ errors, errorMap }) => {\n errorListMap.value = errorMap;\n // 缺少校验文本显示\n const tTrigger = 'parent';\n props.onRowValidate?.({ trigger: tTrigger, result: errors });\n resolve({ trigger: tTrigger, result: errors });\n }, reject);\n });\n\n // 校验可编辑单元格\n const validateTableCellData = (): Promise<{ result: TableErrorListMap }> => {\n const cellKeys = Object.keys(editingCells.value);\n const promiseList = cellKeys.map((cellKey) => editingCells.value[cellKey].validateEdit('parent'));\n return new Promise((resolve, reject) => {\n Promise.all(promiseList).then((arr) => {\n const allErrorListMap: TableErrorListMap = {};\n arr.forEach((result, index) => {\n if (result === true) return;\n allErrorListMap[cellKeys[index]] = result;\n });\n props.onValidate?.({ result: allErrorListMap });\n resolve({ result: allErrorListMap });\n }, reject);\n });\n };\n\n /**\n * 校验整个表格数据(对外开放方法,修改时需慎重)\n */\n const validateTableData: PrimaryTableInstanceFunctions['validateTableData'] = () => {\n if (Object.keys(editingCells.value).length) {\n return validateTableCellData();\n }\n const promiseList: Promise<TablePromiseErrorData>[] = [];\n const data = props.data || [];\n for (let i = 0, len = data.length; i < len; i++) {\n const rowValue = get(data[i], props.rowKey || 'id');\n promiseList.push(validateOneRowData(rowValue));\n }\n return new Promise((resolve, reject) => {\n Promise.all(promiseList).then((rList) => {\n const allErrorListMap: TableErrorListMap = {};\n rList.forEach(({ errorMap } = { errors: [], errorMap: {} }) => {\n errorMap && Object.assign(allErrorListMap, errorMap);\n });\n errorListMap.value = allErrorListMap;\n props.onValidate?.({ result: allErrorListMap });\n resolve({ result: allErrorListMap });\n }, reject);\n });\n };\n\n const onRuleChange = (context: PrimaryTableRowEditContext<TableRowData>) => {\n // 编辑行,预存校验信息,方便最终校验\n if (props.editableRowKeys) {\n const rowValue = get(context.row, props.rowKey || 'id');\n const rules = cellRuleMap.get(rowValue);\n if (rules) {\n const index = rules.findIndex((t) => t.col.colKey === context.col.colKey);\n if (index === -1) {\n rules.push(context);\n } else {\n rules[index] = context;\n }\n cellRuleMap.set(rowValue, rules);\n } else {\n cellRuleMap.set(rowValue, [context]);\n }\n }\n };\n\n const clearValidateData = () => {\n errorListMap.value = {};\n };\n\n const onPrimaryTableCellEditChange = (params: OnEditableChangeContext<TableRowData>) => {\n const cellKey = getCellKey(params.row, props.rowKey, params.col.colKey, params.colIndex);\n if (params.isEdit) {\n // @ts-ignore\n editingCells.value[cellKey] = params;\n } else {\n delete editingCells.value[cellKey];\n }\n };\n\n return {\n errorListMap,\n editableKeysMap,\n validateTableData,\n validateRowData,\n onRuleChange,\n clearValidateData,\n onPrimaryTableCellEditChange,\n };\n}\n"],"names":["errors","errorMap","resolve","errorList","validate","trigger","result","arr","allErrorListMap","get","promiseList","rules","cellRuleMap","errorListMap","editingCells","editableKeysMap","validateTableData","validateRowData","onRuleChange","clearValidateData","onPrimaryTableCellEditChange"],"mappings":"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"}