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

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","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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"}
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","rowId","DIProps","onCellChanged","args","cell","Record","isInEditMode","WidthWrapHoc","WrapComponent","props","createBaseCellTemplate","getCompatibleCell","uncertainCell","parseFloat","NaN","text","update","cellToMerge","selectedValueFromText","some","val","undefined","getClassName","highlightRowId","window","gridHighlightRowId","handleCompositionEnd","eventData","enableEditMode","render","commit","React","ReactNode","edit","setEdit","open","setOpen","datatypeId","columnId","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","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","setList","value","onRow","ri","ci","mergeRowsByKey","list","updates","key","Array","isArray","length","updateMap","Map","forEach","item","set","String","id","walk","items","map","update","get","originalChildren","children","_children","nextItem","undefined","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","el","flattenWithExpansion","result","loop","push","includes","validRowIds","r","rowId","window","gridHighlightRowId","handleArrayToObj","record","cells","fieldList","obj","columnId","text","selectedValue","type","unshift","width","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","onCell","cellProps","onRowHeightChange","mergerList","handleCellsChanged","changes","batchQuery","previousDataSource","prevRows","nextRows","row","prevCellSnapshot","change","changeRowIdx","findIndex","changeColumnIdx","previousCell","resultColumnIdx","prevList","err","restoredRows","rIdx","cIdx","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","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 /** 运行时附加(index.tsx 构造单元格时写入),reactgrid 的 Cell/Compatible 类型不含此字段 */\n rowId?: string | number;\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 // 整行高亮:选中行由全局变量标记,给 .rg-cell 追加高亮 class,使背景切换为高亮色\n const highlightRowId = (window as any).gridHighlightRowId;\n if (highlightRowId && cell.rowId === highlightRowId) {\n return \"custom-highlights-row\";\n }\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 setList?: (value: any) => void;\n onRow?: (v: any, ri: number, ci: number) => void;\n}\n\n/** 将编辑后的行合并回列表数据源,供 getList 返回前保持单元格新值 */\nfunction mergeRowsByKey(list: any[], updates: any[], key: string): any[] {\n if (!Array.isArray(list) || !Array.isArray(updates) || updates.length === 0) return list;\n\n const updateMap = new Map<string, any>();\n updates.forEach((item) => {\n if (item?.[key] != null) updateMap.set(String(item[key]), item);\n if (item?.id != null) updateMap.set(String(item.id), item);\n });\n\n const walk = (items: any[]): any[] => {\n if (!Array.isArray(items)) return items;\n return items.map((item) => {\n const update = updateMap.get(String(item?.[key] ?? item?.id));\n const originalChildren = item?.children;\n const children = originalChildren ? walk(originalChildren) : originalChildren;\n if (!update) {\n return children === originalChildren ? item : { ...item, children };\n }\n const { children: _children, ...nextItem } = update;\n return {\n ...item,\n ...nextItem,\n ...(originalChildren !== undefined ? { children } : {}),\n };\n });\n };\n\n return walk(list);\n}\n\nfunction CellEditTable(props: CellEditTableProps, ref: any) {\n const {\n columns,\n dataSource,\n formulaConfig,\n onChange,\n reactGridProps = {},\n onEditSubmit,\n headerRowHeight = 48,\n rowHeight = 48,\n reactGridStyle,\n className,\n Slots,\n rowSelection,\n rowKey = \"id\",\n query,\n loading,\n isExpand = false,\n getList,\n setList,\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 // 同步清理高亮行全局标记,避免 .rg-cell 残留高亮 class\n (window as any).gridHighlightRowId = null;\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 // 父级数据源快照:保存失败时撤销乐观更新,避免 getList 前再次回显旧值\n const previousDataSource = dataSource;\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 // 编辑前单元格快照,保存失败时用于单元格级回滚\n const prevCellSnapshot: any[] = [];\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 prevCellSnapshot.push({\n rowId: change.rowId,\n columnId: change.columnId,\n previousCell: change.previousCell,\n });\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 // 同步父级 list:保存成功后的 getList 在接口返回前仍使用旧 list,\n // 只更新内部 rows 会被随后触发的数据源重建覆盖成编辑前的值。\n if (setList && batchQuery.length > 0) {\n setList((prevList: any[]) => mergeRowsByKey(prevList, batchQuery, rowKey));\n }\n\n // 提交成功后由 list-render 的 onEditSubmit 全量刷新列表;\n // 滚动位置由 rows 重建 effect 中的快照/恢复机制保持;\n // 失败时先把修改过的单元格回滚为编辑前的值,再 getList() 兜底刷新\n if (onEditSubmit) {\n try {\n await onEditSubmit(batchQuery);\n } catch (err) {\n const restoredRows = (rowsRef.current || []).map((row) => ({\n ...row,\n cells: [...row.cells],\n }));\n prevCellSnapshot.forEach(({ rowId, columnId, previousCell }) => {\n const rIdx = restoredRows.findIndex((el) => el.rowId == rowId);\n const cIdx = tableColumns.findIndex((el) => el.columnId == columnId);\n if (rIdx === -1 || cIdx === -1 || !previousCell) return;\n restoredRows[rIdx].cells[cIdx] = { ...previousCell };\n });\n rowsRef.current = restoredRows;\n setRows(restoredRows);\n restoreScroll();\n setList?.(previousDataSource);\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 // 记录高亮行 rowId 到全局,供 WidthWrapHoc.getClassName 给 .rg-cell 追加高亮 class\n (window as any).gridHighlightRowId = cell?.rowId;\n\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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"}
@@ -1,28 +1,29 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "projectId": "56c87c84304d7db0",
4
+ "environment": "production",
4
5
  "hash": null,
5
6
  "scope": "output-dir",
6
7
  "files": [
7
8
  {
8
9
  "path": "index.cjs",
9
- "size": 22243
10
+ "size": 23267
10
11
  },
11
12
  {
12
13
  "path": "index.css",
13
- "size": 1568
14
+ "size": 1804
14
15
  },
15
16
  {
16
17
  "path": "index.js",
17
- "size": 29773
18
+ "size": 31162
18
19
  },
19
20
  {
20
21
  "path": "index.js.map",
21
- "size": 92941
22
+ "size": 98379
22
23
  },
23
24
  {
24
25
  "path": "project.json",
25
- "size": 203
26
+ "size": 226
26
27
  }
27
28
  ]
28
29
  }
package/dist/project.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@hzab/edit-table",
3
- "version": "0.1.13-alpha.1",
3
+ "version": "0.1.13",
4
4
  "projectId": "56c87c84304d7db0",
5
5
  "initialCommit": "630fe6d6ecb8",
6
- "commit": "161732726f23",
7
- "builtAt": "2026-11-03T06:18:11.563Z"
6
+ "environment": "production",
7
+ "commit": "6602cb8ed223",
8
+ "builtAt": "2026-11-09T10:41:55.747Z"
8
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzab/edit-table",
3
- "version": "0.1.13-alpha.1",
3
+ "version": "0.1.13",
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/form-render": "^1.7.23",
50
- "@hzab/utils": "^1.1.14-alpha.0",
51
- "@hzab/typescript-config": "^0.0.0",
52
49
  "@hzab/eslint-config": "^0.0.0",
53
- "@hzab/vite-config": "^0.2.0-alpha.0"
50
+ "@hzab/vite-config": "^0.2.0",
51
+ "@hzab/typescript-config": "^0.0.0",
52
+ "@hzab/form-render": "^1.7.24",
53
+ "@hzab/utils": "^1.1.14-alpha.0"
54
54
  },
55
55
  "scripts": {
56
56
  "build": "vite build && tsc -p tsconfig.build.json",
@@ -28,6 +28,8 @@ export interface BaseCell extends Cell {
28
28
  value: string | number;
29
29
  values: OptionType[];
30
30
  isDisabled?: boolean;
31
+ /** 运行时附加(index.tsx 构造单元格时写入),reactgrid 的 Cell/Compatible 类型不含此字段 */
32
+ rowId?: string | number;
31
33
  }
32
34
  interface DIProps {
33
35
  onCellChanged: (...args: any[]) => void;
@@ -71,6 +73,11 @@ export const WidthWrapHoc = (WrapComponent: any, props = {}) => {
71
73
  }
72
74
 
73
75
  getClassName(cell: Compatible<BaseCell>, isInEditMode: boolean): string {
76
+ // 整行高亮:选中行由全局变量标记,给 .rg-cell 追加高亮 class,使背景切换为高亮色
77
+ const highlightRowId = (window as any).gridHighlightRowId;
78
+ if (highlightRowId && cell.rowId === highlightRowId) {
79
+ return "custom-highlights-row";
80
+ }
74
81
  return "";
75
82
  }
76
83
  /** enableEditMode为true 时输入中文会报错 */