@are-visual/virtual-table 0.4.0 → 0.5.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/README.md +36 -28
- package/index.d.ts +3 -2
- package/index.esm.js +9 -3
- package/index.esm.js.map +1 -1
- package/middleware/expandable/index.js +2 -5
- package/middleware/expandable/index.js.map +1 -1
- package/middleware/horizontal-scroll-bar/index.d.ts +2 -2
- package/middleware/horizontal-scroll-bar/index.js +5 -4
- package/middleware/horizontal-scroll-bar/index.js.map +1 -1
- package/middleware/horizontal-scroll-bar/styles.css +1 -1
- package/middleware/horizontal-scroll-bar/styles.scss +3 -1
- package/middleware/selection/index.js +7 -7
- package/middleware/selection/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { useTableRowManager, useContainerSize, createMiddleware, useShallowMemo, useStableFn, isValidFixed } from '@are-visual/virtual-table';
|
|
2
|
+
import { useTableRowManager, useContainerSize, createMiddleware, useShallowMemo, useStableFn, getRowKey, isValidFixed } from '@are-visual/virtual-table';
|
|
3
3
|
import { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
5
|
import { useMemo, useRef, useCallback } from 'react';
|
|
@@ -47,9 +47,6 @@ const EXPANSION_COLUMN_KEY = 'VirtualTable.EXPANSION_COLUMN';
|
|
|
47
47
|
function isExpansionColumn(column) {
|
|
48
48
|
return column.key === EXPANSION_COLUMN_KEY;
|
|
49
49
|
}
|
|
50
|
-
function getRowKey(rowData, rowKey) {
|
|
51
|
-
return rowData[rowKey];
|
|
52
|
-
}
|
|
53
50
|
function useTableExpandable(ctx, options) {
|
|
54
51
|
const disablePlugin = options == null;
|
|
55
52
|
const {
|
|
@@ -171,7 +168,7 @@ function useTableExpandable(ctx, options) {
|
|
|
171
168
|
width: columnWidth,
|
|
172
169
|
fixed,
|
|
173
170
|
render(_value, record, index) {
|
|
174
|
-
const key = record
|
|
171
|
+
const key = getRowKey(record, rowKey);
|
|
175
172
|
const expandable = rowExpandableRecord[index] ?? false;
|
|
176
173
|
const expanded = expansion.includes(key);
|
|
177
174
|
if (typeof expandIcon === 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/expandable/expand-row.tsx","../../../../packages/virtual-table/src/middleware/expandable/index.tsx"],"sourcesContent":["import type { CSSProperties, FC, ReactNode } from 'react'\nimport { useContainerSize, useTableRowManager } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\n\nexport interface ExpandRowProps {\n className?: string\n style?: CSSProperties\n rowIndex: number\n isExpanded?: boolean\n colSpan?: number\n children?: ReactNode\n fixed?: boolean\n}\n\nconst ExpandRow: FC<ExpandRowProps> = (props) => {\n const {\n className,\n style,\n rowIndex,\n isExpanded,\n colSpan,\n children,\n fixed,\n } = props\n\n const { updateRowHeight } = useTableRowManager()\n const { tableWidth } = useContainerSize()\n\n return (\n <tr\n className={clsx('virtual-table-expanded-row', className)}\n style={{ ...style, display: isExpanded ? undefined : 'none' }}\n ref={(node) => {\n if (node == null) return\n updateRowHeight(rowIndex, `row(${rowIndex})-expandable`, node.offsetHeight)\n }}\n >\n <td colSpan={colSpan}>\n <div\n className={clsx(\n 'virtual-table-cell',\n fixed && 'virtual-table-expanded-row-fixed',\n )}\n style={{ width: tableWidth <= 0 ? undefined : tableWidth }}\n >\n {children}\n </div>\n </td>\n </tr>\n )\n}\n\nexport default ExpandRow\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AnyObject,\n ColumnExtra,\n ColumnType,\n FixedType,\n MiddlewareContext,\n MiddlewareRenderRow,\n MiddlewareResult,\n OnRowType,\n} from '@are-visual/virtual-table'\nimport type { Key, MouseEvent, ReactNode } from 'react'\nimport { createMiddleware, isValidFixed, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ExpandRow from './expand-row'\n\ntype TriggerEventHandler<T> = (record: T, event: MouseEvent<HTMLElement>) => void\nexport interface RenderExpandIconProps<T> {\n prefixCls: string\n expanded: boolean\n record: T\n expandable: boolean\n onExpand: TriggerEventHandler<T>\n}\nexport type RowClassName<T> = (record: T, index: number, indent: number) => string\nexport type RenderExpandIcon<T> = (props: RenderExpandIconProps<T>) => ReactNode\nexport type ExpandedRowRender<T> = (record: T, index: number, indent: number, expanded: boolean) => ReactNode\n\nexport interface ExpandableConfig<T> {\n expandedRowKeys?: readonly Key[]\n defaultExpandedRowKeys?: readonly Key[]\n expandedRowRender?: ExpandedRowRender<T>\n columnTitle?: ReactNode\n expandRowByClick?: boolean\n expandIcon?: RenderExpandIcon<T>\n onExpand?: (expanded: boolean, record: T) => void\n onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void\n defaultExpandAllRows?: boolean\n showExpandColumn?: boolean\n expandedRowClassName?: string | RowClassName<T>\n rowExpandable?: (record: T) => boolean\n columnWidth?: number | string\n fixed?: FixedType\n extraColumnProps?: ColumnExtra\n}\n\nexport const EXPANSION_COLUMN_KEY = 'VirtualTable.EXPANSION_COLUMN'\n\nexport function isExpansionColumn<T = any>(column: ColumnType<T>) {\n return column.key === EXPANSION_COLUMN_KEY\n}\n\nfunction getRowKey<T>(rowData: T, rowKey: (string & {}) | keyof T) {\n return (rowData as AnyObject)[rowKey as string] as Key\n}\n\nfunction useTableExpandable<T = any>(\n ctx: MiddlewareContext<T>,\n options?: ExpandableConfig<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { rowKey, columns: rawColumns, dataSource } = ctx\n const {\n // expandedRowKeys,\n // onExpandedRowsChange,\n defaultExpandedRowKeys,\n expandedRowRender,\n columnTitle,\n expandRowByClick = false,\n expandIcon,\n onExpand,\n\n defaultExpandAllRows = false,\n\n // TODO: 未实现\n // indentSize: _indentSize,\n\n showExpandColumn = true,\n expandedRowClassName,\n\n rowExpandable,\n columnWidth = 50,\n fixed,\n extraColumnProps,\n } = options ?? {}\n\n const _rowExpandableValue = useMemo(() => {\n return dataSource.map((row) => {\n if (!rowExpandable) return false\n return rowExpandable(row)\n })\n }, [dataSource, rowExpandable])\n\n // useShallowMemo 每一次渲染时候都会重新求值,这对于某些开销较大的计算不太友好,\n // 所以使用 useMemo 求值再通过 useShallowMemo 浅比较\n // useMemo 标记 deps 后,若 deps 不变也就不需要重新求值\n // 使用 useShallowMemo 主要是为了防止重新求值后结果不变但地址指针变化,导致不必要的渲染\n const rowExpandableRecord = useShallowMemo(() => _rowExpandableValue)\n\n // 即使 defaultExpandAllRows 变更之后,此插件也不要响应变化,只使用初始值,所以存储一下\n const defaultExpandAll = useRef(\n // options 中有 expandedRowKeys 则表示受控模式,那么 defaultExpandAllRows 不生效\n 'expandedRowKeys' in (options ?? {}) || 'defaultExpandedRowKeys' in (options ?? {})\n ? false\n : defaultExpandAllRows,\n )\n const defaultExpandKey = useShallowMemo((): readonly Key[] => {\n if (defaultExpandAll.current) {\n const expandKeys = dataSource.map((record, index): Key | null => {\n if (rowExpandableRecord[index]) {\n const key = (record as AnyObject)[rowKey as string] as string | number\n return key\n }\n return null\n })\n return expandKeys.filter((x) => x != null)\n }\n return []\n })\n\n const expansionKeys = useRef(new Set<Key>(defaultExpandedRowKeys ?? defaultExpandKey))\n const [expansion, setExpansion] = useControllableValue<readonly Key[]>(\n options ?? {},\n {\n trigger: 'onExpandedRowsChange',\n valuePropName: 'expandedRowKeys',\n defaultValue: defaultExpandedRowKeys ?? defaultExpandKey,\n },\n )\n\n const onUpdateExpansion = useStableFn((rowData: T, shouldExpand?: boolean) => {\n const key = getRowKey(rowData, rowKey)\n expansionKeys.current.add(key)\n if (shouldExpand == null) {\n if (expansion.includes(key)) {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n } else {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n }\n } else if (shouldExpand) {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n } else {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n }\n })\n\n const isFixed = isValidFixed(fixed)\n\n const renderRow: MiddlewareRenderRow = useCallback((children, args) => {\n const { rowData, rowIndex, columnDescriptor } = args\n\n const isExpandable = rowExpandableRecord[rowIndex]\n if (isExpandable) {\n const key = getRowKey(rowData as T, rowKey)\n const isExpanded: boolean | undefined = expansion.includes(key)\n const isRendered = expansionKeys.current.has(key)\n\n let className = ''\n if (typeof expandedRowClassName === 'string') {\n className = expandedRowClassName\n } else if (typeof expandedRowClassName === 'function') {\n className = expandedRowClassName(rowData as T, rowIndex, 0)\n }\n\n return (\n <>\n {children}\n {isRendered && (\n <ExpandRow\n className={className}\n rowIndex={rowIndex}\n isExpanded={isExpanded}\n colSpan={columnDescriptor.length}\n fixed={isFixed}\n >\n {expandedRowRender?.(rowData as T, rowIndex, 0, isExpanded)}\n </ExpandRow>\n )}\n </>\n )\n }\n return children\n }, [\n isFixed,\n rowExpandableRecord,\n rowKey,\n expansion,\n expandedRowClassName,\n expandedRowRender,\n ])\n\n const columns = useMemo((): ColumnType<T>[] => {\n if (!showExpandColumn) {\n return rawColumns\n }\n\n return [\n {\n ...extraColumnProps,\n key: EXPANSION_COLUMN_KEY,\n title: columnTitle,\n width: columnWidth,\n fixed,\n render(_value, record, index) {\n const key = (record as AnyObject)[rowKey as string] as string | number\n\n const expandable = rowExpandableRecord[index] ?? false\n const expanded = expansion.includes(key)\n\n if (typeof expandIcon === 'function') {\n return expandIcon({\n expandable,\n expanded,\n record,\n prefixCls: 'virtual-table',\n onExpand: (rowData: T, _e) => {\n onUpdateExpansion(rowData)\n },\n })\n }\n\n if (!expandable) {\n return null\n }\n\n return (\n <button\n className={clsx(\n 'virtual-table-row-expand-icon',\n expanded\n ? 'virtual-table-row-expand-icon-expanded'\n : 'virtual-table-row-expand-icon-collapsed',\n )}\n type=\"button\"\n aria-label={expanded ? '关闭行' : '展开行'}\n aria-expanded={expanded}\n onClick={() => {\n onUpdateExpansion(record, !expanded)\n }}\n />\n )\n },\n onHeaderCell() {\n return { className: 'virtual-table-expand-column' }\n },\n },\n ...rawColumns,\n ]\n }, [\n showExpandColumn,\n columnTitle,\n columnWidth,\n fixed,\n rawColumns,\n rowKey,\n rowExpandableRecord,\n expansion,\n expandIcon,\n onUpdateExpansion,\n extraColumnProps,\n ])\n\n const onRow: OnRowType<T> = useCallback((record, index) => {\n if (rowExpandableRecord[index]) {\n return {\n onClick: (e) => {\n e.stopPropagation()\n onUpdateExpansion(record)\n },\n }\n }\n return {}\n }, [rowExpandableRecord, onUpdateExpansion])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n columns,\n renderRow,\n onRow: !expandRowByClick ? undefined : onRow,\n }\n}\n\n/* eslint max-len: [\"error\", { \"code\": 120 }] */\nexport const tableExpandable = createMiddleware(useTableExpandable)\n"],"names":["ExpandRow","props","className","style","rowIndex","isExpanded","colSpan","children","fixed","updateRowHeight","useTableRowManager","tableWidth","useContainerSize","_jsx","clsx","display","undefined","ref","node","offsetHeight","width","EXPANSION_COLUMN_KEY","isExpansionColumn","column","key","getRowKey","rowData","rowKey","useTableExpandable","ctx","options","disablePlugin","columns","rawColumns","dataSource","defaultExpandedRowKeys","expandedRowRender","columnTitle","expandRowByClick","expandIcon","onExpand","defaultExpandAllRows","showExpandColumn","expandedRowClassName","rowExpandable","columnWidth","extraColumnProps","_rowExpandableValue","useMemo","map","row","rowExpandableRecord","useShallowMemo","defaultExpandAll","useRef","defaultExpandKey","current","expandKeys","record","index","filter","x","expansionKeys","Set","expansion","setExpansion","useControllableValue","trigger","valuePropName","defaultValue","onUpdateExpansion","useStableFn","shouldExpand","add","includes","isFixed","isValidFixed","renderRow","useCallback","args","columnDescriptor","isExpandable","isRendered","has","_jsxs","length","title","render","_value","expandable","expanded","prefixCls","_e","type","onClick","onHeaderCell","onRow","e","stopPropagation","tableExpandable","createMiddleware"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/expandable/expand-row.tsx","../../../../packages/virtual-table/src/middleware/expandable/index.tsx"],"sourcesContent":["import type { CSSProperties, FC, ReactNode } from 'react'\nimport { useContainerSize, useTableRowManager } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\n\nexport interface ExpandRowProps {\n className?: string\n style?: CSSProperties\n rowIndex: number\n isExpanded?: boolean\n colSpan?: number\n children?: ReactNode\n fixed?: boolean\n}\n\nconst ExpandRow: FC<ExpandRowProps> = (props) => {\n const {\n className,\n style,\n rowIndex,\n isExpanded,\n colSpan,\n children,\n fixed,\n } = props\n\n const { updateRowHeight } = useTableRowManager()\n const { tableWidth } = useContainerSize()\n\n return (\n <tr\n className={clsx('virtual-table-expanded-row', className)}\n style={{ ...style, display: isExpanded ? undefined : 'none' }}\n ref={(node) => {\n if (node == null) return\n updateRowHeight(rowIndex, `row(${rowIndex})-expandable`, node.offsetHeight)\n }}\n >\n <td colSpan={colSpan}>\n <div\n className={clsx(\n 'virtual-table-cell',\n fixed && 'virtual-table-expanded-row-fixed',\n )}\n style={{ width: tableWidth <= 0 ? undefined : tableWidth }}\n >\n {children}\n </div>\n </td>\n </tr>\n )\n}\n\nexport default ExpandRow\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AnyObject,\n ColumnExtra,\n ColumnType,\n FixedType,\n MiddlewareContext,\n MiddlewareRenderRow,\n MiddlewareResult,\n OnRowType,\n} from '@are-visual/virtual-table'\nimport type { Key, MouseEvent, ReactNode } from 'react'\nimport { createMiddleware, getRowKey, isValidFixed, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ExpandRow from './expand-row'\n\ntype TriggerEventHandler<T> = (record: T, event: MouseEvent<HTMLElement>) => void\nexport interface RenderExpandIconProps<T> {\n prefixCls: string\n expanded: boolean\n record: T\n expandable: boolean\n onExpand: TriggerEventHandler<T>\n}\nexport type RowClassName<T> = (record: T, index: number, indent: number) => string\nexport type RenderExpandIcon<T> = (props: RenderExpandIconProps<T>) => ReactNode\nexport type ExpandedRowRender<T> = (record: T, index: number, indent: number, expanded: boolean) => ReactNode\n\nexport interface ExpandableConfig<T> {\n expandedRowKeys?: readonly Key[]\n defaultExpandedRowKeys?: readonly Key[]\n expandedRowRender?: ExpandedRowRender<T>\n columnTitle?: ReactNode\n expandRowByClick?: boolean\n expandIcon?: RenderExpandIcon<T>\n onExpand?: (expanded: boolean, record: T) => void\n onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void\n defaultExpandAllRows?: boolean\n showExpandColumn?: boolean\n expandedRowClassName?: string | RowClassName<T>\n rowExpandable?: (record: T) => boolean\n columnWidth?: number | string\n fixed?: FixedType\n extraColumnProps?: ColumnExtra\n}\n\nexport const EXPANSION_COLUMN_KEY = 'VirtualTable.EXPANSION_COLUMN'\n\nexport function isExpansionColumn<T = any>(column: ColumnType<T>) {\n return column.key === EXPANSION_COLUMN_KEY\n}\n\nfunction useTableExpandable<T = any>(\n ctx: MiddlewareContext<T>,\n options?: ExpandableConfig<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { rowKey, columns: rawColumns, dataSource } = ctx\n const {\n // expandedRowKeys,\n // onExpandedRowsChange,\n defaultExpandedRowKeys,\n expandedRowRender,\n columnTitle,\n expandRowByClick = false,\n expandIcon,\n onExpand,\n\n defaultExpandAllRows = false,\n\n // TODO: 未实现\n // indentSize: _indentSize,\n\n showExpandColumn = true,\n expandedRowClassName,\n\n rowExpandable,\n columnWidth = 50,\n fixed,\n extraColumnProps,\n } = options ?? {}\n\n const _rowExpandableValue = useMemo(() => {\n return dataSource.map((row) => {\n if (!rowExpandable) return false\n return rowExpandable(row)\n })\n }, [dataSource, rowExpandable])\n\n // useShallowMemo 每一次渲染时候都会重新求值,这对于某些开销较大的计算不太友好,\n // 所以使用 useMemo 求值再通过 useShallowMemo 浅比较\n // useMemo 标记 deps 后,若 deps 不变也就不需要重新求值\n // 使用 useShallowMemo 主要是为了防止重新求值后结果不变但地址指针变化,导致不必要的渲染\n const rowExpandableRecord = useShallowMemo(() => _rowExpandableValue)\n\n // 即使 defaultExpandAllRows 变更之后,此插件也不要响应变化,只使用初始值,所以存储一下\n const defaultExpandAll = useRef(\n // options 中有 expandedRowKeys 则表示受控模式,那么 defaultExpandAllRows 不生效\n 'expandedRowKeys' in (options ?? {}) || 'defaultExpandedRowKeys' in (options ?? {})\n ? false\n : defaultExpandAllRows,\n )\n const defaultExpandKey = useShallowMemo((): readonly Key[] => {\n if (defaultExpandAll.current) {\n const expandKeys = dataSource.map((record, index): Key | null => {\n if (rowExpandableRecord[index]) {\n const key = (record as AnyObject)[rowKey as string] as string | number\n return key\n }\n return null\n })\n return expandKeys.filter((x) => x != null)\n }\n return []\n })\n\n const expansionKeys = useRef(new Set<Key>(defaultExpandedRowKeys ?? defaultExpandKey))\n const [expansion, setExpansion] = useControllableValue<readonly Key[]>(\n options ?? {},\n {\n trigger: 'onExpandedRowsChange',\n valuePropName: 'expandedRowKeys',\n defaultValue: defaultExpandedRowKeys ?? defaultExpandKey,\n },\n )\n\n const onUpdateExpansion = useStableFn((rowData: T, shouldExpand?: boolean) => {\n const key = getRowKey(rowData, rowKey)\n expansionKeys.current.add(key)\n if (shouldExpand == null) {\n if (expansion.includes(key)) {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n } else {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n }\n } else if (shouldExpand) {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n } else {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n }\n })\n\n const isFixed = isValidFixed(fixed)\n\n const renderRow: MiddlewareRenderRow = useCallback((children, args) => {\n const { rowData, rowIndex, columnDescriptor } = args\n\n const isExpandable = rowExpandableRecord[rowIndex]\n if (isExpandable) {\n const key = getRowKey(rowData as T, rowKey)\n const isExpanded: boolean | undefined = expansion.includes(key)\n const isRendered = expansionKeys.current.has(key)\n\n let className = ''\n if (typeof expandedRowClassName === 'string') {\n className = expandedRowClassName\n } else if (typeof expandedRowClassName === 'function') {\n className = expandedRowClassName(rowData as T, rowIndex, 0)\n }\n\n return (\n <>\n {children}\n {isRendered && (\n <ExpandRow\n className={className}\n rowIndex={rowIndex}\n isExpanded={isExpanded}\n colSpan={columnDescriptor.length}\n fixed={isFixed}\n >\n {expandedRowRender?.(rowData as T, rowIndex, 0, isExpanded)}\n </ExpandRow>\n )}\n </>\n )\n }\n return children\n }, [\n isFixed,\n rowExpandableRecord,\n rowKey,\n expansion,\n expandedRowClassName,\n expandedRowRender,\n ])\n\n const columns = useMemo((): ColumnType<T>[] => {\n if (!showExpandColumn) {\n return rawColumns\n }\n\n return [\n {\n ...extraColumnProps,\n key: EXPANSION_COLUMN_KEY,\n title: columnTitle,\n width: columnWidth,\n fixed,\n render(_value, record, index) {\n const key = getRowKey(record, rowKey)\n\n const expandable = rowExpandableRecord[index] ?? false\n const expanded = expansion.includes(key)\n\n if (typeof expandIcon === 'function') {\n return expandIcon({\n expandable,\n expanded,\n record,\n prefixCls: 'virtual-table',\n onExpand: (rowData: T, _e) => {\n onUpdateExpansion(rowData)\n },\n })\n }\n\n if (!expandable) {\n return null\n }\n\n return (\n <button\n className={clsx(\n 'virtual-table-row-expand-icon',\n expanded\n ? 'virtual-table-row-expand-icon-expanded'\n : 'virtual-table-row-expand-icon-collapsed',\n )}\n type=\"button\"\n aria-label={expanded ? '关闭行' : '展开行'}\n aria-expanded={expanded}\n onClick={() => {\n onUpdateExpansion(record, !expanded)\n }}\n />\n )\n },\n onHeaderCell() {\n return { className: 'virtual-table-expand-column' }\n },\n },\n ...rawColumns,\n ]\n }, [\n showExpandColumn,\n columnTitle,\n columnWidth,\n fixed,\n rawColumns,\n rowKey,\n rowExpandableRecord,\n expansion,\n expandIcon,\n onUpdateExpansion,\n extraColumnProps,\n ])\n\n const onRow: OnRowType<T> = useCallback((record, index) => {\n if (rowExpandableRecord[index]) {\n return {\n onClick: (e) => {\n e.stopPropagation()\n onUpdateExpansion(record)\n },\n }\n }\n return {}\n }, [rowExpandableRecord, onUpdateExpansion])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n columns,\n renderRow,\n onRow: !expandRowByClick ? undefined : onRow,\n }\n}\n\n/* eslint max-len: [\"error\", { \"code\": 120 }] */\nexport const tableExpandable = createMiddleware(useTableExpandable)\n"],"names":["ExpandRow","props","className","style","rowIndex","isExpanded","colSpan","children","fixed","updateRowHeight","useTableRowManager","tableWidth","useContainerSize","_jsx","clsx","display","undefined","ref","node","offsetHeight","width","EXPANSION_COLUMN_KEY","isExpansionColumn","column","key","useTableExpandable","ctx","options","disablePlugin","rowKey","columns","rawColumns","dataSource","defaultExpandedRowKeys","expandedRowRender","columnTitle","expandRowByClick","expandIcon","onExpand","defaultExpandAllRows","showExpandColumn","expandedRowClassName","rowExpandable","columnWidth","extraColumnProps","_rowExpandableValue","useMemo","map","row","rowExpandableRecord","useShallowMemo","defaultExpandAll","useRef","defaultExpandKey","current","expandKeys","record","index","filter","x","expansionKeys","Set","expansion","setExpansion","useControllableValue","trigger","valuePropName","defaultValue","onUpdateExpansion","useStableFn","rowData","shouldExpand","getRowKey","add","includes","isFixed","isValidFixed","renderRow","useCallback","args","columnDescriptor","isExpandable","isRendered","has","_jsxs","length","title","render","_value","expandable","expanded","prefixCls","_e","type","onClick","onHeaderCell","onRow","e","stopPropagation","tableExpandable","createMiddleware"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ interface ScrollBarProps {
|
|
|
9
9
|
bodyRef: RefObject<HTMLTableElement>;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
type HorizontalScrollBarOptions = ScrollBarProps
|
|
13
|
-
declare const horizontalScrollBar: <T = any>(options?:
|
|
12
|
+
type HorizontalScrollBarOptions = Omit<ScrollBarProps, 'bodyRef'>;
|
|
13
|
+
declare const horizontalScrollBar: <T = any>(options?: HorizontalScrollBarOptions | undefined) => _are_visual_virtual_table.Middleware<T>;
|
|
14
14
|
|
|
15
15
|
export { type HorizontalScrollBarOptions, horizontalScrollBar };
|
|
@@ -53,10 +53,11 @@ const ScrollBar = props => {
|
|
|
53
53
|
className: clsx('virtual-table-sticky-scroll', className),
|
|
54
54
|
style: {
|
|
55
55
|
...style,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
// @ts-expect-error 使用 css 变量覆盖 bottom,而不是 bottom,这样需要高优先级的时候,就可以使用 style 代替
|
|
57
|
+
'--virtual-table-sticky-scroll-bottom': Number.isFinite(bottom) ? `${bottom}px` : bottom,
|
|
58
|
+
'paddingTop': size.height > 0 ? 0 : 12,
|
|
59
|
+
'marginTop': size.height > 0 ? 0 : size.height * -1,
|
|
60
|
+
'height': size.height,
|
|
60
61
|
zIndex
|
|
61
62
|
},
|
|
62
63
|
ref: wrapperRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/horizontal-scroll-bar/scroll-bar.tsx","../../../../packages/virtual-table/src/middleware/horizontal-scroll-bar/index.tsx"],"sourcesContent":["import type { CSSProperties, FC, RefObject } from 'react'\nimport { onResize, useHorizontalScrollContext } from '@are-visual/virtual-table'\nimport { getScrollbarSize } from '@are-visual/virtual-table/middleware/utils/getScrollbarSize'\nimport clsx from 'clsx'\nimport { useEffect, useRef, useState } from 'react'\n\nexport interface ScrollBarProps {\n className?: string\n style?: CSSProperties\n bottom?: number | string\n zIndex?: number\n bodyRef: RefObject<HTMLTableElement>\n}\n\nconst ScrollBar: FC<ScrollBarProps> = (props) => {\n const { className, style, bottom, zIndex, bodyRef } = props\n const { listen, notify } = useHorizontalScrollContext()\n\n const wrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = wrapperRef.current\n if (node == null) return\n const key = 'virtual-table-sticky-bottom-scroll'\n const onScroll = () => {\n notify(key, { scrollLeft: () => node.scrollLeft, node })\n }\n const dispose = listen(key, (scrollLeft) => {\n node.scrollLeft = scrollLeft\n })\n node.addEventListener('scroll', onScroll)\n return () => {\n node.removeEventListener('scroll', onScroll)\n dispose()\n }\n }, [listen, notify])\n\n const [width, setWidth] = useState(0)\n useEffect(() => {\n const body = bodyRef.current\n if (body == null) return\n return onResize(body, ({ width }) => {\n if (width === 0) return\n setWidth(width)\n })\n }, [bodyRef])\n\n const [size] = useState(getScrollbarSize)\n\n return (\n <div\n className={clsx('virtual-table-sticky-scroll', className)}\n style={{\n ...style,\n paddingTop: size.height > 0 ? 0 : 12,\n marginTop: size.height > 0 ? 0 : size.height * -1,\n height: size.height,\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/horizontal-scroll-bar/scroll-bar.tsx","../../../../packages/virtual-table/src/middleware/horizontal-scroll-bar/index.tsx"],"sourcesContent":["import type { CSSProperties, FC, RefObject } from 'react'\nimport { onResize, useHorizontalScrollContext } from '@are-visual/virtual-table'\nimport { getScrollbarSize } from '@are-visual/virtual-table/middleware/utils/getScrollbarSize'\nimport clsx from 'clsx'\nimport { useEffect, useRef, useState } from 'react'\n\nexport interface ScrollBarProps {\n className?: string\n style?: CSSProperties\n bottom?: number | string\n zIndex?: number\n bodyRef: RefObject<HTMLTableElement>\n}\n\nconst ScrollBar: FC<ScrollBarProps> = (props) => {\n const { className, style, bottom, zIndex, bodyRef } = props\n const { listen, notify } = useHorizontalScrollContext()\n\n const wrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = wrapperRef.current\n if (node == null) return\n const key = 'virtual-table-sticky-bottom-scroll'\n const onScroll = () => {\n notify(key, { scrollLeft: () => node.scrollLeft, node })\n }\n const dispose = listen(key, (scrollLeft) => {\n node.scrollLeft = scrollLeft\n })\n node.addEventListener('scroll', onScroll)\n return () => {\n node.removeEventListener('scroll', onScroll)\n dispose()\n }\n }, [listen, notify])\n\n const [width, setWidth] = useState(0)\n useEffect(() => {\n const body = bodyRef.current\n if (body == null) return\n return onResize(body, ({ width }) => {\n if (width === 0) return\n setWidth(width)\n })\n }, [bodyRef])\n\n const [size] = useState(getScrollbarSize)\n\n return (\n <div\n className={clsx('virtual-table-sticky-scroll', className)}\n style={{\n ...style,\n // @ts-expect-error 使用 css 变量覆盖 bottom,而不是 bottom,这样需要高优先级的时候,就可以使用 style 代替\n '--virtual-table-sticky-scroll-bottom': Number.isFinite(bottom) ? `${bottom}px` : bottom,\n 'paddingTop': size.height > 0 ? 0 : 12,\n 'marginTop': size.height > 0 ? 0 : size.height * -1,\n 'height': size.height,\n zIndex,\n }}\n ref={wrapperRef}\n >\n <div className=\"virtual-table-sticky-scroll-bar\" style={{ width }}></div>\n </div>\n )\n}\n\nexport default ScrollBar\n","import type { MiddlewareContext, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { ScrollBarProps } from './scroll-bar'\nimport { createMiddleware } from '@are-visual/virtual-table'\nimport ScrollBar from './scroll-bar'\n\nexport type HorizontalScrollBarOptions = Omit<ScrollBarProps, 'bodyRef'>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useHorizontalScrollBar<T = any>(\n ctx: MiddlewareContext<T>,\n options?: HorizontalScrollBarOptions,\n): MiddlewareResult<T> {\n const { bodyRootRef } = ctx\n\n return {\n ...ctx,\n renderContent(children) {\n return (\n <>\n {children}\n <ScrollBar\n bodyRef={bodyRootRef}\n {...options}\n />\n </>\n )\n },\n }\n}\n\nexport const horizontalScrollBar = createMiddleware(useHorizontalScrollBar)\n"],"names":["ScrollBar","props","className","style","bottom","zIndex","bodyRef","listen","notify","useHorizontalScrollContext","wrapperRef","useRef","useEffect","node","current","key","onScroll","scrollLeft","dispose","addEventListener","removeEventListener","width","setWidth","useState","body","onResize","_ref","size","getScrollbarSize","_jsx","clsx","Number","isFinite","height","ref","children","useHorizontalScrollBar","ctx","options","bodyRootRef","renderContent","_jsxs","_Fragment","horizontalScrollBar","createMiddleware"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useMergedRef, createMiddleware, useShallowMemo, useStableFn } from '@are-visual/virtual-table';
|
|
2
|
+
import { useMergedRef, createMiddleware, getRowKey, useShallowMemo, useStableFn } from '@are-visual/virtual-table';
|
|
3
3
|
import { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue';
|
|
4
4
|
import { forwardRef, useRef, useEffect, createElement, useCallback, useMemo, isValidElement } from 'react';
|
|
5
5
|
import clsx from 'clsx';
|
|
@@ -44,9 +44,9 @@ const EMPTY_ARR = [];
|
|
|
44
44
|
function useSelection(ctx, options) {
|
|
45
45
|
const disablePlugin = options == null;
|
|
46
46
|
const {
|
|
47
|
-
columns: rawColumns
|
|
47
|
+
columns: rawColumns,
|
|
48
|
+
rowKey
|
|
48
49
|
} = ctx;
|
|
49
|
-
const rowKey = ctx.rowKey;
|
|
50
50
|
const dataSource = disablePlugin ? EMPTY_ARR : ctx.dataSource;
|
|
51
51
|
const {
|
|
52
52
|
defaultSelectedRowKeys,
|
|
@@ -74,7 +74,7 @@ function useSelection(ctx, options) {
|
|
|
74
74
|
trigger: 'onChange'
|
|
75
75
|
});
|
|
76
76
|
const rowClassName = useCallback(record => {
|
|
77
|
-
const key = record
|
|
77
|
+
const key = getRowKey(record, rowKey);
|
|
78
78
|
const checked = selectedRowKeys.includes(key);
|
|
79
79
|
return checked ? 'virtual-table-row-selected' : '';
|
|
80
80
|
}, [rowKey, selectedRowKeys]);
|
|
@@ -86,7 +86,7 @@ function useSelection(ctx, options) {
|
|
|
86
86
|
});
|
|
87
87
|
// 当有某一行数据 Checkbox disabled 时,过滤它
|
|
88
88
|
const allKeys = useShallowMemo(() => {
|
|
89
|
-
return dataSource.filter((_data, index) => !selectionPropsList[index].disabled).map(x => x
|
|
89
|
+
return dataSource.filter((_data, index) => !selectionPropsList[index].disabled).map(x => getRowKey(x, rowKey));
|
|
90
90
|
});
|
|
91
91
|
// preserveSelectedRowKeys=true 时,勾选过的数据,都会在这里存一份
|
|
92
92
|
const cache = useRef(new Map());
|
|
@@ -94,7 +94,7 @@ function useSelection(ctx, options) {
|
|
|
94
94
|
const getRowsByKeys = useStableFn(keys => {
|
|
95
95
|
const result = [];
|
|
96
96
|
keys.forEach(key => {
|
|
97
|
-
let value = dataSource.find(row => row
|
|
97
|
+
let value = dataSource.find(row => getRowKey(row, rowKey) === key);
|
|
98
98
|
// 在 cache 中还是找不到对应的数据,就放弃寻找,填入一个 undefined(与 antd 默认表现一致)
|
|
99
99
|
// 场景: selectedRowKeys 中有一个在 dataSource 中不存在的 key,用这个 key 是找不到数据的
|
|
100
100
|
if (value == null && preserveSelectedRowKeys) {
|
|
@@ -213,7 +213,7 @@ function useSelection(ctx, options) {
|
|
|
213
213
|
fixed: fixed ? 'left' : undefined,
|
|
214
214
|
key: SELECTION_COLUMN_KEY,
|
|
215
215
|
render(_value, record, index) {
|
|
216
|
-
const key = record
|
|
216
|
+
const key = getRowKey(record, rowKey);
|
|
217
217
|
const checked = selectedRowKeys.includes(key);
|
|
218
218
|
const extraProps = selectionPropsList[index];
|
|
219
219
|
const updateCache = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/selection/selection.tsx","../../../../packages/virtual-table/src/middleware/selection/table-selection.tsx"],"sourcesContent":["import type { ComponentType, DetailedHTMLProps, ForwardedRef, InputHTMLAttributes } from 'react'\nimport type { SelectionProps as BaseProps } from './types'\nimport { useMergedRef } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\nimport { createElement, forwardRef, useEffect, useRef } from 'react'\n\ntype InputProps = DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>\nexport interface SelectionProps extends BaseProps,\n Omit<InputProps, 'type' | 'onChange' | 'checked' | 'value' | 'defaultChecked' | 'defaultValue' | 'disabled'> {\n component?: ComponentType<BaseProps>\n}\n\nfunction Selection(props: SelectionProps, ref: ForwardedRef<HTMLInputElement>) {\n const {\n className,\n multiple,\n indeterminate,\n value = false,\n onChange,\n component,\n ...rest\n } = props\n\n const isCustomComponent = component != null\n\n const inputNode = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (isCustomComponent) return\n const input = inputNode.current\n if (input == null) return\n input.indeterminate = !!indeterminate\n }, [isCustomComponent, indeterminate])\n\n const mergedRef = useMergedRef(inputNode, ref)\n\n if (isCustomComponent) {\n return createElement(component, props)\n }\n\n return (\n <input\n {...rest}\n ref={mergedRef}\n className={clsx('virtual-table-selection', className)}\n type={multiple ? 'checkbox' : 'radio'}\n checked={value}\n onChange={(e) => {\n onChange?.(e.target.checked, e.nativeEvent)\n }}\n />\n )\n}\n\nexport default forwardRef(Selection)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { AnyObject, ColumnType, MiddlewareContext, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { Key, ReactNode } from 'react'\nimport type { SelectionColumnTitleProps, TableRowSelection } from './types'\n\nimport { createMiddleware, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport { isValidElement, useCallback, useMemo, useRef } from 'react'\nimport Selection from './selection'\n\nexport const SELECTION_COLUMN_KEY = 'VirtualTable.SELECTION_COLUMN'\n\nconst EMPTY_ARR: AnyObject[] = []\n\nexport function isSelectionColumn<T = any>(column: ColumnType<T>) {\n return column.key === SELECTION_COLUMN_KEY\n}\n\nfunction useSelection<T = any>(\n ctx: MiddlewareContext<T>,\n options?: TableRowSelection<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { columns: rawColumns } = ctx\n const rowKey = ctx.rowKey as string\n const dataSource = disablePlugin ? EMPTY_ARR : (ctx.dataSource as AnyObject[])\n\n const {\n defaultSelectedRowKeys,\n\n component,\n preserveSelectedRowKeys,\n multiple = true,\n getSelectionProps,\n onSelect,\n hideSelectAll = false,\n fixed,\n columnWidth,\n columnTitle,\n\n extraColumnProps,\n\n // checkStrictly 属性使用场景:\n // const dataSource = [{ key: 1, name: \"张三\", children: [{ key: 1.1, name: \"李四\" }] }]\n // dataSource 中含有 children 属性,antd Table 组件会显示为“树形”结构,Table 左侧会新增一个展开按钮,点击后会显示“李四”的数据\n // 勾选“张三”的时候,会把对应 children 全部选中。如果 checkStrictly=false 则不选中。\n // checkStrictly: _checkStrictly,\n\n renderCell,\n onCell,\n } = options ?? {}\n\n const [selectedRowKeys = [], setSelectedRowKeys] = useControllableValue<Key[]>(\n options ?? {},\n {\n defaultValue: defaultSelectedRowKeys,\n valuePropName: 'selectedRowKeys',\n trigger: 'onChange',\n },\n )\n\n const rowClassName = useCallback((record: T) => {\n const key = (record as AnyObject)[rowKey] as Key\n const checked = selectedRowKeys.includes(key)\n return checked ? 'virtual-table-row-selected' : ''\n }, [rowKey, selectedRowKeys])\n\n const selectionPropsList = useShallowMemo(() => {\n return dataSource.map((row) => {\n if (!getSelectionProps) return {}\n return getSelectionProps(row as T)\n })\n })\n\n // 当有某一行数据 Checkbox disabled 时,过滤它\n const allKeys: Key[] = useShallowMemo(() => {\n return dataSource\n .filter((_data, index) => !selectionPropsList[index].disabled)\n .map((x) => x[rowKey] as Key)\n })\n\n // preserveSelectedRowKeys=true 时,勾选过的数据,都会在这里存一份\n const cache = useRef(new Map<Key, T>())\n\n const allDisabled = !selectionPropsList.some((item) => !item.disabled)\n\n const getRowsByKeys = useStableFn((keys: Key[]) => {\n const result: (T | undefined)[] = []\n keys.forEach((key) => {\n let value = dataSource.find((row) => row[rowKey] === key) as T | undefined\n\n // 在 cache 中还是找不到对应的数据,就放弃寻找,填入一个 undefined(与 antd 默认表现一致)\n // 场景: selectedRowKeys 中有一个在 dataSource 中不存在的 key,用这个 key 是找不到数据的\n if (value == null && preserveSelectedRowKeys) {\n value = cache.current.get(key)\n }\n\n if (value == null && !preserveSelectedRowKeys) return\n\n result.push(value)\n })\n return result\n })\n\n const prevSelectedIndex = useRef<number | null>(null)\n\n const mergeColumns = useMemo(() => {\n if (disablePlugin) {\n return rawColumns\n }\n\n const isSelected = selectedRowKeys.length > 0\n const indeterminate = isSelected && allKeys.length > selectedRowKeys.length\n const isSelectedAll = isSelected\n ? allKeys.length > 0 && allKeys.every((key) => selectedRowKeys.includes(key))\n : false\n\n const shakeDeadKeys = (keys: Key[]) => {\n const unionKeys = new Set(keys)\n if (!preserveSelectedRowKeys) {\n return Array.from(unionKeys).filter((key) => {\n return allKeys.includes(key)\n })\n }\n return Array.from(unionKeys)\n }\n\n const multipleSelect = (currentIndex: number, nextChecked: boolean) => {\n const index = prevSelectedIndex.current ?? currentIndex\n const startIndex = Math.min(index, currentIndex)\n const endIndex = Math.max(index, currentIndex)\n const rangeKeys = allKeys.slice(startIndex, endIndex + 1)\n const shouldSelected = rangeKeys.some((rangeKey) => !selectedRowKeys.includes(rangeKey))\n prevSelectedIndex.current = shouldSelected ? endIndex : null\n const keys = nextChecked\n ? shakeDeadKeys([...selectedRowKeys, ...rangeKeys])\n : shakeDeadKeys(selectedRowKeys.filter((x) => !rangeKeys.includes(x)))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'multiple' })\n }\n\n const onSelectAll = () => {\n const keys = shakeDeadKeys([...selectedRowKeys, ...allKeys])\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'all' })\n }\n\n const onSelectInvert = () => {\n const keys = allKeys.filter((key) => !selectedRowKeys.includes(key))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'invert' })\n }\n\n const onClearAll = () => {\n setSelectedRowKeys([], [], { type: 'none' })\n }\n\n const columnTitleProps: SelectionColumnTitleProps = {\n indeterminate,\n value: isSelectedAll,\n disabled: allDisabled,\n multiple,\n onChange: (checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n },\n onClear: onClearAll,\n onSelectAll,\n onSelectInvert,\n allKeys,\n }\n\n const onCreateTitle = () => {\n if (!multiple) {\n if (isValidElement(columnTitle)) {\n return columnTitle\n }\n if (typeof columnTitle === 'function') {\n return columnTitle(undefined, columnTitleProps)\n }\n return null\n }\n\n let title: ReactNode = (\n <div className=\"virtual-table-selection\">\n <Selection\n component={component}\n multiple={multiple}\n value={isSelectedAll}\n indeterminate={indeterminate}\n disabled={allDisabled}\n onChange={(checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n }}\n />\n </div>\n )\n if (isValidElement(columnTitle)) {\n title = columnTitle\n } else if (typeof columnTitle === 'function') {\n title = columnTitle(title, columnTitleProps)\n }\n return title\n }\n\n const column: ColumnType<T> = {\n ...extraColumnProps,\n title: hideSelectAll ? undefined : onCreateTitle(),\n width: columnWidth ?? 32,\n align: 'center',\n fixed: fixed ? 'left' : undefined,\n key: SELECTION_COLUMN_KEY,\n render(_value, record, index) {\n const key = (record as AnyObject)[rowKey] as Key\n const checked = selectedRowKeys.includes(key)\n const extraProps = selectionPropsList[index]\n\n const updateCache = () => {\n if (preserveSelectedRowKeys) {\n cache.current.set(key, record)\n }\n }\n\n const node = (\n <Selection\n {...extraProps}\n component={component}\n value={checked}\n multiple={multiple}\n onChange={(nextChecked, e) => {\n updateCache()\n if (multiple && (e as PointerEvent).shiftKey) {\n multipleSelect(index, nextChecked)\n return\n }\n if (nextChecked) {\n prevSelectedIndex.current = index\n } else {\n prevSelectedIndex.current = null\n }\n let keys: Key[] = [key]\n if (multiple) {\n keys = nextChecked ? shakeDeadKeys([...selectedRowKeys, key]) : shakeDeadKeys(selectedRowKeys.filter((x) => x !== key))\n }\n const rows = getRowsByKeys(keys)\n // @ts-expect-error rows 并不是安全的 T[] 类型,因为有 preserveSelectedRowKeys 功能存在,在此处只能忽略类型错误\n onSelect?.(record, nextChecked, rows, e)\n setSelectedRowKeys(keys, rows, { type: 'single' })\n }}\n />\n )\n\n if (typeof renderCell === 'function') {\n return renderCell(checked, record, index, node)\n }\n\n return node\n },\n onCell,\n onHeaderCell() {\n return { className: 'virtual-table-selection-column' }\n },\n }\n\n return [column, ...rawColumns]\n }, [\n disablePlugin,\n extraColumnProps,\n allDisabled,\n allKeys,\n columnTitle,\n columnWidth,\n fixed,\n getRowsByKeys,\n hideSelectAll,\n onCell,\n onSelect,\n preserveSelectedRowKeys,\n rawColumns,\n renderCell,\n rowKey,\n selectedRowKeys,\n selectionPropsList,\n setSelectedRowKeys,\n multiple,\n component,\n ])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n rowClassName,\n columns: mergeColumns,\n }\n}\n\n/**\n * 为 Table 实现多选、单选功能,不传入 options 则是禁用插件\n */\nexport const tableSelection = createMiddleware(useSelection)\n"],"names":["Selection","props","ref","className","multiple","indeterminate","value","onChange","component","rest","isCustomComponent","inputNode","useRef","useEffect","input","current","mergedRef","useMergedRef","createElement","_jsx","clsx","type","checked","e","target","nativeEvent","forwardRef","SELECTION_COLUMN_KEY","EMPTY_ARR","useSelection","ctx","options","disablePlugin","columns","rawColumns","rowKey","dataSource","defaultSelectedRowKeys","preserveSelectedRowKeys","getSelectionProps","onSelect","hideSelectAll","fixed","columnWidth","columnTitle","extraColumnProps","renderCell","onCell","selectedRowKeys","setSelectedRowKeys","useControllableValue","defaultValue","valuePropName","trigger","rowClassName","useCallback","record","key","includes","selectionPropsList","useShallowMemo","map","row","allKeys","filter","_data","index","disabled","x","cache","Map","allDisabled","some","item","getRowsByKeys","useStableFn","keys","result","forEach","find","get","push","prevSelectedIndex","mergeColumns","useMemo","isSelected","length","isSelectedAll","every","shakeDeadKeys","unionKeys","Set","Array","from","multipleSelect","currentIndex","nextChecked","startIndex","Math","min","endIndex","max","rangeKeys","slice","shouldSelected","rangeKey","rows","onSelectAll","onSelectInvert","onClearAll","columnTitleProps","onClear","onCreateTitle","isValidElement","undefined","title","children","column","width","align","render","_value","extraProps","updateCache","set","node","shiftKey","onHeaderCell","tableSelection","createMiddleware"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/selection/selection.tsx","../../../../packages/virtual-table/src/middleware/selection/table-selection.tsx"],"sourcesContent":["import type { ComponentType, DetailedHTMLProps, ForwardedRef, InputHTMLAttributes } from 'react'\nimport type { SelectionProps as BaseProps } from './types'\nimport { useMergedRef } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\nimport { createElement, forwardRef, useEffect, useRef } from 'react'\n\ntype InputProps = DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>\nexport interface SelectionProps extends BaseProps,\n Omit<InputProps, 'type' | 'onChange' | 'checked' | 'value' | 'defaultChecked' | 'defaultValue' | 'disabled'> {\n component?: ComponentType<BaseProps>\n}\n\nfunction Selection(props: SelectionProps, ref: ForwardedRef<HTMLInputElement>) {\n const {\n className,\n multiple,\n indeterminate,\n value = false,\n onChange,\n component,\n ...rest\n } = props\n\n const isCustomComponent = component != null\n\n const inputNode = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (isCustomComponent) return\n const input = inputNode.current\n if (input == null) return\n input.indeterminate = !!indeterminate\n }, [isCustomComponent, indeterminate])\n\n const mergedRef = useMergedRef(inputNode, ref)\n\n if (isCustomComponent) {\n return createElement(component, props)\n }\n\n return (\n <input\n {...rest}\n ref={mergedRef}\n className={clsx('virtual-table-selection', className)}\n type={multiple ? 'checkbox' : 'radio'}\n checked={value}\n onChange={(e) => {\n onChange?.(e.target.checked, e.nativeEvent)\n }}\n />\n )\n}\n\nexport default forwardRef(Selection)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { AnyObject, ColumnType, MiddlewareContext, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { Key, ReactNode } from 'react'\nimport type { SelectionColumnTitleProps, TableRowSelection } from './types'\n\nimport { createMiddleware, getRowKey, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport { isValidElement, useCallback, useMemo, useRef } from 'react'\nimport Selection from './selection'\n\nexport const SELECTION_COLUMN_KEY = 'VirtualTable.SELECTION_COLUMN'\n\nconst EMPTY_ARR: AnyObject[] = []\n\nexport function isSelectionColumn<T = any>(column: ColumnType<T>) {\n return column.key === SELECTION_COLUMN_KEY\n}\n\nfunction useSelection<T = any>(\n ctx: MiddlewareContext<T>,\n options?: TableRowSelection<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { columns: rawColumns, rowKey } = ctx\n const dataSource = disablePlugin ? EMPTY_ARR as T[] : ctx.dataSource\n\n const {\n defaultSelectedRowKeys,\n\n component,\n preserveSelectedRowKeys,\n multiple = true,\n getSelectionProps,\n onSelect,\n hideSelectAll = false,\n fixed,\n columnWidth,\n columnTitle,\n\n extraColumnProps,\n\n // checkStrictly 属性使用场景:\n // const dataSource = [{ key: 1, name: \"张三\", children: [{ key: 1.1, name: \"李四\" }] }]\n // dataSource 中含有 children 属性,antd Table 组件会显示为“树形”结构,Table 左侧会新增一个展开按钮,点击后会显示“李四”的数据\n // 勾选“张三”的时候,会把对应 children 全部选中。如果 checkStrictly=false 则不选中。\n // checkStrictly: _checkStrictly,\n\n renderCell,\n onCell,\n } = options ?? {}\n\n const [selectedRowKeys = [], setSelectedRowKeys] = useControllableValue<Key[]>(\n options ?? {},\n {\n defaultValue: defaultSelectedRowKeys,\n valuePropName: 'selectedRowKeys',\n trigger: 'onChange',\n },\n )\n\n const rowClassName = useCallback((record: T) => {\n const key = getRowKey(record, rowKey)\n const checked = selectedRowKeys.includes(key)\n return checked ? 'virtual-table-row-selected' : ''\n }, [rowKey, selectedRowKeys])\n\n const selectionPropsList = useShallowMemo(() => {\n return dataSource.map((row) => {\n if (!getSelectionProps) return {}\n return getSelectionProps(row)\n })\n })\n\n // 当有某一行数据 Checkbox disabled 时,过滤它\n const allKeys: Key[] = useShallowMemo(() => {\n return dataSource\n .filter((_data, index) => !selectionPropsList[index].disabled)\n .map((x) => getRowKey(x, rowKey))\n })\n\n // preserveSelectedRowKeys=true 时,勾选过的数据,都会在这里存一份\n const cache = useRef(new Map<Key, T>())\n\n const allDisabled = !selectionPropsList.some((item) => !item.disabled)\n\n const getRowsByKeys = useStableFn((keys: Key[]) => {\n const result: (T | undefined)[] = []\n keys.forEach((key) => {\n let value = dataSource.find((row) => getRowKey(row, rowKey) === key)\n\n // 在 cache 中还是找不到对应的数据,就放弃寻找,填入一个 undefined(与 antd 默认表现一致)\n // 场景: selectedRowKeys 中有一个在 dataSource 中不存在的 key,用这个 key 是找不到数据的\n if (value == null && preserveSelectedRowKeys) {\n value = cache.current.get(key)\n }\n\n if (value == null && !preserveSelectedRowKeys) return\n\n result.push(value)\n })\n return result\n })\n\n const prevSelectedIndex = useRef<number | null>(null)\n\n const mergeColumns = useMemo(() => {\n if (disablePlugin) {\n return rawColumns\n }\n\n const isSelected = selectedRowKeys.length > 0\n const indeterminate = isSelected && allKeys.length > selectedRowKeys.length\n const isSelectedAll = isSelected\n ? allKeys.length > 0 && allKeys.every((key) => selectedRowKeys.includes(key))\n : false\n\n const shakeDeadKeys = (keys: Key[]) => {\n const unionKeys = new Set(keys)\n if (!preserveSelectedRowKeys) {\n return Array.from(unionKeys).filter((key) => {\n return allKeys.includes(key)\n })\n }\n return Array.from(unionKeys)\n }\n\n const multipleSelect = (currentIndex: number, nextChecked: boolean) => {\n const index = prevSelectedIndex.current ?? currentIndex\n const startIndex = Math.min(index, currentIndex)\n const endIndex = Math.max(index, currentIndex)\n const rangeKeys = allKeys.slice(startIndex, endIndex + 1)\n const shouldSelected = rangeKeys.some((rangeKey) => !selectedRowKeys.includes(rangeKey))\n prevSelectedIndex.current = shouldSelected ? endIndex : null\n const keys = nextChecked\n ? shakeDeadKeys([...selectedRowKeys, ...rangeKeys])\n : shakeDeadKeys(selectedRowKeys.filter((x) => !rangeKeys.includes(x)))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'multiple' })\n }\n\n const onSelectAll = () => {\n const keys = shakeDeadKeys([...selectedRowKeys, ...allKeys])\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'all' })\n }\n\n const onSelectInvert = () => {\n const keys = allKeys.filter((key) => !selectedRowKeys.includes(key))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'invert' })\n }\n\n const onClearAll = () => {\n setSelectedRowKeys([], [], { type: 'none' })\n }\n\n const columnTitleProps: SelectionColumnTitleProps = {\n indeterminate,\n value: isSelectedAll,\n disabled: allDisabled,\n multiple,\n onChange: (checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n },\n onClear: onClearAll,\n onSelectAll,\n onSelectInvert,\n allKeys,\n }\n\n const onCreateTitle = () => {\n if (!multiple) {\n if (isValidElement(columnTitle)) {\n return columnTitle\n }\n if (typeof columnTitle === 'function') {\n return columnTitle(undefined, columnTitleProps)\n }\n return null\n }\n\n let title: ReactNode = (\n <div className=\"virtual-table-selection\">\n <Selection\n component={component}\n multiple={multiple}\n value={isSelectedAll}\n indeterminate={indeterminate}\n disabled={allDisabled}\n onChange={(checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n }}\n />\n </div>\n )\n if (isValidElement(columnTitle)) {\n title = columnTitle\n } else if (typeof columnTitle === 'function') {\n title = columnTitle(title, columnTitleProps)\n }\n return title\n }\n\n const column: ColumnType<T> = {\n ...extraColumnProps,\n title: hideSelectAll ? undefined : onCreateTitle(),\n width: columnWidth ?? 32,\n align: 'center',\n fixed: fixed ? 'left' : undefined,\n key: SELECTION_COLUMN_KEY,\n render(_value, record, index) {\n const key = getRowKey(record, rowKey)\n const checked = selectedRowKeys.includes(key)\n const extraProps = selectionPropsList[index]\n\n const updateCache = () => {\n if (preserveSelectedRowKeys) {\n cache.current.set(key, record)\n }\n }\n\n const node = (\n <Selection\n {...extraProps}\n component={component}\n value={checked}\n multiple={multiple}\n onChange={(nextChecked, e) => {\n updateCache()\n if (multiple && (e as PointerEvent).shiftKey) {\n multipleSelect(index, nextChecked)\n return\n }\n if (nextChecked) {\n prevSelectedIndex.current = index\n } else {\n prevSelectedIndex.current = null\n }\n let keys: Key[] = [key]\n if (multiple) {\n keys = nextChecked ? shakeDeadKeys([...selectedRowKeys, key]) : shakeDeadKeys(selectedRowKeys.filter((x) => x !== key))\n }\n const rows = getRowsByKeys(keys)\n // @ts-expect-error rows 并不是安全的 T[] 类型,因为有 preserveSelectedRowKeys 功能存在,在此处只能忽略类型错误\n onSelect?.(record, nextChecked, rows, e)\n setSelectedRowKeys(keys, rows, { type: 'single' })\n }}\n />\n )\n\n if (typeof renderCell === 'function') {\n return renderCell(checked, record, index, node)\n }\n\n return node\n },\n onCell,\n onHeaderCell() {\n return { className: 'virtual-table-selection-column' }\n },\n }\n\n return [column, ...rawColumns]\n }, [\n disablePlugin,\n extraColumnProps,\n allDisabled,\n allKeys,\n columnTitle,\n columnWidth,\n fixed,\n getRowsByKeys,\n hideSelectAll,\n onCell,\n onSelect,\n preserveSelectedRowKeys,\n rawColumns,\n renderCell,\n rowKey,\n selectedRowKeys,\n selectionPropsList,\n setSelectedRowKeys,\n multiple,\n component,\n ])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n rowClassName,\n columns: mergeColumns,\n }\n}\n\n/**\n * 为 Table 实现多选、单选功能,不传入 options 则是禁用插件\n */\nexport const tableSelection = createMiddleware(useSelection)\n"],"names":["Selection","props","ref","className","multiple","indeterminate","value","onChange","component","rest","isCustomComponent","inputNode","useRef","useEffect","input","current","mergedRef","useMergedRef","createElement","_jsx","clsx","type","checked","e","target","nativeEvent","forwardRef","SELECTION_COLUMN_KEY","EMPTY_ARR","useSelection","ctx","options","disablePlugin","columns","rawColumns","rowKey","dataSource","defaultSelectedRowKeys","preserveSelectedRowKeys","getSelectionProps","onSelect","hideSelectAll","fixed","columnWidth","columnTitle","extraColumnProps","renderCell","onCell","selectedRowKeys","setSelectedRowKeys","useControllableValue","defaultValue","valuePropName","trigger","rowClassName","useCallback","record","key","getRowKey","includes","selectionPropsList","useShallowMemo","map","row","allKeys","filter","_data","index","disabled","x","cache","Map","allDisabled","some","item","getRowsByKeys","useStableFn","keys","result","forEach","find","get","push","prevSelectedIndex","mergeColumns","useMemo","isSelected","length","isSelectedAll","every","shakeDeadKeys","unionKeys","Set","Array","from","multipleSelect","currentIndex","nextChecked","startIndex","Math","min","endIndex","max","rangeKeys","slice","shouldSelected","rangeKey","rows","onSelectAll","onSelectInvert","onClearAll","columnTitleProps","onClear","onCreateTitle","isValidElement","undefined","title","children","column","width","align","render","_value","extraProps","updateCache","set","node","shiftKey","onHeaderCell","tableSelection","createMiddleware"],"mappings":"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"}
|