@hzab/edit-table 0.1.11 → 0.1.13-alpha.0
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/CHANGELOG.md +23 -1
- package/dist/index.cjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +308 -252
- package/dist/index.js.map +1 -1
- package/dist/project-manifest.json +5 -5
- package/dist/project.json +3 -3
- package/package.json +5 -5
- package/src/Template/GetBaseTemplate.tsx +1 -1
- package/src/common/WidthWrapHoc.tsx +34 -0
- package/src/index.less +13 -1
- package/src/index.tsx +92 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DatePicker","Input","TimePicker","childAntdComponent","MonthPicker","QuarterPicker","RangePicker","WeekPicker","YearPicker","Password","Search","TextArea","isTriggerBlur","useEffect","useMemo","useRef","useState","Cell","CellTemplate","Compatible","Uncertain","UncertainCompatible","getCellProperty","getCharFromKey","isAlphaNumericKey","isNavigationKey","keyCodes","InfoCircleOutlined","Popover","isTriggerBlur","OptionType","label","value","isDisabled","BaseCell","selectedValue","values","DIProps","onCellChanged","args","cell","Record","isInEditMode","WidthWrapHoc","WrapComponent","props","createBaseCellTemplate","getCompatibleCell","uncertainCell","parseFloat","NaN","text","update","cellToMerge","selectedValueFromText","some","val","undefined","getClassName","handleCompositionEnd","eventData","enableEditMode","render","commit","React","ReactNode","edit","setEdit","open","setOpen","datatypeId","columnId","rowId","comValue","setComValue","isValidator","setIsValidator","comValueInit","openTimerRef","current","onClick","e","window","gridEditId","document","addEventListener","removeEventListener","onValidator","flag","isVerify","it","validatorList","pattern","test","Array","isArray","length","timer","setTimeout","popup","querySelector","stopPointer","PointerEvent","stopPropagation","clearTimeout","onBlurSubmit","targetValue","dataPickerProps","includes","type","onOpenChange","isOpen","uploadEdit","nonEditable","style","width","display","alignItems","options","onChange","target","onBlur","onPointerDown","onKeyDown","keyCode","getField","validatorMessage","useMemo","getVal","GetBaseTemplate","props","pattern","cell","componentProps","Com","cellRender","echoValue","getField","enum","values","name","text","Slot","input","focus","Input","GetBaseTemplate","NumberCellTemplate","props","$","_c","t0","componentProps","t1","type","t2","useEffect","useState","MinusCircleOutlined","PlusCircleOutlined","ExpandListTemplate","props","$","_c","cell","setExpandKeys","expandKeys","rowKey","setNewDataSource","record","expand","setExpand","t0","isExpand","pre","tempPre","childrenIds","children","map","el","findIndex","el_0","filterList","filter","el_1","includes","length","splice","el_2","onExpand","t1","t2","t3","t4","preExpandKeys","el_3","onClickExpand","t5","width","getNavigatorLanguage","navigator","language","getLocaleSeparators","locale","testNumber","localeFormattedNumber","Intl","NumberFormat","format","thousandsSeparator","split","decimalSeparator","parseLocaleNumber","stringNumber","trim","NaN","normalizedStringNumber","replace","numberString","RegExp","trimmedNumberString","length","Number","isReactElement","value","getTitle","item","title","props","children","String","convertColumnsToRows","columns","headerRowHeight","getLeaves","cols","reduce","acc","col","getDepth","depth","max","Math","leafColumns","totalDepth","totalCols","buildTree","map","hasChildren","rowspan","colspan","_depth","_isLeaf","leafCount","tree","rows","Array","from","_","i","rowId","height","cells","handleType","includes","type","dataIndex","fillRow","nodes","rowIndex","forEach","node","cell","text","width","style","background","display","justifyContent","sorter","key","push","row","newCells","colIndex","cellIndex","currentCell","leaf","undefined","lastRow","lastRowCells","leafIndex","index","existingCell","find","flattenColumns","result","traverse","k","rest","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","Checkbox","Empty","Spin","ReactGrid","TextTemplate","antdComponents","customComponents","WidthWrapHoc","NumberTemplate","ExpandListTemplate","convertColumnsToRows","flattenColumns","isReactElement","childAntdComponent","GetBaseTemplate","CellEditTableProps","columns","dataSource","formulaConfig","onChange","v","reactGridProps","onEditSubmit","headerRowHeight","rowHeight","reactGridStyle","className","Slots","rowSelection","rowKey","query","loading","isExpand","getList","onRow","ri","ci","CellEditTable","props","ref","headerList","setHeaderList","rows","setRows","initRowsRef","tableColumns","setTableColumns","selectedRowKeys","setSelectedRowKeys","newDataSource","setNewDataSource","expandKeys","setExpandKeys","headerCustomTemplate","setHeaderCustomTemplate","highlights","setHighlights","highlightsRowIdRef","gridRef","currentCell","handleDataSource","arr","level","forEach","el","children","validRowIds","map","r","rowId","includes","current","handleArrayToObj","item","record","cells","fieldList","obj","id","columnId","text","value","selectedValue","type","Array","isArray","length","unshift","width","key","nonEditable","style","background","display","justifyContent","newColumns","index","dataIndex","name","headTemplate","handleHeader","title","Com","columnsIds","tempDataSource","height","ind","newCell","columnsItem","cellItem","it","setCellData","setCellStyle","String","onCell","cellProps","mergerList","find","newItem","handleCellsChanged","changes","batchQuery","isBatchSubmit","prevRows","change","changeRowIdx","findIndex","changeColumnIdx","push","resultColumnIdx","err","baseTemplate","mergeTemplate","newMergeTemplate","NewCom","newComProps","ActionDom","rowData","cell","e","stopPropagation","tableActionsSlot","actionPrefixSlot","actionCenterSlot","actionSuffixSlot","flattenDataSource","result","loop","list","CheckBoxDom","filter","getCheckboxProps","disabled","checkboxProps","componentProps","target","checked","newSelectedRowKeys","pageNum","customCellTemplates","templatesObj","onHightsRow","borderColor","datatypeId","window","gridEditId","indexOf","isRowHighlights","onFocusLocationChanging","_$actions","Number","PRESENTED_IMAGE_SIMPLE"],"sources":["../src/common/childAntdComponent.ts","../src/common/WidthWrapHoc.tsx","../src/Template/GetBaseTemplate.tsx","../src/Template/NumberCellTemplate/index.tsx","../src/Template/ExpandListTemplate/index.tsx","../src/common/utils.ts","../src/index.tsx"],"sourcesContent":["import { DatePicker, Input, TimePicker } from \"antd\";\n\nexport const childAntdComponent: any = {\n \"DatePicker.MonthPicker\": DatePicker.MonthPicker,\n \"DatePicker.QuarterPicker\": DatePicker.QuarterPicker,\n \"DatePicker.RangePicker\": DatePicker.RangePicker,\n \"DatePicker.TimePicker\": DatePicker.TimePicker,\n \"DatePicker.WeekPicker\": DatePicker.WeekPicker,\n \"DatePicker.YearPicker\": DatePicker.YearPicker,\n \"Input.Password\": Input.Password,\n \"Input.Search\": Input.Search,\n \"Input.TextArea\": Input.TextArea,\n \"TimePicker.RangePicker\": TimePicker.RangePicker,\n};\nexport const isTriggerBlur = [\n \"DatePicker\",\n \"DatePicker.MonthPicker\",\n \"DatePicker.QuarterPicker\",\n \"DatePicker.RangePicker\",\n \"DatePicker.TimePicker\",\n \"DatePicker.WeekPicker\",\n \"DatePicker.YearPicker\",\n \"TimePicker.RangePicker\",\n];\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type {\n Cell,\n CellTemplate,\n Compatible,\n Uncertain,\n UncertainCompatible,\n} from \"@silevis/reactgrid\";\nimport {\n getCellProperty,\n getCharFromKey,\n isAlphaNumericKey,\n isNavigationKey,\n keyCodes,\n} from \"@silevis/reactgrid\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { Popover } from \"antd\";\nimport { isTriggerBlur } from \"./childAntdComponent\";\nexport type OptionType = {\n label: string;\n value: string | number;\n isDisabled?: boolean;\n};\n\nexport interface BaseCell extends Cell {\n selectedValue?: string;\n value: string | number;\n values: OptionType[];\n isDisabled?: boolean;\n}\ninterface DIProps {\n onCellChanged: (...args: any[]) => void;\n cell: Record<string, any>;\n isInEditMode?: boolean;\n}\n\nexport const WidthWrapHoc = (WrapComponent: any, props = {}) => {\n class createBaseCellTemplate implements CellTemplate<BaseCell> {\n getCompatibleCell(uncertainCell: Uncertain<BaseCell>): Compatible<BaseCell> {\n let values: any;\n try {\n values = getCellProperty(uncertainCell, \"values\", \"object\");\n } catch {\n values = [];\n }\n const value = uncertainCell.selectedValue ? parseFloat(uncertainCell.selectedValue) : NaN;\n let isDisabled = true;\n try {\n isDisabled = getCellProperty(uncertainCell, \"isDisabled\", \"boolean\");\n } catch {\n isDisabled = false;\n }\n const selectedValue = uncertainCell.selectedValue;\n const text = selectedValue || \"\";\n return { ...uncertainCell, selectedValue, text, value, values, isDisabled };\n }\n\n update(\n cell: Compatible<BaseCell>,\n cellToMerge: UncertainCompatible<BaseCell>,\n ): Compatible<BaseCell> {\n const selectedValueFromText = cell.values.some((val: any) => val.value == cellToMerge.text)\n ? cellToMerge.text\n : cellToMerge?.text || undefined;\n\n return this.getCompatibleCell({\n ...cell,\n selectedValue: selectedValueFromText,\n });\n }\n\n getClassName(cell: Compatible<BaseCell>, isInEditMode: boolean): string {\n return \"\";\n }\n /** enableEditMode为true 时输入中文会报错 */\n handleCompositionEnd(\n cell: Compatible<BaseCell>,\n eventData: any,\n ): { cell: Compatible<BaseCell>; enableEditMode: boolean } {\n return {\n cell: {\n ...cell,\n },\n enableEditMode: false,\n };\n }\n /** render 不能抽出来组件,否则点击会失效 */\n render(\n cell: any,\n isInEditMode: boolean,\n onCellChanged: (cell: any, commit: boolean) => void,\n ): React.ReactNode {\n const [edit, setEdit] = useState<boolean>(false);\n const [open, setOpen] = useState<boolean>(false);\n const datatypeId = cell?.columnId + cell?.rowId;\n const [comValue, setComValue] = useState(cell?.text);\n const [isValidator, setIsValidator] = useState(false);\n const comValueInit = useRef<any>(cell?.text);\n const openTimerRef = useRef<any>();\n useEffect(() => {\n setComValue(cell?.text);\n comValueInit.current = cell?.text;\n }, [cell?.text]);\n\n useEffect(() => {\n // 处理下拉选项弹层失焦逻辑\n function onClick(e) {\n if ((window as any).gridEditId != datatypeId) {\n setEdit(false);\n }\n }\n document.addEventListener(\"click\", onClick);\n return () => {\n document.removeEventListener(\"click\", onClick);\n };\n }, []);\n\n /** 校验触发器 */\n const onValidator = (val) => {\n let flag = false;\n let isVerify = false;\n for (const it of cell?.validatorList || []) {\n if (it?.pattern?.test(val)) {\n flag = true;\n }\n break;\n }\n isVerify = !flag && Array.isArray(cell?.validatorList) && cell?.validatorList?.length > 0;\n setIsValidator(isVerify);\n };\n\n useEffect(() => {\n if (!open) return;\n // 等下一帧,弹窗DOM渲染完成\n const timer = setTimeout(() => {\n const popup: any = document.querySelector(\".ant-picker-dropdown\");\n if (!popup) return;\n\n const stopPointer = (e: PointerEvent) => {\n // 阻断事件往上冒泡到document\n e.stopPropagation();\n };\n // 捕获阶段监听 pointerdown!!必须是pointerdown不是mousedown\n popup.addEventListener(\"pointerdown\", stopPointer, true);\n\n // 清理函数\n return () => {\n popup.removeEventListener(\"pointerdown\", stopPointer, true);\n };\n }, 0);\n\n return () => clearTimeout(timer);\n }, [open]);\n\n /** 失焦提交 */\n const onBlurSubmit = () => {\n const targetValue = comValueInit.current;\n onCellChanged(\n this.getCompatibleCell({\n ...cell,\n text: targetValue,\n selectedValue: targetValue,\n }),\n true,\n );\n };\n\n const dataPickerProps = useMemo(() => {\n if (isTriggerBlur?.includes(cell?.type)) {\n return {\n open: open,\n /** 兼容datapicker 闪烁问题 */\n onOpenChange: (isOpen) => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n }\n openTimerRef.current = setTimeout(() => {\n setOpen(isOpen);\n }, 80);\n },\n };\n }\n return {};\n }, [cell]);\n /** 监听上传组件失焦回调 */\n useEffect(() => {\n if (\n !edit &&\n cell.type == \"Upload\" &&\n (window as any).uploadEdit &&\n (window as any).uploadEdit == datatypeId\n ) {\n (window as any).uploadEdit = null;\n onBlurSubmit();\n }\n }, [edit, comValue]);\n\n return (\n <div\n className={`base-hoc ${edit ? \"base-hoc-edit\" : \"\"}`}\n onDoubleClick={(e) => {\n if (cell?.nonEditable) {\n return;\n }\n if (cell.type === \"Upload\") {\n (window as any).uploadEdit = datatypeId;\n }\n setEdit(true);\n }}\n >\n <WrapComponent\n {...props}\n onPointerDown={(e) => e.stopPropagation()}\n componentProps={{\n style: { width: \"100%\", display: \"flex\", alignItems: \"center\" },\n value: comValue,\n options: cell.values,\n onChange: (e) => {\n const targetValue = e?.target?.value ?? e;\n setComValue(targetValue);\n comValueInit.current = targetValue;\n onValidator(targetValue);\n },\n onBlur: (e) => {\n onBlurSubmit();\n if (!isTriggerBlur?.includes(cell?.type)) {\n setEdit(false);\n }\n },\n\n onPointerDown: (e) => {\n e.stopPropagation();\n },\n onKeyDown: (e) => {\n if (isAlphaNumericKey(e.keyCode) || isNavigationKey(e.keyCode)) e.stopPropagation();\n },\n ...dataPickerProps,\n ...((cell?.getField && cell?.getField()[\"x-component-props\"]) || {}),\n }}\n pattern={edit ? \"\" : \"readPretty\"}\n cell={cell}\n ></WrapComponent>\n {isValidator && (\n <Popover content={cell?.validatorMessage ?? \"该字段不合法\"}>\n <InfoCircleOutlined className=\"validator-icon\" />\n </Popover>\n )}\n </div>\n );\n }\n }\n\n return new createBaseCellTemplate();\n};\n","import { useMemo } from \"react\";\nimport { getVal } from \"@hzab/utils/src/formily/field\";\nexport const GetBaseTemplate = (props) => {\n const { pattern, cell, componentProps, Com, cellRender } = props;\n\n const echoValue = useMemo(() => {\n if (!cell?.getField) {\n return;\n }\n return getVal(\n { ...(cell?.getField && cell?.getField()), enum: cell?.getField()?.enum || cell?.values },\n { [cell?.getField && cell?.getField().name]: cell.text },\n );\n }, [cell]);\n if (cellRender && cellRender(props)) {\n const Slot = cellRender;\n return <Slot {...props}></Slot>;\n }\n\n return (\n <div className=\"base-hoc\">\n {pattern == \"readPretty\" ? (\n <div>{echoValue}</div>\n ) : (\n <Com\n className=\"rg-input\"\n ref={(input) => {\n if (input) {\n input.focus();\n }\n }}\n {...componentProps}\n />\n )}\n </div>\n );\n};\n","import { Input } from \"antd\";\nimport { GetBaseTemplate } from \"../GetBaseTemplate\";\nimport \"./index.less\";\nconst NumberCellTemplate = (props: any) => {\n return (\n <GetBaseTemplate\n {...props}\n componentProps={{\n ...props?.componentProps,\n type: \"number\",\n }}\n Com={Input}\n ></GetBaseTemplate>\n );\n};\nexport default NumberCellTemplate;\n","import { useEffect, useState } from \"react\";\nimport { MinusCircleOutlined, PlusCircleOutlined } from \"@ant-design/icons\";\nimport \"./index.less\";\n\nexport const ExpandListTemplate = (props) => {\n const { cell } = props;\n const { Slots, setExpandKeys, expandKeys, rowKey, setNewDataSource, record, columnId } = cell;\n const [expand, setExpand] = useState<boolean>(false);\n const onExpand = (isExpand) => {\n setNewDataSource((pre) => {\n const tempPre = [...pre];\n const childrenIds = record?.children?.map((el) => el?.[rowKey]);\n if (isExpand) {\n const findIndex = pre?.findIndex((el) => el?.[rowKey] == record?.[rowKey]);\n const filterList = pre?.filter((el) => childrenIds?.includes(el?.[rowKey])) || [];\n if (filterList?.length == 0) {\n tempPre.splice(findIndex + 1, 0, ...(record?.children || []));\n }\n return [...tempPre];\n }\n\n return pre?.filter((el) => !childrenIds?.includes(el?.[rowKey]));\n });\n };\n useEffect(() => {\n if (expandKeys?.includes(record?.[rowKey])) {\n setExpand(true);\n onExpand(true);\n }\n }, [cell?.record]);\n\n /** 展开关闭子项 */\n const onClickExpand = () => {\n setExpandKeys((preExpandKeys) => {\n if (preExpandKeys?.includes(record?.[rowKey])) {\n return preExpandKeys?.filter((el) => el != record?.[rowKey]);\n }\n return [...preExpandKeys, record?.[rowKey]];\n });\n setExpand(!expand);\n onExpand(!expand);\n };\n return (\n <div className=\"expandList-template\">\n {record?.children ? (\n <>\n {!expand ? (\n <PlusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n ) : (\n <MinusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n )}\n </>\n ) : (\n <div style={{ width: 14 }}></div>\n )}\n </div>\n );\n};\n","export const getNavigatorLanguage = (): string => navigator.language || \"en-US\";\n\nfunction getLocaleSeparators(locale: string) {\n const testNumber = 123456.789;\n const localeFormattedNumber = Intl.NumberFormat(locale).format(testNumber);\n\n // Get the thousands separator of the locale\n const thousandsSeparator = localeFormattedNumber.split(\"123\")[1][0];\n\n // Get the decimal separator of the locale\n const decimalSeparator = localeFormattedNumber.split(\"123\")[1][4];\n return { thousandsSeparator, decimalSeparator };\n}\nexport function parseLocaleNumber(stringNumber: string, locale = getNavigatorLanguage()): number {\n if (!stringNumber.trim()) return NaN;\n const { thousandsSeparator, decimalSeparator } = getLocaleSeparators(locale);\n const normalizedStringNumber = stringNumber.replace(/\\u00A0/g, \" \"); // Replace non-breaking space with normal space\n const numberString = normalizedStringNumber\n .replace(new RegExp(`[${thousandsSeparator}\\\\s]`, \"g\"), \"\") // Replace thousands separator and white-space\n .replace(new RegExp(`\\\\${decimalSeparator}`, \"g\"), \".\"); // Replace decimal separator\n\n const trimmedNumberString = numberString.replace(/^(?!-)\\D+|\\D+$/g, \"\"); // Remove characters before first and after last number, but keep negative sign\n if (trimmedNumberString === null || trimmedNumberString.trim().length === 0) {\n return NaN;\n }\n return Number(trimmedNumberString);\n}\n\nexport function isReactElement(value) {\n return value !== null && typeof value === \"object\";\n}\nconst getTitle = (item) => {\n return typeof item?.title == \"function\"\n ? isReactElement(item?.title())\n ? item?.title()?.props.children\n : String(item?.title()) || \"\"\n : String(item?.title) || \"\";\n};\n\nexport function convertColumnsToRows(columns, headerRowHeight = 40) {\n // 获取所有叶子节点\n const getLeaves = (cols) => {\n return cols.reduce((acc, col) => {\n if (col.children?.length) {\n return [...acc, ...getLeaves(col.children)];\n }\n return [...acc, col];\n }, []);\n };\n\n // 计算最大深度\n const getDepth = (cols, depth = 1) => {\n return cols.reduce((max, col) => {\n if (col.children?.length) {\n return Math.max(max, getDepth(col.children, depth + 1));\n }\n return Math.max(max, depth);\n }, depth);\n };\n\n const leafColumns = getLeaves(columns);\n const totalDepth = getDepth(columns);\n const totalCols = leafColumns.length;\n\n // 构建表头树\n const buildTree = (cols, depth = 0) => {\n return cols.map((col) => {\n const hasChildren = col.children?.length > 0;\n if (!hasChildren) {\n return {\n ...col,\n rowspan: totalDepth - depth,\n colspan: 1,\n _depth: depth,\n _isLeaf: true,\n };\n }\n const leafCount = getLeaves(col.children).length;\n return {\n ...col,\n rowspan: 1,\n colspan: leafCount,\n _depth: depth,\n _isLeaf: false,\n children: buildTree(col.children, depth + 1),\n };\n });\n };\n\n const tree = buildTree(columns, 0);\n\n // 初始化行\n const rows: any = Array.from({ length: totalDepth }, (_, i) => ({\n rowId: `header-${i}`,\n height: headerRowHeight,\n cells: [],\n }));\n\n const handleType = (item) => {\n if ([\"rowSelection\", \"ExpandListTemplate\"]?.includes(item?.type)) {\n return item?.type;\n }\n\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n return `${item?.dataIndex}`;\n }\n return \"header\";\n };\n\n // 递归填充行\n const fillRow = (nodes, rowIndex = 0) => {\n nodes.forEach((node) => {\n if (node._isLeaf) {\n const cell = {\n ...node,\n type: handleType(node),\n text: getTitle(node),\n dataIndex: node.dataIndex,\n width: node.width,\n rowspan: node.rowspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n };\n if (node.sorter) cell.sorter = node.sorter;\n if (node.key) cell.key = node.key;\n rows[rowIndex].cells.push(cell);\n } else {\n // 父节点:添加colspan\n rows[rowIndex].cells.push({\n ...node,\n type: handleType(node),\n text: getTitle(node),\n colspan: node.colspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n if (node.children) {\n fillRow(node.children, rowIndex + 1);\n }\n }\n });\n };\n\n fillRow(tree, 0);\n\n // 补全每一行的cell,使长度一致\n rows.forEach((row, rowIndex) => {\n const newCells = [];\n let colIndex = 0;\n let cellIndex = 0;\n\n while (colIndex < totalCols) {\n const currentCell = row.cells[cellIndex];\n\n if (!currentCell) {\n // 如果当前行没有足够的cell,从叶子节点补充\n const leaf = leafColumns[colIndex];\n newCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: rowIndex === totalDepth - 1 ? 1 : undefined,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n colIndex++;\n cellIndex++;\n continue;\n }\n\n const colspan = currentCell.colspan || 1;\n const rowspan = currentCell.rowspan || 1;\n\n // 检查当前cell是否应该出现在这一行\n // 如果rowspan > 1,表示它跨多行,但只在第一行出现\n if (rowspan > 1 && rowIndex > 0) {\n // 这个cell不应该出现在当前行,跳过\n colIndex += colspan;\n cellIndex++;\n continue;\n }\n\n // 如果当前cell有colspan,需要补全后面的空cell\n newCells.push(currentCell);\n colIndex += colspan;\n cellIndex++;\n\n // 如果colspan > 1,后面补充空cell\n for (let i = 1; i < colspan; i++) {\n newCells.push({\n type: \"header\",\n text: \"\",\n });\n }\n }\n\n row.cells = newCells;\n });\n\n // 最后一行的特殊处理:确保所有叶子节点都有对应的cell\n const lastRow = rows[totalDepth - 1];\n const lastRowCells = [];\n const leafIndex = 0;\n\n // 遍历所有叶子节点\n leafColumns.forEach((leaf, index) => {\n // 检查是否已经在lastRow中有对应的cell\n const existingCell = lastRow.cells.find(\n (cell) => cell.dataIndex === leaf.dataIndex && cell.text === leaf.title,\n );\n\n if (existingCell) {\n lastRowCells.push(existingCell);\n } else {\n // 创建新的cell\n lastRowCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: 1,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n });\n\n lastRow.cells = lastRowCells;\n\n // 确保所有行的cell数量等于totalCols\n rows.forEach((row) => {\n // 如果cell数量少于totalCols,补充空cell\n while (row.cells.length < totalCols) {\n row.cells.push({\n type: \"header\",\n text: \"\",\n });\n }\n });\n\n return rows;\n}\n\nexport function flattenColumns(columns: any[]) {\n const result: any[] = [];\n\n function traverse(cols) {\n cols.forEach((col) => {\n if (col.children && col.children.length > 0) {\n traverse(col.children);\n } else {\n // 创建新对象,只保留需要的属性\n const { title, dataIndex, key, width, sorter, k, ...rest } = col;\n\n result.push({\n type: \"Input\",\n dataIndex,\n title,\n ...(key && { key }),\n ...(width && { width }),\n ...(sorter && { sorter }),\n ...(k && { k }),\n // 如果需要保留其他属性\n ...rest,\n });\n }\n });\n }\n\n traverse(columns);\n return result;\n}\n","import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { Checkbox, Empty, Spin } from \"antd\";\nimport { ReactGrid } from \"@silevis/reactgrid\";\nimport TextTemplate from \"./Template/TextCellTemplate\";\nimport { antdComponents, customComponents } from \"@hzab/form-render\";\nimport { WidthWrapHoc } from \"./common/WidthWrapHoc\";\nimport NumberTemplate from \"./Template/NumberCellTemplate\";\nimport { ExpandListTemplate } from \"./Template/ExpandListTemplate\";\nimport { convertColumnsToRows, flattenColumns, isReactElement } from \"./common/utils\";\nimport { childAntdComponent } from \"./common/childAntdComponent\";\nimport { GetBaseTemplate } from \"./Template/GetBaseTemplate\";\nimport \"./index.less\";\nimport \"@silevis/reactgrid/styles.css\";\n\ninterface CellEditTableProps {\n columns: any[];\n dataSource: any[];\n formulaConfig?: any;\n onChange?: (v: any) => void;\n reactGridProps?: any;\n onEditSubmit?: (v: any) => void;\n headerRowHeight?: number;\n rowHeight?: number;\n reactGridStyle?: any;\n className?: string;\n Slots?: any;\n rowSelection?: any;\n rowKey?: string;\n query?: any;\n loading?: boolean;\n isExpand?: boolean;\n getList?: () => void;\n onRow?: (v: any, ri: number, ci: number) => void;\n}\n\nfunction CellEditTable(props: CellEditTableProps, ref: any) {\n const {\n columns,\n dataSource,\n formulaConfig,\n onChange,\n reactGridProps = {},\n onEditSubmit,\n headerRowHeight = 44,\n rowHeight = 44,\n reactGridStyle,\n className,\n Slots,\n rowSelection,\n rowKey = \"id\",\n query,\n loading,\n isExpand = false,\n getList,\n onRow,\n } = props;\n\n const [headerList, setHeaderList] = useState<any>([]);\n const [rows, setRows] = useState<any>([]);\n const initRowsRef = useRef<any>([]);\n /** 初始行数据 */\n const [tableColumns, setTableColumns] = useState<any>([]);\n const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]);\n const [newDataSource, setNewDataSource] = useState<any>([]);\n const [expandKeys, setExpandKeys] = useState<any>([]);\n const [headerCustomTemplate, setHeaderCustomTemplate] = useState<any>([]);\n const [highlights, setHighlights] = useState([]);\n const highlightsRowIdRef = useRef();\n\n const gridRef = useRef<any>();\n const currentCell = useRef<any>();\n\n useImperativeHandle(ref, () => {\n return {\n rows,\n };\n });\n /** 递归处理子节点数据 */\n const handleDataSource = (arr, level = 0) => {\n arr?.forEach((el) => {\n el.level = level + 1;\n if (el?.children) {\n handleDataSource(el?.children, el.level);\n }\n });\n };\n /** 洗数据 */\n useEffect(() => {\n handleDataSource(dataSource);\n setNewDataSource(dataSource);\n }, [dataSource]);\n\n /** 判断当前选中行是否还存在 */\n useEffect(() => {\n const validRowIds = rows.map((r) => r.rowId);\n if (!validRowIds?.includes(highlightsRowIdRef.current)) {\n setHighlights([]);\n }\n }, [rows]);\n\n /**将数组转为对象 */\n const handleArrayToObj = (item) => {\n const record = item?.cells?.[0]?.record;\n const fieldList = [\"_$actions\", \"rowSelection\"];\n const obj: any = {\n id: item?.rowId,\n };\n item?.cells?.forEach((el) => {\n if (el?.columnId && !fieldList?.includes(el?.columnId)) {\n obj[el?.columnId] = el?.text || el?.value || el?.selectedValue || \"\";\n if (el?.type == \"Number\") {\n obj[el?.columnId] = el?.value;\n }\n }\n });\n\n return {\n ...record,\n ...obj,\n };\n };\n /** 表头 */\n useEffect(() => {\n if (Array.isArray(columns) && columns?.length > 0) {\n if (isExpand) {\n columns.unshift({\n type: \"ExpandListTemplate\",\n width: 14,\n key: \"ExpandListTemplate\",\n nonEditable: true,\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n },\n });\n }\n if (rowSelection) {\n columns.unshift({\n type: \"rowSelection\",\n nonEditable: true,\n width: rowSelection?.width || 30,\n key: \"rowSelection\",\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n\n setHeaderList(convertColumnsToRows(columns, headerRowHeight));\n const newColumns = flattenColumns(columns);\n\n setTableColumns(\n newColumns?.map((item, index) => ({\n ...item,\n columnId: item?.dataIndex || item?.key || item?.name || \"\",\n })),\n );\n }\n }, [columns, rowSelection]);\n\n /** 自定义表头 */\n const headTemplate: any = {};\n const handleHeader = (arr) => {\n arr?.forEach((item) => {\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n const Com = item?.title;\n headTemplate[item?.dataIndex] = WidthWrapHoc(Com);\n }\n if (item?.children) {\n handleHeader(item?.children);\n }\n });\n };\n useEffect(() => {\n handleHeader(columns);\n setHeaderCustomTemplate(headTemplate);\n }, [columns]);\n\n /** 数据行 */\n useEffect(() => {\n const columnsIds = tableColumns?.map((el) => el?.columnId);\n\n const tempDataSource = newDataSource?.map((item, index) => {\n return {\n rowId: item[rowKey],\n height: rowHeight,\n cells: columnsIds?.map((el, ind) => {\n let newCell = {};\n const columnsItem = tableColumns[ind];\n const cellItem = item[el];\n const type: any = columnsItem?.type ?? \"text\";\n //设置单元格颜色及回显\n if (formulaConfig) {\n for (const key in formulaConfig) {\n if (key == el) {\n const it = formulaConfig[key];\n newCell = {\n text: it?.setCellData && it?.setCellData(item),\n value: it?.setCellData && it?.setCellData(item),\n style:\n it?.setCellStyle &&\n it?.setCellStyle((it?.setCellData && it?.setCellData(item)) || item),\n };\n }\n }\n }\n\n return {\n ...columnsItem,\n record: item,\n rowId: item[rowKey] || columnsItem?.type,\n type: type,\n nonEditable: columnsItem?.nonEditable,\n text: String(cellItem || \"\"),\n value: cellItem,\n selectedValue: cellItem || \"\",\n style:\n columnsItem?.type == \"rowSelection\"\n ? { display: \"flex\", justifyContent: \"center\" }\n : {},\n ...(((onRow && onRow(item, index, ind)) as any) || {}),\n ...((columnsItem?.onCell && columnsItem?.onCell(item, index, ind)) || {}),\n ...(columnsItem?.cellProps || {}),\n setNewDataSource,\n setExpandKeys,\n rowKey,\n expandKeys,\n Slots,\n ...newCell,\n };\n }),\n };\n });\n const mergerList = [...headerList, ...tempDataSource];\n setRows(mergerList);\n }, [newDataSource, tableColumns, headerList]);\n useEffect(() => {\n if (loading) {\n const item = rows?.find((el) => el?.rowId == currentCell.current?.rowId);\n let newItem = item?.cells?.find((it) => it?.columnId == currentCell.current?.columnId);\n newItem = { ...currentCell.current };\n initRowsRef.current = rows;\n }\n }, [loading, rows]);\n // 单元格编辑回调\n const handleCellsChanged = async (changes) => {\n const batchQuery: any = [];\n if (!Array.isArray(changes) || changes.length === 0) return;\n /** 批量提交 */\n let isBatchSubmit = false;\n if (changes?.length > 1) {\n isBatchSubmit = true;\n }\n\n setRows((prevRows) => {\n changes.forEach(async (change) => {\n const changeRowIdx = prevRows.findIndex((el) => el.rowId == change.rowId);\n const changeColumnIdx = tableColumns.findIndex((el) => el.columnId == change.columnId);\n prevRows[changeRowIdx].cells[changeColumnIdx] = { ...change.newCell };\n currentCell.current = { ...change.newCell };\n batchQuery.push(handleArrayToObj(prevRows[changeRowIdx]));\n if (formulaConfig) {\n for (const key in formulaConfig) {\n const item = formulaConfig[key];\n const resultColumnIdx = tableColumns.findIndex((el) => el.columnId == key);\n const newCell = {\n ...prevRows[changeRowIdx].cells[resultColumnIdx],\n text: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n value: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n style:\n item?.setCellStyle &&\n item?.setCellStyle(\n (item?.setCellData && item?.setCellData(prevRows[changeRowIdx])) ||\n prevRows[changeRowIdx],\n ),\n };\n prevRows[changeRowIdx].cells[resultColumnIdx] = newCell;\n }\n }\n if (onEditSubmit && !isBatchSubmit) {\n try {\n await onEditSubmit(batchQuery);\n } catch (err) {\n getList && getList();\n }\n }\n onChange && onChange(prevRows[changeRowIdx]);\n });\n return [...prevRows];\n });\n\n if (isBatchSubmit) {\n try {\n onEditSubmit && (await onEditSubmit(batchQuery));\n } catch (err) {\n getList && getList();\n }\n }\n };\n\n /** 自定义组件注册 */\n const baseTemplate = useMemo(() => {\n const mergeTemplate: any = {\n ...(antdComponents || {}),\n ...(customComponents || {}),\n ...childAntdComponent,\n };\n const newMergeTemplate: any = {};\n for (const key in mergeTemplate) {\n const NewCom = (newComProps) => {\n return <GetBaseTemplate {...newComProps} {...props} Com={mergeTemplate[key]} />;\n };\n newMergeTemplate[key] = WidthWrapHoc(NewCom);\n }\n return newMergeTemplate;\n }, [antdComponents, customComponents]);\n\n const ActionDom = (props) => {\n const rowData = rows?.find((el) => el?.rowId == props?.cell?.rowId);\n return (\n <div onPointerDown={(e) => e.stopPropagation()}>\n {Slots?.tableActionsSlot && <Slots.tableActionsSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionPrefixSlot && <Slots.actionPrefixSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionCenterSlot && <Slots.actionCenterSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionSuffixSlot && <Slots.actionSuffixSlot {...props?.cell} rowData={rowData} />}\n </div>\n );\n };\n function flattenDataSource(arr: any) {\n const result: any = [];\n function loop(list: any) {\n for (const item of list) {\n result.push(item);\n if (item.children && item.children.length) {\n loop(item.children);\n }\n }\n }\n loop(arr);\n return result;\n }\n const CheckBoxDom = (props) => {\n const { record, rowId } = props?.cell;\n\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n\n const checkboxProps =\n typeof rowSelection?.getCheckboxProps === \"function\"\n ? rowSelection?.getCheckboxProps?.(record)\n : {};\n return (\n <Checkbox\n {...props?.componentProps}\n checked={\n rowSelection?.selectedRowKeys?.includes((record && record[rowKey]) || \"\") ||\n (!rowId &&\n rowSelection?.selectedRowKeys?.length == newDataSource?.length &&\n newDataSource?.length > 0)\n }\n indeterminate={\n !rowId &&\n rowSelection?.selectedRowKeys?.length > 0 &&\n rowSelection?.selectedRowKeys?.length < newDataSource?.length\n }\n onChange={(e) => {\n if (e.target.checked && rowId) {\n const newSelectedRowKeys = [...rowSelection?.selectedRowKeys, record[rowKey]];\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(newSelectedRowKeys, rows);\n } else if (!e.target.checked && rowId) {\n const newSelectedRowKeys = rowSelection?.selectedRowKeys?.filter(\n (el) => el != record[rowKey],\n );\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n rowSelection?.selectedRowKeys?.filter((el) => el != record[rowKey]),\n rows,\n );\n } else if (e.target.checked && !rowId) {\n const newSelectedRowKeys = newDataSource?.map((el) => el[rowKey]);\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n newDataSource?.map((el) => el[rowKey]),\n rows,\n );\n } else if (!e.target.checked && !rowId) {\n rowSelection?.onChange([], []);\n }\n }}\n {...checkboxProps}\n ></Checkbox>\n );\n };\n useEffect(() => {\n if (rowSelection) {\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n const rows = newDataSource?.filter((el) => selectedRowKeys?.includes(el[rowKey]));\n rowSelection?.onChange(selectedRowKeys, rows);\n }\n }, [selectedRowKeys, dataSource]);\n useEffect(() => {\n setSelectedRowKeys([]);\n }, [query?.pageNum]);\n\n const customCellTemplates = useMemo(() => {\n const templatesObj: any = {};\n for (const key in reactGridProps?.customCellTemplates) {\n const item = reactGridProps?.customCellTemplates[key];\n templatesObj[key] = WidthWrapHoc(item);\n }\n return templatesObj;\n }, [reactGridProps?.customCellTemplates]);\n\n /** 选中高亮整行 */\n const onHightsRow = (cell: any, rows: any) => {\n const list = rows\n ?.find((el) => el?.rowId == cell?.rowId)\n ?.cells?.map((item) => ({\n columnId: item?.columnId,\n rowId: cell?.rowId,\n className: \"custom-highlights-row\",\n borderColor: \"transparent\",\n }));\n highlightsRowIdRef.current = cell?.rowId;\n setHighlights(list);\n };\n\n return (\n <Spin spinning={loading}>\n <div className={`grid-container ${className}`} style={reactGridStyle}>\n <ReactGrid\n ref={gridRef}\n rows={loading ? initRowsRef.current : rows}\n key={dataSource?.length == 0 ? 0 : 1}\n columns={tableColumns}\n onCellsChanged={handleCellsChanged}\n enableFillHandle={true}\n enableRangeSelection={true}\n horizontalStickyBreakpoint={120}\n {...reactGridProps}\n highlights={reactGridProps?.highlights ?? highlights}\n onFocusLocationChanging={(cell: any) => {\n const datatypeId = cell?.columnId + cell?.rowId;\n (window as any).gridEditId = datatypeId;\n if (typeof cell?.rowId == \"string\" && cell?.rowId?.indexOf(\"header-\") > -1) {\n return false;\n }\n if (reactGridProps?.isRowHighlights && cell?.columnId) {\n onHightsRow(cell, rows);\n }\n if ([\"_$actions\", \"rowSelection\", \"ExpandListTemplate\"]?.includes(cell?.columnId)) {\n return false;\n }\n if (reactGridProps?.onFocusLocationChanging) {\n return reactGridProps?.onFocusLocationChanging(cell, rows);\n }\n\n return cell;\n }}\n customCellTemplates={{\n ExpandListTemplate: WidthWrapHoc(ExpandListTemplate),\n ...baseTemplate,\n ...customCellTemplates,\n ...headerCustomTemplate,\n _$actions: WidthWrapHoc(ActionDom),\n rowSelection: WidthWrapHoc(CheckBoxDom),\n // Input: WidthWrapHoc(TextTemplate,props),\n Number: WidthWrapHoc(NumberTemplate, props),\n }}\n />\n {dataSource?.length <= 0 && (\n <div className=\"grid-container-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n )}\n </div>\n </Spin>\n );\n}\n\nexport default forwardRef(CellEditTable);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["DatePicker","Input","TimePicker","childAntdComponent","MonthPicker","QuarterPicker","RangePicker","WeekPicker","YearPicker","Password","Search","TextArea","isTriggerBlur","useEffect","useMemo","useRef","useState","Cell","CellTemplate","Compatible","Uncertain","UncertainCompatible","getCellProperty","getCharFromKey","isAlphaNumericKey","isNavigationKey","keyCodes","InfoCircleOutlined","Popover","isTriggerBlur","OptionType","label","value","isDisabled","BaseCell","selectedValue","values","DIProps","onCellChanged","args","cell","Record","isInEditMode","WidthWrapHoc","WrapComponent","props","createBaseCellTemplate","getCompatibleCell","uncertainCell","parseFloat","NaN","text","update","cellToMerge","selectedValueFromText","some","val","undefined","getClassName","handleCompositionEnd","eventData","enableEditMode","render","commit","React","ReactNode","edit","setEdit","open","setOpen","datatypeId","columnId","rowId","comValue","setComValue","isValidator","setIsValidator","comValueInit","openTimerRef","wrapRef","HTMLDivElement","paddingCacheRef","el","current","onRowHeightChange","indexOf","child","firstElementChild","target","Element","cs","getComputedStyle","paddingTop","paddingBottom","extra","report","scrollHeight","ro","ResizeObserver","observe","disconnect","onClick","e","window","gridEditId","document","addEventListener","removeEventListener","onValidator","flag","isVerify","it","validatorList","pattern","test","Array","isArray","length","timer","setTimeout","popup","querySelector","stopPointer","PointerEvent","stopPropagation","clearTimeout","onBlurSubmit","targetValue","dataPickerProps","includes","type","onOpenChange","isOpen","uploadEdit","nonEditable","style","width","display","alignItems","options","onChange","onBlur","onPointerDown","onKeyDown","keyCode","getField","validatorMessage","useMemo","getVal","GetBaseTemplate","props","pattern","cell","componentProps","Com","cellRender","echoValue","getField","enum","values","name","text","Slot","input","focus","Input","GetBaseTemplate","NumberCellTemplate","props","$","_c","t0","componentProps","t1","type","t2","useEffect","useState","MinusCircleOutlined","PlusCircleOutlined","ExpandListTemplate","props","$","_c","cell","setExpandKeys","expandKeys","rowKey","setNewDataSource","record","expand","setExpand","t0","isExpand","pre","tempPre","childrenIds","children","map","el","findIndex","el_0","filterList","filter","el_1","includes","length","splice","el_2","onExpand","t1","t2","t3","t4","preExpandKeys","el_3","onClickExpand","t5","width","getNavigatorLanguage","navigator","language","getLocaleSeparators","locale","testNumber","localeFormattedNumber","Intl","NumberFormat","format","thousandsSeparator","split","decimalSeparator","parseLocaleNumber","stringNumber","trim","NaN","normalizedStringNumber","replace","numberString","RegExp","trimmedNumberString","length","Number","isReactElement","value","getTitle","item","title","props","children","String","convertColumnsToRows","columns","headerRowHeight","getLeaves","cols","reduce","acc","col","getDepth","depth","max","Math","leafColumns","totalDepth","totalCols","buildTree","map","hasChildren","rowspan","colspan","_depth","_isLeaf","leafCount","tree","rows","Array","from","_","i","rowId","height","cells","handleType","includes","type","dataIndex","fillRow","nodes","rowIndex","forEach","node","cell","text","width","style","background","display","justifyContent","sorter","key","push","row","newCells","colIndex","cellIndex","currentCell","leaf","undefined","lastRow","lastRowCells","leafIndex","index","existingCell","find","flattenColumns","result","traverse","k","rest","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","Checkbox","Empty","Spin","ReactGrid","TextTemplate","antdComponents","customComponents","WidthWrapHoc","NumberTemplate","ExpandListTemplate","convertColumnsToRows","flattenColumns","isReactElement","childAntdComponent","GetBaseTemplate","CellEditTableProps","columns","dataSource","formulaConfig","onChange","v","reactGridProps","onEditSubmit","headerRowHeight","rowHeight","reactGridStyle","className","Slots","rowSelection","rowKey","query","loading","isExpand","getList","onRow","ri","ci","CellEditTable","props","ref","headerList","setHeaderList","rows","setRows","initRowsRef","tableColumns","setTableColumns","selectedRowKeys","setSelectedRowKeys","newDataSource","setNewDataSource","expandKeys","setExpandKeys","headerCustomTemplate","setHeaderCustomTemplate","highlights","setHighlights","highlightsRowIdRef","rowHeights","setRowHeights","pendingHeightsRef","flushHeightsRafRef","gridRef","currentCell","flushPendingHeights","current","undefined","pending","Object","keys","length","prev","next","rowId","cols","rowChanged","colId","h","handleRowHeightChange","height","columnId","Math","max","Number","rId","String","cId","row","requestAnimationFrame","cancelAnimationFrame","Array","isArray","changed","map","indexOf","heightMap","values","handleDataSource","arr","level","forEach","el","children","validRowIds","r","includes","handleArrayToObj","item","record","cells","fieldList","obj","id","text","value","selectedValue","type","unshift","width","key","nonEditable","style","background","display","justifyContent","newColumns","index","dataIndex","name","headTemplate","handleHeader","title","Com","columnsIds","tempDataSource","dynamicRowHeight","ind","newCell","columnsItem","cellItem","it","setCellData","setCellStyle","pattern","onCell","cellProps","onRowHeightChange","mergerList","find","newItem","handleCellsChanged","changes","batchQuery","isBatchSubmit","prevRows","change","changeRowIdx","findIndex","changeColumnIdx","push","resultColumnIdx","err","baseTemplate","mergeTemplate","newMergeTemplate","NewCom","newComProps","ActionDom","rowData","cell","e","stopPropagation","tableActionsSlot","actionPrefixSlot","actionCenterSlot","actionSuffixSlot","flattenDataSource","result","loop","list","CheckBoxDom","filter","getCheckboxProps","disabled","checkboxProps","componentProps","target","checked","newSelectedRowKeys","pageNum","customCellTemplates","templatesObj","onHightsRow","borderColor","datatypeId","window","gridEditId","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/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 * 测量对象是\"内容子元素\"而非容器自身 —— 容器带 min-height:100%(撑起双击热区),\n * 其 scrollHeight 存在\"下限=当前行高\"的假象,内容变矮时测不出真实高度;\n * 内容子元素无此限制,双向(撑开/回落)测量都真实,行高一次到位、无渐变动画。\n */\n useEffect(() => {\n const el = wrapRef.current;\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;退化测容器自身时 scrollHeight 已含 padding\n const extra = child ? paddingCacheRef.current : 0;\n const report = () =>\n onRowHeightChange(cell?.rowId, target.scrollHeight + extra, cell?.columnId);\n report();\n const ro = new ResizeObserver(report);\n ro.observe(target);\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();\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 {\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 \"./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 /** 附件等动态行高:rowId -> { [columnId]: height },同行多附件列时取最大值 */\n const [rowHeights, setRowHeights] = useState<any>({});\n /** 高度上报按帧合并缓冲,一帧内多次上报只触发一次 state 更新 */\n const pendingHeightsRef = useRef<any>({});\n const flushHeightsRafRef = useRef<any>();\n const gridRef = useRef<any>();\n const currentCell = useRef<any>();\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 return changed ? next : prev;\n });\n }, [rowHeights, rowHeight]);\n\n useImperativeHandle(ref, () => {\n return {\n rows,\n };\n });\n /** 递归处理子节点数据 */\n const handleDataSource = (arr, level = 0) => {\n arr?.forEach((el) => {\n el.level = level + 1;\n if (el?.children) {\n handleDataSource(el?.children, el.level);\n }\n });\n };\n /** 洗数据 */\n useEffect(() => {\n handleDataSource(dataSource);\n setNewDataSource(dataSource);\n }, [dataSource]);\n\n /** 判断当前选中行是否还存在 */\n useEffect(() => {\n const validRowIds = rows.map((r) => r.rowId);\n if (!validRowIds?.includes(highlightsRowIdRef.current)) {\n setHighlights([]);\n }\n }, [rows]);\n\n /**将数组转为对象 */\n const handleArrayToObj = (item) => {\n const record = item?.cells?.[0]?.record;\n const fieldList = [\"_$actions\", \"rowSelection\"];\n const obj: any = {\n id: item?.rowId,\n };\n item?.cells?.forEach((el) => {\n if (el?.columnId && !fieldList?.includes(el?.columnId)) {\n obj[el?.columnId] = el?.text || el?.value || el?.selectedValue || \"\";\n if (el?.type == \"Number\") {\n obj[el?.columnId] = el?.value;\n }\n }\n });\n\n return {\n ...record,\n ...obj,\n };\n };\n /** 表头 */\n useEffect(() => {\n if (Array.isArray(columns) && columns?.length > 0) {\n if (isExpand) {\n columns.unshift({\n type: \"ExpandListTemplate\",\n width: 14,\n key: \"ExpandListTemplate\",\n nonEditable: true,\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n },\n });\n }\n if (rowSelection) {\n columns.unshift({\n type: \"rowSelection\",\n nonEditable: true,\n width: rowSelection?.width || 30,\n key: \"rowSelection\",\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n\n setHeaderList(convertColumnsToRows(columns, headerRowHeight));\n const newColumns = flattenColumns(columns);\n\n setTableColumns(\n newColumns?.map((item, index) => ({\n ...item,\n columnId: item?.dataIndex || item?.key || item?.name || \"\",\n })),\n );\n }\n }, [columns, rowSelection]);\n\n /** 自定义表头 */\n const headTemplate: any = {};\n const handleHeader = (arr) => {\n arr?.forEach((item) => {\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n const Com = item?.title;\n headTemplate[item?.dataIndex] = WidthWrapHoc(Com);\n }\n if (item?.children) {\n handleHeader(item?.children);\n }\n });\n };\n useEffect(() => {\n handleHeader(columns);\n setHeaderCustomTemplate(headTemplate);\n }, [columns]);\n\n /** 数据行 */\n useEffect(() => {\n const columnsIds = tableColumns?.map((el) => el?.columnId);\n\n const tempDataSource = newDataSource?.map((item, index) => {\n 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 setRows(mergerList);\n // 注:此处读取的 rowHeights 为本次渲染时的快照;行高的后续增量变化由下方补丁 effect 处理,避免全量重建\n }, [newDataSource, tableColumns, headerList]);\n useEffect(() => {\n if (loading) {\n const item = rows?.find((el) => el?.rowId == currentCell.current?.rowId);\n let newItem = item?.cells?.find((it) => it?.columnId == currentCell.current?.columnId);\n newItem = { ...currentCell.current };\n initRowsRef.current = rows;\n }\n }, [loading, rows]);\n // 单元格编辑回调\n const handleCellsChanged = async (changes) => {\n const batchQuery: any = [];\n if (!Array.isArray(changes) || changes.length === 0) return;\n /** 批量提交 */\n let isBatchSubmit = false;\n if (changes?.length > 1) {\n isBatchSubmit = true;\n }\n\n setRows((prevRows) => {\n changes.forEach(async (change) => {\n const changeRowIdx = prevRows.findIndex((el) => el.rowId == change.rowId);\n const changeColumnIdx = tableColumns.findIndex((el) => el.columnId == change.columnId);\n prevRows[changeRowIdx].cells[changeColumnIdx] = { ...change.newCell };\n currentCell.current = { ...change.newCell };\n batchQuery.push(handleArrayToObj(prevRows[changeRowIdx]));\n if (formulaConfig) {\n for (const key in formulaConfig) {\n const item = formulaConfig[key];\n const resultColumnIdx = tableColumns.findIndex((el) => el.columnId == key);\n const newCell = {\n ...prevRows[changeRowIdx].cells[resultColumnIdx],\n text: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n value: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n style:\n item?.setCellStyle &&\n item?.setCellStyle(\n (item?.setCellData && item?.setCellData(prevRows[changeRowIdx])) ||\n prevRows[changeRowIdx],\n ),\n };\n prevRows[changeRowIdx].cells[resultColumnIdx] = newCell;\n }\n }\n if (onEditSubmit && !isBatchSubmit) {\n try {\n await onEditSubmit(batchQuery);\n } catch (err) {\n getList && getList();\n }\n }\n onChange && onChange(prevRows[changeRowIdx]);\n });\n return [...prevRows];\n });\n\n if (isBatchSubmit) {\n try {\n onEditSubmit && (await onEditSubmit(batchQuery));\n } catch (err) {\n getList && getList();\n }\n }\n };\n\n /** 自定义组件注册 */\n const baseTemplate = useMemo(() => {\n const mergeTemplate: any = {\n ...(antdComponents || {}),\n ...(customComponents || {}),\n ...childAntdComponent,\n };\n const newMergeTemplate: any = {};\n for (const key in mergeTemplate) {\n const NewCom = (newComProps) => {\n return <GetBaseTemplate {...newComProps} {...props} Com={mergeTemplate[key]} />;\n };\n newMergeTemplate[key] = WidthWrapHoc(NewCom);\n }\n return newMergeTemplate;\n }, [antdComponents, customComponents]);\n\n const ActionDom = (props) => {\n const rowData = rows?.find((el) => el?.rowId == props?.cell?.rowId);\n return (\n <div onPointerDown={(e) => e.stopPropagation()}>\n {Slots?.tableActionsSlot && <Slots.tableActionsSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionPrefixSlot && <Slots.actionPrefixSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionCenterSlot && <Slots.actionCenterSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionSuffixSlot && <Slots.actionSuffixSlot {...props?.cell} rowData={rowData} />}\n </div>\n );\n };\n function flattenDataSource(arr: any) {\n const result: any = [];\n function loop(list: any) {\n for (const item of list) {\n result.push(item);\n if (item.children && item.children.length) {\n loop(item.children);\n }\n }\n }\n loop(arr);\n return result;\n }\n const CheckBoxDom = (props) => {\n const { record, rowId } = props?.cell;\n\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n\n const checkboxProps =\n typeof rowSelection?.getCheckboxProps === \"function\"\n ? rowSelection?.getCheckboxProps?.(record)\n : {};\n return (\n <Checkbox\n {...props?.componentProps}\n checked={\n rowSelection?.selectedRowKeys?.includes((record && record[rowKey]) || \"\") ||\n (!rowId &&\n rowSelection?.selectedRowKeys?.length == newDataSource?.length &&\n newDataSource?.length > 0)\n }\n indeterminate={\n !rowId &&\n rowSelection?.selectedRowKeys?.length > 0 &&\n rowSelection?.selectedRowKeys?.length < newDataSource?.length\n }\n onChange={(e) => {\n if (e.target.checked && rowId) {\n const newSelectedRowKeys = [...rowSelection?.selectedRowKeys, record[rowKey]];\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(newSelectedRowKeys, rows);\n } else if (!e.target.checked && rowId) {\n const newSelectedRowKeys = rowSelection?.selectedRowKeys?.filter(\n (el) => el != record[rowKey],\n );\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n rowSelection?.selectedRowKeys?.filter((el) => el != record[rowKey]),\n rows,\n );\n } else if (e.target.checked && !rowId) {\n const newSelectedRowKeys = newDataSource?.map((el) => el[rowKey]);\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n newDataSource?.map((el) => el[rowKey]),\n rows,\n );\n } else if (!e.target.checked && !rowId) {\n rowSelection?.onChange([], []);\n }\n }}\n {...checkboxProps}\n ></Checkbox>\n );\n };\n useEffect(() => {\n if (rowSelection) {\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n const rows = newDataSource?.filter((el) => selectedRowKeys?.includes(el[rowKey]));\n rowSelection?.onChange(selectedRowKeys, rows);\n }\n }, [selectedRowKeys, dataSource]);\n useEffect(() => {\n setSelectedRowKeys([]);\n }, [query?.pageNum]);\n\n const customCellTemplates = useMemo(() => {\n const templatesObj: any = {};\n for (const key in reactGridProps?.customCellTemplates) {\n const item = reactGridProps?.customCellTemplates[key];\n templatesObj[key] = WidthWrapHoc(item);\n }\n return templatesObj;\n }, [reactGridProps?.customCellTemplates]);\n\n /** 选中高亮整行 */\n const onHightsRow = (cell: any, rows: any) => {\n const list = rows\n ?.find((el) => el?.rowId == cell?.rowId)\n ?.cells?.map((item) => ({\n columnId: item?.columnId,\n rowId: cell?.rowId,\n className: \"custom-highlights-row\",\n borderColor: \"transparent\",\n }));\n highlightsRowIdRef.current = cell?.rowId;\n setHighlights(list);\n };\n\n return (\n <Spin spinning={loading}>\n <div className={`grid-container ${className}`} style={reactGridStyle}>\n <ReactGrid\n ref={gridRef}\n rows={loading ? initRowsRef.current : rows}\n key={dataSource?.length == 0 ? 0 : 1}\n columns={tableColumns}\n onCellsChanged={handleCellsChanged}\n enableFillHandle={true}\n enableRangeSelection={true}\n horizontalStickyBreakpoint={120}\n {...reactGridProps}\n highlights={reactGridProps?.highlights ?? highlights}\n onFocusLocationChanging={(cell: any) => {\n const datatypeId = cell?.columnId + cell?.rowId;\n (window as any).gridEditId = datatypeId;\n if (typeof cell?.rowId == \"string\" && cell?.rowId?.indexOf(\"header-\") > -1) {\n return false;\n }\n if (reactGridProps?.isRowHighlights && cell?.columnId) {\n onHightsRow(cell, rows);\n }\n if ([\"_$actions\", \"rowSelection\", \"ExpandListTemplate\"]?.includes(cell?.columnId)) {\n return false;\n }\n if (reactGridProps?.onFocusLocationChanging) {\n return reactGridProps?.onFocusLocationChanging(cell, rows);\n }\n\n return cell;\n }}\n customCellTemplates={{\n ExpandListTemplate: WidthWrapHoc(ExpandListTemplate),\n ...baseTemplate,\n ...customCellTemplates,\n ...headerCustomTemplate,\n _$actions: WidthWrapHoc(ActionDom),\n rowSelection: WidthWrapHoc(CheckBoxDom),\n // Input: WidthWrapHoc(TextTemplate,props),\n Number: WidthWrapHoc(NumberTemplate, props),\n }}\n />\n {dataSource?.length <= 0 && (\n <div className=\"grid-container-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n )}\n </div>\n </Spin>\n );\n}\n\nexport default forwardRef(CellEditTable);\n"],"mappings":"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"}
|
|
@@ -6,23 +6,23 @@
|
|
|
6
6
|
"files": [
|
|
7
7
|
{
|
|
8
8
|
"path": "index.cjs",
|
|
9
|
-
"size":
|
|
9
|
+
"size": 19484
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"path": "index.css",
|
|
13
|
-
"size":
|
|
13
|
+
"size": 1535
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"path": "index.js",
|
|
17
|
-
"size":
|
|
17
|
+
"size": 26202
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"path": "index.js.map",
|
|
21
|
-
"size":
|
|
21
|
+
"size": 77186
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"path": "project.json",
|
|
25
|
-
"size":
|
|
25
|
+
"size": 203
|
|
26
26
|
}
|
|
27
27
|
]
|
|
28
28
|
}
|
package/dist/project.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hzab/edit-table",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13-alpha.0",
|
|
4
4
|
"projectId": "56c87c84304d7db0",
|
|
5
5
|
"initialCommit": "630fe6d6ecb8",
|
|
6
|
-
"commit": "
|
|
7
|
-
"builtAt": "2026-
|
|
6
|
+
"commit": "a6665df8ed3b",
|
|
7
|
+
"builtAt": "2026-11-02T07:08:05.027Z"
|
|
8
8
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hzab/edit-table",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"src-direct": true,
|
|
6
6
|
"description": "可编辑表格",
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
"typescript": "^5.9.3",
|
|
47
47
|
"vite": "^8.0.0",
|
|
48
48
|
"vitest": "^4.1.10",
|
|
49
|
-
"@hzab/eslint-config": "^0.0.0",
|
|
50
|
-
"@hzab/typescript-config": "^0.0.0",
|
|
51
49
|
"@hzab/form-render": "^1.7.23",
|
|
52
|
-
"@hzab/
|
|
53
|
-
"@hzab/
|
|
50
|
+
"@hzab/typescript-config": "^0.0.0",
|
|
51
|
+
"@hzab/utils": "^1.1.14-alpha.0",
|
|
52
|
+
"@hzab/vite-config": "^0.2.0-alpha.0",
|
|
53
|
+
"@hzab/eslint-config": "^0.0.0"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"build": "vite build && tsc -p tsconfig.build.json",
|
|
@@ -98,6 +98,39 @@ export const WidthWrapHoc = (WrapComponent: any, props = {}) => {
|
|
|
98
98
|
const [isValidator, setIsValidator] = useState(false);
|
|
99
99
|
const comValueInit = useRef<any>(cell?.text);
|
|
100
100
|
const openTimerRef = useRef<any>();
|
|
101
|
+
const wrapRef = useRef<HTMLDivElement>(null);
|
|
102
|
+
/** 容器垂直 padding 缓存(运行时不变,避免每次上报都强制样式计算) */
|
|
103
|
+
const paddingCacheRef = useRef<number | null>(null);
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 通用单元格内容高度上报:内容换行/增减时自动撑开所在行(表头行、角标跳过)。
|
|
107
|
+
* 测量对象是"内容子元素"而非容器自身 —— 容器带 min-height:100%(撑起双击热区),
|
|
108
|
+
* 其 scrollHeight 存在"下限=当前行高"的假象,内容变矮时测不出真实高度;
|
|
109
|
+
* 内容子元素无此限制,双向(撑开/回落)测量都真实,行高一次到位、无渐变动画。
|
|
110
|
+
*/
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
const el = wrapRef.current;
|
|
113
|
+
const onRowHeightChange = cell?.onRowHeightChange;
|
|
114
|
+
if (!el || !onRowHeightChange) return;
|
|
115
|
+
if (cell?.rowId == null) return;
|
|
116
|
+
if (typeof cell?.rowId === "string" && cell.rowId.indexOf("header-") === 0) return;
|
|
117
|
+
|
|
118
|
+
const child = el.firstElementChild;
|
|
119
|
+
const target: Element = child || el;
|
|
120
|
+
if (paddingCacheRef.current === null) {
|
|
121
|
+
const cs = getComputedStyle(el);
|
|
122
|
+
paddingCacheRef.current =
|
|
123
|
+
(parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0);
|
|
124
|
+
}
|
|
125
|
+
// 测子元素时需补回容器垂直 padding;退化测容器自身时 scrollHeight 已含 padding
|
|
126
|
+
const extra = child ? paddingCacheRef.current : 0;
|
|
127
|
+
const report = () =>
|
|
128
|
+
onRowHeightChange(cell?.rowId, target.scrollHeight + extra, cell?.columnId);
|
|
129
|
+
report();
|
|
130
|
+
const ro = new ResizeObserver(report);
|
|
131
|
+
ro.observe(target);
|
|
132
|
+
return () => ro.disconnect();
|
|
133
|
+
}, [cell?.rowId, cell?.columnId, cell?.onRowHeightChange, edit, comValue]);
|
|
101
134
|
useEffect(() => {
|
|
102
135
|
setComValue(cell?.text);
|
|
103
136
|
comValueInit.current = cell?.text;
|
|
@@ -198,6 +231,7 @@ export const WidthWrapHoc = (WrapComponent: any, props = {}) => {
|
|
|
198
231
|
|
|
199
232
|
return (
|
|
200
233
|
<div
|
|
234
|
+
ref={wrapRef}
|
|
201
235
|
className={`base-hoc ${edit ? "base-hoc-edit" : ""}`}
|
|
202
236
|
onDoubleClick={(e) => {
|
|
203
237
|
if (cell?.nonEditable) {
|
package/src/index.less
CHANGED
|
@@ -48,7 +48,11 @@
|
|
|
48
48
|
|
|
49
49
|
.base-hoc {
|
|
50
50
|
width: 100%;
|
|
51
|
-
|
|
51
|
+
/** 高度由内容决定(换行内容撑开),但不小于单元格高度;
|
|
52
|
+
border-box 保证 scrollHeight 恒等于"内容+padding",行高测量不会自我反馈 */
|
|
53
|
+
height: auto;
|
|
54
|
+
min-height: 100%;
|
|
55
|
+
box-sizing: border-box;
|
|
52
56
|
display: flex;
|
|
53
57
|
align-items: center;
|
|
54
58
|
justify-content: center;
|
|
@@ -60,6 +64,14 @@
|
|
|
60
64
|
background-color: #fff;
|
|
61
65
|
}
|
|
62
66
|
|
|
67
|
+
/** 组件回显/编辑内容容器:纯内容高度,不设 min-height(保证高度测量双向真实) */
|
|
68
|
+
.base-hoc-inner {
|
|
69
|
+
width: 100%;
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
}
|
|
74
|
+
|
|
63
75
|
.validator-icon {
|
|
64
76
|
position: relative;
|
|
65
77
|
background: #fff;
|