{"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,IAAA,WAAA,kBAAA,IAAA,GAAA,EAAA,CAAA;AAEA,SAAA,UAAA,CAAA,KAAA,EAAA;AAEQ,EAAA,IAAA,YAAA,GAAA,GAAA,CAAA,EAAA,CAAA,CAAA;;AAE2B,IAAA,OAAA,kBAAA,CAAA,KAAA,CAAA,eAAA,EAAA,KAAA,CAAA,IAAA,EAAA,KAAA,CAAA,MAAA,IAAA,IAAA,CAAA,CAAA;;AAE3B,EAAA,IAAA,YAAA,GAAA,GAAA,CAAA,EAAA,CAAA,CAAA;AAEA,EAAA,IAAA,uBAAA,GAAA,SAAA,uBAAA,CAAA,MAAA,EAAA;;AAEJA,IAAAA,MAAAA,CAAAA,OAAAA,CAAAA,UAAAA,IAAAA,EAAAA;AAA4C,MAAA,IAAA,GAAA,GAAA,IAAA,CAAA,GAAA;;;;AAE1C,MAAA,IAAA,GAAA,GAAA,CAAA,QAAA,EAAA,GAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AACA,MAAA,IAAA,SAAA,KAAA,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,IAAA,SAAA,CAAA,MAAA,EAAA;AACEC,QAAAA,QAAAA,CAAAA,GAAAA,CAAAA,GAAAA,SAAAA,CAAAA;AACF,OAAA,MAAA;;AAEA,OAAA;AACF,KAAA,CAAA,CAAA;AACO,IAAA,OAAA,QAAA,CAAA;;AAIH,EAAA,IAAA,kBAAA,GAAA,SAAA,kBAAA,CAAA,QAAA,EAAA;AACE,IAAA,IAAA,QAAA,GAAA,WAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA;;AAEN,IAAA,IAAA,IAAA,GAAA,QAAA,CAAA,GAAA,CAAA,UAAA,IAAA,EAAA;AACG,MAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA;AAES,QAAA,IAAA,SAAA,GAAA,IAAA,CAAA,SAAA;;;AAEN,QAAA,IAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,KAAA,IAAA,CAAA,KAAA,CAAA,MAAA,EAAA;AACEC,UAAAA,OAAAA,CAAAA,aAAAA,CAAAA,aAAAA,CAAAA,EAAAA,EAAAA,IAAAA,CAAAA,EAAAA,EAAAA,EAAAA;AAAmBC,YAAAA,SAAAA,EAAAA,EAAAA;;AACnB,UAAA,OAAA;AACF,SAAA;AACSC,QAAAA,QAAAA,CAAAA,KAAAA,CAAAA,SAAAA,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,EAAAA,KAAAA,CAAAA,CAAAA,IAAAA,CAAAA,UAAAA,CAAAA,EAAAA;AACPF,UAAAA,OAAAA,CAAAA,aAAAA,CAAAA,aAAAA,CAAAA,EAAAA,EAAAA,IAAAA,CAAAA,EAAAA,EAAAA,EAAAA;AAAmBC,YAAAA,SAAAA,EAAAA,CAAAA,CAAAA,MAAAA,CAAAA,UAAAA,CAAAA,EAAAA;;AAAoC,aAAA,CAAA;AAAA,WAAA,CAAA,CAAA,CAAA;AACzD,SAAA,CAAA,CAAA;AACF,OAAA,CAAA,CAAA;AAAC,KAAA,CAAA,CAAA;AAEL,IAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA,MAAA,EAAA;;AAEYD,QAAAA,OAAAA,CAAAA;AACNF,UAAAA,MAAAA,EAAAA,MAAAA,CAAAA,MAAAA,CAAAA,UAAAA,CAAAA,EAAAA;AAA6B,YAAA,IAAA,YAAA,CAAA;;;;AAE/B,SAAA,CAAA,CAAA;;AAEJ,KAAA,CAAA,CAAA;;AAOF,EAAA,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,QAAA,EAAA;AAA2E,IAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA,MAAA,EAAA;;AAEX,QAAA,IAAA,oBAAA,CAAA;AAAA,QAAA,IAAA,MAAA,GAAA,KAAA,CAAA,MAAA;;;;AAI1D,QAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AAAwBK,UAAAA,OAAAA,EAAAA,QAAAA;AAAmBC,UAAAA,MAAAA,EAAAA,MAAAA;AAAe,SAAA,CAAA,CAAA;AAC1DJ,QAAAA,OAAAA,CAAAA;AAAUG,UAAAA,OAAAA,EAAAA,QAAAA;AAAmBC,UAAAA,MAAAA,EAAAA,MAAAA;AAAe,SAAA,CAAA,CAAA;;AAEhD,KAAA,CAAA,CAAA;AAAC,GAAA,CAAA;AAGH,EAAA,IAAA,qBAAA,GAAA,SAAA,qBAAA,GAAA;;AAEQ,IAAA,IAAA,WAAA,GAAA,QAAA,CAAA,GAAA,CAAA,UAAA,OAAA,EAAA;;;AACN,IAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA,MAAA,EAAA;;AACyC,QAAA,IAAA,iBAAA,CAAA;;AAEjCC,QAAAA,GAAAA,CAAAA,OAAAA,CAAAA,UAAAA,MAAAA,EAAAA,KAAAA,EAAAA;;AAEFC,UAAAA,eAAAA,CAAAA,QAAAA,CAAAA,KAAAA,CAAAA,CAAAA,GAAAA,MAAAA,CAAAA;AACF,SAAA,CAAA,CAAA;AACA,QAAA,CAAA,iBAAA,GAAA,KAAA,CAAA,UAAA,MAAA,IAAA,IAAA,iBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AAAqBF,UAAAA,MAAAA,EAAAA,eAAAA;AAAwB,SAAA,CAAA,CAAA;AACrCJ,QAAAA,OAAAA,CAAAA;AAAEI,UAAAA,MAAAA,EAAAA,eAAAA;AAAwB,SAAA,CAAA,CAAA;;AAEtC,KAAA,CAAA,CAAA;;AAMF,EAAA,IAAA,iBAAA,GAAA,SAAA,iBAAA,GAAA;;;AAGE,KAAA;;AAEM,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,IAAA,IAAA,EAAA,CAAA;AACN,IAAA,KAAA,IAAA,CAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,CAAA,MAAA,EAAA,CAAA,GAAA,GAAA,EAAA,CAAA,EAAA,EAAA;AACE,MAAA,IAAA,QAAA,GAAAG,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,KAAA,CAAA,MAAA,IAAA,IAAA,CAAA,CAAA;AACYC,MAAAA,WAAAA,CAAAA,IAAAA,CAAAA,kBAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CAAAA;AACd,KAAA;AACA,IAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA,MAAA,EAAA;;AAC2C,QAAA,IAAA,kBAAA,CAAA;;;;AAEPV,cAAAA,MAAAA,EAAAA,EAAAA;AAAYC,cAAAA,QAAAA,EAAAA,EAAAA;;;;AAE5C,SAAA,CAAA,CAAA;;AAEA,QAAA,CAAA,kBAAA,GAAA,KAAA,CAAA,UAAA,MAAA,IAAA,IAAA,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AAAqBK,UAAAA,MAAAA,EAAAA,eAAAA;AAAwB,SAAA,CAAA,CAAA;AACrCJ,QAAAA,OAAAA,CAAAA;AAAEI,UAAAA,MAAAA,EAAAA,eAAAA;AAAwB,SAAA,CAAA,CAAA;;AAEtC,KAAA,CAAA,CAAA;;AAGI,EAAA,IAAA,YAAA,GAAA,SAAA,YAAA,CAAA,OAAA,EAAA;;AAGF,MAAA,IAAA,QAAA,GAAAG,KAAA,CAAA,OAAA,CAAA,GAAA,EAAA,KAAA,CAAA,MAAA,IAAA,IAAA,CAAA,CAAA;AACM,MAAA,IAAA,KAAA,GAAA,WAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA;AACN,MAAA,IAAA,KAAA,EAAA;AACQ,QAAA,IAAA,KAAA,GAAA,KAAA,CAAA,SAAA,CAAA,UAAA,CAAA,EAAA;;;AACN,QAAA,IAAA,KAAA,KAAA,CAAA,CAAA,EAAA;AACEE,UAAAA,KAAAA,CAAAA,IAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACF,SAAA,MAAA;AACEA,UAAAA,KAAAA,CAAAA,KAAAA,CAAAA,GAAAA,OAAAA,CAAAA;AACF,SAAA;AACYC,QAAAA,WAAAA,CAAAA,GAAAA,CAAAA,QAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AACd,OAAA,MAAA;;AAEA,OAAA;AACF,KAAA;;AAGF,EAAA,IAAA,iBAAA,GAAA,SAAA,iBAAA,GAAA;AACEC,IAAAA,YAAAA,CAAAA,KAAAA,GAAAA,EAAAA,CAAAA;;AAGI,EAAA,IAAA,4BAAA,GAAA,SAAA,4BAAA,CAAA,MAAA,EAAA;;;AAIFC,MAAAA,YAAAA,CAAAA,KAAAA,CAAAA,OAAAA,CAAAA,GAAAA,MAAAA,CAAAA;AACF,KAAA,MAAA;AACE,MAAA,OAAA,YAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AACF,KAAA;;;AAIAD,IAAAA,YAAAA,EAAAA,YAAAA;AACAE,IAAAA,eAAAA,EAAAA,eAAAA;AACAC,IAAAA,iBAAAA,EAAAA,iBAAAA;AACAC,IAAAA,eAAAA,EAAAA,eAAAA;AACAC,IAAAA,YAAAA,EAAAA,YAAAA;AACAC,IAAAA,iBAAAA,EAAAA,iBAAAA;AACAC,IAAAA,4BAAAA,EAAAA,4BAAAA;;AAEJ;;;;"}