element-plus
Version:
A Component Library for Vue 3
1 lines • 14.1 kB
Source Map (JSON)
{"version":3,"file":"table-grid.mjs","sources":["../../../../../../packages/components/table-v2/src/table-grid.tsx"],"sourcesContent":["import { computed, defineComponent, inject, ref, unref } from 'vue'\nimport {\n DynamicSizeGrid,\n FixedSizeGrid,\n} from '@element-plus/components/virtual-list'\nimport { isNumber, isObject } from '@element-plus/utils'\nimport { Header } from './components'\nimport { TableV2InjectionKey } from './tokens'\nimport { tableV2GridProps } from './grid'\nimport { sum } from './utils'\n\nimport type { UnwrapRef } from 'vue'\nimport type {\n DynamicSizeGridInstance,\n GridDefaultSlotParams,\n GridItemKeyGetter,\n GridItemRenderedEvtParams,\n GridScrollOptions,\n ResetAfterIndex,\n} from '@element-plus/components/virtual-list'\nimport type { TableV2HeaderInstance } from './components'\nimport type { TableV2GridProps } from './grid'\n\nconst COMPONENT_NAME = 'ElTableV2Grid'\n\nconst useTableGrid = (props: TableV2GridProps) => {\n const headerRef = ref<TableV2HeaderInstance>()\n const bodyRef = ref<DynamicSizeGridInstance>()\n\n const totalHeight = computed(() => {\n const { data, rowHeight, estimatedRowHeight } = props\n\n if (estimatedRowHeight) {\n return\n }\n\n return data.length * (rowHeight as number)\n })\n\n const fixedRowHeight = computed(() => {\n const { fixedData, rowHeight } = props\n\n return (fixedData?.length || 0) * (rowHeight as number)\n })\n\n const headerHeight = computed(() => sum(props.headerHeight))\n\n const gridHeight = computed(() => {\n const { height } = props\n return Math.max(0, height - unref(headerHeight) - unref(fixedRowHeight))\n })\n\n const hasHeader = computed(() => {\n return unref(headerHeight) + unref(fixedRowHeight) > 0\n })\n\n const itemKey: GridItemKeyGetter = ({ data, rowIndex }) =>\n data[rowIndex][props.rowKey]\n\n function onItemRendered({\n rowCacheStart,\n rowCacheEnd,\n rowVisibleStart,\n rowVisibleEnd,\n }: GridItemRenderedEvtParams) {\n props.onRowsRendered?.({\n rowCacheStart,\n rowCacheEnd,\n rowVisibleStart,\n rowVisibleEnd,\n })\n }\n\n function resetAfterRowIndex(index: number, forceUpdate: boolean) {\n bodyRef.value?.resetAfterRowIndex(index, forceUpdate)\n }\n\n function scrollTo(x: number, y: number): void\n function scrollTo(options: GridScrollOptions): void\n function scrollTo(leftOrOptions: number | GridScrollOptions, top?: number) {\n const header$ = unref(headerRef)\n const body$ = unref(bodyRef)\n\n if (!header$ || !body$) return\n\n if (isObject(leftOrOptions)) {\n header$.scrollToLeft(leftOrOptions.scrollLeft)\n body$.scrollTo(leftOrOptions)\n } else {\n header$.scrollToLeft(leftOrOptions)\n body$.scrollTo({\n scrollLeft: leftOrOptions,\n scrollTop: top,\n })\n }\n }\n\n function scrollToTop(scrollTop: number) {\n unref(bodyRef)?.scrollTo({\n scrollTop,\n })\n }\n\n function forceUpdate() {\n unref(bodyRef)?.$forceUpdate()\n unref(headerRef)?.$forceUpdate()\n }\n\n return {\n bodyRef,\n forceUpdate,\n fixedRowHeight,\n gridHeight,\n hasHeader,\n headerHeight,\n headerRef,\n totalHeight,\n\n itemKey,\n onItemRendered,\n resetAfterRowIndex,\n scrollTo,\n scrollToTop,\n }\n}\n\nconst TableGrid = defineComponent({\n name: COMPONENT_NAME,\n props: tableV2GridProps,\n setup(props, { slots, expose }) {\n const { ns } = inject(TableV2InjectionKey)!\n\n const {\n bodyRef,\n fixedRowHeight,\n gridHeight,\n hasHeader,\n headerRef,\n headerHeight,\n totalHeight,\n\n forceUpdate,\n itemKey,\n onItemRendered,\n resetAfterRowIndex,\n scrollTo,\n scrollToTop,\n } = useTableGrid(props)\n\n expose({\n forceUpdate,\n /**\n * @description fetch total height\n */\n totalHeight,\n /**\n * @description scroll to a position\n */\n scrollTo,\n /**\n * @description scroll vertically to position y\n */\n scrollToTop,\n /**\n * @description reset rendered state after row index\n */\n resetAfterRowIndex,\n })\n\n const getColumnWidth = () => props.bodyWidth\n\n return () => {\n const {\n cache,\n columns,\n data,\n fixedData,\n useIsScrolling,\n scrollbarAlwaysOn,\n scrollbarEndGap,\n scrollbarStartGap,\n style,\n rowHeight,\n bodyWidth,\n estimatedRowHeight,\n headerWidth,\n height,\n width,\n\n getRowHeight,\n onScroll,\n } = props\n\n const isDynamicRowEnabled = isNumber(estimatedRowHeight)\n const Grid = isDynamicRowEnabled ? DynamicSizeGrid : FixedSizeGrid\n const _headerHeight = unref(headerHeight)\n\n return (\n <div role=\"table\" class={[ns.e('table'), props.class]} style={style}>\n <Grid\n ref={bodyRef}\n // special attrs\n data={data}\n useIsScrolling={useIsScrolling}\n itemKey={itemKey}\n // column attrs\n columnCache={0}\n columnWidth={isDynamicRowEnabled ? getColumnWidth : bodyWidth}\n totalColumn={1}\n // row attrs\n totalRow={data.length}\n rowCache={cache}\n rowHeight={isDynamicRowEnabled ? getRowHeight : rowHeight}\n // DOM attrs\n width={width}\n height={unref(gridHeight)}\n class={ns.e('body')}\n scrollbarStartGap={scrollbarStartGap}\n scrollbarEndGap={scrollbarEndGap}\n scrollbarAlwaysOn={scrollbarAlwaysOn}\n // handlers\n onScroll={onScroll}\n onItemRendered={onItemRendered}\n perfMode={false}\n >\n {{\n default: (params: GridDefaultSlotParams) => {\n const rowData = data[params.rowIndex]\n return slots.row?.({\n ...params,\n columns,\n rowData,\n })\n },\n }}\n </Grid>\n {unref(hasHeader) && (\n <Header\n ref={headerRef}\n class={ns.e('header-wrapper')}\n columns={columns}\n headerData={data}\n headerHeight={_headerHeight}\n fixedHeaderData={fixedData}\n rowWidth={headerWidth}\n rowHeight={rowHeight}\n width={width}\n height={Math.min(_headerHeight + unref(fixedRowHeight), height)}\n >\n {{\n dynamic: slots.header,\n fixed: slots.row,\n }}\n </Header>\n )}\n </div>\n )\n }\n },\n})\n\nexport default TableGrid\n\nexport type TableGridRowSlotParams = {\n columns: TableV2GridProps['columns']\n rowData: any\n} & GridDefaultSlotParams\n\nexport type TableGridInstance = InstanceType<typeof TableGrid> &\n UnwrapRef<{\n forceUpdate: () => void\n /**\n * @description fetch total height\n */\n totalHeight: number\n\n /**\n * @description scrollTo a position\n * @param { number | ScrollToOptions } arg1\n * @param { number } arg2\n */\n scrollTo(leftOrOptions: number | GridScrollOptions, top?: number): void\n\n /**\n * @description scroll vertically to position y\n */\n scrollToTop(scrollTop: number): void\n /**\n * @description reset rendered state after row index\n * @param { number } rowIndex\n * @param { boolean } forceUpdate\n */\n resetAfterRowIndex: ResetAfterIndex\n }>\n"],"names":["COMPONENT_NAME","useTableGrid","props","headerRef","ref","bodyRef","data","rowHeight","estimatedRowHeight","fixedData","headerHeight","gridHeight","height","Math","max","unref","hasHeader","itemKey","rowIndex","rowCacheStart","rowCacheEnd","rowVisibleStart","rowVisibleEnd","onRowsRendered","forceUpdate","header$","scrollToLeft","leftOrOptions","body$","scrollLeft","scrollTop","scrollToTop","fixedRowHeight","totalHeight","resetAfterRowIndex","scrollTo","TableGrid","name","setup","slots","expose","ns","inject","TableV2InjectionKey","onItemRendered","_createVNode","cache","columns","useIsScrolling","scrollbarAlwaysOn","scrollbarEndGap","scrollbarStartGap","style","bodyWidth","headerWidth","width","getRowHeight","onScroll","Header","length","isDynamicRowEnabled"],"mappings":"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"}