@hzab/edit-table 0.1.12 → 0.1.13-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["DatePicker","Input","TimePicker","childAntdComponent","MonthPicker","QuarterPicker","RangePicker","WeekPicker","YearPicker","Password","Search","TextArea","isTriggerBlur","useEffect","useMemo","useRef","useState","Cell","CellTemplate","Compatible","Uncertain","UncertainCompatible","getCellProperty","getCharFromKey","isAlphaNumericKey","isNavigationKey","keyCodes","InfoCircleOutlined","Popover","isTriggerBlur","OptionType","label","value","isDisabled","BaseCell","selectedValue","values","DIProps","onCellChanged","args","cell","Record","isInEditMode","WidthWrapHoc","WrapComponent","props","createBaseCellTemplate","getCompatibleCell","uncertainCell","parseFloat","NaN","text","update","cellToMerge","selectedValueFromText","some","val","undefined","getClassName","handleCompositionEnd","eventData","enableEditMode","render","commit","React","ReactNode","edit","setEdit","open","setOpen","datatypeId","columnId","rowId","comValue","setComValue","isValidator","setIsValidator","comValueInit","openTimerRef","current","onClick","e","window","gridEditId","document","addEventListener","removeEventListener","onValidator","flag","isVerify","it","validatorList","pattern","test","Array","isArray","length","timer","setTimeout","popup","querySelector","stopPointer","PointerEvent","stopPropagation","clearTimeout","onBlurSubmit","targetValue","dataPickerProps","includes","type","onOpenChange","isOpen","uploadEdit","nonEditable","style","width","display","alignItems","options","onChange","target","onBlur","onPointerDown","onKeyDown","keyCode","getField","validatorMessage","useMemo","getVal","GetBaseTemplate","props","pattern","cell","componentProps","Com","cellRender","echoValue","getField","enum","values","name","text","Slot","input","focus","Input","GetBaseTemplate","NumberCellTemplate","props","$","_c","t0","componentProps","t1","type","t2","useEffect","useState","MinusCircleOutlined","PlusCircleOutlined","ExpandListTemplate","props","$","_c","cell","setExpandKeys","expandKeys","rowKey","setNewDataSource","record","expand","setExpand","t0","isExpand","pre","tempPre","childrenIds","children","map","el","findIndex","el_0","filterList","filter","el_1","includes","length","splice","el_2","onExpand","t1","t2","t3","t4","preExpandKeys","el_3","onClickExpand","t5","width","getNavigatorLanguage","navigator","language","getLocaleSeparators","locale","testNumber","localeFormattedNumber","Intl","NumberFormat","format","thousandsSeparator","split","decimalSeparator","parseLocaleNumber","stringNumber","trim","NaN","normalizedStringNumber","replace","numberString","RegExp","trimmedNumberString","length","Number","isReactElement","value","getTitle","item","title","props","children","String","convertColumnsToRows","columns","headerRowHeight","getLeaves","cols","reduce","acc","col","getDepth","depth","max","Math","leafColumns","totalDepth","totalCols","buildTree","map","hasChildren","rowspan","colspan","_depth","_isLeaf","leafCount","tree","rows","Array","from","_","i","rowId","height","cells","handleType","includes","type","dataIndex","fillRow","nodes","rowIndex","forEach","node","cell","text","width","style","background","display","justifyContent","sorter","key","push","row","newCells","colIndex","cellIndex","currentCell","leaf","undefined","lastRow","lastRowCells","leafIndex","index","existingCell","find","flattenColumns","result","traverse","k","rest","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","Checkbox","Empty","Spin","ReactGrid","TextTemplate","antdComponents","customComponents","WidthWrapHoc","NumberTemplate","ExpandListTemplate","convertColumnsToRows","flattenColumns","isReactElement","childAntdComponent","GetBaseTemplate","CellEditTableProps","columns","dataSource","formulaConfig","onChange","v","reactGridProps","onEditSubmit","headerRowHeight","rowHeight","reactGridStyle","className","Slots","rowSelection","rowKey","query","loading","isExpand","getList","onRow","ri","ci","CellEditTable","props","ref","headerList","setHeaderList","rows","setRows","initRowsRef","tableColumns","setTableColumns","selectedRowKeys","setSelectedRowKeys","newDataSource","setNewDataSource","expandKeys","setExpandKeys","headerCustomTemplate","setHeaderCustomTemplate","highlights","setHighlights","highlightsRowIdRef","gridRef","currentCell","handleDataSource","arr","level","forEach","el","children","validRowIds","map","r","rowId","includes","current","handleArrayToObj","item","record","cells","fieldList","obj","id","columnId","text","value","selectedValue","type","Array","isArray","length","unshift","width","key","nonEditable","style","background","display","justifyContent","newColumns","index","dataIndex","name","headTemplate","handleHeader","title","Com","columnsIds","tempDataSource","height","ind","newCell","columnsItem","cellItem","it","setCellData","setCellStyle","pattern","String","onCell","cellProps","mergerList","find","newItem","handleCellsChanged","changes","batchQuery","isBatchSubmit","prevRows","change","changeRowIdx","findIndex","changeColumnIdx","push","resultColumnIdx","err","baseTemplate","mergeTemplate","newMergeTemplate","NewCom","newComProps","ActionDom","rowData","cell","e","stopPropagation","tableActionsSlot","actionPrefixSlot","actionCenterSlot","actionSuffixSlot","flattenDataSource","result","loop","list","CheckBoxDom","filter","getCheckboxProps","disabled","checkboxProps","componentProps","target","checked","newSelectedRowKeys","pageNum","customCellTemplates","templatesObj","onHightsRow","borderColor","datatypeId","window","gridEditId","indexOf","isRowHighlights","onFocusLocationChanging","_$actions","Number","PRESENTED_IMAGE_SIMPLE"],"sources":["../src/common/childAntdComponent.ts","../src/common/WidthWrapHoc.tsx","../src/Template/GetBaseTemplate.tsx","../src/Template/NumberCellTemplate/index.tsx","../src/Template/ExpandListTemplate/index.tsx","../src/common/utils.ts","../src/index.tsx"],"sourcesContent":["import { DatePicker, Input, TimePicker } from \"antd\";\n\nexport const childAntdComponent: any = {\n \"DatePicker.MonthPicker\": DatePicker.MonthPicker,\n \"DatePicker.QuarterPicker\": DatePicker.QuarterPicker,\n \"DatePicker.RangePicker\": DatePicker.RangePicker,\n \"DatePicker.TimePicker\": DatePicker.TimePicker,\n \"DatePicker.WeekPicker\": DatePicker.WeekPicker,\n \"DatePicker.YearPicker\": DatePicker.YearPicker,\n \"Input.Password\": Input.Password,\n \"Input.Search\": Input.Search,\n \"Input.TextArea\": Input.TextArea,\n \"TimePicker.RangePicker\": TimePicker.RangePicker,\n};\nexport const isTriggerBlur = [\n \"DatePicker\",\n \"DatePicker.MonthPicker\",\n \"DatePicker.QuarterPicker\",\n \"DatePicker.RangePicker\",\n \"DatePicker.TimePicker\",\n \"DatePicker.WeekPicker\",\n \"DatePicker.YearPicker\",\n \"TimePicker.RangePicker\",\n];\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type {\n Cell,\n CellTemplate,\n Compatible,\n Uncertain,\n UncertainCompatible,\n} from \"@silevis/reactgrid\";\nimport {\n getCellProperty,\n getCharFromKey,\n isAlphaNumericKey,\n isNavigationKey,\n keyCodes,\n} from \"@silevis/reactgrid\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { Popover } from \"antd\";\nimport { isTriggerBlur } from \"./childAntdComponent\";\nexport type OptionType = {\n label: string;\n value: string | number;\n isDisabled?: boolean;\n};\n\nexport interface BaseCell extends Cell {\n selectedValue?: string;\n value: string | number;\n values: OptionType[];\n isDisabled?: boolean;\n}\ninterface DIProps {\n onCellChanged: (...args: any[]) => void;\n cell: Record<string, any>;\n isInEditMode?: boolean;\n}\n\nexport const WidthWrapHoc = (WrapComponent: any, props = {}) => {\n class createBaseCellTemplate implements CellTemplate<BaseCell> {\n getCompatibleCell(uncertainCell: Uncertain<BaseCell>): Compatible<BaseCell> {\n let values: any;\n try {\n values = getCellProperty(uncertainCell, \"values\", \"object\");\n } catch {\n values = [];\n }\n const value = uncertainCell.selectedValue ? parseFloat(uncertainCell.selectedValue) : NaN;\n let isDisabled = true;\n try {\n isDisabled = getCellProperty(uncertainCell, \"isDisabled\", \"boolean\");\n } catch {\n isDisabled = false;\n }\n const selectedValue = uncertainCell.selectedValue;\n const text = selectedValue || \"\";\n return { ...uncertainCell, selectedValue, text, value, values, isDisabled };\n }\n\n update(\n cell: Compatible<BaseCell>,\n cellToMerge: UncertainCompatible<BaseCell>,\n ): Compatible<BaseCell> {\n const selectedValueFromText = cell.values.some((val: any) => val.value == cellToMerge.text)\n ? cellToMerge.text\n : cellToMerge?.text || undefined;\n\n return this.getCompatibleCell({\n ...cell,\n selectedValue: selectedValueFromText,\n });\n }\n\n getClassName(cell: Compatible<BaseCell>, isInEditMode: boolean): string {\n return \"\";\n }\n /** enableEditMode为true 时输入中文会报错 */\n handleCompositionEnd(\n cell: Compatible<BaseCell>,\n eventData: any,\n ): { cell: Compatible<BaseCell>; enableEditMode: boolean } {\n return {\n cell: {\n ...cell,\n },\n enableEditMode: false,\n };\n }\n /** render 不能抽出来组件,否则点击会失效 */\n render(\n cell: any,\n isInEditMode: boolean,\n onCellChanged: (cell: any, commit: boolean) => void,\n ): React.ReactNode {\n const [edit, setEdit] = useState<boolean>(false);\n const [open, setOpen] = useState<boolean>(false);\n const datatypeId = cell?.columnId + cell?.rowId;\n const [comValue, setComValue] = useState(cell?.text);\n const [isValidator, setIsValidator] = useState(false);\n const comValueInit = useRef<any>(cell?.text);\n const openTimerRef = useRef<any>();\n useEffect(() => {\n setComValue(cell?.text);\n comValueInit.current = cell?.text;\n }, [cell?.text]);\n\n useEffect(() => {\n // 处理下拉选项弹层失焦逻辑\n function onClick(e) {\n if ((window as any).gridEditId != datatypeId) {\n setEdit(false);\n }\n }\n document.addEventListener(\"click\", onClick);\n return () => {\n document.removeEventListener(\"click\", onClick);\n };\n }, []);\n\n /** 校验触发器 */\n const onValidator = (val) => {\n let flag = false;\n let isVerify = false;\n for (const it of cell?.validatorList || []) {\n if (it?.pattern?.test(val)) {\n flag = true;\n }\n break;\n }\n isVerify = !flag && Array.isArray(cell?.validatorList) && cell?.validatorList?.length > 0;\n setIsValidator(isVerify);\n };\n\n useEffect(() => {\n if (!open) return;\n // 等下一帧,弹窗DOM渲染完成\n const timer = setTimeout(() => {\n const popup: any = document.querySelector(\".ant-picker-dropdown\");\n if (!popup) return;\n\n const stopPointer = (e: PointerEvent) => {\n // 阻断事件往上冒泡到document\n e.stopPropagation();\n };\n // 捕获阶段监听 pointerdown!!必须是pointerdown不是mousedown\n popup.addEventListener(\"pointerdown\", stopPointer, true);\n\n // 清理函数\n return () => {\n popup.removeEventListener(\"pointerdown\", stopPointer, true);\n };\n }, 0);\n\n return () => clearTimeout(timer);\n }, [open]);\n\n /** 失焦提交 */\n const onBlurSubmit = () => {\n const targetValue = comValueInit.current;\n onCellChanged(\n this.getCompatibleCell({\n ...cell,\n text: targetValue,\n selectedValue: targetValue,\n }),\n true,\n );\n };\n\n const dataPickerProps = useMemo(() => {\n if (isTriggerBlur?.includes(cell?.type)) {\n return {\n open: open,\n /** 兼容datapicker 闪烁问题 */\n onOpenChange: (isOpen) => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n }\n openTimerRef.current = setTimeout(() => {\n setOpen(isOpen);\n }, 80);\n },\n };\n }\n return {};\n }, [cell]);\n /** 监听上传组件失焦回调 */\n useEffect(() => {\n if (\n !edit &&\n cell.type == \"Upload\" &&\n (window as any).uploadEdit &&\n (window as any).uploadEdit == datatypeId\n ) {\n (window as any).uploadEdit = null;\n onBlurSubmit();\n }\n }, [edit, comValue]);\n\n return (\n <div\n className={`base-hoc ${edit ? \"base-hoc-edit\" : \"\"}`}\n onDoubleClick={(e) => {\n if (cell?.nonEditable) {\n return;\n }\n if (cell.type === \"Upload\") {\n (window as any).uploadEdit = datatypeId;\n }\n setEdit(true);\n }}\n >\n <WrapComponent\n {...props}\n onPointerDown={(e) => e.stopPropagation()}\n componentProps={{\n style: { width: \"100%\", display: \"flex\", alignItems: \"center\" },\n value: comValue,\n options: cell.values,\n onChange: (e) => {\n const targetValue = e?.target?.value ?? e;\n setComValue(targetValue);\n comValueInit.current = targetValue;\n onValidator(targetValue);\n },\n onBlur: (e) => {\n onBlurSubmit();\n if (!isTriggerBlur?.includes(cell?.type)) {\n setEdit(false);\n }\n },\n\n onPointerDown: (e) => {\n e.stopPropagation();\n },\n onKeyDown: (e) => {\n if (isAlphaNumericKey(e.keyCode) || isNavigationKey(e.keyCode)) e.stopPropagation();\n },\n ...dataPickerProps,\n ...((cell?.getField && cell?.getField()[\"x-component-props\"]) || {}),\n }}\n pattern={edit ? \"\" : \"readPretty\"}\n cell={cell}\n ></WrapComponent>\n {isValidator && (\n <Popover content={cell?.validatorMessage ?? \"该字段不合法\"}>\n <InfoCircleOutlined className=\"validator-icon\" />\n </Popover>\n )}\n </div>\n );\n }\n }\n\n return new createBaseCellTemplate();\n};\n","import { useMemo } from \"react\";\nimport { getVal } from \"@hzab/utils/src/formily/field\";\nexport const GetBaseTemplate = (props) => {\n const { pattern, cell, componentProps, Com, cellRender } = props;\n\n const echoValue = useMemo(() => {\n if (!cell?.getField) {\n return;\n }\n return getVal(\n { ...(cell?.getField && cell?.getField()), enum: cell?.getField()?.enum || cell?.values },\n { [cell?.getField && cell?.getField().name]: cell.text },\n );\n }, [cell]);\n if (cellRender && cellRender(props)) {\n const Slot = cellRender;\n return <Slot {...props}></Slot>;\n }\n\n return (\n <div className=\"base-hoc\">\n {pattern == \"readPretty\" ? (\n <div>{echoValue}</div>\n ) : (\n <Com\n className=\"rg-input\"\n ref={(input) => {\n if (input) {\n input.focus();\n }\n }}\n {...componentProps}\n />\n )}\n </div>\n );\n};\n","import { Input } from \"antd\";\nimport { GetBaseTemplate } from \"../GetBaseTemplate\";\nimport \"./index.less\";\nconst NumberCellTemplate = (props: any) => {\n return (\n <GetBaseTemplate\n {...props}\n componentProps={{\n ...props?.componentProps,\n type: \"number\",\n }}\n Com={Input}\n ></GetBaseTemplate>\n );\n};\nexport default NumberCellTemplate;\n","import { useEffect, useState } from \"react\";\nimport { MinusCircleOutlined, PlusCircleOutlined } from \"@ant-design/icons\";\nimport \"./index.less\";\n\nexport const ExpandListTemplate = (props) => {\n const { cell } = props;\n const { Slots, setExpandKeys, expandKeys, rowKey, setNewDataSource, record, columnId } = cell;\n const [expand, setExpand] = useState<boolean>(false);\n const onExpand = (isExpand) => {\n setNewDataSource((pre) => {\n const tempPre = [...pre];\n const childrenIds = record?.children?.map((el) => el?.[rowKey]);\n if (isExpand) {\n const findIndex = pre?.findIndex((el) => el?.[rowKey] == record?.[rowKey]);\n const filterList = pre?.filter((el) => childrenIds?.includes(el?.[rowKey])) || [];\n if (filterList?.length == 0) {\n tempPre.splice(findIndex + 1, 0, ...(record?.children || []));\n }\n return [...tempPre];\n }\n\n return pre?.filter((el) => !childrenIds?.includes(el?.[rowKey]));\n });\n };\n useEffect(() => {\n if (expandKeys?.includes(record?.[rowKey])) {\n setExpand(true);\n onExpand(true);\n }\n }, [cell?.record]);\n\n /** 展开关闭子项 */\n const onClickExpand = () => {\n setExpandKeys((preExpandKeys) => {\n if (preExpandKeys?.includes(record?.[rowKey])) {\n return preExpandKeys?.filter((el) => el != record?.[rowKey]);\n }\n return [...preExpandKeys, record?.[rowKey]];\n });\n setExpand(!expand);\n onExpand(!expand);\n };\n return (\n <div className=\"expandList-template\">\n {record?.children ? (\n <>\n {!expand ? (\n <PlusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n ) : (\n <MinusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n )}\n </>\n ) : (\n <div style={{ width: 14 }}></div>\n )}\n </div>\n );\n};\n","export const getNavigatorLanguage = (): string => navigator.language || \"en-US\";\n\nfunction getLocaleSeparators(locale: string) {\n const testNumber = 123456.789;\n const localeFormattedNumber = Intl.NumberFormat(locale).format(testNumber);\n\n // Get the thousands separator of the locale\n const thousandsSeparator = localeFormattedNumber.split(\"123\")[1][0];\n\n // Get the decimal separator of the locale\n const decimalSeparator = localeFormattedNumber.split(\"123\")[1][4];\n return { thousandsSeparator, decimalSeparator };\n}\nexport function parseLocaleNumber(stringNumber: string, locale = getNavigatorLanguage()): number {\n if (!stringNumber.trim()) return NaN;\n const { thousandsSeparator, decimalSeparator } = getLocaleSeparators(locale);\n const normalizedStringNumber = stringNumber.replace(/\\u00A0/g, \" \"); // Replace non-breaking space with normal space\n const numberString = normalizedStringNumber\n .replace(new RegExp(`[${thousandsSeparator}\\\\s]`, \"g\"), \"\") // Replace thousands separator and white-space\n .replace(new RegExp(`\\\\${decimalSeparator}`, \"g\"), \".\"); // Replace decimal separator\n\n const trimmedNumberString = numberString.replace(/^(?!-)\\D+|\\D+$/g, \"\"); // Remove characters before first and after last number, but keep negative sign\n if (trimmedNumberString === null || trimmedNumberString.trim().length === 0) {\n return NaN;\n }\n return Number(trimmedNumberString);\n}\n\nexport function isReactElement(value) {\n return value !== null && typeof value === \"object\";\n}\nconst getTitle = (item) => {\n return typeof item?.title == \"function\"\n ? isReactElement(item?.title())\n ? item?.title()?.props.children\n : String(item?.title()) || \"\"\n : String(item?.title) || \"\";\n};\n\nexport function convertColumnsToRows(columns, headerRowHeight = 40) {\n // 获取所有叶子节点\n const getLeaves = (cols) => {\n return cols.reduce((acc, col) => {\n if (col.children?.length) {\n return [...acc, ...getLeaves(col.children)];\n }\n return [...acc, col];\n }, []);\n };\n\n // 计算最大深度\n const getDepth = (cols, depth = 1) => {\n return cols.reduce((max, col) => {\n if (col.children?.length) {\n return Math.max(max, getDepth(col.children, depth + 1));\n }\n return Math.max(max, depth);\n }, depth);\n };\n\n const leafColumns = getLeaves(columns);\n const totalDepth = getDepth(columns);\n const totalCols = leafColumns.length;\n\n // 构建表头树\n const buildTree = (cols, depth = 0) => {\n return cols.map((col) => {\n const hasChildren = col.children?.length > 0;\n if (!hasChildren) {\n return {\n ...col,\n rowspan: totalDepth - depth,\n colspan: 1,\n _depth: depth,\n _isLeaf: true,\n };\n }\n const leafCount = getLeaves(col.children).length;\n return {\n ...col,\n rowspan: 1,\n colspan: leafCount,\n _depth: depth,\n _isLeaf: false,\n children: buildTree(col.children, depth + 1),\n };\n });\n };\n\n const tree = buildTree(columns, 0);\n\n // 初始化行\n const rows: any = Array.from({ length: totalDepth }, (_, i) => ({\n rowId: `header-${i}`,\n height: headerRowHeight,\n cells: [],\n }));\n\n const handleType = (item) => {\n if ([\"rowSelection\", \"ExpandListTemplate\"]?.includes(item?.type)) {\n return item?.type;\n }\n\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n return `${item?.dataIndex}`;\n }\n return \"header\";\n };\n\n // 递归填充行\n const fillRow = (nodes, rowIndex = 0) => {\n nodes.forEach((node) => {\n if (node._isLeaf) {\n const cell = {\n ...node,\n type: handleType(node),\n text: getTitle(node),\n dataIndex: node.dataIndex,\n width: node.width,\n rowspan: node.rowspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n };\n if (node.sorter) cell.sorter = node.sorter;\n if (node.key) cell.key = node.key;\n rows[rowIndex].cells.push(cell);\n } else {\n // 父节点:添加colspan\n rows[rowIndex].cells.push({\n ...node,\n type: handleType(node),\n text: getTitle(node),\n colspan: node.colspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n if (node.children) {\n fillRow(node.children, rowIndex + 1);\n }\n }\n });\n };\n\n fillRow(tree, 0);\n\n // 补全每一行的cell,使长度一致\n rows.forEach((row, rowIndex) => {\n const newCells = [];\n let colIndex = 0;\n let cellIndex = 0;\n\n while (colIndex < totalCols) {\n const currentCell = row.cells[cellIndex];\n\n if (!currentCell) {\n // 如果当前行没有足够的cell,从叶子节点补充\n const leaf = leafColumns[colIndex];\n newCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: rowIndex === totalDepth - 1 ? 1 : undefined,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n colIndex++;\n cellIndex++;\n continue;\n }\n\n const colspan = currentCell.colspan || 1;\n const rowspan = currentCell.rowspan || 1;\n\n // 检查当前cell是否应该出现在这一行\n // 如果rowspan > 1,表示它跨多行,但只在第一行出现\n if (rowspan > 1 && rowIndex > 0) {\n // 这个cell不应该出现在当前行,跳过\n colIndex += colspan;\n cellIndex++;\n continue;\n }\n\n // 如果当前cell有colspan,需要补全后面的空cell\n newCells.push(currentCell);\n colIndex += colspan;\n cellIndex++;\n\n // 如果colspan > 1,后面补充空cell\n for (let i = 1; i < colspan; i++) {\n newCells.push({\n type: \"header\",\n text: \"\",\n });\n }\n }\n\n row.cells = newCells;\n });\n\n // 最后一行的特殊处理:确保所有叶子节点都有对应的cell\n const lastRow = rows[totalDepth - 1];\n const lastRowCells = [];\n const leafIndex = 0;\n\n // 遍历所有叶子节点\n leafColumns.forEach((leaf, index) => {\n // 检查是否已经在lastRow中有对应的cell\n const existingCell = lastRow.cells.find(\n (cell) => cell.dataIndex === leaf.dataIndex && cell.text === leaf.title,\n );\n\n if (existingCell) {\n lastRowCells.push(existingCell);\n } else {\n // 创建新的cell\n lastRowCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: 1,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n });\n\n lastRow.cells = lastRowCells;\n\n // 确保所有行的cell数量等于totalCols\n rows.forEach((row) => {\n // 如果cell数量少于totalCols,补充空cell\n while (row.cells.length < totalCols) {\n row.cells.push({\n type: \"header\",\n text: \"\",\n });\n }\n });\n\n return rows;\n}\n\nexport function flattenColumns(columns: any[]) {\n const result: any[] = [];\n\n function traverse(cols) {\n cols.forEach((col) => {\n if (col.children && col.children.length > 0) {\n traverse(col.children);\n } else {\n // 创建新对象,只保留需要的属性\n const { title, dataIndex, key, width, sorter, k, ...rest } = col;\n\n result.push({\n type: \"Input\",\n dataIndex,\n title,\n ...(key && { key }),\n ...(width && { width }),\n ...(sorter && { sorter }),\n ...(k && { k }),\n // 如果需要保留其他属性\n ...rest,\n });\n }\n });\n }\n\n traverse(columns);\n return result;\n}\n","import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { Checkbox, Empty, Spin } from \"antd\";\nimport { ReactGrid } from \"@silevis/reactgrid\";\nimport TextTemplate from \"./Template/TextCellTemplate\";\nimport { antdComponents, customComponents } from \"@hzab/form-render\";\nimport { WidthWrapHoc } from \"./common/WidthWrapHoc\";\nimport NumberTemplate from \"./Template/NumberCellTemplate\";\nimport { ExpandListTemplate } from \"./Template/ExpandListTemplate\";\nimport { convertColumnsToRows, flattenColumns, isReactElement } from \"./common/utils\";\nimport { childAntdComponent } from \"./common/childAntdComponent\";\nimport { GetBaseTemplate } from \"./Template/GetBaseTemplate\";\nimport \"./index.less\";\nimport \"@silevis/reactgrid/styles.css\";\n\ninterface CellEditTableProps {\n columns: any[];\n dataSource: any[];\n formulaConfig?: any;\n onChange?: (v: any) => void;\n reactGridProps?: any;\n onEditSubmit?: (v: any) => void;\n headerRowHeight?: number;\n rowHeight?: number;\n reactGridStyle?: any;\n className?: string;\n Slots?: any;\n rowSelection?: any;\n rowKey?: string;\n query?: any;\n loading?: boolean;\n isExpand?: boolean;\n getList?: () => void;\n onRow?: (v: any, ri: number, ci: number) => void;\n}\n\nfunction CellEditTable(props: CellEditTableProps, ref: any) {\n const {\n columns,\n dataSource,\n formulaConfig,\n onChange,\n reactGridProps = {},\n onEditSubmit,\n headerRowHeight = 44,\n rowHeight = 44,\n reactGridStyle,\n className,\n Slots,\n rowSelection,\n rowKey = \"id\",\n query,\n loading,\n isExpand = false,\n getList,\n onRow,\n } = props;\n\n const [headerList, setHeaderList] = useState<any>([]);\n const [rows, setRows] = useState<any>([]);\n const initRowsRef = useRef<any>([]);\n /** 初始行数据 */\n const [tableColumns, setTableColumns] = useState<any>([]);\n const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]);\n const [newDataSource, setNewDataSource] = useState<any>([]);\n const [expandKeys, setExpandKeys] = useState<any>([]);\n const [headerCustomTemplate, setHeaderCustomTemplate] = useState<any>([]);\n const [highlights, setHighlights] = useState([]);\n const highlightsRowIdRef = useRef();\n\n const gridRef = useRef<any>();\n const currentCell = useRef<any>();\n\n useImperativeHandle(ref, () => {\n return {\n rows,\n };\n });\n /** 递归处理子节点数据 */\n const handleDataSource = (arr, level = 0) => {\n arr?.forEach((el) => {\n el.level = level + 1;\n if (el?.children) {\n handleDataSource(el?.children, el.level);\n }\n });\n };\n /** 洗数据 */\n useEffect(() => {\n handleDataSource(dataSource);\n setNewDataSource(dataSource);\n }, [dataSource]);\n\n /** 判断当前选中行是否还存在 */\n useEffect(() => {\n const validRowIds = rows.map((r) => r.rowId);\n if (!validRowIds?.includes(highlightsRowIdRef.current)) {\n setHighlights([]);\n }\n }, [rows]);\n\n /**将数组转为对象 */\n const handleArrayToObj = (item) => {\n const record = item?.cells?.[0]?.record;\n const fieldList = [\"_$actions\", \"rowSelection\"];\n const obj: any = {\n id: item?.rowId,\n };\n item?.cells?.forEach((el) => {\n if (el?.columnId && !fieldList?.includes(el?.columnId)) {\n obj[el?.columnId] = el?.text || el?.value || el?.selectedValue || \"\";\n if (el?.type == \"Number\") {\n obj[el?.columnId] = el?.value;\n }\n }\n });\n\n return {\n ...record,\n ...obj,\n };\n };\n /** 表头 */\n useEffect(() => {\n if (Array.isArray(columns) && columns?.length > 0) {\n if (isExpand) {\n columns.unshift({\n type: \"ExpandListTemplate\",\n width: 14,\n key: \"ExpandListTemplate\",\n nonEditable: true,\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n },\n });\n }\n if (rowSelection) {\n columns.unshift({\n type: \"rowSelection\",\n nonEditable: true,\n width: rowSelection?.width || 30,\n key: \"rowSelection\",\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n\n setHeaderList(convertColumnsToRows(columns, headerRowHeight));\n const newColumns = flattenColumns(columns);\n\n setTableColumns(\n newColumns?.map((item, index) => ({\n ...item,\n columnId: item?.dataIndex || item?.key || item?.name || \"\",\n })),\n );\n }\n }, [columns, rowSelection]);\n\n /** 自定义表头 */\n const headTemplate: any = {};\n const handleHeader = (arr) => {\n arr?.forEach((item) => {\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n const Com = item?.title;\n headTemplate[item?.dataIndex] = WidthWrapHoc(Com);\n }\n if (item?.children) {\n handleHeader(item?.children);\n }\n });\n };\n useEffect(() => {\n handleHeader(columns);\n setHeaderCustomTemplate(headTemplate);\n }, [columns]);\n\n /** 数据行 */\n useEffect(() => {\n const columnsIds = tableColumns?.map((el) => el?.columnId);\n\n const tempDataSource = newDataSource?.map((item, index) => {\n return {\n rowId: item[rowKey],\n height: rowHeight,\n cells: columnsIds?.map((el, ind) => {\n let newCell = {};\n const columnsItem = tableColumns[ind];\n const cellItem = item[el];\n const type: any = columnsItem?.type ?? \"text\";\n //设置单元格颜色及回显\n if (formulaConfig) {\n for (const key in formulaConfig) {\n if (key == el) {\n const it = formulaConfig[key];\n newCell = {\n text: it?.setCellData && it?.setCellData(item),\n value: it?.setCellData && it?.setCellData(item),\n style:\n it?.setCellStyle &&\n it?.setCellStyle((it?.setCellData && it?.setCellData(item)) || item),\n };\n }\n }\n }\n\n return {\n ...columnsItem,\n record: item,\n rowId: item[rowKey] || columnsItem?.type,\n type: type,\n nonEditable: columnsItem?.pattern == \"readPretty\" ? true : columnsItem?.nonEditable,\n text: String(cellItem || \"\"),\n value: cellItem,\n selectedValue: cellItem || \"\",\n style:\n columnsItem?.type == \"rowSelection\"\n ? { display: \"flex\", justifyContent: \"center\" }\n : {},\n ...(((onRow && onRow(item, index, ind)) as any) || {}),\n ...((columnsItem?.onCell && columnsItem?.onCell(item, index, ind)) || {}),\n ...(columnsItem?.cellProps || {}),\n setNewDataSource,\n setExpandKeys,\n rowKey,\n expandKeys,\n Slots,\n ...newCell,\n };\n }),\n };\n });\n const mergerList = [...headerList, ...tempDataSource];\n setRows(mergerList);\n }, [newDataSource, tableColumns, headerList]);\n useEffect(() => {\n if (loading) {\n const item = rows?.find((el) => el?.rowId == currentCell.current?.rowId);\n let newItem = item?.cells?.find((it) => it?.columnId == currentCell.current?.columnId);\n newItem = { ...currentCell.current };\n initRowsRef.current = rows;\n }\n }, [loading, rows]);\n // 单元格编辑回调\n const handleCellsChanged = async (changes) => {\n const batchQuery: any = [];\n if (!Array.isArray(changes) || changes.length === 0) return;\n /** 批量提交 */\n let isBatchSubmit = false;\n if (changes?.length > 1) {\n isBatchSubmit = true;\n }\n\n setRows((prevRows) => {\n changes.forEach(async (change) => {\n const changeRowIdx = prevRows.findIndex((el) => el.rowId == change.rowId);\n const changeColumnIdx = tableColumns.findIndex((el) => el.columnId == change.columnId);\n prevRows[changeRowIdx].cells[changeColumnIdx] = { ...change.newCell };\n currentCell.current = { ...change.newCell };\n batchQuery.push(handleArrayToObj(prevRows[changeRowIdx]));\n if (formulaConfig) {\n for (const key in formulaConfig) {\n const item = formulaConfig[key];\n const resultColumnIdx = tableColumns.findIndex((el) => el.columnId == key);\n const newCell = {\n ...prevRows[changeRowIdx].cells[resultColumnIdx],\n text: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n value: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n style:\n item?.setCellStyle &&\n item?.setCellStyle(\n (item?.setCellData && item?.setCellData(prevRows[changeRowIdx])) ||\n prevRows[changeRowIdx],\n ),\n };\n prevRows[changeRowIdx].cells[resultColumnIdx] = newCell;\n }\n }\n if (onEditSubmit && !isBatchSubmit) {\n try {\n await onEditSubmit(batchQuery);\n } catch (err) {\n getList && getList();\n }\n }\n onChange && onChange(prevRows[changeRowIdx]);\n });\n return [...prevRows];\n });\n\n if (isBatchSubmit) {\n try {\n onEditSubmit && (await onEditSubmit(batchQuery));\n } catch (err) {\n getList && getList();\n }\n }\n };\n\n /** 自定义组件注册 */\n const baseTemplate = useMemo(() => {\n const mergeTemplate: any = {\n ...(antdComponents || {}),\n ...(customComponents || {}),\n ...childAntdComponent,\n };\n const newMergeTemplate: any = {};\n for (const key in mergeTemplate) {\n const NewCom = (newComProps) => {\n return <GetBaseTemplate {...newComProps} {...props} Com={mergeTemplate[key]} />;\n };\n newMergeTemplate[key] = WidthWrapHoc(NewCom);\n }\n return newMergeTemplate;\n }, [antdComponents, customComponents]);\n\n const ActionDom = (props) => {\n const rowData = rows?.find((el) => el?.rowId == props?.cell?.rowId);\n return (\n <div onPointerDown={(e) => e.stopPropagation()}>\n {Slots?.tableActionsSlot && <Slots.tableActionsSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionPrefixSlot && <Slots.actionPrefixSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionCenterSlot && <Slots.actionCenterSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionSuffixSlot && <Slots.actionSuffixSlot {...props?.cell} rowData={rowData} />}\n </div>\n );\n };\n function flattenDataSource(arr: any) {\n const result: any = [];\n function loop(list: any) {\n for (const item of list) {\n result.push(item);\n if (item.children && item.children.length) {\n loop(item.children);\n }\n }\n }\n loop(arr);\n return result;\n }\n const CheckBoxDom = (props) => {\n const { record, rowId } = props?.cell;\n\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n\n const checkboxProps =\n typeof rowSelection?.getCheckboxProps === \"function\"\n ? rowSelection?.getCheckboxProps?.(record)\n : {};\n return (\n <Checkbox\n {...props?.componentProps}\n checked={\n rowSelection?.selectedRowKeys?.includes((record && record[rowKey]) || \"\") ||\n (!rowId &&\n rowSelection?.selectedRowKeys?.length == newDataSource?.length &&\n newDataSource?.length > 0)\n }\n indeterminate={\n !rowId &&\n rowSelection?.selectedRowKeys?.length > 0 &&\n rowSelection?.selectedRowKeys?.length < newDataSource?.length\n }\n onChange={(e) => {\n if (e.target.checked && rowId) {\n const newSelectedRowKeys = [...rowSelection?.selectedRowKeys, record[rowKey]];\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(newSelectedRowKeys, rows);\n } else if (!e.target.checked && rowId) {\n const newSelectedRowKeys = rowSelection?.selectedRowKeys?.filter(\n (el) => el != record[rowKey],\n );\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n rowSelection?.selectedRowKeys?.filter((el) => el != record[rowKey]),\n rows,\n );\n } else if (e.target.checked && !rowId) {\n const newSelectedRowKeys = newDataSource?.map((el) => el[rowKey]);\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n newDataSource?.map((el) => el[rowKey]),\n rows,\n );\n } else if (!e.target.checked && !rowId) {\n rowSelection?.onChange([], []);\n }\n }}\n {...checkboxProps}\n ></Checkbox>\n );\n };\n useEffect(() => {\n if (rowSelection) {\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n const rows = newDataSource?.filter((el) => selectedRowKeys?.includes(el[rowKey]));\n rowSelection?.onChange(selectedRowKeys, rows);\n }\n }, [selectedRowKeys, dataSource]);\n useEffect(() => {\n setSelectedRowKeys([]);\n }, [query?.pageNum]);\n\n const customCellTemplates = useMemo(() => {\n const templatesObj: any = {};\n for (const key in reactGridProps?.customCellTemplates) {\n const item = reactGridProps?.customCellTemplates[key];\n templatesObj[key] = WidthWrapHoc(item);\n }\n return templatesObj;\n }, [reactGridProps?.customCellTemplates]);\n\n /** 选中高亮整行 */\n const onHightsRow = (cell: any, rows: any) => {\n const list = rows\n ?.find((el) => el?.rowId == cell?.rowId)\n ?.cells?.map((item) => ({\n columnId: item?.columnId,\n rowId: cell?.rowId,\n className: \"custom-highlights-row\",\n borderColor: \"transparent\",\n }));\n highlightsRowIdRef.current = cell?.rowId;\n setHighlights(list);\n };\n\n return (\n <Spin spinning={loading}>\n <div className={`grid-container ${className}`} style={reactGridStyle}>\n <ReactGrid\n ref={gridRef}\n rows={loading ? initRowsRef.current : rows}\n key={dataSource?.length == 0 ? 0 : 1}\n columns={tableColumns}\n onCellsChanged={handleCellsChanged}\n enableFillHandle={true}\n enableRangeSelection={true}\n horizontalStickyBreakpoint={120}\n {...reactGridProps}\n highlights={reactGridProps?.highlights ?? highlights}\n onFocusLocationChanging={(cell: any) => {\n const datatypeId = cell?.columnId + cell?.rowId;\n (window as any).gridEditId = datatypeId;\n if (typeof cell?.rowId == \"string\" && cell?.rowId?.indexOf(\"header-\") > -1) {\n return false;\n }\n if (reactGridProps?.isRowHighlights && cell?.columnId) {\n onHightsRow(cell, rows);\n }\n if ([\"_$actions\", \"rowSelection\", \"ExpandListTemplate\"]?.includes(cell?.columnId)) {\n return false;\n }\n if (reactGridProps?.onFocusLocationChanging) {\n return reactGridProps?.onFocusLocationChanging(cell, rows);\n }\n\n return cell;\n }}\n customCellTemplates={{\n ExpandListTemplate: WidthWrapHoc(ExpandListTemplate),\n ...baseTemplate,\n ...customCellTemplates,\n ...headerCustomTemplate,\n _$actions: WidthWrapHoc(ActionDom),\n rowSelection: WidthWrapHoc(CheckBoxDom),\n // Input: WidthWrapHoc(TextTemplate,props),\n Number: WidthWrapHoc(NumberTemplate, props),\n }}\n />\n {dataSource?.length <= 0 && (\n <div className=\"grid-container-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n )}\n </div>\n </Spin>\n );\n}\n\nexport default forwardRef(CellEditTable);\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["DatePicker","Input","TimePicker","childAntdComponent","MonthPicker","QuarterPicker","RangePicker","WeekPicker","YearPicker","Password","Search","TextArea","isTriggerBlur","useEffect","useMemo","useRef","useState","Cell","CellTemplate","Compatible","Uncertain","UncertainCompatible","getCellProperty","getCharFromKey","isAlphaNumericKey","isNavigationKey","keyCodes","InfoCircleOutlined","Popover","isTriggerBlur","OptionType","label","value","isDisabled","BaseCell","selectedValue","values","DIProps","onCellChanged","args","cell","Record","isInEditMode","WidthWrapHoc","WrapComponent","props","createBaseCellTemplate","getCompatibleCell","uncertainCell","parseFloat","NaN","text","update","cellToMerge","selectedValueFromText","some","val","undefined","getClassName","handleCompositionEnd","eventData","enableEditMode","render","commit","React","ReactNode","edit","setEdit","open","setOpen","datatypeId","columnId","rowId","comValue","setComValue","isValidator","setIsValidator","comValueInit","openTimerRef","wrapRef","HTMLDivElement","paddingCacheRef","measureContentHeight","container","Element","els","Array","from","children","HTMLElement","length","clientHeight","top","Infinity","bottom","c","r","getBoundingClientRect","cs","getComputedStyle","mt","marginTop","mb","marginBottom","Math","min","max","ceil","el","current","onRowHeightChange","indexOf","child","firstElementChild","target","paddingTop","paddingBottom","extra","ro","ResizeObserver","forEach","observe","h","disconnect","onClick","e","window","gridEditId","document","addEventListener","removeEventListener","onValidator","flag","isVerify","it","validatorList","pattern","test","isArray","timer","setTimeout","popup","querySelector","stopPointer","PointerEvent","stopPropagation","clearTimeout","onBlurSubmit","targetValue","dataPickerProps","includes","type","onOpenChange","isOpen","uploadEdit","nonEditable","style","width","display","alignItems","options","onChange","onBlur","onPointerDown","onKeyDown","keyCode","getField","validatorMessage","useMemo","getVal","GetBaseTemplate","props","pattern","cell","componentProps","Com","cellRender","echoValue","getField","enum","values","name","text","Slot","input","focus","preventScroll","Input","GetBaseTemplate","NumberCellTemplate","props","$","_c","t0","componentProps","t1","type","t2","useEffect","useState","MinusCircleOutlined","PlusCircleOutlined","ExpandListTemplate","props","$","_c","cell","setExpandKeys","expandKeys","rowKey","setNewDataSource","record","expand","setExpand","t0","isExpand","pre","tempPre","childrenIds","children","map","el","findIndex","el_0","filterList","filter","el_1","includes","length","splice","el_2","onExpand","t1","t2","t3","t4","preExpandKeys","el_3","onClickExpand","t5","width","getNavigatorLanguage","navigator","language","getLocaleSeparators","locale","testNumber","localeFormattedNumber","Intl","NumberFormat","format","thousandsSeparator","split","decimalSeparator","parseLocaleNumber","stringNumber","trim","NaN","normalizedStringNumber","replace","numberString","RegExp","trimmedNumberString","length","Number","isReactElement","value","getTitle","item","title","props","children","String","convertColumnsToRows","columns","headerRowHeight","getLeaves","cols","reduce","acc","col","getDepth","depth","max","Math","leafColumns","totalDepth","totalCols","buildTree","map","hasChildren","rowspan","colspan","_depth","_isLeaf","leafCount","tree","rows","Array","from","_","i","rowId","height","cells","handleType","includes","type","dataIndex","fillRow","nodes","rowIndex","forEach","node","cell","text","width","style","background","display","justifyContent","sorter","key","push","row","newCells","colIndex","cellIndex","currentCell","leaf","undefined","lastRow","lastRowCells","leafIndex","index","existingCell","find","flattenColumns","result","traverse","k","rest","useCallback","useEffect","useRef","useState","useDynamicHeight","props","wrapRef","rowHeight","setRows","pendingHeightsRef","flushHeightsRafRef","scrollMemoryRef","top","left","scrollProtectUntilRef","rowsRef","rowHeights","setRowHeights","SCROLL_RESET_GUARD_MS","armScrollProtect","duration","el","current","scrollTop","scrollLeft","Math","max","Date","now","restoreScroll","requestAnimationFrame","root","patchHiddenFocus","querySelectorAll","forEach","__focusScrollPatched","rawFocus","focus","bind","options","FocusOptions","preventScroll","mo","MutationObserver","observe","childList","subtree","disconnect","__scrollGuard","desc","Object","getOwnPropertyDescriptor","Element","prototype","PropertyDescriptor","MAX_CORRECTION","defineProperty","configurable","get","call","set","v","next","Number","cur","delta","abs","console","warn","Error","stack","rawScrollTo","scrollTo","x","y","rawScrollBy","scrollBy","onScroll","addEventListener","removeEventListener","flushPendingHeights","undefined","pending","keys","length","prev","rowId","cols","rowChanged","colId","h","handleRowHeightChange","height","columnId","rId","String","cId","row","cancelAnimationFrame","Array","isArray","changed","map","indexOf","heightMap","values","result","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","Checkbox","Empty","Spin","ReactGrid","TextTemplate","antdComponents","customComponents","WidthWrapHoc","NumberTemplate","ExpandListTemplate","convertColumnsToRows","flattenColumns","isReactElement","childAntdComponent","GetBaseTemplate","useDynamicHeight","CellEditTableProps","columns","dataSource","formulaConfig","onChange","v","reactGridProps","onEditSubmit","headerRowHeight","rowHeight","reactGridStyle","className","Slots","rowSelection","rowKey","query","loading","isExpand","getList","onRow","ri","ci","CellEditTable","props","ref","headerList","setHeaderList","rows","setRows","initRowsRef","tableColumns","setTableColumns","selectedRowKeys","setSelectedRowKeys","newDataSource","setNewDataSource","expandKeys","setExpandKeys","headerCustomTemplate","setHeaderCustomTemplate","highlights","setHighlights","highlightsRowIdRef","gridRef","wrapRef","HTMLDivElement","currentCell","expandKeysRef","current","handleRowHeightChange","armScrollProtect","restoreScroll","SCROLL_RESET_GUARD_MS","rowsRef","rowHeights","handleDataSource","arr","level","forEach","el","children","flattenWithExpansion","result","loop","list","item","push","length","includes","validRowIds","map","r","rowId","handleArrayToObj","record","cells","fieldList","obj","id","columnId","text","value","selectedValue","type","Array","isArray","unshift","width","key","nonEditable","style","background","display","justifyContent","newColumns","index","dataIndex","name","headTemplate","handleHeader","title","Com","columnsIds","tempDataSource","heightMap","dynamicRowHeight","Object","keys","Math","max","values","Number","height","ind","newCell","columnsItem","cellItem","it","setCellData","setCellStyle","pattern","String","onCell","cellProps","onRowHeightChange","mergerList","handleCellsChanged","changes","batchQuery","prevRows","nextRows","row","change","changeRowIdx","findIndex","changeColumnIdx","resultColumnIdx","err","baseTemplate","mergeTemplate","newMergeTemplate","NewCom","newComProps","ActionDom","rowData","find","cell","e","stopPropagation","tableActionsSlot","actionPrefixSlot","actionCenterSlot","actionSuffixSlot","flattenDataSource","CheckBoxDom","filter","getCheckboxProps","disabled","checkboxProps","componentProps","target","checked","newSelectedRowKeys","pageNum","customCellTemplates","templatesObj","onHightsRow","borderColor","datatypeId","window","gridEditId","indexOf","isRowHighlights","onFocusLocationChanging","_$actions","PRESENTED_IMAGE_SIMPLE"],"sources":["../src/common/childAntdComponent.ts","../src/common/WidthWrapHoc.tsx","../src/Template/GetBaseTemplate.tsx","../src/Template/NumberCellTemplate/index.tsx","../src/Template/ExpandListTemplate/index.tsx","../src/common/utils.ts","../src/common/useDynamicHeight.ts","../src/index.tsx"],"sourcesContent":["import { DatePicker, Input, TimePicker } from \"antd\";\n\nexport const childAntdComponent: any = {\n \"DatePicker.MonthPicker\": DatePicker.MonthPicker,\n \"DatePicker.QuarterPicker\": DatePicker.QuarterPicker,\n \"DatePicker.RangePicker\": DatePicker.RangePicker,\n \"DatePicker.TimePicker\": DatePicker.TimePicker,\n \"DatePicker.WeekPicker\": DatePicker.WeekPicker,\n \"DatePicker.YearPicker\": DatePicker.YearPicker,\n \"Input.Password\": Input.Password,\n \"Input.Search\": Input.Search,\n \"Input.TextArea\": Input.TextArea,\n \"TimePicker.RangePicker\": TimePicker.RangePicker,\n};\nexport const isTriggerBlur = [\n \"DatePicker\",\n \"DatePicker.MonthPicker\",\n \"DatePicker.QuarterPicker\",\n \"DatePicker.RangePicker\",\n \"DatePicker.TimePicker\",\n \"DatePicker.WeekPicker\",\n \"DatePicker.YearPicker\",\n \"TimePicker.RangePicker\",\n];\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type {\n Cell,\n CellTemplate,\n Compatible,\n Uncertain,\n UncertainCompatible,\n} from \"@silevis/reactgrid\";\nimport {\n getCellProperty,\n getCharFromKey,\n isAlphaNumericKey,\n isNavigationKey,\n keyCodes,\n} from \"@silevis/reactgrid\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { Popover } from \"antd\";\nimport { isTriggerBlur } from \"./childAntdComponent\";\nexport type OptionType = {\n label: string;\n value: string | number;\n isDisabled?: boolean;\n};\n\nexport interface BaseCell extends Cell {\n selectedValue?: string;\n value: string | number;\n values: OptionType[];\n isDisabled?: boolean;\n}\ninterface DIProps {\n onCellChanged: (...args: any[]) => void;\n cell: Record<string, any>;\n isInEditMode?: boolean;\n}\n\nexport const WidthWrapHoc = (WrapComponent: any, props = {}) => {\n class createBaseCellTemplate implements CellTemplate<BaseCell> {\n getCompatibleCell(uncertainCell: Uncertain<BaseCell>): Compatible<BaseCell> {\n let values: any;\n try {\n values = getCellProperty(uncertainCell, \"values\", \"object\");\n } catch {\n values = [];\n }\n const value = uncertainCell.selectedValue ? parseFloat(uncertainCell.selectedValue) : NaN;\n let isDisabled = true;\n try {\n isDisabled = getCellProperty(uncertainCell, \"isDisabled\", \"boolean\");\n } catch {\n isDisabled = false;\n }\n const selectedValue = uncertainCell.selectedValue;\n const text = selectedValue || \"\";\n return { ...uncertainCell, selectedValue, text, value, values, isDisabled };\n }\n\n update(\n cell: Compatible<BaseCell>,\n cellToMerge: UncertainCompatible<BaseCell>,\n ): Compatible<BaseCell> {\n const selectedValueFromText = cell.values.some((val: any) => val.value == cellToMerge.text)\n ? cellToMerge.text\n : cellToMerge?.text || undefined;\n\n return this.getCompatibleCell({\n ...cell,\n selectedValue: selectedValueFromText,\n });\n }\n\n getClassName(cell: Compatible<BaseCell>, isInEditMode: boolean): string {\n return \"\";\n }\n /** enableEditMode为true 时输入中文会报错 */\n handleCompositionEnd(\n cell: Compatible<BaseCell>,\n eventData: any,\n ): { cell: Compatible<BaseCell>; enableEditMode: boolean } {\n return {\n cell: {\n ...cell,\n },\n enableEditMode: false,\n };\n }\n /** render 不能抽出来组件,否则点击会失效 */\n render(\n cell: any,\n isInEditMode: boolean,\n onCellChanged: (cell: any, commit: boolean) => void,\n ): React.ReactNode {\n const [edit, setEdit] = useState<boolean>(false);\n const [open, setOpen] = useState<boolean>(false);\n const datatypeId = cell?.columnId + cell?.rowId;\n const [comValue, setComValue] = useState(cell?.text);\n const [isValidator, setIsValidator] = useState(false);\n const comValueInit = useRef<any>(cell?.text);\n const openTimerRef = useRef<any>();\n const wrapRef = useRef<HTMLDivElement>(null);\n /** 容器垂直 padding 缓存(运行时不变,避免每次上报都强制样式计算) */\n const paddingCacheRef = useRef<number | null>(null);\n\n /**\n * 通用单元格内容高度上报:内容换行/增减时自动撑开所在行(表头行、角标跳过)。\n * 测量对象是\"内容子树的真实占用高度\"而非容器 scrollHeight —— 容器带 min-height:100%\n * (撑起双击热区)或子容器残留 inline 高度时(如上传组件编辑态的 antd 动画容器),\n * scrollHeight 会取\"容器自身高度\"与\"内容高度\"的较大者,把空白也测进去;\n * 改为累加可见子元素的 margin-box 占据区间(首个子元素 margin 上缘 → 末个 margin 下缘),\n * 只反映真实内容,双向(撑开/回落)测量都真实,行高一次到位、无渐变动画。\n */\n const measureContentHeight = (container: Element): number => {\n const els = Array.from(container.children) as HTMLElement[];\n if (els.length === 0) return (container as HTMLElement).clientHeight;\n let top = Infinity;\n let bottom = -Infinity;\n for (const c of els) {\n const r = c.getBoundingClientRect();\n const cs = getComputedStyle(c);\n const mt = parseFloat(cs.marginTop) || 0;\n const mb = parseFloat(cs.marginBottom) || 0;\n top = Math.min(top, r.top - mt);\n bottom = Math.max(bottom, r.bottom + mb);\n }\n return Math.max(0, Math.ceil(bottom - top));\n };\n\n useEffect(() => {\n const el = wrapRef.current;\n\n const onRowHeightChange = cell?.onRowHeightChange;\n if (!el || !onRowHeightChange) return;\n if (cell?.rowId == null) return;\n if (typeof cell?.rowId === \"string\" && cell.rowId.indexOf(\"header-\") === 0) return;\n\n const child = el.firstElementChild;\n const target: Element = child || el;\n if (paddingCacheRef.current === null) {\n const cs = getComputedStyle(el);\n paddingCacheRef.current =\n (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0);\n }\n // 测子元素时需补回容器垂直 padding;退化测容器自身时 clientHeight 已含 padding\n const extra = child ? paddingCacheRef.current : 0;\n const ro = new ResizeObserver(() => {\n // 内容子元素可能新增(如上传列表新增条目),补充观察,确保其尺寸变化也能触发重测\n Array.from(target.children).forEach((c) => ro.observe(c));\n const h = measureContentHeight(target) + extra;\n onRowHeightChange(cell?.rowId, h, cell?.columnId);\n });\n ro.observe(target);\n Array.from(target.children).forEach((c) => ro.observe(c));\n return () => ro.disconnect();\n }, [cell?.rowId, cell?.columnId, cell?.onRowHeightChange, edit, comValue]);\n useEffect(() => {\n setComValue(cell?.text);\n comValueInit.current = cell?.text;\n }, [cell?.text]);\n\n useEffect(() => {\n // 处理下拉选项弹层失焦逻辑\n function onClick(e) {\n if ((window as any).gridEditId != datatypeId) {\n setEdit(false);\n }\n }\n document.addEventListener(\"click\", onClick);\n return () => {\n document.removeEventListener(\"click\", onClick);\n };\n }, []);\n\n /** 校验触发器 */\n const onValidator = (val) => {\n let flag = false;\n let isVerify = false;\n for (const it of cell?.validatorList || []) {\n if (it?.pattern?.test(val)) {\n flag = true;\n }\n break;\n }\n isVerify = !flag && Array.isArray(cell?.validatorList) && cell?.validatorList?.length > 0;\n setIsValidator(isVerify);\n };\n\n useEffect(() => {\n if (!open) return;\n // 等下一帧,弹窗DOM渲染完成\n const timer = setTimeout(() => {\n const popup: any = document.querySelector(\".ant-picker-dropdown\");\n if (!popup) return;\n\n const stopPointer = (e: PointerEvent) => {\n // 阻断事件往上冒泡到document\n e.stopPropagation();\n };\n // 捕获阶段监听 pointerdown!!必须是pointerdown不是mousedown\n popup.addEventListener(\"pointerdown\", stopPointer, true);\n\n // 清理函数\n return () => {\n popup.removeEventListener(\"pointerdown\", stopPointer, true);\n };\n }, 0);\n\n return () => clearTimeout(timer);\n }, [open]);\n\n /** 失焦提交 */\n const onBlurSubmit = () => {\n const targetValue = comValueInit.current;\n onCellChanged(\n this.getCompatibleCell({\n ...cell,\n text: targetValue,\n selectedValue: targetValue,\n }),\n true,\n );\n };\n\n const dataPickerProps = useMemo(() => {\n if (isTriggerBlur?.includes(cell?.type)) {\n return {\n open: open,\n /** 兼容datapicker 闪烁问题 */\n onOpenChange: (isOpen) => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n }\n openTimerRef.current = setTimeout(() => {\n setOpen(isOpen);\n }, 80);\n },\n };\n }\n return {};\n }, [cell]);\n /** 监听上传组件失焦回调 */\n useEffect(() => {\n if (\n !edit &&\n cell.type == \"Upload\" &&\n (window as any).uploadEdit &&\n (window as any).uploadEdit == datatypeId\n ) {\n (window as any).uploadEdit = null;\n onBlurSubmit();\n }\n }, [edit, comValue]);\n\n return (\n <div\n ref={wrapRef}\n className={`base-hoc ${edit ? \"base-hoc-edit\" : \"\"}`}\n onDoubleClick={(e) => {\n if (cell?.nonEditable) {\n return;\n }\n if (cell.type === \"Upload\") {\n (window as any).uploadEdit = datatypeId;\n }\n setEdit(true);\n }}\n >\n <WrapComponent\n {...props}\n onPointerDown={(e) => e.stopPropagation()}\n componentProps={{\n style: { width: \"100%\", display: \"flex\", alignItems: \"center\" },\n value: comValue,\n options: cell.values,\n onChange: (e) => {\n const targetValue = e?.target?.value ?? e;\n setComValue(targetValue);\n comValueInit.current = targetValue;\n onValidator(targetValue);\n },\n onBlur: (e) => {\n onBlurSubmit();\n if (!isTriggerBlur?.includes(cell?.type)) {\n setEdit(false);\n }\n },\n\n onPointerDown: (e) => {\n e.stopPropagation();\n },\n onKeyDown: (e) => {\n if (isAlphaNumericKey(e.keyCode) || isNavigationKey(e.keyCode)) e.stopPropagation();\n },\n ...dataPickerProps,\n ...((cell?.getField && cell?.getField()[\"x-component-props\"]) || {}),\n }}\n pattern={edit ? \"\" : \"readPretty\"}\n cell={cell}\n ></WrapComponent>\n {isValidator && (\n <Popover content={cell?.validatorMessage ?? \"该字段不合法\"}>\n <InfoCircleOutlined className=\"validator-icon\" />\n </Popover>\n )}\n </div>\n );\n }\n }\n\n return new createBaseCellTemplate();\n};\n","import { useMemo } from \"react\";\nimport { getVal } from \"@hzab/utils/src/formily/field\";\nexport const GetBaseTemplate = (props) => {\n const { pattern, cell, componentProps, Com, cellRender } = props;\n\n const echoValue = useMemo(() => {\n if (!cell?.getField) {\n return;\n }\n return getVal(\n { ...(cell?.getField && cell?.getField()), enum: cell?.getField()?.enum || cell?.values },\n { [cell?.getField && cell?.getField().name]: cell.text },\n );\n }, [cell]);\n if (cellRender && cellRender(props)) {\n const Slot = cellRender;\n return <Slot {...props}></Slot>;\n }\n\n return (\n <div className=\"base-hoc-inner\">\n {pattern == \"readPretty\" ? (\n <div>{echoValue}</div>\n ) : (\n <Com\n className=\"rg-input\"\n ref={(input) => {\n if (input) {\n input.focus({ preventScroll: true });\n }\n }}\n {...componentProps}\n />\n )}\n </div>\n );\n};\n","import { Input } from \"antd\";\nimport { GetBaseTemplate } from \"../GetBaseTemplate\";\nimport \"./index.less\";\nconst NumberCellTemplate = (props: any) => {\n return (\n <GetBaseTemplate\n {...props}\n componentProps={{\n ...props?.componentProps,\n type: \"number\",\n }}\n Com={Input}\n ></GetBaseTemplate>\n );\n};\nexport default NumberCellTemplate;\n","import { useEffect, useState } from \"react\";\nimport { MinusCircleOutlined, PlusCircleOutlined } from \"@ant-design/icons\";\nimport \"./index.less\";\n\nexport const ExpandListTemplate = (props) => {\n const { cell } = props;\n const { Slots, setExpandKeys, expandKeys, rowKey, setNewDataSource, record, columnId } = cell;\n const [expand, setExpand] = useState<boolean>(false);\n const onExpand = (isExpand) => {\n setNewDataSource((pre) => {\n const tempPre = [...pre];\n const childrenIds = record?.children?.map((el) => el?.[rowKey]);\n if (isExpand) {\n const findIndex = pre?.findIndex((el) => el?.[rowKey] == record?.[rowKey]);\n const filterList = pre?.filter((el) => childrenIds?.includes(el?.[rowKey])) || [];\n if (filterList?.length == 0) {\n tempPre.splice(findIndex + 1, 0, ...(record?.children || []));\n }\n return [...tempPre];\n }\n\n return pre?.filter((el) => !childrenIds?.includes(el?.[rowKey]));\n });\n };\n useEffect(() => {\n if (expandKeys?.includes(record?.[rowKey])) {\n setExpand(true);\n onExpand(true);\n }\n }, [cell?.record]);\n\n /** 展开关闭子项 */\n const onClickExpand = () => {\n setExpandKeys((preExpandKeys) => {\n if (preExpandKeys?.includes(record?.[rowKey])) {\n return preExpandKeys?.filter((el) => el != record?.[rowKey]);\n }\n return [...preExpandKeys, record?.[rowKey]];\n });\n setExpand(!expand);\n onExpand(!expand);\n };\n return (\n <div className=\"expandList-template\">\n {record?.children ? (\n <>\n {!expand ? (\n <PlusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n ) : (\n <MinusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n )}\n </>\n ) : (\n <div style={{ width: 14 }}></div>\n )}\n </div>\n );\n};\n","export const getNavigatorLanguage = (): string => navigator.language || \"en-US\";\n\nfunction getLocaleSeparators(locale: string) {\n const testNumber = 123456.789;\n const localeFormattedNumber = Intl.NumberFormat(locale).format(testNumber);\n\n // Get the thousands separator of the locale\n const thousandsSeparator = localeFormattedNumber.split(\"123\")[1][0];\n\n // Get the decimal separator of the locale\n const decimalSeparator = localeFormattedNumber.split(\"123\")[1][4];\n return { thousandsSeparator, decimalSeparator };\n}\nexport function parseLocaleNumber(stringNumber: string, locale = getNavigatorLanguage()): number {\n if (!stringNumber.trim()) return NaN;\n const { thousandsSeparator, decimalSeparator } = getLocaleSeparators(locale);\n const normalizedStringNumber = stringNumber.replace(/\\u00A0/g, \" \"); // Replace non-breaking space with normal space\n const numberString = normalizedStringNumber\n .replace(new RegExp(`[${thousandsSeparator}\\\\s]`, \"g\"), \"\") // Replace thousands separator and white-space\n .replace(new RegExp(`\\\\${decimalSeparator}`, \"g\"), \".\"); // Replace decimal separator\n\n const trimmedNumberString = numberString.replace(/^(?!-)\\D+|\\D+$/g, \"\"); // Remove characters before first and after last number, but keep negative sign\n if (trimmedNumberString === null || trimmedNumberString.trim().length === 0) {\n return NaN;\n }\n return Number(trimmedNumberString);\n}\n\nexport function isReactElement(value) {\n return value !== null && typeof value === \"object\";\n}\nconst getTitle = (item) => {\n return typeof item?.title == \"function\"\n ? isReactElement(item?.title())\n ? item?.title()?.props.children\n : String(item?.title()) || \"\"\n : String(item?.title) || \"\";\n};\n\nexport function convertColumnsToRows(columns, headerRowHeight = 40) {\n // 获取所有叶子节点\n const getLeaves = (cols) => {\n return cols.reduce((acc, col) => {\n if (col.children?.length) {\n return [...acc, ...getLeaves(col.children)];\n }\n return [...acc, col];\n }, []);\n };\n\n // 计算最大深度\n const getDepth = (cols, depth = 1) => {\n return cols.reduce((max, col) => {\n if (col.children?.length) {\n return Math.max(max, getDepth(col.children, depth + 1));\n }\n return Math.max(max, depth);\n }, depth);\n };\n\n const leafColumns = getLeaves(columns);\n const totalDepth = getDepth(columns);\n const totalCols = leafColumns.length;\n\n // 构建表头树\n const buildTree = (cols, depth = 0) => {\n return cols.map((col) => {\n const hasChildren = col.children?.length > 0;\n if (!hasChildren) {\n return {\n ...col,\n rowspan: totalDepth - depth,\n colspan: 1,\n _depth: depth,\n _isLeaf: true,\n };\n }\n const leafCount = getLeaves(col.children).length;\n return {\n ...col,\n rowspan: 1,\n colspan: leafCount,\n _depth: depth,\n _isLeaf: false,\n children: buildTree(col.children, depth + 1),\n };\n });\n };\n\n const tree = buildTree(columns, 0);\n\n // 初始化行\n const rows: any = Array.from({ length: totalDepth }, (_, i) => ({\n rowId: `header-${i}`,\n height: headerRowHeight,\n cells: [],\n }));\n\n const handleType = (item) => {\n if ([\"rowSelection\", \"ExpandListTemplate\"]?.includes(item?.type)) {\n return item?.type;\n }\n\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n return `${item?.dataIndex}`;\n }\n return \"header\";\n };\n\n // 递归填充行\n const fillRow = (nodes, rowIndex = 0) => {\n nodes.forEach((node) => {\n if (node._isLeaf) {\n const cell = {\n ...node,\n type: handleType(node),\n text: getTitle(node),\n dataIndex: node.dataIndex,\n width: node.width,\n rowspan: node.rowspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n };\n if (node.sorter) cell.sorter = node.sorter;\n if (node.key) cell.key = node.key;\n rows[rowIndex].cells.push(cell);\n } else {\n // 父节点:添加colspan\n rows[rowIndex].cells.push({\n ...node,\n type: handleType(node),\n text: getTitle(node),\n colspan: node.colspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n if (node.children) {\n fillRow(node.children, rowIndex + 1);\n }\n }\n });\n };\n\n fillRow(tree, 0);\n\n // 补全每一行的cell,使长度一致\n rows.forEach((row, rowIndex) => {\n const newCells = [];\n let colIndex = 0;\n let cellIndex = 0;\n\n while (colIndex < totalCols) {\n const currentCell = row.cells[cellIndex];\n\n if (!currentCell) {\n // 如果当前行没有足够的cell,从叶子节点补充\n const leaf = leafColumns[colIndex];\n newCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: rowIndex === totalDepth - 1 ? 1 : undefined,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n colIndex++;\n cellIndex++;\n continue;\n }\n\n const colspan = currentCell.colspan || 1;\n const rowspan = currentCell.rowspan || 1;\n\n // 检查当前cell是否应该出现在这一行\n // 如果rowspan > 1,表示它跨多行,但只在第一行出现\n if (rowspan > 1 && rowIndex > 0) {\n // 这个cell不应该出现在当前行,跳过\n colIndex += colspan;\n cellIndex++;\n continue;\n }\n\n // 如果当前cell有colspan,需要补全后面的空cell\n newCells.push(currentCell);\n colIndex += colspan;\n cellIndex++;\n\n // 如果colspan > 1,后面补充空cell\n for (let i = 1; i < colspan; i++) {\n newCells.push({\n type: \"header\",\n text: \"\",\n });\n }\n }\n\n row.cells = newCells;\n });\n\n // 最后一行的特殊处理:确保所有叶子节点都有对应的cell\n const lastRow = rows[totalDepth - 1];\n const lastRowCells = [];\n const leafIndex = 0;\n\n // 遍历所有叶子节点\n leafColumns.forEach((leaf, index) => {\n // 检查是否已经在lastRow中有对应的cell\n const existingCell = lastRow.cells.find(\n (cell) => cell.dataIndex === leaf.dataIndex && cell.text === leaf.title,\n );\n\n if (existingCell) {\n lastRowCells.push(existingCell);\n } else {\n // 创建新的cell\n lastRowCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: 1,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n });\n\n lastRow.cells = lastRowCells;\n\n // 确保所有行的cell数量等于totalCols\n rows.forEach((row) => {\n // 如果cell数量少于totalCols,补充空cell\n while (row.cells.length < totalCols) {\n row.cells.push({\n type: \"header\",\n text: \"\",\n });\n }\n });\n\n return rows;\n}\n\nexport function flattenColumns(columns: any[]) {\n const result: any[] = [];\n\n function traverse(cols) {\n cols.forEach((col) => {\n if (col.children && col.children.length > 0) {\n traverse(col.children);\n } else {\n // 创建新对象,只保留需要的属性\n const { title, dataIndex, key, width, sorter, k, ...rest } = col;\n\n result.push({\n type: \"Input\",\n dataIndex,\n title,\n ...(key && { key }),\n ...(width && { width }),\n ...(sorter && { sorter }),\n ...(k && { k }),\n // 如果需要保留其他属性\n ...rest,\n });\n }\n });\n }\n\n traverse(columns);\n return result;\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport const useDynamicHeight = (props) => {\n const { wrapRef, rowHeight, setRows } = props\n /** 高度上报按帧合并缓冲,一帧内多次上报只触发一次 state 更新 */\n const pendingHeightsRef = useRef<any>({});\n const flushHeightsRafRef = useRef<any>();\n /** 用户滚动位置记忆:持续跟踪,供编辑/重建后恢复 */\n const scrollMemoryRef = useRef({ top: 0, left: 0 });\n /** 滚动重置保护窗口截止时间戳:窗口内\"回到顶部/最左\"的程序化重置被纠正回记忆位置 */\n const scrollProtectUntilRef = useRef(0);\n /** rows 的镜像 ref:updater 执行时机不确定,编辑等纯计算需读取即时值 */\n const rowsRef = useRef<any>([]);\n /** 附件等动态行高:rowId -> { [columnId]: height },同行多附件列时取最大值 */\n const [rowHeights, setRowHeights] = useState<any>({});\n /** 编辑提交时开启的长保护窗(ms),覆盖 onEditSubmit → getList 全量刷新 → rows 重建的完整链路 */\n const SCROLL_RESET_GUARD_MS = 3000;\n\n const armScrollProtect = useCallback((duration = 500) => {\n const el = wrapRef.current;\n if (!el) return;\n scrollMemoryRef.current = { top: el.scrollTop, left: el.scrollLeft };\n // 只延长不缩短:编辑链路开的 3000ms 长窗不能被 rows 重建 effect 的 500ms 短窗覆盖\n scrollProtectUntilRef.current = Math.max(\n scrollProtectUntilRef.current || 0,\n Date.now() + duration,\n );\n }, []);\n\n const restoreScroll = useCallback(() => {\n const el = wrapRef.current;\n if (!el) return;\n const { top, left } = scrollMemoryRef.current;\n // 双层 rAF:等 ReactGrid componentDidUpdate 的聚焦滚动写入先执行,再恢复用户位置\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (el.scrollTop !== top) el.scrollTop = top;\n if (el.scrollLeft !== left) el.scrollLeft = left;\n });\n });\n }, []);\n /**\n * reactgrid 每次 pointerdown(点击单元格)都会对隐藏的键盘捕获 input(.rg-hidden-element)\n * 调用 focus();该元素 position:fixed,静态位置落在滚动内容末尾(视口下边缘之外),\n * 浏览器原生 scroll-into-view 会把表格滚动容器往下带一点(数据多到出现滚动条时可见)。\n * 此处统一改为 preventScroll,焦点行为不变,仅禁止滚动。\n */\n useEffect(() => {\n const root = wrapRef.current;\n if (!root) return;\n const patchHiddenFocus = () => {\n root.querySelectorAll(\".rg-hidden-element\").forEach((el: any) => {\n if (el.__focusScrollPatched) return;\n el.__focusScrollPatched = true;\n const rawFocus = el.focus.bind(el);\n el.focus = (options?: FocusOptions) => rawFocus({ preventScroll: true, ...(options || {}) });\n });\n };\n patchHiddenFocus();\n const mo = new MutationObserver(patchHiddenFocus);\n mo.observe(root, { childList: true, subtree: true });\n return () => mo.disconnect();\n }, []);\n\n /**\n * 滚动守卫:点击单元格时 reactgrid 会在 componentDidUpdate 里程序化写 scrollTop\n * 做\"聚焦行跟随\"(scrollIntoView)。动态行高在编辑态切换时被反复重新测量、行高收敛\n * 过程中每次状态更新都会触发一次 1~2px 的修正性滚动(focus-scroll-into-view 的效果)。\n * 用户滚轮/触摸滚动是原生行为、不经过 JS scrollTop 赋值,因此这里拦截元素上的\n * scrollTop/scrollTo/scrollBy 写入只影响程序化滚动:忽略 ≤3px 的微量修正,\n * 大步长滚动(方向键导航等)不受影响。\n */\n useEffect(() => {\n const el: any = wrapRef.current;\n if (!el || el.__scrollGuard) return;\n el.__scrollGuard = true;\n const desc = Object.getOwnPropertyDescriptor(Element.prototype, \"scrollTop\") as PropertyDescriptor;\n const MAX_CORRECTION = 3;\n\n Object.defineProperty(el, \"scrollTop\", {\n configurable: true,\n get() {\n return desc.get!.call(el);\n },\n set(v: any) {\n const next = Number(v) || 0;\n const cur = desc.get!.call(el);\n const delta = next - cur;\n if (delta !== 0 && Math.abs(delta) <= MAX_CORRECTION) {\n return;\n }\n if (next === 0 && cur > 50) {\n console.warn(\"[CellEditTable] 检测到程序化滚动回顶部: \", cur, \"->\", next, new Error().stack);\n }\n desc.set!.call(el, next);\n },\n });\n\n const rawScrollTo = el.scrollTo.bind(el);\n el.scrollTo = (x: any, y?: any) => {\n if (typeof x === \"object\" && x !== null) {\n if (x.top != null) {\n const cur = desc.get!.call(el);\n const delta = Number(x.top) - cur;\n if (delta !== 0 && Math.abs(delta) <= MAX_CORRECTION) {\n return;\n }\n }\n return rawScrollTo(x);\n }\n if (typeof x === \"number\" && typeof y === \"number\") {\n const cur = desc.get!.call(el);\n const delta = y - cur;\n if (delta !== 0 && Math.abs(delta) <= MAX_CORRECTION) {\n return;\n }\n }\n return rawScrollTo(x, y);\n };\n\n const rawScrollBy = el.scrollBy.bind(el);\n el.scrollBy = (x: any, y?: any) => {\n if (typeof x === \"object\" && x !== null) {\n if (x.top != null && Math.abs(Number(x.top)) <= MAX_CORRECTION) {\n return;\n }\n return rawScrollBy(x);\n }\n if (typeof x === \"number\" && typeof y === \"number\" && Math.abs(y) <= MAX_CORRECTION) {\n return;\n }\n return rawScrollBy(x, y);\n };\n }, []);\n /**\n * 滚动位置记忆与重置纠正:持续跟踪用户滚动位置;\n * 保护窗口内若出现\"回到顶部/最左\"式跳变(scrollTop 归 0 且记忆位置较深),\n * 视为 ReactGrid/浏览器的程序化重置,立即纠正回记忆位置。\n * 只拦截归零式重置,不影响窗口内的正常滚动与键盘导航滚动。\n */\n useEffect(() => {\n const el: any = wrapRef.current;\n if (!el) return;\n const onScroll = () => {\n if (\n Date.now() < scrollProtectUntilRef.current &&\n ((el.scrollTop === 0 && scrollMemoryRef.current.top > 50) ||\n (el.scrollLeft === 0 && scrollMemoryRef.current.left > 50))\n ) {\n el.scrollTop = scrollMemoryRef.current.top;\n el.scrollLeft = scrollMemoryRef.current.left;\n return;\n }\n scrollMemoryRef.current = { top: el.scrollTop, left: el.scrollLeft };\n };\n el.addEventListener(\"scroll\", onScroll, true);\n return () => el.removeEventListener(\"scroll\", onScroll, true);\n }, []);\n const flushPendingHeights = useCallback(() => {\n flushHeightsRafRef.current = undefined;\n const pending = pendingHeightsRef.current;\n if (Object.keys(pending).length === 0) return;\n pendingHeightsRef.current = {};\n setRowHeights((prev: any) => {\n let next = prev;\n for (const rowId in pending) {\n const cols = { ...(next[rowId] || {}) };\n let rowChanged = false;\n for (const colId in pending[rowId]) {\n const h = pending[rowId][colId];\n if (cols[colId] !== h) {\n cols[colId] = h;\n rowChanged = true;\n }\n }\n if (rowChanged) {\n if (next === prev) next = { ...prev };\n next[rowId] = cols;\n }\n }\n return next === prev ? prev : next;\n });\n }, []);\n\n /** 供单元格(如 Upload 附件)回传内容高度,撑开/恢复所在行高 */\n const handleRowHeightChange = useCallback(\n (rowId: any, height?: number, columnId?: string) => {\n const h = Math.max(Number(height) || 0, rowHeight);\n const rId = String(rowId);\n const cId = columnId || \"_\";\n const row = (pendingHeightsRef.current[rId] = pendingHeightsRef.current[rId] || {});\n if (row[cId] === h) return;\n row[cId] = h;\n if (!flushHeightsRafRef.current) {\n flushHeightsRafRef.current = requestAnimationFrame(flushPendingHeights);\n }\n },\n [rowHeight, flushPendingHeights],\n );\n\n /** 组件卸载时取消未执行的合帧刷新 */\n useEffect(() => {\n return () => {\n if (flushHeightsRafRef.current) cancelAnimationFrame(flushHeightsRafRef.current);\n };\n }, []);\n\n /** 行高变化时仅补丁式更新受影响行的 height,避免整表重建 */\n useEffect(() => {\n setRows((prev: any) => {\n if (!Array.isArray(prev) || prev.length === 0) return prev;\n let changed = false;\n const next = prev.map((row) => {\n // 表头行高度固定,不参与动态行高\n if (typeof row?.rowId === \"string\" && row.rowId.indexOf(\"header-\") === 0) return row;\n const heightMap = rowHeights[row.rowId];\n const h =\n heightMap && Object.keys(heightMap).length > 0\n ? Math.max(rowHeight, ...Object.values(heightMap).map(Number))\n : rowHeight;\n if (row.height === h) return row;\n changed = true;\n return { ...row, height: h };\n });\n const result = changed ? next : prev;\n rowsRef.current = result;\n return result;\n });\n }, [rowHeights, rowHeight]);\n\n return {\n handleRowHeightChange,\n armScrollProtect,\n restoreScroll,\n SCROLL_RESET_GUARD_MS,\n rowsRef,\n rowHeights\n }\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Checkbox, Empty, Spin } from \"antd\";\nimport { ReactGrid } from \"@silevis/reactgrid\";\nimport TextTemplate from \"./Template/TextCellTemplate\";\nimport { antdComponents, customComponents } from \"@hzab/form-render\";\nimport { WidthWrapHoc } from \"./common/WidthWrapHoc\";\nimport NumberTemplate from \"./Template/NumberCellTemplate\";\nimport { ExpandListTemplate } from \"./Template/ExpandListTemplate\";\nimport { convertColumnsToRows, flattenColumns, isReactElement } from \"./common/utils\";\nimport { childAntdComponent } from \"./common/childAntdComponent\";\nimport { GetBaseTemplate } from \"./Template/GetBaseTemplate\";\nimport { useDynamicHeight } from \"./common/useDynamicHeight\";\nimport \"./index.less\";\nimport \"@silevis/reactgrid/styles.css\";\n\ninterface CellEditTableProps {\n columns: any[];\n dataSource: any[];\n formulaConfig?: any;\n onChange?: (v: any) => void;\n reactGridProps?: any;\n onEditSubmit?: (v: any) => void;\n headerRowHeight?: number;\n rowHeight?: number;\n reactGridStyle?: any;\n className?: string;\n Slots?: any;\n rowSelection?: any;\n rowKey?: string;\n query?: any;\n loading?: boolean;\n isExpand?: boolean;\n getList?: () => void;\n onRow?: (v: any, ri: number, ci: number) => void;\n}\n\nfunction CellEditTable(props: CellEditTableProps, ref: any) {\n const {\n columns,\n dataSource,\n formulaConfig,\n onChange,\n reactGridProps = {},\n onEditSubmit,\n headerRowHeight = 44,\n rowHeight = 44,\n reactGridStyle,\n className,\n Slots,\n rowSelection,\n rowKey = \"id\",\n query,\n loading,\n isExpand = false,\n getList,\n onRow,\n } = props;\n\n const [headerList, setHeaderList] = useState<any>([]);\n const [rows, setRows] = useState<any>([]);\n const initRowsRef = useRef<any>([]);\n /** 初始行数据 */\n const [tableColumns, setTableColumns] = useState<any>([]);\n const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]);\n const [newDataSource, setNewDataSource] = useState<any>([]);\n const [expandKeys, setExpandKeys] = useState<any>([]);\n const [headerCustomTemplate, setHeaderCustomTemplate] = useState<any>([]);\n const [highlights, setHighlights] = useState([]);\n const highlightsRowIdRef = useRef();\n const gridRef = useRef<any>();\n const wrapRef = useRef<HTMLDivElement>(null);\n const currentCell = useRef<any>();\n /** 展开态镜像 ref:dataSource 同步 effect 读取最新 expandKeys 用(不加进 deps,\n * 避免展开/收起时又触发全量同步——展开/收起由 ExpandListTemplate 直接维护 newDataSource) */\n const expandKeysRef = useRef<any>([]);\n expandKeysRef.current = expandKeys;\n /** 动态测量单元格高度及滚动逻辑 */\n const {\n handleRowHeightChange,\n armScrollProtect,\n restoreScroll,\n SCROLL_RESET_GUARD_MS,\n rowsRef,\n rowHeights,\n } = useDynamicHeight({\n wrapRef,\n rowHeight,\n setRows,\n });\n\n useImperativeHandle(ref, () => {\n return {\n rows,\n };\n });\n /** 递归处理子节点数据 */\n const handleDataSource = (arr, level = 0) => {\n arr?.forEach((el) => {\n el.level = level + 1;\n if (el?.children) {\n handleDataSource(el?.children, el.level);\n }\n });\n };\n\n /** 洗数据 */\n useEffect(() => {\n handleDataSource(dataSource);\n // 同步时必须保留展开态:把已展开父行的 children 重新插入到对应位置。\n // 直接 setNewDataSource(dataSource) 会把列表重置为仅父行,子行瞬间从矩阵消失,\n // ReactGrid 内部 validateLocation(focusedLocation) 在 rowId 查不到时会被\n // idx-clamp 永久替换成原索引处的其他行,导致聚焦框/整行高亮错位。\n const flattenWithExpansion = (arr: any) => {\n const result: any = [];\n const loop = (list: any) => {\n for (const item of list || []) {\n result.push(item);\n if (item?.children?.length && expandKeysRef.current?.includes(item?.[rowKey])) {\n loop(item.children);\n }\n }\n };\n loop(arr);\n return result;\n };\n setNewDataSource(flattenWithExpansion(dataSource));\n }, [dataSource]);\n\n /** 判断当前选中行是否还存在 */\n useEffect(() => {\n const validRowIds = rows.map((r) => r.rowId);\n if (!validRowIds?.includes(highlightsRowIdRef.current)) {\n setHighlights([]);\n }\n }, [rows]);\n\n /**将数组转为对象 */\n const handleArrayToObj = (item) => {\n const record = item?.cells?.[0]?.record;\n const fieldList = [\"_$actions\", \"rowSelection\"];\n const obj: any = {\n id: item?.rowId,\n };\n item?.cells?.forEach((el) => {\n if (el?.columnId && !fieldList?.includes(el?.columnId)) {\n obj[el?.columnId] = el?.text || el?.value || el?.selectedValue || \"\";\n if (el?.type == \"Number\") {\n obj[el?.columnId] = el?.value;\n }\n }\n });\n\n return {\n ...record,\n ...obj,\n };\n };\n /** 表头 */\n useEffect(() => {\n if (Array.isArray(columns) && columns?.length > 0) {\n if (isExpand) {\n columns.unshift({\n type: \"ExpandListTemplate\",\n width: 14,\n key: \"ExpandListTemplate\",\n nonEditable: true,\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n },\n });\n }\n if (rowSelection) {\n columns.unshift({\n type: \"rowSelection\",\n nonEditable: true,\n width: rowSelection?.width || 30,\n key: \"rowSelection\",\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n\n setHeaderList(convertColumnsToRows(columns, headerRowHeight));\n const newColumns = flattenColumns(columns);\n\n setTableColumns(\n newColumns?.map((item, index) => ({\n ...item,\n columnId: item?.dataIndex || item?.key || item?.name || \"\",\n })),\n );\n }\n }, [columns, rowSelection]);\n\n /** 自定义表头 */\n const headTemplate: any = {};\n const handleHeader = (arr) => {\n arr?.forEach((item) => {\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n const Com = item?.title;\n headTemplate[item?.dataIndex] = WidthWrapHoc(Com);\n }\n if (item?.children) {\n handleHeader(item?.children);\n }\n });\n };\n useEffect(() => {\n handleHeader(columns);\n setHeaderCustomTemplate(headTemplate);\n }, [columns]);\n\n /** 数据行 */\n useEffect(() => {\n const columnsIds = tableColumns?.map((el) => el?.columnId);\n\n const tempDataSource = newDataSource?.map((item, index) => {\n const heightMap = rowHeights[item[rowKey]];\n const dynamicRowHeight =\n heightMap && Object.keys(heightMap).length > 0\n ? Math.max(rowHeight, ...Object.values(heightMap).map(Number))\n : rowHeight;\n return {\n rowId: item[rowKey],\n height: dynamicRowHeight,\n cells: columnsIds?.map((el, ind) => {\n let newCell = {};\n const columnsItem = tableColumns[ind];\n const cellItem = item[el];\n const type: any = columnsItem?.type ?? \"text\";\n //设置单元格颜色及回显\n if (formulaConfig) {\n for (const key in formulaConfig) {\n if (key == el) {\n const it = formulaConfig[key];\n newCell = {\n text: it?.setCellData && it?.setCellData(item),\n value: it?.setCellData && it?.setCellData(item),\n style:\n it?.setCellStyle &&\n it?.setCellStyle((it?.setCellData && it?.setCellData(item)) || item),\n };\n }\n }\n }\n\n return {\n ...columnsItem,\n record: item,\n rowId: item[rowKey] || columnsItem?.type,\n type: type,\n nonEditable: columnsItem?.pattern == \"readPretty\" ? true : columnsItem?.nonEditable,\n text: String(cellItem || \"\"),\n value: cellItem,\n selectedValue: cellItem || \"\",\n style:\n columnsItem?.type == \"rowSelection\"\n ? { display: \"flex\", justifyContent: \"center\" }\n : {},\n ...(((onRow && onRow(item, index, ind)) as any) || {}),\n ...((columnsItem?.onCell && columnsItem?.onCell(item, index, ind)) || {}),\n ...(columnsItem?.cellProps || {}),\n setNewDataSource,\n setExpandKeys,\n rowKey,\n expandKeys,\n Slots,\n onRowHeightChange: handleRowHeightChange,\n ...newCell,\n };\n }),\n };\n });\n const mergerList = [...headerList, ...tempDataSource];\n // 整表重建会触发 ReactGrid 内部程序化写 scrollTop(滚动回顶部):\n // 重建前记录用户滚动位置并开启保护窗口,重建完成后双层 rAF 恢复;\n // 窗口内若再发生归零式重置,由 scroll 监听纠正回记忆位置\n rowsRef.current = mergerList;\n armScrollProtect();\n setRows(mergerList);\n restoreScroll();\n // 注:此处读取的 rowHeights 为本次渲染时的快照;行高的后续增量变化由下方补丁 effect 处理,避免全量重建\n }, [newDataSource, tableColumns, headerList]);\n\n // 单元格编辑回调\n const handleCellsChanged = async (changes) => {\n if (!Array.isArray(changes) || changes.length === 0) return;\n const batchQuery: any = [];\n\n // 基于 rowsRef 当前值在 updater 外纯计算(updater 执行时机不确定且可能执行两次,\n // 不能在 updater 内收集提交数据),一次性生成新数组后同步 rowsRef 再 setRows\n const prevRows = rowsRef.current || [];\n const nextRows = prevRows.map((row) => ({ ...row, cells: [...row.cells] }));\n changes.forEach((change) => {\n const changeRowIdx = nextRows.findIndex((el) => el.rowId == change.rowId);\n const changeColumnIdx = tableColumns.findIndex((el) => el.columnId == change.columnId);\n if (changeRowIdx === -1 || changeColumnIdx === -1) return;\n nextRows[changeRowIdx].cells[changeColumnIdx] = { ...change.newCell };\n currentCell.current = { ...change.newCell };\n batchQuery.push(handleArrayToObj(nextRows[changeRowIdx]));\n if (formulaConfig) {\n for (const key in formulaConfig) {\n const item = formulaConfig[key];\n const resultColumnIdx = tableColumns.findIndex((el) => el.columnId == key);\n if (resultColumnIdx === -1) continue;\n const newCell = {\n ...nextRows[changeRowIdx].cells[resultColumnIdx],\n text: item?.setCellData && item?.setCellData(nextRows[changeRowIdx]),\n value: item?.setCellData && item?.setCellData(nextRows[changeRowIdx]),\n style:\n item?.setCellStyle &&\n item?.setCellStyle(\n (item?.setCellData && item?.setCellData(nextRows[changeRowIdx])) ||\n nextRows[changeRowIdx],\n ),\n };\n nextRows[changeRowIdx].cells[resultColumnIdx] = newCell;\n }\n }\n onChange && onChange(nextRows[changeRowIdx]);\n });\n rowsRef.current = nextRows;\n // 编辑提交后 list-render 的 onEditSubmit 会全量 getList 刷新并触发 rows 重建,\n // 期间任意时刻都可能发生程序化回顶部:开启长保护窗,覆盖 提交→refetch→重建 全链路\n armScrollProtect(SCROLL_RESET_GUARD_MS);\n setRows(nextRows);\n restoreScroll();\n\n // 提交成功后由 list-render 的 onEditSubmit 全量刷新列表;\n // 滚动位置由 rows 重建 effect 中的快照/恢复机制保持;\n // 失败时仍 getList() 回滚恢复\n if (onEditSubmit) {\n try {\n await onEditSubmit(batchQuery);\n } catch (err) {\n getList && getList();\n }\n }\n };\n\n /** 自定义组件注册 */\n const baseTemplate = useMemo(() => {\n const mergeTemplate: any = {\n ...(antdComponents || {}),\n ...(customComponents || {}),\n ...childAntdComponent,\n };\n const newMergeTemplate: any = {};\n for (const key in mergeTemplate) {\n const NewCom = (newComProps) => {\n return <GetBaseTemplate {...newComProps} {...props} Com={mergeTemplate[key]} />;\n };\n newMergeTemplate[key] = WidthWrapHoc(NewCom);\n }\n return newMergeTemplate;\n }, [antdComponents, customComponents]);\n\n const ActionDom = (props) => {\n const rowData = rows?.find((el) => el?.rowId == props?.cell?.rowId);\n return (\n <div onPointerDown={(e) => e.stopPropagation()}>\n {Slots?.tableActionsSlot && <Slots.tableActionsSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionPrefixSlot && <Slots.actionPrefixSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionCenterSlot && <Slots.actionCenterSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionSuffixSlot && <Slots.actionSuffixSlot {...props?.cell} rowData={rowData} />}\n </div>\n );\n };\n function flattenDataSource(arr: any) {\n const result: any = [];\n function loop(list: any) {\n for (const item of list) {\n result.push(item);\n if (item.children && item.children.length) {\n loop(item.children);\n }\n }\n }\n loop(arr);\n return result;\n }\n const CheckBoxDom = (props) => {\n const { record, rowId } = props?.cell;\n\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n\n const checkboxProps =\n typeof rowSelection?.getCheckboxProps === \"function\"\n ? rowSelection?.getCheckboxProps?.(record)\n : {};\n return (\n <Checkbox\n {...props?.componentProps}\n checked={\n rowSelection?.selectedRowKeys?.includes((record && record[rowKey]) || \"\") ||\n (!rowId &&\n rowSelection?.selectedRowKeys?.length == newDataSource?.length &&\n newDataSource?.length > 0)\n }\n indeterminate={\n !rowId &&\n rowSelection?.selectedRowKeys?.length > 0 &&\n rowSelection?.selectedRowKeys?.length < newDataSource?.length\n }\n onChange={(e) => {\n if (e.target.checked && rowId) {\n const newSelectedRowKeys = [...rowSelection?.selectedRowKeys, record[rowKey]];\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(newSelectedRowKeys, rows);\n } else if (!e.target.checked && rowId) {\n const newSelectedRowKeys = rowSelection?.selectedRowKeys?.filter(\n (el) => el != record[rowKey],\n );\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n rowSelection?.selectedRowKeys?.filter((el) => el != record[rowKey]),\n rows,\n );\n } else if (e.target.checked && !rowId) {\n const newSelectedRowKeys = newDataSource?.map((el) => el[rowKey]);\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n newDataSource?.map((el) => el[rowKey]),\n rows,\n );\n } else if (!e.target.checked && !rowId) {\n rowSelection?.onChange([], []);\n }\n }}\n {...checkboxProps}\n ></Checkbox>\n );\n };\n useEffect(() => {\n if (rowSelection) {\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n const rows = newDataSource?.filter((el) => selectedRowKeys?.includes(el[rowKey]));\n rowSelection?.onChange(selectedRowKeys, rows);\n }\n }, [selectedRowKeys, dataSource]);\n useEffect(() => {\n setSelectedRowKeys([]);\n }, [query?.pageNum]);\n\n const customCellTemplates = useMemo(() => {\n const templatesObj: any = {};\n for (const key in reactGridProps?.customCellTemplates) {\n const item = reactGridProps?.customCellTemplates[key];\n templatesObj[key] = WidthWrapHoc(item);\n }\n return templatesObj;\n }, [reactGridProps?.customCellTemplates]);\n\n /** 选中高亮整行 */\n const onHightsRow = (cell: any, rows: any) => {\n const list = rows\n ?.find((el) => el?.rowId == cell?.rowId)\n ?.cells?.map((item) => ({\n columnId: item?.columnId,\n rowId: cell?.rowId,\n className: \"custom-highlights-row\",\n borderColor: \"transparent\",\n }));\n highlightsRowIdRef.current = cell?.rowId;\n setHighlights(list);\n };\n\n return (\n <Spin spinning={loading}>\n <div ref={wrapRef} className={`grid-container ${className}`} style={reactGridStyle}>\n <ReactGrid\n ref={gridRef}\n // 直接渲染 rows state:loading 期间它本就持有完整数据(编辑提交时已 setRows)。\n // 历史上曾用 initRowsRef 快照在 loading 期间代替 rows,但该 ref 由 effect 写入、\n // 晚于渲染消费——loading 翻 true 的当次渲染读到的是过期快照(行数少于当前),\n // 矩阵瞬态缩小、展开子行消失,ReactGrid 内部 validateLocation 的 idx-clamp\n // 会把 focusedLocation 永久替换成错误行(聚焦框/整行高亮错位)。\n rows={rows}\n key={dataSource?.length == 0 ? 0 : 1}\n columns={tableColumns}\n onCellsChanged={handleCellsChanged}\n enableFillHandle={true}\n enableRangeSelection={true}\n horizontalStickyBreakpoint={120}\n {...reactGridProps}\n highlights={reactGridProps?.highlights ?? highlights}\n onFocusLocationChanging={(cell: any) => {\n const datatypeId = cell?.columnId + cell?.rowId;\n (window as any).gridEditId = datatypeId;\n if (typeof cell?.rowId == \"string\" && cell?.rowId?.indexOf(\"header-\") > -1) {\n return false;\n }\n if (reactGridProps?.isRowHighlights && cell?.columnId) {\n onHightsRow(cell, rows);\n }\n if ([\"_$actions\", \"rowSelection\", \"ExpandListTemplate\"]?.includes(cell?.columnId)) {\n return false;\n }\n if (reactGridProps?.onFocusLocationChanging) {\n return reactGridProps?.onFocusLocationChanging(cell, rows);\n }\n\n return cell;\n }}\n customCellTemplates={{\n ExpandListTemplate: WidthWrapHoc(ExpandListTemplate),\n ...baseTemplate,\n ...customCellTemplates,\n ...headerCustomTemplate,\n _$actions: WidthWrapHoc(ActionDom),\n rowSelection: WidthWrapHoc(CheckBoxDom),\n // Input: WidthWrapHoc(TextTemplate,props),\n Number: WidthWrapHoc(NumberTemplate, props),\n }}\n />\n {dataSource?.length <= 0 && (\n <div className=\"grid-container-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n )}\n </div>\n </Spin>\n );\n}\n\nexport default forwardRef(CellEditTable);\n"],"mappings":"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"}
@@ -6,23 +6,23 @@
6
6
  "files": [
7
7
  {
8
8
  "path": "index.cjs",
9
- "size": 17767
9
+ "size": 22243
10
10
  },
11
11
  {
12
12
  "path": "index.css",
13
- "size": 1415
13
+ "size": 1568
14
14
  },
15
15
  {
16
16
  "path": "index.js",
17
- "size": 23967
17
+ "size": 29773
18
18
  },
19
19
  {
20
20
  "path": "index.js.map",
21
- "size": 68605
21
+ "size": 92941
22
22
  },
23
23
  {
24
24
  "path": "project.json",
25
- "size": 195
25
+ "size": 203
26
26
  }
27
27
  ]
28
28
  }
package/dist/project.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@hzab/edit-table",
3
- "version": "0.1.12",
3
+ "version": "0.1.13-alpha.1",
4
4
  "projectId": "56c87c84304d7db0",
5
5
  "initialCommit": "630fe6d6ecb8",
6
- "commit": "a08b69354c2c",
7
- "builtAt": "2026-10-29T10:21:50.731Z"
6
+ "commit": "161732726f23",
7
+ "builtAt": "2026-11-03T06:18:11.563Z"
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzab/edit-table",
3
- "version": "0.1.12",
3
+ "version": "0.1.13-alpha.1",
4
4
  "private": false,
5
5
  "src-direct": true,
6
6
  "description": "可编辑表格",
@@ -46,11 +46,11 @@
46
46
  "typescript": "^5.9.3",
47
47
  "vite": "^8.0.0",
48
48
  "vitest": "^4.1.10",
49
- "@hzab/eslint-config": "^0.0.0",
50
49
  "@hzab/form-render": "^1.7.23",
51
- "@hzab/vite-config": "^0.2.0",
52
- "@hzab/utils": "^1.1.14",
53
- "@hzab/typescript-config": "^0.0.0"
50
+ "@hzab/utils": "^1.1.14-alpha.0",
51
+ "@hzab/typescript-config": "^0.0.0",
52
+ "@hzab/eslint-config": "^0.0.0",
53
+ "@hzab/vite-config": "^0.2.0-alpha.0"
54
54
  },
55
55
  "scripts": {
56
56
  "build": "vite build && tsc -p tsconfig.build.json",
@@ -18,7 +18,7 @@ export const GetBaseTemplate = (props) => {
18
18
  }
19
19
 
20
20
  return (
21
- <div className="base-hoc">
21
+ <div className="base-hoc-inner">
22
22
  {pattern == "readPretty" ? (
23
23
  <div>{echoValue}</div>
24
24
  ) : (
@@ -26,7 +26,7 @@ export const GetBaseTemplate = (props) => {
26
26
  className="rg-input"
27
27
  ref={(input) => {
28
28
  if (input) {
29
- input.focus();
29
+ input.focus({ preventScroll: true });
30
30
  }
31
31
  }}
32
32
  {...componentProps}
@@ -98,6 +98,61 @@ export const WidthWrapHoc = (WrapComponent: any, props = {}) => {
98
98
  const [isValidator, setIsValidator] = useState(false);
99
99
  const comValueInit = useRef<any>(cell?.text);
100
100
  const openTimerRef = useRef<any>();
101
+ const wrapRef = useRef<HTMLDivElement>(null);
102
+ /** 容器垂直 padding 缓存(运行时不变,避免每次上报都强制样式计算) */
103
+ const paddingCacheRef = useRef<number | null>(null);
104
+
105
+ /**
106
+ * 通用单元格内容高度上报:内容换行/增减时自动撑开所在行(表头行、角标跳过)。
107
+ * 测量对象是"内容子树的真实占用高度"而非容器 scrollHeight —— 容器带 min-height:100%
108
+ * (撑起双击热区)或子容器残留 inline 高度时(如上传组件编辑态的 antd 动画容器),
109
+ * scrollHeight 会取"容器自身高度"与"内容高度"的较大者,把空白也测进去;
110
+ * 改为累加可见子元素的 margin-box 占据区间(首个子元素 margin 上缘 → 末个 margin 下缘),
111
+ * 只反映真实内容,双向(撑开/回落)测量都真实,行高一次到位、无渐变动画。
112
+ */
113
+ const measureContentHeight = (container: Element): number => {
114
+ const els = Array.from(container.children) as HTMLElement[];
115
+ if (els.length === 0) return (container as HTMLElement).clientHeight;
116
+ let top = Infinity;
117
+ let bottom = -Infinity;
118
+ for (const c of els) {
119
+ const r = c.getBoundingClientRect();
120
+ const cs = getComputedStyle(c);
121
+ const mt = parseFloat(cs.marginTop) || 0;
122
+ const mb = parseFloat(cs.marginBottom) || 0;
123
+ top = Math.min(top, r.top - mt);
124
+ bottom = Math.max(bottom, r.bottom + mb);
125
+ }
126
+ return Math.max(0, Math.ceil(bottom - top));
127
+ };
128
+
129
+ useEffect(() => {
130
+ const el = wrapRef.current;
131
+
132
+ const onRowHeightChange = cell?.onRowHeightChange;
133
+ if (!el || !onRowHeightChange) return;
134
+ if (cell?.rowId == null) return;
135
+ if (typeof cell?.rowId === "string" && cell.rowId.indexOf("header-") === 0) return;
136
+
137
+ const child = el.firstElementChild;
138
+ const target: Element = child || el;
139
+ if (paddingCacheRef.current === null) {
140
+ const cs = getComputedStyle(el);
141
+ paddingCacheRef.current =
142
+ (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0);
143
+ }
144
+ // 测子元素时需补回容器垂直 padding;退化测容器自身时 clientHeight 已含 padding
145
+ const extra = child ? paddingCacheRef.current : 0;
146
+ const ro = new ResizeObserver(() => {
147
+ // 内容子元素可能新增(如上传列表新增条目),补充观察,确保其尺寸变化也能触发重测
148
+ Array.from(target.children).forEach((c) => ro.observe(c));
149
+ const h = measureContentHeight(target) + extra;
150
+ onRowHeightChange(cell?.rowId, h, cell?.columnId);
151
+ });
152
+ ro.observe(target);
153
+ Array.from(target.children).forEach((c) => ro.observe(c));
154
+ return () => ro.disconnect();
155
+ }, [cell?.rowId, cell?.columnId, cell?.onRowHeightChange, edit, comValue]);
101
156
  useEffect(() => {
102
157
  setComValue(cell?.text);
103
158
  comValueInit.current = cell?.text;
@@ -198,6 +253,7 @@ export const WidthWrapHoc = (WrapComponent: any, props = {}) => {
198
253
 
199
254
  return (
200
255
  <div
256
+ ref={wrapRef}
201
257
  className={`base-hoc ${edit ? "base-hoc-edit" : ""}`}
202
258
  onDoubleClick={(e) => {
203
259
  if (cell?.nonEditable) {