@are-visual/virtual-table 0.0.1 → 0.1.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.
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useTableRowManager, useContainerSize, createMiddleware, useShallowMemo, useStableFn, 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
- import { useRef, useMemo, useCallback } from 'react';
5
+ import { useMemo, useRef, useCallback } from 'react';
6
6
 
7
7
  const ExpandRow = props => {
8
8
  const {
@@ -15,13 +15,11 @@ const ExpandRow = props => {
15
15
  fixed
16
16
  } = props;
17
17
  const {
18
- getRowHeightList,
19
18
  updateRowHeight
20
19
  } = useTableRowManager();
21
20
  const {
22
21
  tableWidth
23
22
  } = useContainerSize();
24
- const currentNodeHeight = useRef(0);
25
23
  return jsx("tr", {
26
24
  className: clsx('virtual-table-expanded-row', className),
27
25
  style: {
@@ -30,11 +28,7 @@ const ExpandRow = props => {
30
28
  },
31
29
  ref: node => {
32
30
  if (node == null) return;
33
- const originHeight = getRowHeightList()[rowIndex] ?? 0;
34
- if (isExpanded) {
35
- currentNodeHeight.current = node.offsetHeight;
36
- updateRowHeight(rowIndex, originHeight + currentNodeHeight.current);
37
- }
31
+ updateRowHeight(rowIndex, `row(${rowIndex})-expandable`, node.offsetHeight);
38
32
  },
39
33
  children: jsx("td", {
40
34
  colSpan: colSpan,
@@ -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'\nimport { useRef } from 'react'\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 { getRowHeightList, updateRowHeight } = useTableRowManager()\n const { tableWidth } = useContainerSize()\n\n const currentNodeHeight = useRef(0)\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\n const originHeight = getRowHeightList()[rowIndex] ?? 0\n if (isExpanded) {\n currentNodeHeight.current = node.offsetHeight\n updateRowHeight(rowIndex, originHeight + currentNodeHeight.current)\n } else {\n // 关闭后,不需要再次更新 RowHeight,否则计算会出错\n }\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","getRowHeightList","updateRowHeight","useTableRowManager","tableWidth","useContainerSize","currentNodeHeight","useRef","_jsx","clsx","display","undefined","ref","node","originHeight","current","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","defaultExpandKey","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, 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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"}
@@ -22,8 +22,10 @@ const ScrollBar = props => {
22
22
  if (node == null) return;
23
23
  const key = 'virtual-table-sticky-bottom-scroll';
24
24
  const onScroll = () => {
25
- const nextScrollLeft = node.scrollLeft;
26
- notify(key, nextScrollLeft, node);
25
+ notify(key, {
26
+ scrollLeft: () => node.scrollLeft,
27
+ node
28
+ });
27
29
  };
28
30
  const dispose = listen(key, scrollLeft => {
29
31
  node.scrollLeft = scrollLeft;
@@ -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 const nextScrollLeft = node.scrollLeft\n notify(key, nextScrollLeft, 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 bottom,\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 = ScrollBarProps\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","nextScrollLeft","scrollLeft","dispose","addEventListener","removeEventListener","width","setWidth","useState","body","onResize","_ref","size","getScrollbarSize","_jsx","clsx","paddingTop","height","marginTop","ref","children","useHorizontalScrollBar","ctx","options","bodyRootRef","renderContent","_jsxs","_Fragment","horizontalScrollBar","createMiddleware"],"mappings":"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"}
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 bottom,\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 = ScrollBarProps\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","paddingTop","height","marginTop","ref","children","useHorizontalScrollBar","ctx","options","bodyRootRef","renderContent","_jsxs","_Fragment","horizontalScrollBar","createMiddleware"],"mappings":"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"}
@@ -23,8 +23,10 @@ const Footer = props => {
23
23
  if (node == null) return;
24
24
  const key = 'virtual-table-summary';
25
25
  const onScroll = () => {
26
- const nextScrollLeft = node.scrollLeft;
27
- notify(key, nextScrollLeft, node);
26
+ notify(key, {
27
+ scrollLeft: () => node.scrollLeft,
28
+ node
29
+ });
28
30
  };
29
31
  const dispose = listen(key, scrollLeft => {
30
32
  node.scrollLeft = scrollLeft;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/summary/context/columns.tsx","../../../../packages/virtual-table/src/middleware/summary/footer.tsx","../../../../packages/virtual-table/src/middleware/summary/cell.tsx","../../../../packages/virtual-table/src/middleware/summary/row.tsx","../../../../packages/virtual-table/src/middleware/summary/summary.tsx","../../../../packages/virtual-table/src/middleware/summary/index.tsx"],"sourcesContent":["import type { ColumnDescriptor } from '@are-visual/virtual-table'\nimport { createContext } from 'react'\n\nexport const SummaryContext = createContext<ColumnDescriptor[] | null>(null)\n","import type { ColumnDescriptor } from '@are-visual/virtual-table'\nimport type { FC, ReactNode } from 'react'\nimport { Colgroup, 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 FooterProps {\n columns: ColumnDescriptor[]\n fixed?: boolean\n children?: ReactNode\n}\n\nconst Footer: FC<FooterProps> = (props) => {\n const { columns, fixed, children } = props\n\n const { listen, notify } = useHorizontalScrollContext()\n const [scrollbarHeight] = useState(() => getScrollbarSize().height)\n\n const wrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = wrapperRef.current\n if (node == null) return\n const key = 'virtual-table-summary'\n const onScroll = () => {\n const nextScrollLeft = node.scrollLeft\n notify(key, nextScrollLeft, 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 return (\n <div\n className={clsx(\n 'virtual-table-summary-wrapper',\n fixed && 'virtual-table-summary-sticky-bottom virtual-table-summary-top-border',\n )}\n style={{ paddingBottom: scrollbarHeight }}\n ref={wrapperRef}\n >\n <table className=\"virtual-table-summary\">\n <Colgroup columns={columns} />\n <tfoot className=\"virtual-table-summary-tfoot\">{children}</tfoot>\n </table>\n </div>\n )\n}\n\nexport default Footer\n","import type { ColumnType } from '@are-visual/virtual-table'\nimport type { DetailedHTMLProps, HTMLAttributes, Key } from 'react'\nimport { isValidFixed, isValidFixedLeft, isValidFixedRight, useTableSticky } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\nimport { memo, useMemo } from 'react'\n\ntype NativeProps = DetailedHTMLProps<\n HTMLAttributes<HTMLTableCellElement>,\n HTMLTableCellElement\n>\n\nexport interface CellProps extends NativeProps, Pick<ColumnType<unknown>, 'align'> {\n columnKey: Key\n colSpan?: number\n}\n\nfunction Cell(props: CellProps) {\n const {\n className,\n style,\n children,\n align,\n colSpan,\n columnKey,\n ...restProps\n } = props\n\n const { size: stickySizes, fixed: columnsFixed } = useTableSticky()\n\n const stickySize = stickySizes.get(columnKey)\n const fixed = columnsFixed.find((x) => x.key === columnKey)?.fixed\n\n const { left: lastFixedLeftColumnKey, right: firstFixedRightColumnKey } = useMemo(() => {\n const left = columnsFixed.reduce<Key | undefined>((result, x) => {\n if (isValidFixedLeft(x.fixed)) {\n return x.key\n }\n return result\n }, undefined)\n const right = columnsFixed.find((x) => isValidFixedRight(x.fixed))?.key\n return { left, right }\n }, [columnsFixed])\n\n if (colSpan === 0) {\n return null\n }\n\n return (\n <td\n {...restProps}\n colSpan={colSpan}\n className={clsx(\n 'virtual-table-cell virtual-table-summary-cell',\n align != null && `virtual-table-align-${align}`,\n isValidFixed(fixed) && 'virtual-table-sticky-cell',\n lastFixedLeftColumnKey === columnKey && 'virtual-table-cell-fix-left-last',\n firstFixedRightColumnKey === columnKey && 'virtual-table-cell-fix-right-first',\n className,\n )}\n style={{\n ...style,\n left: isValidFixedLeft(fixed) ? stickySize : undefined,\n right: isValidFixedRight(fixed) ? stickySize : undefined,\n }}\n >\n {children}\n </td>\n )\n}\n\nexport default memo(Cell)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ColumnType } from '@are-visual/virtual-table'\nimport type { CSSProperties, FC, Key, MouseEvent, ReactNode } from 'react'\nimport { Fragment, useContext } from 'react'\nimport { SummaryContext } from './context/columns'\n\nexport interface SummaryRowProps {\n children?: ReactNode | ((column: ColumnType<any>, key: Key) => ReactNode)\n className?: string\n style?: CSSProperties\n onClick?: (e?: MouseEvent<HTMLElement>) => void\n}\n\nconst SummaryRow: FC<SummaryRowProps> = ({ children, ...props }) => {\n const descriptor = useContext(SummaryContext)\n\n if (typeof children === 'function') {\n if (descriptor != null) {\n return (\n <tr {...props}>\n {descriptor.map((item) => {\n const { key } = item\n if (item.type === 'blank') {\n return <td key={key} />\n }\n const { column } = item\n return <Fragment key={key}>{children(column, key)}</Fragment>\n })}\n </tr>\n )\n } else {\n throw new Error('SummaryRow is missing the columns context and cannot use children as a function.')\n }\n }\n\n return <tr {...props}>{children}</tr>\n}\n\nexport default SummaryRow\n","import type { ReactElement, ReactNode } from 'react'\n\nimport Cell from './cell'\nimport Row from './row'\n\nexport interface SummaryProps {\n fixed?: boolean | 'top' | 'bottom'\n children?: ReactNode\n}\n\nfunction Summary({ children }: SummaryProps) {\n return children as ReactElement\n}\n\nSummary.Row = Row\nSummary.Cell = Cell\n\nexport default Summary\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MiddlewareContext, MiddlewareRenderHeader, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { ReactNode } from 'react'\nimport type { SummaryProps } from './summary'\nimport { createMiddleware } from '@are-visual/virtual-table'\nimport { isValidElement, useCallback } from 'react'\nimport { SummaryContext } from './context/columns'\nimport Footer from './footer'\nimport Summary from './summary'\n\nexport interface TableSummaryOptions<T = any> {\n summary: (data: readonly T[]) => ReactNode\n}\n\nfunction useTableSummary<T = any>(\n ctx: MiddlewareContext<T>,\n options?: TableSummaryOptions<T>,\n): MiddlewareResult<T> {\n const { summary } = options ?? {}\n const { dataSource } = ctx\n\n const summaryNode = summary?.(dataSource)\n const fixed = isValidElement(summaryNode)\n && summaryNode.type === Summary\n && (summaryNode.props as SummaryProps).fixed\n\n const renderHeader: MiddlewareRenderHeader = useCallback((children, { columnDescriptor }) => {\n return (\n <>\n {children}\n <tfoot className=\"virtual-table-summary-tfoot\">\n <SummaryContext.Provider value={columnDescriptor}>\n {summaryNode}\n </SummaryContext.Provider>\n </tfoot>\n </>\n )\n }, [summaryNode])\n\n if (summary == null) {\n return ctx\n }\n\n if (fixed === 'top') {\n return { ...ctx, renderHeader }\n }\n\n return {\n ...ctx,\n renderContent(children, { columnDescriptor }) {\n return (\n <>\n {children}\n <Footer fixed={fixed === 'bottom' || fixed} columns={columnDescriptor}>\n <SummaryContext.Provider value={columnDescriptor}>\n {summaryNode}\n </SummaryContext.Provider>\n </Footer>\n </>\n )\n },\n }\n}\n\nexport { default as Summary } from './summary'\nexport const tableSummary = createMiddleware(useTableSummary)\n"],"names":["SummaryContext","createContext","Footer","props","columns","fixed","children","listen","notify","useHorizontalScrollContext","scrollbarHeight","useState","getScrollbarSize","height","wrapperRef","useRef","useEffect","node","current","key","onScroll","nextScrollLeft","scrollLeft","dispose","addEventListener","removeEventListener","_jsx","className","clsx","style","paddingBottom","ref","_jsxs","Colgroup","Cell","align","colSpan","columnKey","restProps","size","stickySizes","columnsFixed","useTableSticky","stickySize","get","find","x","left","lastFixedLeftColumnKey","right","firstFixedRightColumnKey","useMemo","reduce","result","isValidFixedLeft","undefined","isValidFixedRight","isValidFixed","memo","SummaryRow","_ref","descriptor","useContext","map","item","type","column","Fragment","Error","Summary","Row","useTableSummary","ctx","options","summary","dataSource","summaryNode","isValidElement","renderHeader","useCallback","columnDescriptor","Provider","value","renderContent","_ref2","_Fragment","tableSummary","createMiddleware"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/summary/context/columns.tsx","../../../../packages/virtual-table/src/middleware/summary/footer.tsx","../../../../packages/virtual-table/src/middleware/summary/cell.tsx","../../../../packages/virtual-table/src/middleware/summary/row.tsx","../../../../packages/virtual-table/src/middleware/summary/summary.tsx","../../../../packages/virtual-table/src/middleware/summary/index.tsx"],"sourcesContent":["import type { ColumnDescriptor } from '@are-visual/virtual-table'\nimport { createContext } from 'react'\n\nexport const SummaryContext = createContext<ColumnDescriptor[] | null>(null)\n","import type { ColumnDescriptor } from '@are-visual/virtual-table'\nimport type { FC, ReactNode } from 'react'\nimport { Colgroup, 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 FooterProps {\n columns: ColumnDescriptor[]\n fixed?: boolean\n children?: ReactNode\n}\n\nconst Footer: FC<FooterProps> = (props) => {\n const { columns, fixed, children } = props\n\n const { listen, notify } = useHorizontalScrollContext()\n const [scrollbarHeight] = useState(() => getScrollbarSize().height)\n\n const wrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = wrapperRef.current\n if (node == null) return\n const key = 'virtual-table-summary'\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 return (\n <div\n className={clsx(\n 'virtual-table-summary-wrapper',\n fixed && 'virtual-table-summary-sticky-bottom virtual-table-summary-top-border',\n )}\n style={{ paddingBottom: scrollbarHeight }}\n ref={wrapperRef}\n >\n <table className=\"virtual-table-summary\">\n <Colgroup columns={columns} />\n <tfoot className=\"virtual-table-summary-tfoot\">{children}</tfoot>\n </table>\n </div>\n )\n}\n\nexport default Footer\n","import type { ColumnType } from '@are-visual/virtual-table'\nimport type { DetailedHTMLProps, HTMLAttributes, Key } from 'react'\nimport { isValidFixed, isValidFixedLeft, isValidFixedRight, useTableSticky } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\nimport { memo, useMemo } from 'react'\n\ntype NativeProps = DetailedHTMLProps<\n HTMLAttributes<HTMLTableCellElement>,\n HTMLTableCellElement\n>\n\nexport interface CellProps extends NativeProps, Pick<ColumnType<unknown>, 'align'> {\n columnKey: Key\n colSpan?: number\n}\n\nfunction Cell(props: CellProps) {\n const {\n className,\n style,\n children,\n align,\n colSpan,\n columnKey,\n ...restProps\n } = props\n\n const { size: stickySizes, fixed: columnsFixed } = useTableSticky()\n\n const stickySize = stickySizes.get(columnKey)\n const fixed = columnsFixed.find((x) => x.key === columnKey)?.fixed\n\n const { left: lastFixedLeftColumnKey, right: firstFixedRightColumnKey } = useMemo(() => {\n const left = columnsFixed.reduce<Key | undefined>((result, x) => {\n if (isValidFixedLeft(x.fixed)) {\n return x.key\n }\n return result\n }, undefined)\n const right = columnsFixed.find((x) => isValidFixedRight(x.fixed))?.key\n return { left, right }\n }, [columnsFixed])\n\n if (colSpan === 0) {\n return null\n }\n\n return (\n <td\n {...restProps}\n colSpan={colSpan}\n className={clsx(\n 'virtual-table-cell virtual-table-summary-cell',\n align != null && `virtual-table-align-${align}`,\n isValidFixed(fixed) && 'virtual-table-sticky-cell',\n lastFixedLeftColumnKey === columnKey && 'virtual-table-cell-fix-left-last',\n firstFixedRightColumnKey === columnKey && 'virtual-table-cell-fix-right-first',\n className,\n )}\n style={{\n ...style,\n left: isValidFixedLeft(fixed) ? stickySize : undefined,\n right: isValidFixedRight(fixed) ? stickySize : undefined,\n }}\n >\n {children}\n </td>\n )\n}\n\nexport default memo(Cell)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ColumnType } from '@are-visual/virtual-table'\nimport type { CSSProperties, FC, Key, MouseEvent, ReactNode } from 'react'\nimport { Fragment, useContext } from 'react'\nimport { SummaryContext } from './context/columns'\n\nexport interface SummaryRowProps {\n children?: ReactNode | ((column: ColumnType<any>, key: Key) => ReactNode)\n className?: string\n style?: CSSProperties\n onClick?: (e?: MouseEvent<HTMLElement>) => void\n}\n\nconst SummaryRow: FC<SummaryRowProps> = ({ children, ...props }) => {\n const descriptor = useContext(SummaryContext)\n\n if (typeof children === 'function') {\n if (descriptor != null) {\n return (\n <tr {...props}>\n {descriptor.map((item) => {\n const { key } = item\n if (item.type === 'blank') {\n return <td key={key} />\n }\n const { column } = item\n return <Fragment key={key}>{children(column, key)}</Fragment>\n })}\n </tr>\n )\n } else {\n throw new Error('SummaryRow is missing the columns context and cannot use children as a function.')\n }\n }\n\n return <tr {...props}>{children}</tr>\n}\n\nexport default SummaryRow\n","import type { ReactElement, ReactNode } from 'react'\n\nimport Cell from './cell'\nimport Row from './row'\n\nexport interface SummaryProps {\n fixed?: boolean | 'top' | 'bottom'\n children?: ReactNode\n}\n\nfunction Summary({ children }: SummaryProps) {\n return children as ReactElement\n}\n\nSummary.Row = Row\nSummary.Cell = Cell\n\nexport default Summary\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MiddlewareContext, MiddlewareRenderHeader, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { ReactNode } from 'react'\nimport type { SummaryProps } from './summary'\nimport { createMiddleware } from '@are-visual/virtual-table'\nimport { isValidElement, useCallback } from 'react'\nimport { SummaryContext } from './context/columns'\nimport Footer from './footer'\nimport Summary from './summary'\n\nexport interface TableSummaryOptions<T = any> {\n summary: (data: readonly T[]) => ReactNode\n}\n\nfunction useTableSummary<T = any>(\n ctx: MiddlewareContext<T>,\n options?: TableSummaryOptions<T>,\n): MiddlewareResult<T> {\n const { summary } = options ?? {}\n const { dataSource } = ctx\n\n const summaryNode = summary?.(dataSource)\n const fixed = isValidElement(summaryNode)\n && summaryNode.type === Summary\n && (summaryNode.props as SummaryProps).fixed\n\n const renderHeader: MiddlewareRenderHeader = useCallback((children, { columnDescriptor }) => {\n return (\n <>\n {children}\n <tfoot className=\"virtual-table-summary-tfoot\">\n <SummaryContext.Provider value={columnDescriptor}>\n {summaryNode}\n </SummaryContext.Provider>\n </tfoot>\n </>\n )\n }, [summaryNode])\n\n if (summary == null) {\n return ctx\n }\n\n if (fixed === 'top') {\n return { ...ctx, renderHeader }\n }\n\n return {\n ...ctx,\n renderContent(children, { columnDescriptor }) {\n return (\n <>\n {children}\n <Footer fixed={fixed === 'bottom' || fixed} columns={columnDescriptor}>\n <SummaryContext.Provider value={columnDescriptor}>\n {summaryNode}\n </SummaryContext.Provider>\n </Footer>\n </>\n )\n },\n }\n}\n\nexport { default as Summary } from './summary'\nexport const tableSummary = createMiddleware(useTableSummary)\n"],"names":["SummaryContext","createContext","Footer","props","columns","fixed","children","listen","notify","useHorizontalScrollContext","scrollbarHeight","useState","getScrollbarSize","height","wrapperRef","useRef","useEffect","node","current","key","onScroll","scrollLeft","dispose","addEventListener","removeEventListener","_jsx","className","clsx","style","paddingBottom","ref","_jsxs","Colgroup","Cell","align","colSpan","columnKey","restProps","size","stickySizes","columnsFixed","useTableSticky","stickySize","get","find","x","left","lastFixedLeftColumnKey","right","firstFixedRightColumnKey","useMemo","reduce","result","isValidFixedLeft","undefined","isValidFixedRight","isValidFixed","memo","SummaryRow","_ref","descriptor","useContext","map","item","type","column","Fragment","Error","Summary","Row","useTableSummary","ctx","options","summary","dataSource","summaryNode","isValidElement","renderHeader","useCallback","columnDescriptor","Provider","value","renderContent","_ref2","_Fragment","tableSummary","createMiddleware"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@are-visual/virtual-table",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "main": "./index.esm.js",
5
5
  "types": "./index.d.ts",
6
6
  "sideEffects": false,