@hkyhy/marsun-components-core 0.1.81 → 0.1.89
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/components/Table/ResizableHeaderCell.js +35 -32
- package/dist/components/Table/ResizableHeaderCell.js.map +1 -1
- package/dist/components/Table/Table.d.ts +2 -2
- package/dist/components/Table/Table.js +157 -151
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfigUtils.d.ts +11 -0
- package/dist/components/Table/columnConfigUtils.js +90 -79
- package/dist/components/Table/columnConfigUtils.js.map +1 -1
- package/dist/components/Table/index.d.ts +1 -1
- package/dist/components/Table/style.module.scss.js +34 -34
- package/dist/index.js +357 -355
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import { useMarsunFetch } from '@/provider';\nimport type { TableProps as AntTableProps } from 'antd';\nimport { Table as AntTable, Button, Space, Tooltip } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type ComponentType,\n type CSSProperties,\n type Key,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { flushSync } from 'react-dom';\nimport { Empty } from '../Empty';\nimport { Eye } from '../Icons';\nimport gearStyles from './columnConfig.module.scss';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n applyLeafWidthOverrides,\n clearColumnWidthAtPath,\n clampColumnWidth,\n columnsLeafPathSignature,\n COLUMN_CONFIG_COL_KEY,\n COLUMN_RESIZE_MAX_WIDTH,\n COLUMN_RESIZE_MIN_WIDTH,\n columnsToConfig,\n columnsToPanelItems,\n configHasLeafWidths,\n copyColumnWidths,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n setColumnWidthAtPath,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport ResizableHeaderCell from './ResizableHeaderCell';\nimport styles from './style.module.scss';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport {\n useTableFetch,\n type TableFetchHandle,\n type TableFetchMapped,\n type TableFetchQuery,\n} from './useTableFetch';\n\nexport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n TableFetchHandle,\n TableFetchMapped,\n TableFetchQuery,\n TablePrefs,\n TablePrefsFetcher,\n TablePrefsSaver,\n};\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n /** 叶子列拖宽;默认 !!tableName */\n columnResizeEnabled?: boolean;\n /** 拖宽最小 px;默认 48 */\n columnResizeMinWidth?: number;\n /** 拖宽最大 px;默认 480 */\n columnResizeMaxWidth?: number;\n /**\n * Fetch 模式:`dataSource === undefined` 且提供本回调(或 fetchUrl)时由 Table 拉数。\n * 优先于 fetchUrl。Marsun typed list 主路径。\n */\n fetchData?: (q: TableFetchQuery) => Promise<unknown>;\n /** Form FetchSelect 同构:GET/自定义 Request;需配合 transformData 或默认 pageData 解析 */\n fetchUrl?: string;\n fetchOptions?: RequestInit | ((q: TableFetchQuery) => RequestInit);\n transformData?: (raw: unknown) => TableFetchMapped<RecordType>;\n /** 筛选项;稳定序列化变则回第 1 页再请求 */\n fetchParams?: unknown;\n /** Tab 懒请求;默认 true */\n enabled?: boolean;\n /** fetch 模式默认 pageSize;默认 20 */\n defaultPageSize?: number;\n onFetched?: (r: TableFetchMapped<RecordType> & { error: Error | null }) => void;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 叶子列 onHeaderCell 注入拖宽;与眼睛 merge */\nfunction injectLeafColumnResize<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n opts: {\n minWidth: number;\n maxWidth: number;\n widthByPath: Record<string, number>;\n onResizeStartPath: (path: string[]) => void;\n onResizePath: (path: string[], width: number) => void;\n onResizeStopPath: (path: string[], width: number) => void;\n onResetPath: (path: string[]) => void;\n },\n parentFullKey?: string,\n path: string[] = [],\n): ColumnsType<RecordType> {\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n if (col.children?.length) {\n return {\n ...col,\n children: injectLeafColumnResize(\n col.children as ColumnsType<RecordType>,\n opts,\n full,\n nextPath,\n ),\n } as ColumnType<RecordType>;\n }\n\n const pathKey = nextPath.join('/');\n const resolvedWidth =\n opts.widthByPath[pathKey] ??\n (typeof col.width === 'number' && Number.isFinite(col.width) ? col.width : undefined);\n\n return {\n ...col,\n onHeaderCell: (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n 'data-marsun-col-path': pathKey,\n width: resolvedWidth,\n minWidth: opts.minWidth,\n maxWidth: opts.maxWidth,\n onResizeStart: () => opts.onResizeStartPath(nextPath),\n onResize: (w: number) => opts.onResizePath(nextPath, w),\n onResizeStop: (w: number) => opts.onResizeStopPath(nextPath, w),\n onReset: () => opts.onResetPath(nextPath),\n };\n },\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/** 一级组色带数量(与 SCSS headerGroup0..5 对齐) */\nconst HEADER_GROUP_PALETTE_SIZE = 6;\n\n/** 多级表头 title 注入眼睛;同色系按一级组,depth 加深浅 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n depth = 0,\n groupIndex?: number,\n): ColumnsType<RecordType> {\n let groupSeq = 0;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n /** 顶层有 children 的列为一级组,分配色带;固定列叶子不着色 */\n let gIdx = groupIndex;\n if (depth === 0) {\n gIdx = col.children?.length ? groupSeq++ : undefined;\n }\n\n const depthClass =\n gIdx == null\n ? undefined\n : depth === 0\n ? styles.headerDepth0\n : depth === 1\n ? styles.headerDepth1\n : styles.headerDepth2;\n const groupClass =\n gIdx == null ? undefined : styles[`headerGroup${gIdx % HEADER_GROUP_PALETTE_SIZE}`];\n\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n const mergeHeaderCell = (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n className: classNames((prev as { className?: string }).className, groupClass, depthClass),\n };\n };\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n depth + 1,\n gIdx,\n ),\n } as ColumnType<RecordType>;\n }\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n * Fetch:dataSource===undefined 且 fetchData/fetchUrl 时由 Table 拉 pageData。\n */\nfunction TableInner<RecordType extends object = Record<string, unknown>>(\n {\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n loading: loadingProp,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n columnResizeEnabled,\n columnResizeMinWidth = COLUMN_RESIZE_MIN_WIDTH,\n columnResizeMaxWidth = COLUMN_RESIZE_MAX_WIDTH,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled = true,\n defaultPageSize = 20,\n onFetched,\n components,\n ...rest\n }: TableProps<RecordType>,\n ref: Ref<TableFetchHandle>,\n) {\n const fetchCtx = useMarsunFetch();\n const {\n fetchMode,\n rows: fetchRows,\n total: fetchTotal,\n loading: fetchLoading,\n error: fetchError,\n currentPage,\n pageSize,\n setPage,\n reload,\n } = useTableFetch<RecordType>({\n dataSource,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled,\n defaultPageSize,\n baseUrl: fetchCtx.baseUrl,\n defaultHeaders: fetchCtx.headers,\n timeoutMs: fetchCtx.timeoutMs,\n onFetched,\n });\n\n useImperativeHandle(ref, () => ({ reload }), [reload]);\n\n const resolvedDataSource = fetchMode ? fetchRows : dataSource;\n const resolvedLoading = Boolean(loadingProp) || (fetchMode && fetchLoading);\n\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const enableResize = columnResizeEnabled ?? Boolean(tableName);\n const resizeMin = columnResizeMinWidth;\n const resizeMax = columnResizeMaxWidth;\n const resizeOpts = useMemo(\n () => ({ minWidth: resizeMin, maxWidth: resizeMax }),\n [resizeMin, resizeMax],\n );\n\n const defaultColumnsRef = useRef(columns);\n const shellRef = useRef<HTMLDivElement>(null);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n /** 拖宽会话覆盖;mouseup 后仍保留直至 prefs 回写 */\n const [widthOverrides, setWidthOverrides] = useState<Record<string, number>>({});\n const widthOverridesRef = useRef(widthOverrides);\n widthOverridesRef.current = widthOverrides;\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n const columnsStructureKey = useMemo(\n () => columnsLeafPathSignature((columns || []) as ColumnsType<Record<string, unknown>>),\n [columns],\n );\n\n useEffect(() => {\n setWidthOverrides({});\n widthOverridesRef.current = {};\n }, [columnsStructureKey]);\n\n useEffect(() => {\n if ((!enableConfig && !enableResize) || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, enableResize, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n let cols: ColumnsType<RecordType>;\n if (enableConfig) {\n cols = applyColumnConfig(base, savedConfig, resizeOpts);\n } else if (enableResize && savedConfig?.length) {\n const widthMap: Record<string, number> = {};\n const collect = (items: TableColumnConfigItem[], prefix: string) => {\n for (const it of items) {\n const key = prefix ? `${prefix}/${it.id}` : it.id;\n if (typeof it.width === 'number' && Number.isFinite(it.width)) {\n widthMap[key] = it.width;\n }\n if (it.children?.length) collect(it.children, key);\n }\n };\n collect(savedConfig, '');\n cols = applyLeafWidthOverrides(base, widthMap, resizeOpts);\n } else {\n cols = base;\n }\n if (enableResize && Object.keys(widthOverrides).length) {\n cols = applyLeafWidthOverrides(cols, widthOverrides, resizeOpts);\n }\n return cols;\n }, [columns, enableConfig, enableResize, savedConfig, resizeOpts, widthOverrides]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n const withWidths = copyColumnWidths(items, prefs?.columns);\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: withWidths }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const baseColumnConfig = useCallback(() => {\n if (prefs?.columns?.length) return prefs.columns;\n return columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n }, [prefs, columns]);\n\n const handleResizePath = useCallback((path: string[], width: number) => {\n const key = path.join('/');\n setWidthOverrides((prev) => {\n const next = { ...prev, [key]: width };\n widthOverridesRef.current = next;\n return next;\n });\n }, []);\n\n /** 起拖时按 DOM 锁死所有叶子列宽,避免 table-layout:fixed + width:100% 把变化摊到其它列 */\n const handleResizeStartPath = useCallback(\n (_path: string[]) => {\n const root = shellRef.current;\n if (!root) return;\n const nodes = root.querySelectorAll<HTMLElement>('[data-marsun-col-path]');\n if (!nodes.length) return;\n flushSync(() => {\n setWidthOverrides((prev) => {\n const next = { ...prev };\n nodes.forEach((el) => {\n const p = el.getAttribute('data-marsun-col-path');\n if (!p) return;\n const w = el.offsetWidth;\n if (w > 0) next[p] = clampColumnWidth(w, resizeMin, resizeMax);\n });\n widthOverridesRef.current = next;\n return next;\n });\n });\n },\n [resizeMin, resizeMax],\n );\n\n const handleResizeStopPath = useCallback(\n async (path: string[], width: number) => {\n const key = path.join('/');\n const clamped = clampColumnWidth(width, resizeMin, resizeMax);\n const root = shellRef.current;\n const snapshot: Record<string, number> = { ...widthOverridesRef.current, [key]: clamped };\n if (root) {\n root.querySelectorAll<HTMLElement>('[data-marsun-col-path]').forEach((el) => {\n const p = el.getAttribute('data-marsun-col-path');\n if (!p || p === key) return;\n if (snapshot[p] != null) return;\n const w = el.offsetWidth;\n if (w > 0) snapshot[p] = clampColumnWidth(w, resizeMin, resizeMax);\n });\n }\n snapshot[key] = clamped;\n widthOverridesRef.current = snapshot;\n setWidthOverrides(snapshot);\n let nextCols = baseColumnConfig();\n for (const [p, w] of Object.entries(snapshot)) {\n nextCols = setColumnWidthAtPath(nextCols, p.split('/'), w, resizeOpts);\n }\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: nextCols }));\n },\n [baseColumnConfig, persistColumnPrefs, prefs, resizeMax, resizeMin, resizeOpts],\n );\n\n const handleResetPath = useCallback(\n async (path: string[]) => {\n const key = path.join('/');\n setWidthOverrides((prev) => {\n if (!(key in prev)) return prev;\n const next = { ...prev };\n delete next[key];\n widthOverridesRef.current = next;\n return next;\n });\n const nextCols = clearColumnWidthAtPath(baseColumnConfig(), path);\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: nextCols }));\n },\n [baseColumnConfig, persistColumnPrefs, prefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\n }\n if (enableResize) {\n cols = injectLeafColumnResize(cols, {\n minWidth: resizeMin,\n maxWidth: resizeMax,\n widthByPath: widthOverrides,\n onResizeStartPath: handleResizeStartPath,\n onResizePath: handleResizePath,\n onResizeStopPath: (path, w) => {\n void handleResizeStopPath(path, w);\n },\n onResetPath: (path) => {\n void handleResetPath(path);\n },\n });\n }\n const needFlexSpacer =\n enableResize && (Object.keys(widthOverrides).length > 0 || configHasLeafWidths(savedConfig));\n if (needFlexSpacer) {\n const spacerCol: ColumnType<RecordType> = {\n key: FLEX_SPACER_COL_KEY,\n title: '',\n className: styles.flexSpacerCol,\n onHeaderCell: () => ({ className: styles.flexSpacerCol }),\n onCell: () => ({ className: styles.flexSpacerCol }),\n render: () => null,\n };\n cols = [...cols, spacerCol] as ColumnsType<RecordType>;\n }\n if (enableConfig && loaded) {\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n enableResize,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n handleResizeStartPath,\n handleResizePath,\n handleResizeStopPath,\n handleResetPath,\n resizeMin,\n resizeMax,\n widthOverrides,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return resolvedDataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(resolvedDataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, resolvedDataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n ...(fetchMode\n ? {\n current: currentPage,\n pageSize,\n total: fetchTotal,\n onChange: (page: number, size: number) => {\n setPage(page, size);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(page, size);\n }\n },\n }\n : null),\n };\n\n const mergedLocale = {\n ...locale,\n emptyText:\n locale?.emptyText ??\n (fetchError ? (\n <Empty iconType=\"simple\" description={fetchError.message || '加载失败'} />\n ) : (\n <Empty iconType=\"simple\" description=\"暂无数据\" />\n )),\n };\n\n const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n const mergedComponents = useMemo(() => {\n const userHeader = components?.header;\n const UserCell = userHeader && 'cell' in userHeader ? userHeader.cell : undefined;\n if (!enableResize) {\n return components;\n }\n const HeaderCell = (props: Record<string, unknown>) => {\n const hasResize = typeof props.onResize === 'function';\n if (!hasResize && UserCell) {\n const Comp = UserCell as ComponentType<Record<string, unknown>>;\n return <Comp {...props} />;\n }\n // 拖宽开启时以 ResizableHeaderCell 为准;onHeaderCell 的 className/style/title 仍透传\n return <ResizableHeaderCell {...(props as ComponentProps<typeof ResizableHeaderCell>)} />;\n };\n return {\n ...components,\n header: {\n ...userHeader,\n cell: HeaderCell,\n },\n };\n }, [components, enableResize]);\n\n return (\n <div ref={shellRef} className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n loading={resolvedLoading}\n rowSelection={mergedRowSelection}\n components={mergedComponents}\n {...rest}\n />\n </div>\n );\n}\n\nconst Table = forwardRef(TableInner) as <RecordType extends object = Record<string, unknown>>(\n props: TableProps<RecordType> & { ref?: Ref<TableFetchHandle> },\n) => ReactElement | null;\n\nexport default Table;\n\nexport { emptyTablePrefs } from './tablePrefsTypes';\nexport {\n applyHiddenRows,\n mergeTablePrefs,\n normalizeHiddenRowKeys,\n parseTablePrefs,\n serializeTablePrefs,\n} from './tablePrefsUtils';\nexport {\n applyColumnConfig,\n applyLeafWidthOverrides,\n clearColumnWidthAtPath,\n clampColumnWidth,\n columnsLeafPathSignature,\n COLUMN_CONFIG_COL_KEY,\n COLUMN_RESIZE_MAX_WIDTH,\n COLUMN_RESIZE_MIN_WIDTH,\n columnsToConfig,\n configHasLeafWidths,\n copyColumnWidths,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n setColumnWidthAtPath,\n};\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","injectLeafColumnResize","opts","parentFullKey","path","i","full","configId","shortChildId","nextPath","prevOnHeaderCell","pathKey","resolvedWidth","c","HEADER_GROUP_PALETTE_SIZE","injectHeaderHideEyes","onHidePath","depth","groupIndex","groupSeq","gIdx","depthClass","styles","groupClass","titleNode","jsxs","jsx","Tooltip","e","Eye","mergeHeaderCell","prev","classNames","_b","TableInner","className","style","scroll","pagination","locale","dataSource","loadingProp","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","columnResizeEnabled","columnResizeMinWidth","COLUMN_RESIZE_MIN_WIDTH","columnResizeMaxWidth","COLUMN_RESIZE_MAX_WIDTH","fetchData","fetchUrl","fetchOptions","transformData","fetchParams","enabled","defaultPageSize","onFetched","components","rest","ref","fetchCtx","useMarsunFetch","fetchMode","fetchRows","fetchTotal","fetchLoading","fetchError","currentPage","pageSize","setPage","reload","useTableFetch","useImperativeHandle","resolvedDataSource","resolvedLoading","enableConfig","enableResize","resizeMin","resizeMax","resizeOpts","useMemo","defaultColumnsRef","useRef","shellRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","widthOverrides","setWidthOverrides","widthOverridesRef","useEffect","columnsStructureKey","columnsLeafPathSignature","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","cols","applyColumnConfig","widthMap","collect","prefix","it","applyLeafWidthOverrides","defaultPanelItems","columnsToPanelItems","handleConfirm","withWidths","copyColumnWidths","mergeTablePrefs","baseColumnConfig","columnsToConfig","handleResizePath","width","handleResizeStartPath","_path","root","nodes","flushSync","el","p","clampColumnWidth","handleResizeStopPath","clamped","snapshot","nextCols","setColumnWidthAtPath","handleResetPath","clearColumnWidthAtPath","handleHideColumnPath","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","configHasLeafWidths","spacerCol","FLEX_SPACER_COL_KEY","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","page","size","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","mergedComponents","userHeader","UserCell","props","ResizableHeaderCell","AntTable","Table","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import { useMarsunFetch } from '@/provider';\nimport type { TableProps as AntTableProps } from 'antd';\nimport { Table as AntTable, Button, Space, Tooltip } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type ComponentType,\n type CSSProperties,\n type Key,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { flushSync } from 'react-dom';\nimport { Empty } from '../Empty';\nimport { Eye } from '../Icons';\nimport gearStyles from './columnConfig.module.scss';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n applyLeafWidthOverrides,\n clearColumnWidthAtPath,\n clampColumnWidth,\n columnsLeafPathSignature,\n COLUMN_CONFIG_COL_KEY,\n COLUMN_RESIZE_MAX_WIDTH,\n COLUMN_RESIZE_MIN_WIDTH,\n columnsToConfig,\n columnsToPanelItems,\n configHasLeafWidths,\n copyColumnWidths,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n insertBeforeFixedRight,\n isFixedColumn,\n isInternalColumnKey,\n setColumnWidthAtPath,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport ResizableHeaderCell from './ResizableHeaderCell';\nimport styles from './style.module.scss';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport {\n useTableFetch,\n type TableFetchHandle,\n type TableFetchMapped,\n type TableFetchQuery,\n} from './useTableFetch';\n\nexport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n TableFetchHandle,\n TableFetchMapped,\n TableFetchQuery,\n TablePrefs,\n TablePrefsFetcher,\n TablePrefsSaver,\n};\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n /** 叶子列拖宽;默认 !!tableName */\n columnResizeEnabled?: boolean;\n /** 拖宽最小 px;默认 48 */\n columnResizeMinWidth?: number;\n /** 拖宽最大 px;默认 480 */\n columnResizeMaxWidth?: number;\n /**\n * Fetch 模式:`dataSource === undefined` 且提供本回调(或 fetchUrl)时由 Table 拉数。\n * 优先于 fetchUrl。Marsun typed list 主路径。\n */\n fetchData?: (q: TableFetchQuery) => Promise<unknown>;\n /** Form FetchSelect 同构:GET/自定义 Request;需配合 transformData 或默认 pageData 解析 */\n fetchUrl?: string;\n fetchOptions?: RequestInit | ((q: TableFetchQuery) => RequestInit);\n transformData?: (raw: unknown) => TableFetchMapped<RecordType>;\n /** 筛选项;稳定序列化变则回第 1 页再请求 */\n fetchParams?: unknown;\n /** Tab 懒请求;默认 true */\n enabled?: boolean;\n /** fetch 模式默认 pageSize;默认 20 */\n defaultPageSize?: number;\n onFetched?: (r: TableFetchMapped<RecordType> & { error: Error | null }) => void;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 叶子列 onHeaderCell 注入拖宽;与眼睛 merge */\nfunction injectLeafColumnResize<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n opts: {\n minWidth: number;\n maxWidth: number;\n widthByPath: Record<string, number>;\n onResizeStartPath: (path: string[]) => void;\n onResizePath: (path: string[], width: number) => void;\n onResizeStopPath: (path: string[], width: number) => void;\n onResetPath: (path: string[]) => void;\n },\n parentFullKey?: string,\n path: string[] = [],\n): ColumnsType<RecordType> {\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n if (col.children?.length) {\n return {\n ...col,\n children: injectLeafColumnResize(\n col.children as ColumnsType<RecordType>,\n opts,\n full,\n nextPath,\n ),\n } as ColumnType<RecordType>;\n }\n\n const pathKey = nextPath.join('/');\n const resolvedWidth =\n opts.widthByPath[pathKey] ??\n (typeof col.width === 'number' && Number.isFinite(col.width) ? col.width : undefined);\n\n return {\n ...col,\n onHeaderCell: (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n 'data-marsun-col-path': pathKey,\n width: resolvedWidth,\n minWidth: opts.minWidth,\n maxWidth: opts.maxWidth,\n onResizeStart: () => opts.onResizeStartPath(nextPath),\n onResize: (w: number) => opts.onResizePath(nextPath, w),\n onResizeStop: (w: number) => opts.onResizeStopPath(nextPath, w),\n onReset: () => opts.onResetPath(nextPath),\n };\n },\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/** 一级组色带数量(与 SCSS headerGroup0..5 对齐) */\nconst HEADER_GROUP_PALETTE_SIZE = 6;\n\n/** 多级表头 title 注入眼睛;同色系按一级组,depth 加深浅 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n depth = 0,\n groupIndex?: number,\n): ColumnsType<RecordType> {\n let groupSeq = 0;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n /** 顶层有 children 的列为一级组,分配色带;固定列叶子不着色 */\n let gIdx = groupIndex;\n if (depth === 0) {\n gIdx = col.children?.length ? groupSeq++ : undefined;\n }\n\n const depthClass =\n gIdx == null\n ? undefined\n : depth === 0\n ? styles.headerDepth0\n : depth === 1\n ? styles.headerDepth1\n : styles.headerDepth2;\n const groupClass =\n gIdx == null ? undefined : styles[`headerGroup${gIdx % HEADER_GROUP_PALETTE_SIZE}`];\n\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n const mergeHeaderCell = (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n className: classNames((prev as { className?: string }).className, groupClass, depthClass),\n };\n };\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n depth + 1,\n gIdx,\n ),\n } as ColumnType<RecordType>;\n }\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n * Fetch:dataSource===undefined 且 fetchData/fetchUrl 时由 Table 拉 pageData。\n */\nfunction TableInner<RecordType extends object = Record<string, unknown>>(\n {\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n loading: loadingProp,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n columnResizeEnabled,\n columnResizeMinWidth = COLUMN_RESIZE_MIN_WIDTH,\n columnResizeMaxWidth = COLUMN_RESIZE_MAX_WIDTH,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled = true,\n defaultPageSize = 20,\n onFetched,\n components,\n ...rest\n }: TableProps<RecordType>,\n ref: Ref<TableFetchHandle>,\n) {\n const fetchCtx = useMarsunFetch();\n const {\n fetchMode,\n rows: fetchRows,\n total: fetchTotal,\n loading: fetchLoading,\n error: fetchError,\n currentPage,\n pageSize,\n setPage,\n reload,\n } = useTableFetch<RecordType>({\n dataSource,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled,\n defaultPageSize,\n baseUrl: fetchCtx.baseUrl,\n defaultHeaders: fetchCtx.headers,\n timeoutMs: fetchCtx.timeoutMs,\n onFetched,\n });\n\n useImperativeHandle(ref, () => ({ reload }), [reload]);\n\n const resolvedDataSource = fetchMode ? fetchRows : dataSource;\n const resolvedLoading = Boolean(loadingProp) || (fetchMode && fetchLoading);\n\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const enableResize = columnResizeEnabled ?? Boolean(tableName);\n const resizeMin = columnResizeMinWidth;\n const resizeMax = columnResizeMaxWidth;\n const resizeOpts = useMemo(\n () => ({ minWidth: resizeMin, maxWidth: resizeMax }),\n [resizeMin, resizeMax],\n );\n\n const defaultColumnsRef = useRef(columns);\n const shellRef = useRef<HTMLDivElement>(null);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n /** 拖宽会话覆盖;mouseup 后仍保留直至 prefs 回写 */\n const [widthOverrides, setWidthOverrides] = useState<Record<string, number>>({});\n const widthOverridesRef = useRef(widthOverrides);\n widthOverridesRef.current = widthOverrides;\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n const columnsStructureKey = useMemo(\n () => columnsLeafPathSignature((columns || []) as ColumnsType<Record<string, unknown>>),\n [columns],\n );\n\n useEffect(() => {\n setWidthOverrides({});\n widthOverridesRef.current = {};\n }, [columnsStructureKey]);\n\n useEffect(() => {\n if ((!enableConfig && !enableResize) || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, enableResize, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n let cols: ColumnsType<RecordType>;\n if (enableConfig) {\n cols = applyColumnConfig(base, savedConfig, resizeOpts);\n } else if (enableResize && savedConfig?.length) {\n const widthMap: Record<string, number> = {};\n const collect = (items: TableColumnConfigItem[], prefix: string) => {\n for (const it of items) {\n const key = prefix ? `${prefix}/${it.id}` : it.id;\n if (typeof it.width === 'number' && Number.isFinite(it.width)) {\n widthMap[key] = it.width;\n }\n if (it.children?.length) collect(it.children, key);\n }\n };\n collect(savedConfig, '');\n cols = applyLeafWidthOverrides(base, widthMap, resizeOpts);\n } else {\n cols = base;\n }\n if (enableResize && Object.keys(widthOverrides).length) {\n cols = applyLeafWidthOverrides(cols, widthOverrides, resizeOpts);\n }\n return cols;\n }, [columns, enableConfig, enableResize, savedConfig, resizeOpts, widthOverrides]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n const withWidths = copyColumnWidths(items, prefs?.columns);\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: withWidths }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const baseColumnConfig = useCallback(() => {\n if (prefs?.columns?.length) return prefs.columns;\n return columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n }, [prefs, columns]);\n\n const handleResizePath = useCallback((path: string[], width: number) => {\n const key = path.join('/');\n setWidthOverrides((prev) => {\n const next = { ...prev, [key]: width };\n widthOverridesRef.current = next;\n return next;\n });\n }, []);\n\n /** 起拖时按 DOM 锁死所有叶子列宽,避免 table-layout:fixed + width:100% 把变化摊到其它列 */\n const handleResizeStartPath = useCallback(\n (_path: string[]) => {\n const root = shellRef.current;\n if (!root) return;\n const nodes = root.querySelectorAll<HTMLElement>('[data-marsun-col-path]');\n if (!nodes.length) return;\n flushSync(() => {\n setWidthOverrides((prev) => {\n const next = { ...prev };\n nodes.forEach((el) => {\n const p = el.getAttribute('data-marsun-col-path');\n if (!p) return;\n const w = el.offsetWidth;\n if (w > 0) next[p] = clampColumnWidth(w, resizeMin, resizeMax);\n });\n widthOverridesRef.current = next;\n return next;\n });\n });\n },\n [resizeMin, resizeMax],\n );\n\n const handleResizeStopPath = useCallback(\n async (path: string[], width: number) => {\n const key = path.join('/');\n const clamped = clampColumnWidth(width, resizeMin, resizeMax);\n const root = shellRef.current;\n const snapshot: Record<string, number> = { ...widthOverridesRef.current, [key]: clamped };\n if (root) {\n root.querySelectorAll<HTMLElement>('[data-marsun-col-path]').forEach((el) => {\n const p = el.getAttribute('data-marsun-col-path');\n if (!p || p === key) return;\n if (snapshot[p] != null) return;\n const w = el.offsetWidth;\n if (w > 0) snapshot[p] = clampColumnWidth(w, resizeMin, resizeMax);\n });\n }\n snapshot[key] = clamped;\n widthOverridesRef.current = snapshot;\n setWidthOverrides(snapshot);\n let nextCols = baseColumnConfig();\n for (const [p, w] of Object.entries(snapshot)) {\n nextCols = setColumnWidthAtPath(nextCols, p.split('/'), w, resizeOpts);\n }\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: nextCols }));\n },\n [baseColumnConfig, persistColumnPrefs, prefs, resizeMax, resizeMin, resizeOpts],\n );\n\n const handleResetPath = useCallback(\n async (path: string[]) => {\n const key = path.join('/');\n setWidthOverrides((prev) => {\n if (!(key in prev)) return prev;\n const next = { ...prev };\n delete next[key];\n widthOverridesRef.current = next;\n return next;\n });\n const nextCols = clearColumnWidthAtPath(baseColumnConfig(), path);\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: nextCols }));\n },\n [baseColumnConfig, persistColumnPrefs, prefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\n }\n if (enableResize) {\n cols = injectLeafColumnResize(cols, {\n minWidth: resizeMin,\n maxWidth: resizeMax,\n widthByPath: widthOverrides,\n onResizeStartPath: handleResizeStartPath,\n onResizePath: handleResizePath,\n onResizeStopPath: (path, w) => {\n void handleResizeStopPath(path, w);\n },\n onResetPath: (path) => {\n void handleResetPath(path);\n },\n });\n }\n const needFlexSpacer =\n enableResize && (Object.keys(widthOverrides).length > 0 || configHasLeafWidths(savedConfig));\n if (needFlexSpacer) {\n const spacerCol: ColumnType<RecordType> = {\n key: FLEX_SPACER_COL_KEY,\n title: '',\n className: styles.flexSpacerCol,\n onHeaderCell: () => ({ className: styles.flexSpacerCol }),\n onCell: () => ({ className: styles.flexSpacerCol }),\n render: () => null,\n };\n // 必须插在 fixed:right 之前,否则操作列 / 齿轮列 sticky 会断\n cols = insertBeforeFixedRight(\n cols as ColumnType<RecordType>[],\n spacerCol,\n ) as ColumnsType<RecordType>;\n }\n if (enableConfig && loaded) {\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n enableResize,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n handleResizeStartPath,\n handleResizePath,\n handleResizeStopPath,\n handleResetPath,\n resizeMin,\n resizeMax,\n widthOverrides,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return resolvedDataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(resolvedDataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, resolvedDataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n ...(fetchMode\n ? {\n current: currentPage,\n pageSize,\n total: fetchTotal,\n onChange: (page: number, size: number) => {\n setPage(page, size);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(page, size);\n }\n },\n }\n : null),\n };\n\n const mergedLocale = {\n ...locale,\n emptyText:\n locale?.emptyText ??\n (fetchError ? (\n <Empty iconType=\"simple\" description={fetchError.message || '加载失败'} />\n ) : (\n <Empty iconType=\"simple\" description=\"暂无数据\" />\n )),\n };\n\n const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n const mergedComponents = useMemo(() => {\n const userHeader = components?.header;\n const UserCell = userHeader && 'cell' in userHeader ? userHeader.cell : undefined;\n if (!enableResize) {\n return components;\n }\n const HeaderCell = (props: Record<string, unknown>) => {\n const hasResize = typeof props.onResize === 'function';\n if (!hasResize && UserCell) {\n const Comp = UserCell as ComponentType<Record<string, unknown>>;\n return <Comp {...props} />;\n }\n // 拖宽开启时以 ResizableHeaderCell 为准;onHeaderCell 的 className/style/title 仍透传\n return <ResizableHeaderCell {...(props as ComponentProps<typeof ResizableHeaderCell>)} />;\n };\n return {\n ...components,\n header: {\n ...userHeader,\n cell: HeaderCell,\n },\n };\n }, [components, enableResize]);\n\n return (\n <div ref={shellRef} className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n loading={resolvedLoading}\n rowSelection={mergedRowSelection}\n components={mergedComponents}\n {...rest}\n />\n </div>\n );\n}\n\nconst Table = forwardRef(TableInner) as <RecordType extends object = Record<string, unknown>>(\n props: TableProps<RecordType> & { ref?: Ref<TableFetchHandle> },\n) => ReactElement | null;\n\nexport default Table;\n\nexport { emptyTablePrefs } from './tablePrefsTypes';\nexport {\n applyHiddenRows,\n mergeTablePrefs,\n normalizeHiddenRowKeys,\n parseTablePrefs,\n serializeTablePrefs,\n} from './tablePrefsUtils';\nexport {\n applyColumnConfig,\n applyLeafWidthOverrides,\n clearColumnWidthAtPath,\n clampColumnWidth,\n columnsLeafPathSignature,\n COLUMN_CONFIG_COL_KEY,\n COLUMN_RESIZE_MAX_WIDTH,\n COLUMN_RESIZE_MIN_WIDTH,\n columnsToConfig,\n configHasLeafWidths,\n copyColumnWidths,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n insertBeforeFixedRight,\n isFixedColumn,\n isInternalColumnKey,\n setColumnWidthAtPath,\n};\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","injectLeafColumnResize","opts","parentFullKey","path","i","full","configId","shortChildId","nextPath","prevOnHeaderCell","pathKey","resolvedWidth","c","HEADER_GROUP_PALETTE_SIZE","injectHeaderHideEyes","onHidePath","depth","groupIndex","groupSeq","gIdx","depthClass","styles","groupClass","titleNode","jsxs","jsx","Tooltip","e","Eye","mergeHeaderCell","prev","classNames","_b","TableInner","className","style","scroll","pagination","locale","dataSource","loadingProp","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","columnResizeEnabled","columnResizeMinWidth","COLUMN_RESIZE_MIN_WIDTH","columnResizeMaxWidth","COLUMN_RESIZE_MAX_WIDTH","fetchData","fetchUrl","fetchOptions","transformData","fetchParams","enabled","defaultPageSize","onFetched","components","rest","ref","fetchCtx","useMarsunFetch","fetchMode","fetchRows","fetchTotal","fetchLoading","fetchError","currentPage","pageSize","setPage","reload","useTableFetch","useImperativeHandle","resolvedDataSource","resolvedLoading","enableConfig","enableResize","resizeMin","resizeMax","resizeOpts","useMemo","defaultColumnsRef","useRef","shellRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","widthOverrides","setWidthOverrides","widthOverridesRef","useEffect","columnsStructureKey","columnsLeafPathSignature","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","cols","applyColumnConfig","widthMap","collect","prefix","it","applyLeafWidthOverrides","defaultPanelItems","columnsToPanelItems","handleConfirm","withWidths","copyColumnWidths","mergeTablePrefs","baseColumnConfig","columnsToConfig","handleResizePath","width","handleResizeStartPath","_path","root","nodes","flushSync","el","p","clampColumnWidth","handleResizeStopPath","clamped","snapshot","nextCols","setColumnWidthAtPath","handleResetPath","clearColumnWidthAtPath","handleHideColumnPath","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","configHasLeafWidths","spacerCol","FLEX_SPACER_COL_KEY","insertBeforeFixedRight","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","page","size","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","mergedComponents","userHeader","UserCell","props","ResizableHeaderCell","AntTable","Table","forwardRef"],"mappings":"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"}
|
|
@@ -42,6 +42,17 @@ export declare function clearColumnWidthAtPath(items: TableColumnConfigItem[], p
|
|
|
42
42
|
export declare function copyColumnWidths(target: TableColumnConfigItem[], source: TableColumnConfigItem[] | null | undefined): TableColumnConfigItem[];
|
|
43
43
|
/** prefs/config 是否含任意叶子自定义 width(用于挂弹性占位列) */
|
|
44
44
|
export declare function configHasLeafWidths(items: TableColumnConfigItem[] | null | undefined): boolean;
|
|
45
|
+
/** 是否固定列(left / right / true / start / end) */
|
|
46
|
+
export declare function isFixedColumn(col: {
|
|
47
|
+
fixed?: unknown;
|
|
48
|
+
} | null | undefined): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* 将弹性占位插到首个右侧固定列 **之前**(`right` / `end`)。
|
|
51
|
+
* 若插在右侧固定列之后,antd 固定列栈会断,表现为操作列不再 sticky / 表头错位。
|
|
52
|
+
*/
|
|
53
|
+
export declare function insertBeforeFixedRight<T extends {
|
|
54
|
+
fixed?: unknown;
|
|
55
|
+
}>(columns: T[], spacer: T): T[];
|
|
45
56
|
/**
|
|
46
57
|
* 叶子 path 签名;columns 结构变时用于清空 widthOverrides。
|
|
47
58
|
* 例:`factory\0name\0TGCV/finished`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const L = "__marsun_column_config", O = "__marsun_flex_spacer", P = 48, B = 480;
|
|
2
2
|
function E(n, e = 48, r = 480) {
|
|
3
3
|
if (!Number.isFinite(n)) return e;
|
|
4
4
|
const i = Number.isFinite(e) ? e : 48, h = Number.isFinite(r) ? r : 480;
|
|
@@ -8,7 +8,7 @@ function I(n, e) {
|
|
|
8
8
|
return n.key != null && String(n.key) !== "" ? String(n.key) : n.dataIndex != null ? Array.isArray(n.dataIndex) ? n.dataIndex.join(".") : String(n.dataIndex) : `__col_${e}`;
|
|
9
9
|
}
|
|
10
10
|
function b(n) {
|
|
11
|
-
return n ===
|
|
11
|
+
return n === L || n === O || n.startsWith("__marsun_");
|
|
12
12
|
}
|
|
13
13
|
function N(n, e) {
|
|
14
14
|
return b(I(n, e));
|
|
@@ -17,7 +17,7 @@ function W(n, e) {
|
|
|
17
17
|
const r = `${n}_`;
|
|
18
18
|
return e.startsWith(r) ? e.slice(r.length) : e;
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function m(n) {
|
|
21
21
|
return n == null ? "" : typeof n == "string" || typeof n == "number" ? String(n) : "";
|
|
22
22
|
}
|
|
23
23
|
function T(n, e) {
|
|
@@ -28,25 +28,25 @@ function T(n, e) {
|
|
|
28
28
|
return t != null && t.length ? { id: l, children: t } : { id: l };
|
|
29
29
|
}).filter(Boolean) : [];
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function A(n, e, r) {
|
|
32
32
|
return n != null && n.length ? n.map((i, h) => {
|
|
33
|
-
var
|
|
33
|
+
var u;
|
|
34
34
|
if (N(i, h)) return null;
|
|
35
|
-
const l = I(i, h), t = r ? W(r, l) : l, d =
|
|
35
|
+
const l = I(i, h), t = r ? W(r, l) : l, d = m(i.title) || t, f = (u = i.children) != null && u.length ? A(i.children, e, l) : void 0, a = !!((f == null ? void 0 : f.length) && f.every((_) => _.hidden || !1));
|
|
36
36
|
return {
|
|
37
37
|
id: t,
|
|
38
38
|
title: i.title,
|
|
39
39
|
label: d,
|
|
40
40
|
hidden: !!a,
|
|
41
|
-
children:
|
|
41
|
+
children: f
|
|
42
42
|
};
|
|
43
43
|
}).filter(Boolean) : [];
|
|
44
44
|
}
|
|
45
|
-
function
|
|
45
|
+
function x(n) {
|
|
46
46
|
var e;
|
|
47
|
-
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(
|
|
47
|
+
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(x));
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function D(n, e) {
|
|
50
50
|
return (n.children || []).find((i, h) => {
|
|
51
51
|
const l = I(i, h), t = I(n, 0);
|
|
52
52
|
return W(String(n.key ?? ""), l) === e || W(t, l) === e || l === e || l.endsWith(`_${e}`);
|
|
@@ -56,20 +56,20 @@ function X(n, e, r) {
|
|
|
56
56
|
if (!(n != null && n.length)) return n || [];
|
|
57
57
|
if (!(e != null && e.length)) return n;
|
|
58
58
|
const i = (r == null ? void 0 : r.minWidth) ?? 48, h = (r == null ? void 0 : r.maxWidth) ?? 480, l = /* @__PURE__ */ new Map();
|
|
59
|
-
n.forEach((d,
|
|
60
|
-
l.set(I(d,
|
|
59
|
+
n.forEach((d, f) => {
|
|
60
|
+
l.set(I(d, f), d);
|
|
61
61
|
});
|
|
62
|
-
const t = (d,
|
|
62
|
+
const t = (d, f, c) => {
|
|
63
63
|
var _, C;
|
|
64
|
-
const a = [],
|
|
64
|
+
const a = [], u = /* @__PURE__ */ new Set();
|
|
65
65
|
for (const o of d) {
|
|
66
|
-
if (
|
|
67
|
-
|
|
66
|
+
if (x(o)) {
|
|
67
|
+
u.add(o.id);
|
|
68
68
|
continue;
|
|
69
69
|
}
|
|
70
70
|
let s;
|
|
71
|
-
if (c ? s =
|
|
72
|
-
if (
|
|
71
|
+
if (c ? s = D(c, o.id) : s = l.get(o.id), !!s)
|
|
72
|
+
if (u.add(o.id), (_ = o.children) != null && _.length && ((C = s.children) != null && C.length)) {
|
|
73
73
|
const g = t(o.children, s.children, s);
|
|
74
74
|
if (!g.length) continue;
|
|
75
75
|
a.push({ ...s, children: g });
|
|
@@ -78,63 +78,63 @@ function X(n, e, r) {
|
|
|
78
78
|
typeof o.width == "number" && Number.isFinite(o.width) && (g.width = E(o.width, i, h)), a.push(g);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
return
|
|
82
|
-
const g = I(o, s),
|
|
83
|
-
!
|
|
81
|
+
return f.forEach((o, s) => {
|
|
82
|
+
const g = I(o, s), w = c ? W(String(c.key ?? I(c, 0)), g) : g;
|
|
83
|
+
!u.has(w) && !u.has(g) && a.push(o);
|
|
84
84
|
}), a;
|
|
85
85
|
};
|
|
86
86
|
return t(e, n);
|
|
87
87
|
}
|
|
88
|
-
function
|
|
88
|
+
function R(n, e, r, i, h = []) {
|
|
89
89
|
if (!(n != null && n.length) || !e || !Object.keys(e).length)
|
|
90
90
|
return n || [];
|
|
91
91
|
const l = (r == null ? void 0 : r.minWidth) ?? 48, t = (r == null ? void 0 : r.maxWidth) ?? 480;
|
|
92
|
-
return n.map((d,
|
|
92
|
+
return n.map((d, f) => {
|
|
93
93
|
var o;
|
|
94
|
-
const c = I(d,
|
|
94
|
+
const c = I(d, f);
|
|
95
95
|
if (b(c)) return d;
|
|
96
|
-
const a = i ? W(i, c) : c,
|
|
96
|
+
const a = i ? W(i, c) : c, u = [...h, a];
|
|
97
97
|
if ((o = d.children) != null && o.length)
|
|
98
98
|
return {
|
|
99
99
|
...d,
|
|
100
|
-
children:
|
|
100
|
+
children: R(
|
|
101
101
|
d.children,
|
|
102
102
|
e,
|
|
103
103
|
r,
|
|
104
104
|
c,
|
|
105
|
-
|
|
105
|
+
u
|
|
106
106
|
)
|
|
107
107
|
};
|
|
108
|
-
const _ =
|
|
108
|
+
const _ = u.join("/"), C = e[_];
|
|
109
109
|
return typeof C != "number" || !Number.isFinite(C) ? d : { ...d, width: E(C, l, t) };
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
|
-
function
|
|
112
|
+
function p(n) {
|
|
113
113
|
return n.map((e) => {
|
|
114
114
|
var h;
|
|
115
|
-
const r = (h = e.children) != null && h.length ?
|
|
115
|
+
const r = (h = e.children) != null && h.length ? p(e.children) : void 0, i = { id: e.id };
|
|
116
116
|
return e.hidden && (i.hidden = !0), r != null && r.length && (i.children = r), i;
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
|
-
function
|
|
119
|
+
function v(n, e) {
|
|
120
120
|
if (!e.length) return n;
|
|
121
121
|
const [r, ...i] = e;
|
|
122
122
|
return n.map((h) => {
|
|
123
123
|
var d;
|
|
124
124
|
if (h.id !== r) return h;
|
|
125
125
|
if (!i.length)
|
|
126
|
-
return
|
|
127
|
-
const l = (d = h.children) != null && d.length ?
|
|
126
|
+
return y(h);
|
|
127
|
+
const l = (d = h.children) != null && d.length ? v(h.children, i) : h.children, t = l != null && l.length ? l.every(H) : h.hidden;
|
|
128
128
|
return { ...h, children: l, hidden: t || h.hidden };
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
function U(n, e, r, i) {
|
|
132
132
|
if (!e.length) return n;
|
|
133
|
-
const h = (i == null ? void 0 : i.minWidth) ?? 48, l = (i == null ? void 0 : i.maxWidth) ?? 480, t = E(r, h, l), [d, ...
|
|
133
|
+
const h = (i == null ? void 0 : i.minWidth) ?? 48, l = (i == null ? void 0 : i.maxWidth) ?? 480, t = E(r, h, l), [d, ...f] = e;
|
|
134
134
|
let c = !1;
|
|
135
|
-
const a = n.map((
|
|
135
|
+
const a = n.map((u) => {
|
|
136
136
|
var _;
|
|
137
|
-
return
|
|
137
|
+
return u.id !== d ? u : (c = !0, f.length ? (_ = u.children) != null && _.length ? { ...u, children: U(u.children, f, t, i) } : u : { ...u, width: t });
|
|
138
138
|
});
|
|
139
139
|
return c ? a : n;
|
|
140
140
|
}
|
|
@@ -147,7 +147,7 @@ function Z(n, e) {
|
|
|
147
147
|
if (t.id !== r) return t;
|
|
148
148
|
if (h = !0, !i.length) {
|
|
149
149
|
if (t.width === void 0) return t;
|
|
150
|
-
const { width:
|
|
150
|
+
const { width: f, ...c } = t;
|
|
151
151
|
return c;
|
|
152
152
|
}
|
|
153
153
|
return (d = t.children) != null && d.length ? { ...t, children: Z(t.children, i) } : t;
|
|
@@ -158,15 +158,15 @@ function $(n, e) {
|
|
|
158
158
|
if (!(e != null && e.length)) return n;
|
|
159
159
|
const r = /* @__PURE__ */ new Map(), i = (l, t) => {
|
|
160
160
|
var d;
|
|
161
|
-
for (const
|
|
162
|
-
const c = t ? `${t}/${
|
|
163
|
-
typeof
|
|
161
|
+
for (const f of l) {
|
|
162
|
+
const c = t ? `${t}/${f.id}` : f.id;
|
|
163
|
+
typeof f.width == "number" && Number.isFinite(f.width) && r.set(c, f.width), (d = f.children) != null && d.length && i(f.children, c);
|
|
164
164
|
}
|
|
165
165
|
};
|
|
166
166
|
if (i(e, ""), !r.size) return n;
|
|
167
167
|
const h = (l, t) => l.map((d) => {
|
|
168
|
-
var
|
|
169
|
-
const
|
|
168
|
+
var u;
|
|
169
|
+
const f = t ? `${t}/${d.id}` : d.id, c = (u = d.children) != null && u.length ? h(d.children, f) : d.children, a = r.get(f);
|
|
170
170
|
return a == null ? c !== d.children ? { ...d, children: c } : d : { ...d, width: a, children: c };
|
|
171
171
|
});
|
|
172
172
|
return h(n, "");
|
|
@@ -178,57 +178,66 @@ function k(n) {
|
|
|
178
178
|
if (typeof r.width == "number" && Number.isFinite(r.width) || (e = r.children) != null && e.length && k(r.children)) return !0;
|
|
179
179
|
return !1;
|
|
180
180
|
}
|
|
181
|
-
function
|
|
181
|
+
function j(n) {
|
|
182
|
+
const e = n == null ? void 0 : n.fixed;
|
|
183
|
+
return e === "left" || e === "right" || e === !0 || e === "start" || e === "end";
|
|
184
|
+
}
|
|
185
|
+
function Y(n, e) {
|
|
186
|
+
if (!n.length) return [e];
|
|
187
|
+
const r = n.findIndex((i) => i.fixed === "right" || i.fixed === "end");
|
|
188
|
+
return r < 0 ? [...n, e] : [...n.slice(0, r), e, ...n.slice(r)];
|
|
189
|
+
}
|
|
190
|
+
function F(n, e, r = []) {
|
|
182
191
|
if (!(n != null && n.length)) return "";
|
|
183
192
|
const i = [];
|
|
184
193
|
return n.forEach((h, l) => {
|
|
185
194
|
var c;
|
|
186
195
|
const t = I(h, l);
|
|
187
196
|
if (b(t)) return;
|
|
188
|
-
const d = e ? W(e, t) : t,
|
|
197
|
+
const d = e ? W(e, t) : t, f = [...r, d];
|
|
189
198
|
if ((c = h.children) != null && c.length) {
|
|
190
|
-
const a =
|
|
199
|
+
const a = F(
|
|
191
200
|
h.children,
|
|
192
201
|
t,
|
|
193
|
-
|
|
202
|
+
f
|
|
194
203
|
);
|
|
195
204
|
a && i.push(a);
|
|
196
205
|
return;
|
|
197
206
|
}
|
|
198
|
-
i.push(
|
|
207
|
+
i.push(f.join("/"));
|
|
199
208
|
}), i.join("\0");
|
|
200
209
|
}
|
|
201
|
-
function
|
|
210
|
+
function y(n) {
|
|
202
211
|
var e;
|
|
203
212
|
return {
|
|
204
213
|
...n,
|
|
205
214
|
hidden: !0,
|
|
206
|
-
children: (e = n.children) == null ? void 0 : e.map(
|
|
215
|
+
children: (e = n.children) == null ? void 0 : e.map(y)
|
|
207
216
|
};
|
|
208
217
|
}
|
|
209
|
-
function
|
|
218
|
+
function H(n) {
|
|
210
219
|
var e;
|
|
211
|
-
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(
|
|
220
|
+
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(H));
|
|
212
221
|
}
|
|
213
|
-
function
|
|
222
|
+
function z(n, e) {
|
|
214
223
|
if (!(e != null && e.length)) return n.map(M);
|
|
215
224
|
const r = new Map(n.map((t) => [t.id, t])), i = /* @__PURE__ */ new Set(), h = (t, d) => {
|
|
216
225
|
var o;
|
|
217
|
-
const
|
|
218
|
-
if (!
|
|
226
|
+
const f = d || r.get(t.id);
|
|
227
|
+
if (!f) return null;
|
|
219
228
|
i.add(t.id);
|
|
220
|
-
const c =
|
|
221
|
-
let
|
|
229
|
+
const c = f.children || [], a = new Map(c.map((s) => [s.id, s]));
|
|
230
|
+
let u;
|
|
222
231
|
if ((o = t.children) != null && o.length) {
|
|
223
|
-
|
|
232
|
+
u = t.children.map((s) => h(s, a.get(s.id))).filter(Boolean);
|
|
224
233
|
for (const s of c)
|
|
225
|
-
t.children.some((g) => g.id === s.id) ||
|
|
226
|
-
} else c.length && (
|
|
227
|
-
const _ = !!t.hidden || !!(
|
|
234
|
+
t.children.some((g) => g.id === s.id) || u.push(M(s));
|
|
235
|
+
} else c.length && (u = c.map(M));
|
|
236
|
+
const _ = !!t.hidden || !!(u != null && u.length && u.every((s) => s.hidden)), C = _ && (u != null && u.length) ? u.map((s) => S(s, !0)) : u;
|
|
228
237
|
return {
|
|
229
|
-
id:
|
|
230
|
-
title:
|
|
231
|
-
label:
|
|
238
|
+
id: f.id,
|
|
239
|
+
title: f.title,
|
|
240
|
+
label: f.label,
|
|
232
241
|
hidden: _,
|
|
233
242
|
children: C
|
|
234
243
|
};
|
|
@@ -248,26 +257,26 @@ function M(n) {
|
|
|
248
257
|
children: (e = n.children) == null ? void 0 : e.map(M)
|
|
249
258
|
};
|
|
250
259
|
}
|
|
251
|
-
function
|
|
260
|
+
function S(n, e) {
|
|
252
261
|
var r;
|
|
253
262
|
return {
|
|
254
263
|
...n,
|
|
255
264
|
hidden: e,
|
|
256
|
-
children: (r = n.children) == null ? void 0 : r.map((i) =>
|
|
265
|
+
children: (r = n.children) == null ? void 0 : r.map((i) => S(i, e))
|
|
257
266
|
};
|
|
258
267
|
}
|
|
259
|
-
function
|
|
268
|
+
function G(n) {
|
|
260
269
|
var l;
|
|
261
270
|
const e = n.filter((t) => !t.hidden), r = n.filter((t) => t.hidden), i = [], h = (t, d) => {
|
|
262
|
-
var
|
|
271
|
+
var f, c;
|
|
263
272
|
for (const a of t) {
|
|
264
273
|
if (a.hidden) {
|
|
265
|
-
const
|
|
274
|
+
const u = [...d, a.label || a.id].join(" / ");
|
|
266
275
|
i.push({
|
|
267
276
|
...a,
|
|
268
|
-
label:
|
|
277
|
+
label: u,
|
|
269
278
|
// 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项
|
|
270
|
-
children: (
|
|
279
|
+
children: (f = a.children) != null && f.length ? a.children : void 0
|
|
271
280
|
});
|
|
272
281
|
continue;
|
|
273
282
|
}
|
|
@@ -279,25 +288,27 @@ function Y(n) {
|
|
|
279
288
|
return { visible: e, hidden: [...r, ...i] };
|
|
280
289
|
}
|
|
281
290
|
export {
|
|
282
|
-
|
|
291
|
+
L as COLUMN_CONFIG_COL_KEY,
|
|
283
292
|
B as COLUMN_RESIZE_MAX_WIDTH,
|
|
284
|
-
|
|
293
|
+
P as COLUMN_RESIZE_MIN_WIDTH,
|
|
285
294
|
O as FLEX_SPACER_COL_KEY,
|
|
286
295
|
X as applyColumnConfig,
|
|
287
|
-
|
|
296
|
+
R as applyLeafWidthOverrides,
|
|
288
297
|
E as clampColumnWidth,
|
|
289
298
|
Z as clearColumnWidthAtPath,
|
|
290
|
-
|
|
299
|
+
F as columnsLeafPathSignature,
|
|
291
300
|
T as columnsToConfig,
|
|
292
|
-
|
|
301
|
+
A as columnsToPanelItems,
|
|
293
302
|
k as configHasLeafWidths,
|
|
294
303
|
$ as copyColumnWidths,
|
|
295
|
-
|
|
304
|
+
v as hideColumnAtPath,
|
|
305
|
+
Y as insertBeforeFixedRight,
|
|
306
|
+
j as isFixedColumn,
|
|
296
307
|
b as isInternalColumnKey,
|
|
297
|
-
|
|
298
|
-
|
|
308
|
+
z as mergePanelWithConfig,
|
|
309
|
+
p as panelItemsToConfig,
|
|
299
310
|
U as setColumnWidthAtPath,
|
|
300
311
|
W as shortChildId,
|
|
301
|
-
|
|
312
|
+
G as splitVisibleHidden
|
|
302
313
|
};
|
|
303
314
|
//# sourceMappingURL=columnConfigUtils.js.map
|