@koi-design/uxd-ui 13.2.11 → 13.2.12
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/es/components/Table/Table.mjs +1 -1
- package/es/components/Table/Table.mjs.map +1 -1
- package/es/components/Table/hooks/useTableResize.mjs +52 -23
- package/es/components/Table/hooks/useTableResize.mjs.map +1 -1
- package/lib/components/Table/Table.js +1 -1
- package/lib/components/Table/Table.js.map +1 -1
- package/lib/components/Table/hooks/useTableResize.js +52 -23
- package/lib/components/Table/hooks/useTableResize.js.map +1 -1
- package/package.json +1 -1
- package/uxd-ui.esm.min.mjs +5 -5
- package/uxd-ui.esm.mjs +53 -25
- package/uxd-ui.umd.js +53 -25
- package/uxd-ui.umd.min.js +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.mjs","sources":["../../../../src/components/Table/Table.vue"],"sourcesContent":["<template>\n <ResizeObserver @resize=\"debouncedHandleResize\">\n <div :class=\"[`${prefixCls}-wrapper`]\" :style=\"{ width: typeof width === 'number' ? `${width}px` : width }\">\n <div\n v-if=\"showPagination && pagination && (pagination.position === 'top' || pagination.position === 'both')\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-top`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n <div\n :ref=\"saveRef('table')\"\n :class=\"[\n prefixCls,\n `${prefixCls}-${size}`,\n {\n [`${prefixCls}-${variant}`]: !isBorder,\n [`${prefixCls}-border`]: !!isBorder,\n [`${prefixCls}-radius`]: variant !== 'ghost' && !border && radius,\n [`${prefixCls}-empty`]: !data.length,\n [`${prefixCls}-without-column-header`]: !showHeader,\n [`${prefixCls}-fixed-header`]: !!maxHeight,\n [`${prefixCls}-layout-fixed`]: true,\n [`${prefixCls}-scroll-position-left`]: scrollPosition === 'left' || scrollPosition === 'both',\n [`${prefixCls}-scroll-position-right`]: scrollPosition === 'right' || scrollPosition === 'both',\n [`${prefixCls}-dragging`]: showResizeLine,\n [`${prefixCls}-stripe`]: stripe\n }\n ]\"\n >\n <div v-if=\"$slots.title\" :class=\"`${prefixCls}-title`\">\n <slot name=\"title\" />\n </div>\n <div :class=\"`${prefixCls}-content`\">\n <TableBox :columns=\"updatedColumns\" @head-scroll=\"handleBodyScrollX\" @body-scroll=\"handleBodyScroll\" />\n <div v-if=\"!currentDatas.length\" :class=\"`${prefixCls}-placeholder`\">\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </div>\n </div>\n <div v-show=\"showResizeLine\" :ref=\"saveRef('resizeLine')\" :class=\"`${prefixCls}-resize-line`\" />\n <Spin v-if=\"loadingType === 'spinner'\" fix :loading=\"loading\" />\n </div>\n <div v-if=\"$slots.footer\" :class=\"`${prefixCls}-footer`\">\n <slot name=\"footer\" />\n </div>\n <div\n v-if=\"showPagination && ((pagination && pagination.position !== 'top') || !pagination)\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-bottom`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n </div>\n </ResizeObserver>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, provide, reactive, toRefs, ref, onMounted, nextTick, onBeforeUnmount, onUpdated, watch } from 'vue';\nimport Spin from '@uxd-ui/components/Spin';\nimport Pagination from '@uxd-ui/components/Pagination';\nimport { debounce } from '../../utils/tools';\n// import Container from '../base/Container';\nimport TableBox from './TableBox.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport ResizeObserver from '../base/ResizeObserver';\nimport useUpdateColumns from './hooks/useUpdateColumns';\nimport useUpdateDatas from './hooks/useUpdateDatas';\nimport useTableResize from './hooks/useTableResize';\nimport useExpander from './hooks/useExpander';\nimport useSelection from './hooks/useSelection';\nimport useDraggable from './hooks/useDraggable';\nimport useFilterSortPage from './hooks/useFilterSortPage';\nimport { tableProps, tableEmits, type SaveRef, type TableRefs, type TableColumn, type InnerColumn } from './Table.type';\n\nexport default defineComponent({\n name: 'UTable',\n components: {\n TableBox,\n Spin,\n Pagination,\n ResizeObserver\n },\n props: tableProps,\n emits: tableEmits,\n setup(props, { slots, emit }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('table');\n const showResizeLine = ref(false);\n const tableRefs = reactive({} as TableRefs);\n const saveRef: SaveRef = (key: string) => {\n return (el: any) => {\n tableRefs[key] = el;\n };\n };\n\n const locale = computed(() => {\n return { ...globalConfig.locale.table, ...props.locale };\n });\n\n const isBorder = computed(() => {\n const b = props.variant === 'border' || props.border;\n return b;\n });\n\n // ============ datas ===============\n const { updatedDatas } = useUpdateDatas(props);\n\n // ============= sort & fitler =============\n const {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n handlePageChange,\n handlePageSizeChange\n } = useFilterSortPage(props, updatedDatas, emit);\n\n // ================ draggable ====================\n const { setRowRefs, draggableColumn } = useDraggable(props, tableRefs);\n\n // ================ expander ====================\n const {\n expandedRowKeys,\n showChildrenRowKeys,\n handleExpandChange,\n isRowExpanded,\n expandedRowRender,\n isTreeTable,\n expandColumn,\n expandIconColumnIndex\n } = useExpander(props, slots, currentDatas, emit);\n\n const { selectionColumn } = useSelection(props, updatedDatas, currentDatas, prefixCls, locale);\n\n // ============ columns ===============\n const { updatedColumns, isColumnFixed, isLeftFixed, isRightFixed, leftColumns, rightColumns } = useUpdateColumns(props, slots, {\n draggableColumn,\n expandColumn,\n selectionColumn\n });\n\n // ============ resize ==============\n // #region\n const {\n sizesMap,\n handleResize,\n isScrollX,\n // fixedHeadRowsHeight,\n // fixedBodyRowsHeight,\n scrollPosition,\n // syncFixedTableRowHeight,\n setScrollPositionClass,\n resetScrollX,\n tableWidth,\n clearResizeTimer,\n setResizeWidth\n } = useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, props);\n\n const debouncedHandleResize = debounce(handleResize, 150);\n\n onMounted(() => {\n nextTick(() => {\n setTimeout(() => {\n handleResize();\n resetScrollX();\n }, 0);\n });\n });\n\n onUpdated(() => {\n nextTick(() => {\n handleResize();\n });\n });\n\n onBeforeUnmount(() => {\n if (debouncedHandleResize) {\n debouncedHandleResize.cancel();\n }\n clearResizeTimer();\n });\n // #endregion\n\n // ============ scroll ===============\n // #region\n const scrollable = computed(() => {\n return props.maxHeight || isScrollX.value || isColumnFixed.value;\n });\n\n let lastScrollLeft = 0;\n const handleBodyScrollX = (e: any) => {\n if (e.currentTarget !== e.target) {\n return;\n }\n\n const { target } = e;\n const { bodyTable, headTable } = tableRefs;\n\n if (target.scrollLeft !== lastScrollLeft && isScrollX.value) {\n if (target === (bodyTable as any).wrapRef && headTable) {\n (headTable as any).setScrollLeft(target.scrollLeft);\n } else if (target === (headTable as any)?.wrapRef && bodyTable) {\n (bodyTable as any).setScrollLeft(target.scrollLeft);\n }\n setScrollPositionClass();\n }\n lastScrollLeft = target.scrollLeft;\n };\n\n const handleBodyScroll = (e: any) => {\n handleBodyScrollX(e);\n };\n\n watch(\n () => props.data,\n (val) => {\n if (val.length === 0 && isScrollX.value) {\n nextTick(() => {\n resetScrollX();\n });\n }\n }\n );\n // #endregion\n // ============ empty ================\n const emptyText = computed(() => {\n return props.data.length ? locale.value.notFoundText : locale.value.noDataText;\n });\n\n // ===========row hover & event ================\n // #region\n const currentHoverKey = ref(null);\n const onRowMouseEnter = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseenter', data, index, e);\n };\n const onRowMouseLeave = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseleave', data, index, e);\n };\n const onRowClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-click', data, index, e);\n };\n const onRowDoubleClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-doubleclick', data, index, e);\n };\n const onRowContextMenu = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-contextmenu', data, index, e);\n };\n // #endregion\n\n // ============= other event =================\n // #region\n const onHeaderCellClick = (column: TableColumn, e: Event) => {\n emit('header-click', column, e);\n };\n\n const handleColumnResize = (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) => {\n emit('column-resize', columnWidth, changeWidth, column, event);\n };\n // #endregion\n\n // ============= provide =================\n\n const { showHeader, maxHeight, expandIcon, rowClassName, indentSize, showSummary, disabledHover, expandIndent, headerSticky, loading } =\n toRefs(props);\n\n provide('tableContext', {\n prefixCls,\n locale,\n data: currentDatas,\n saveRef,\n tableRefs,\n showResizeLine,\n props: {\n showHeader,\n maxHeight,\n expandIcon,\n rowClassName,\n indentSize,\n emptyText,\n showSummary,\n disabledHover,\n expandIndent,\n headerSticky,\n loading\n },\n slots,\n expand: {\n expandedRowRender,\n expandedRowKeys,\n showChildrenRowKeys,\n isRowExpanded,\n expandIconColumnIndex,\n handleExpandChange,\n isTreeTable\n },\n size: {\n tableWidth,\n sizesMap,\n isScrollX,\n setResizeWidth,\n handleColumnResize,\n debouncedHandleResize\n },\n fixed: {\n isColumnFixed,\n currentHoverKey\n },\n draggable: {\n setRowRefs\n },\n rowEvents: {\n onRowMouseEnter,\n onRowMouseLeave,\n onRowClick,\n onRowDoubleClick,\n onRowContextMenu\n },\n headerEvents: {\n onHeaderCellClick\n },\n filterAndSorter: {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter\n },\n pagination: paginationOptions\n });\n return {\n prefixCls,\n saveRef,\n showResizeLine,\n updatedColumns,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n isBorder,\n isLeftFixed,\n leftColumns,\n isRightFixed,\n rightColumns,\n scrollable,\n scrollPosition,\n handleBodyScroll,\n handleBodyScrollX,\n emptyText,\n debouncedHandleResize,\n handlePageChange,\n handlePageSizeChange\n };\n }\n});\n</script>\n"],"names":["Spin","Pagination","useFilterSortPage","_createBlock","_createElementVNode","_normalizeClass","_normalizeStyle","_createElementBlock","_createVNode","_mergeProps","_renderSlot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.mjs","sources":["../../../../src/components/Table/Table.vue"],"sourcesContent":["<template>\n <ResizeObserver @resize=\"debouncedHandleResize\">\n <div :class=\"[`${prefixCls}-wrapper`]\" :style=\"{ width: typeof width === 'number' ? `${width}px` : width }\">\n <div\n v-if=\"showPagination && pagination && (pagination.position === 'top' || pagination.position === 'both')\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-top`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n <div\n :ref=\"saveRef('table')\"\n :class=\"[\n prefixCls,\n `${prefixCls}-${size}`,\n {\n [`${prefixCls}-${variant}`]: !isBorder,\n [`${prefixCls}-border`]: !!isBorder,\n [`${prefixCls}-radius`]: variant !== 'ghost' && !border && radius,\n [`${prefixCls}-empty`]: !data.length,\n [`${prefixCls}-without-column-header`]: !showHeader,\n [`${prefixCls}-fixed-header`]: !!maxHeight,\n [`${prefixCls}-layout-fixed`]: true,\n [`${prefixCls}-scroll-position-left`]: scrollPosition === 'left' || scrollPosition === 'both',\n [`${prefixCls}-scroll-position-right`]: scrollPosition === 'right' || scrollPosition === 'both',\n [`${prefixCls}-dragging`]: showResizeLine,\n [`${prefixCls}-stripe`]: stripe\n }\n ]\"\n >\n <div v-if=\"$slots.title\" :class=\"`${prefixCls}-title`\">\n <slot name=\"title\" />\n </div>\n <div :class=\"`${prefixCls}-content`\">\n <TableBox :columns=\"updatedColumns\" @head-scroll=\"handleBodyScrollX\" @body-scroll=\"handleBodyScroll\" />\n <div v-if=\"!currentDatas.length\" :class=\"`${prefixCls}-placeholder`\">\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </div>\n </div>\n <div v-show=\"showResizeLine\" :ref=\"saveRef('resizeLine')\" :class=\"`${prefixCls}-resize-line`\" />\n <Spin v-if=\"loadingType === 'spinner'\" fix :loading=\"loading\" />\n </div>\n <div v-if=\"$slots.footer\" :class=\"`${prefixCls}-footer`\">\n <slot name=\"footer\" />\n </div>\n <div\n v-if=\"showPagination && ((pagination && pagination.position !== 'top') || !pagination)\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-bottom`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n </div>\n </ResizeObserver>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, provide, reactive, toRefs, ref, onMounted, nextTick, onBeforeUnmount, onUpdated, watch } from 'vue';\nimport Spin from '@uxd-ui/components/Spin';\nimport Pagination from '@uxd-ui/components/Pagination';\nimport { debounce } from '../../utils/tools';\n// import Container from '../base/Container';\nimport TableBox from './TableBox.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport ResizeObserver from '../base/ResizeObserver';\nimport useUpdateColumns from './hooks/useUpdateColumns';\nimport useUpdateDatas from './hooks/useUpdateDatas';\nimport useTableResize from './hooks/useTableResize';\nimport useExpander from './hooks/useExpander';\nimport useSelection from './hooks/useSelection';\nimport useDraggable from './hooks/useDraggable';\nimport useFilterSortPage from './hooks/useFilterSortPage';\nimport { tableProps, tableEmits, type SaveRef, type TableRefs, type TableColumn, type InnerColumn } from './Table.type';\n\nexport default defineComponent({\n name: 'UTable',\n components: {\n TableBox,\n Spin,\n Pagination,\n ResizeObserver\n },\n props: tableProps,\n emits: tableEmits,\n setup(props, { slots, emit }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('table');\n const showResizeLine = ref(false);\n const tableRefs = reactive({} as TableRefs);\n const saveRef: SaveRef = (key: string) => {\n return (el: any) => {\n tableRefs[key] = el;\n };\n };\n\n const locale = computed(() => {\n return { ...globalConfig.locale.table, ...props.locale };\n });\n\n const isBorder = computed(() => {\n const b = props.variant === 'border' || props.border;\n return b;\n });\n\n // ============ datas ===============\n const { updatedDatas } = useUpdateDatas(props);\n\n // ============= sort & fitler =============\n const {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n handlePageChange,\n handlePageSizeChange\n } = useFilterSortPage(props, updatedDatas, emit);\n\n // ================ draggable ====================\n const { setRowRefs, draggableColumn } = useDraggable(props, tableRefs);\n\n // ================ expander ====================\n const {\n expandedRowKeys,\n showChildrenRowKeys,\n handleExpandChange,\n isRowExpanded,\n expandedRowRender,\n isTreeTable,\n expandColumn,\n expandIconColumnIndex\n } = useExpander(props, slots, currentDatas, emit);\n\n const { selectionColumn } = useSelection(props, updatedDatas, currentDatas, prefixCls, locale);\n\n // ============ columns ===============\n const { updatedColumns, isColumnFixed, isLeftFixed, isRightFixed, leftColumns, rightColumns } = useUpdateColumns(props, slots, {\n draggableColumn,\n expandColumn,\n selectionColumn\n });\n\n // ============ resize ==============\n // #region\n const {\n sizesMap,\n handleResize,\n isScrollX,\n // fixedHeadRowsHeight,\n // fixedBodyRowsHeight,\n scrollPosition,\n // syncFixedTableRowHeight,\n setScrollPositionClass,\n resetScrollX,\n tableWidth,\n clearResizeTimer,\n setResizeWidth\n } = useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, props);\n\n const debouncedHandleResize = debounce(handleResize, 150);\n\n onMounted(() => {\n nextTick(() => {\n setTimeout(() => {\n handleResize();\n resetScrollX();\n }, 0);\n });\n });\n\n // Debounce onUpdated resize to avoid tight feedback loops:\n // handleResize mutating sizesMap -> re-render -> onUpdated -> handleResize.\n // Actual no-op short-circuit lives in useTableResize.syncColumnsWidth.\n onUpdated(() => {\n nextTick(() => {\n debouncedHandleResize();\n });\n });\n\n onBeforeUnmount(() => {\n if (debouncedHandleResize) {\n debouncedHandleResize.cancel();\n }\n clearResizeTimer();\n });\n // #endregion\n\n // ============ scroll ===============\n // #region\n const scrollable = computed(() => {\n return props.maxHeight || isScrollX.value || isColumnFixed.value;\n });\n\n let lastScrollLeft = 0;\n const handleBodyScrollX = (e: any) => {\n if (e.currentTarget !== e.target) {\n return;\n }\n\n const { target } = e;\n const { bodyTable, headTable } = tableRefs;\n\n if (target.scrollLeft !== lastScrollLeft && isScrollX.value) {\n if (target === (bodyTable as any).wrapRef && headTable) {\n (headTable as any).setScrollLeft(target.scrollLeft);\n } else if (target === (headTable as any)?.wrapRef && bodyTable) {\n (bodyTable as any).setScrollLeft(target.scrollLeft);\n }\n setScrollPositionClass();\n }\n lastScrollLeft = target.scrollLeft;\n };\n\n const handleBodyScroll = (e: any) => {\n handleBodyScrollX(e);\n };\n\n watch(\n () => props.data,\n (val) => {\n if (val.length === 0 && isScrollX.value) {\n nextTick(() => {\n resetScrollX();\n });\n }\n }\n );\n // #endregion\n // ============ empty ================\n const emptyText = computed(() => {\n return props.data.length ? locale.value.notFoundText : locale.value.noDataText;\n });\n\n // ===========row hover & event ================\n // #region\n const currentHoverKey = ref(null);\n const onRowMouseEnter = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseenter', data, index, e);\n };\n const onRowMouseLeave = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseleave', data, index, e);\n };\n const onRowClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-click', data, index, e);\n };\n const onRowDoubleClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-doubleclick', data, index, e);\n };\n const onRowContextMenu = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-contextmenu', data, index, e);\n };\n // #endregion\n\n // ============= other event =================\n // #region\n const onHeaderCellClick = (column: TableColumn, e: Event) => {\n emit('header-click', column, e);\n };\n\n const handleColumnResize = (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) => {\n emit('column-resize', columnWidth, changeWidth, column, event);\n };\n // #endregion\n\n // ============= provide =================\n\n const { showHeader, maxHeight, expandIcon, rowClassName, indentSize, showSummary, disabledHover, expandIndent, headerSticky, loading } =\n toRefs(props);\n\n provide('tableContext', {\n prefixCls,\n locale,\n data: currentDatas,\n saveRef,\n tableRefs,\n showResizeLine,\n props: {\n showHeader,\n maxHeight,\n expandIcon,\n rowClassName,\n indentSize,\n emptyText,\n showSummary,\n disabledHover,\n expandIndent,\n headerSticky,\n loading\n },\n slots,\n expand: {\n expandedRowRender,\n expandedRowKeys,\n showChildrenRowKeys,\n isRowExpanded,\n expandIconColumnIndex,\n handleExpandChange,\n isTreeTable\n },\n size: {\n tableWidth,\n sizesMap,\n isScrollX,\n setResizeWidth,\n handleColumnResize,\n debouncedHandleResize\n },\n fixed: {\n isColumnFixed,\n currentHoverKey\n },\n draggable: {\n setRowRefs\n },\n rowEvents: {\n onRowMouseEnter,\n onRowMouseLeave,\n onRowClick,\n onRowDoubleClick,\n onRowContextMenu\n },\n headerEvents: {\n onHeaderCellClick\n },\n filterAndSorter: {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter\n },\n pagination: paginationOptions\n });\n return {\n prefixCls,\n saveRef,\n showResizeLine,\n updatedColumns,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n isBorder,\n isLeftFixed,\n leftColumns,\n isRightFixed,\n rightColumns,\n scrollable,\n scrollPosition,\n handleBodyScroll,\n handleBodyScrollX,\n emptyText,\n debouncedHandleResize,\n handlePageChange,\n handlePageSizeChange\n };\n }\n});\n</script>\n"],"names":["Spin","Pagination","useFilterSortPage","_createBlock","_createElementVNode","_normalizeClass","_normalizeStyle","_createElementBlock","_createVNode","_mergeProps","_renderSlot"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { reactive, ref, computed } from 'vue';
|
|
2
|
+
import { shallowequal } from '../../../utils/tools.mjs';
|
|
2
3
|
import { getLeafColumns, getColumnKey, getMinWidth } from '../utils.mjs';
|
|
3
4
|
|
|
4
5
|
function getWidth(width, tableWidth) {
|
|
@@ -15,20 +16,35 @@ function getWidth(width, tableWidth) {
|
|
|
15
16
|
}
|
|
16
17
|
return _width;
|
|
17
18
|
}
|
|
19
|
+
function applySizesMap(sizesMap, nextSizesMap) {
|
|
20
|
+
Object.keys(sizesMap).forEach((key) => {
|
|
21
|
+
if (!(key in nextSizesMap)) {
|
|
22
|
+
delete sizesMap[key];
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
Object.keys(nextSizesMap).forEach((key) => {
|
|
26
|
+
if (sizesMap[key] !== nextSizesMap[key]) {
|
|
27
|
+
sizesMap[key] = nextSizesMap[key];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
18
31
|
function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, props) {
|
|
19
32
|
const sizesMap = reactive({});
|
|
20
33
|
const tableWidth = ref(void 0);
|
|
34
|
+
let lastWrapWidth;
|
|
35
|
+
const WRAP_WIDTH_TOLERANCE = 1;
|
|
21
36
|
const syncColumnsWidth = () => {
|
|
22
37
|
const { bodyTable } = tableRefs;
|
|
23
38
|
if (!bodyTable || bodyTable.getWidth() === void 0) {
|
|
24
|
-
return;
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
let wrapWidth = bodyTable.getWidth();
|
|
42
|
+
if (lastWrapWidth !== void 0 && Math.abs(wrapWidth - lastWrapWidth) <= WRAP_WIDTH_TOLERANCE) {
|
|
43
|
+
wrapWidth = lastWrapWidth;
|
|
25
44
|
}
|
|
26
|
-
const wrapWidth = bodyTable.getWidth();
|
|
27
45
|
const columns = getLeafColumns(updatedColumns.value);
|
|
28
46
|
let usedWidth = 0;
|
|
29
|
-
|
|
30
|
-
delete sizesMap[key];
|
|
31
|
-
});
|
|
47
|
+
const nextSizesMap = {};
|
|
32
48
|
const minWidthColumns = [];
|
|
33
49
|
const maxWidthColumns = [];
|
|
34
50
|
const nothingColumns = [];
|
|
@@ -37,15 +53,15 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
37
53
|
if (c.width) {
|
|
38
54
|
const _width = getWidth(c.width, wrapWidth);
|
|
39
55
|
usedWidth += _width;
|
|
40
|
-
|
|
56
|
+
nextSizesMap[colKey] = _width;
|
|
41
57
|
} else if (c.minWidth) {
|
|
42
58
|
const _width = getWidth(c.minWidth, wrapWidth);
|
|
43
59
|
usedWidth += _width;
|
|
44
|
-
|
|
60
|
+
nextSizesMap[colKey] = _width;
|
|
45
61
|
minWidthColumns.push(c);
|
|
46
62
|
} else {
|
|
47
63
|
const minWidth = getMinWidth(c);
|
|
48
|
-
|
|
64
|
+
nextSizesMap[colKey] = minWidth;
|
|
49
65
|
usedWidth += minWidth;
|
|
50
66
|
if (c.maxWidth) {
|
|
51
67
|
maxWidthColumns.push(c);
|
|
@@ -61,10 +77,10 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
61
77
|
maxWidthColumns.forEach((mc) => {
|
|
62
78
|
avgWidth = Math.floor(unUsedWidth / length);
|
|
63
79
|
if (getWidth(mc.maxWidth, wrapWidth) < avgWidth) {
|
|
64
|
-
|
|
80
|
+
nextSizesMap[mc.key] = getWidth(mc.maxWidth, wrapWidth);
|
|
65
81
|
unUsedWidth -= getWidth(mc.maxWidth, wrapWidth) - getMinWidth(mc);
|
|
66
82
|
} else {
|
|
67
|
-
|
|
83
|
+
nextSizesMap[mc.key] += avgWidth;
|
|
68
84
|
unUsedWidth -= avgWidth;
|
|
69
85
|
}
|
|
70
86
|
length -= 1;
|
|
@@ -73,25 +89,32 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
73
89
|
if (avgWidth > 50 || nothingColumns.length === 0) {
|
|
74
90
|
[...minWidthColumns, ...nothingColumns].forEach((c, i) => {
|
|
75
91
|
if (i < length - 1) {
|
|
76
|
-
|
|
92
|
+
nextSizesMap[c.key] += avgWidth;
|
|
77
93
|
unUsedWidth -= avgWidth;
|
|
78
94
|
} else {
|
|
79
|
-
|
|
95
|
+
nextSizesMap[c.key] += unUsedWidth;
|
|
80
96
|
}
|
|
81
97
|
});
|
|
82
98
|
} else {
|
|
83
99
|
avgWidth = Math.floor(unUsedWidth / nothingColumns.length);
|
|
84
100
|
nothingColumns.forEach((c, i) => {
|
|
85
101
|
if (i < nothingColumns.length - 1) {
|
|
86
|
-
|
|
102
|
+
nextSizesMap[c.key] += avgWidth;
|
|
87
103
|
unUsedWidth -= avgWidth;
|
|
88
104
|
} else {
|
|
89
|
-
|
|
105
|
+
nextSizesMap[c.key] += unUsedWidth;
|
|
90
106
|
}
|
|
91
107
|
});
|
|
92
108
|
}
|
|
93
109
|
}
|
|
94
|
-
|
|
110
|
+
const nextTableWidth = Object.keys(nextSizesMap).reduce((sum, key) => sum + nextSizesMap[key], 0);
|
|
111
|
+
lastWrapWidth = wrapWidth;
|
|
112
|
+
if (shallowequal(sizesMap, nextSizesMap) && tableWidth.value === nextTableWidth) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
applySizesMap(sizesMap, nextSizesMap);
|
|
116
|
+
tableWidth.value = nextTableWidth;
|
|
117
|
+
return true;
|
|
95
118
|
};
|
|
96
119
|
let syncHeightTimer = null;
|
|
97
120
|
let updateBodyTableTimer = null;
|
|
@@ -105,20 +128,23 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
105
128
|
if (!bodyDom) {
|
|
106
129
|
return;
|
|
107
130
|
}
|
|
108
|
-
const
|
|
109
|
-
const
|
|
131
|
+
const { scrollLeft, scrollWidth, clientWidth } = bodyDom;
|
|
132
|
+
const scrollToLeft = scrollLeft <= 0;
|
|
133
|
+
const scrollToRight = scrollLeft + 1 >= scrollWidth - clientWidth;
|
|
134
|
+
let nextPosition = "middle";
|
|
110
135
|
if (scrollToLeft && scrollToRight) {
|
|
111
|
-
|
|
136
|
+
nextPosition = "both";
|
|
112
137
|
} else if (scrollToLeft) {
|
|
113
|
-
|
|
138
|
+
nextPosition = "left";
|
|
114
139
|
} else if (scrollToRight) {
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
140
|
+
nextPosition = "right";
|
|
141
|
+
}
|
|
142
|
+
if (scrollPosition.value !== nextPosition) {
|
|
143
|
+
scrollPosition.value = nextPosition;
|
|
118
144
|
}
|
|
119
145
|
};
|
|
120
146
|
const handleResize = () => {
|
|
121
|
-
syncColumnsWidth();
|
|
147
|
+
const changed = syncColumnsWidth();
|
|
122
148
|
if (isColumnFixed.value) {
|
|
123
149
|
if (syncHeightTimer) {
|
|
124
150
|
clearTimeout(syncHeightTimer);
|
|
@@ -128,6 +154,9 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
128
154
|
setScrollPositionClass();
|
|
129
155
|
}, 0);
|
|
130
156
|
}
|
|
157
|
+
if (!changed) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
131
160
|
if (updateBodyTableTimer) {
|
|
132
161
|
clearTimeout(updateBodyTableTimer);
|
|
133
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableResize.mjs","sources":["../../../../../src/components/Table/hooks/useTableResize.ts"],"sourcesContent":["import { computed, reactive, ref } from 'vue';\nimport type { ComputedRef, Ref } from 'vue';\nimport { getLeafColumns, getColumnKey, getMinWidth } from '../utils';\n// import { shallowequal } from '../../../utils/tools';\nimport type { InnerColumn, TableProps, TableRefs } from '../Table.type';\n\nexport function getWidth(width: string | number, tableWidth: number) {\n let _width = 0;\n if (typeof width === 'number') {\n _width = width;\n } else if (/^\\d*px$/.test(width)) {\n _width = Number(width.replace('px', ''));\n } else if (/^[\\d.]*%$/.test(width)) {\n const percent = Number(width.replace('%', ''));\n if (!Number.isNaN(percent)) {\n _width = Math.floor((percent / 100) * tableWidth);\n }\n }\n return _width;\n}\nexport default function useTableResize(\n updatedColumns: Ref<InnerColumn[]>,\n tableRefs: TableRefs,\n prefixCls: Ref<string>,\n isColumnFixed: ComputedRef<boolean>,\n props: TableProps\n) {\n const sizesMap = reactive({} as Record<string, number>);\n const tableWidth = ref<number | undefined>(undefined);\n\n const syncColumnsWidth = () => {\n const { bodyTable } = tableRefs;\n if (!bodyTable || (bodyTable as any).getWidth() === undefined) {\n return;\n }\n // const wrapWidth = props.border ? bodyTable.clientWidth - 1 : bodyTable.clientWidth;\n const wrapWidth = (bodyTable as any).getWidth();\n\n const columns = getLeafColumns(updatedColumns.value);\n let usedWidth = 0;\n // clear the sizesMap.\n Object.keys(sizesMap).forEach((key) => {\n delete sizesMap[key];\n });\n const minWidthColumns: InnerColumn[] = [];\n const maxWidthColumns: InnerColumn[] = [];\n const nothingColumns: InnerColumn[] = [];\n columns.forEach((c) => {\n const colKey = getColumnKey(c);\n if (c.width) {\n const _width = getWidth(c.width, wrapWidth);\n usedWidth += _width;\n sizesMap[colKey] = _width;\n } else if (c.minWidth) {\n const _width = getWidth(c.minWidth, wrapWidth);\n usedWidth += _width;\n sizesMap[colKey] = _width;\n minWidthColumns.push(c);\n } else {\n const minWidth = getMinWidth(c);\n sizesMap[colKey] = minWidth;\n usedWidth += minWidth;\n if (c.maxWidth) {\n maxWidthColumns.push(c);\n } else {\n nothingColumns.push(c);\n }\n }\n });\n let unUsedWidth = wrapWidth - usedWidth;\n let length = minWidthColumns.length + maxWidthColumns.length + nothingColumns.length;\n if (unUsedWidth > 0 && length > 0) {\n let avgWidth: number;\n maxWidthColumns.forEach((mc) => {\n avgWidth = Math.floor(unUsedWidth / length);\n if (getWidth(mc.maxWidth as number, wrapWidth) < avgWidth) {\n sizesMap[mc.key] = getWidth(mc.maxWidth as number, wrapWidth);\n unUsedWidth -= getWidth(mc.maxWidth as number, wrapWidth) - getMinWidth(mc);\n } else {\n sizesMap[mc.key] += avgWidth;\n unUsedWidth -= avgWidth;\n }\n length -= 1;\n });\n avgWidth = Math.floor(unUsedWidth / length);\n if (avgWidth > 50 || nothingColumns.length === 0) {\n [...minWidthColumns, ...nothingColumns].forEach((c, i) => {\n if (i < length - 1) {\n sizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n sizesMap[c.key] += unUsedWidth;\n }\n });\n } else {\n avgWidth = Math.floor(unUsedWidth / nothingColumns.length);\n nothingColumns.forEach((c, i) => {\n if (i < nothingColumns.length - 1) {\n sizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n sizesMap[c.key] += unUsedWidth;\n }\n });\n }\n }\n tableWidth.value = Object.keys(sizesMap).reduce((sum, key) => sum + sizesMap[key], 0);\n };\n\n let syncHeightTimer: ReturnType<typeof setTimeout> | null = null;\n let updateBodyTableTimer: ReturnType<typeof setTimeout> | null = null;\n const scrollPosition = ref('left');\n\n const setScrollPositionClass = () => {\n const { bodyTable } = tableRefs;\n if (!bodyTable) {\n return;\n }\n const bodyDom = (bodyTable as any).wrapRef;\n if (!bodyDom) {\n return;\n }\n\n const scrollToLeft = bodyDom.scrollLeft === 0;\n const scrollToRight = bodyDom.scrollLeft + 1 >= bodyDom.children[0].getBoundingClientRect().width - bodyDom.getBoundingClientRect().width;\n if (scrollToLeft && scrollToRight) {\n scrollPosition.value = 'both';\n } else if (scrollToLeft) {\n scrollPosition.value = 'left';\n } else if (scrollToRight) {\n scrollPosition.value = 'right';\n } else {\n scrollPosition.value = 'middle';\n }\n };\n const handleResize = () => {\n syncColumnsWidth();\n\n if (isColumnFixed.value) {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n }\n syncHeightTimer = setTimeout(() => {\n syncHeightTimer = null;\n setScrollPositionClass();\n }, 0);\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n }\n updateBodyTableTimer = setTimeout(() => {\n updateBodyTableTimer = null;\n const bt = tableRefs.bodyTable as any;\n if (bt?.update) {\n bt.update();\n }\n }, 0);\n };\n\n const setResizeWidth = (column: InnerColumn, width: number) => {\n const columns = getLeafColumns(updatedColumns.value);\n const _column = columns.find((c) => c === column || getColumnKey(c) === getColumnKey(column));\n if (_column) {\n _column.width = width;\n handleResize();\n }\n };\n const isScrollX = computed(() => {\n const { table } = tableRefs;\n if (table) {\n const wrapWidth = props.border ? table.offsetWidth - 1 : table.offsetWidth;\n return tableWidth.value && tableWidth.value > wrapWidth;\n }\n return false;\n });\n\n const resetScrollX = () => {\n const { bodyTable, headTable } = tableRefs;\n if (bodyTable) {\n (bodyTable as any).setScrollLeft(0);\n }\n if (headTable) {\n (headTable as any).setScrollLeft(0);\n }\n };\n const clearResizeTimer = () => {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n syncHeightTimer = null;\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n updateBodyTableTimer = null;\n }\n };\n return {\n sizesMap,\n tableWidth,\n isScrollX,\n scrollPosition,\n handleResize,\n setScrollPositionClass,\n resetScrollX,\n clearResizeTimer,\n setResizeWidth\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTableResize.mjs","sources":["../../../../../src/components/Table/hooks/useTableResize.ts"],"sourcesContent":["import { computed, reactive, ref } from 'vue';\nimport type { ComputedRef, Ref } from 'vue';\nimport { shallowequal } from '../../../utils/tools';\nimport { getLeafColumns, getColumnKey, getMinWidth } from '../utils';\nimport type { InnerColumn, TableProps, TableRefs } from '../Table.type';\n\nexport function getWidth(width: string | number, tableWidth: number) {\n let _width = 0;\n if (typeof width === 'number') {\n _width = width;\n } else if (/^\\d*px$/.test(width)) {\n _width = Number(width.replace('px', ''));\n } else if (/^[\\d.]*%$/.test(width)) {\n const percent = Number(width.replace('%', ''));\n if (!Number.isNaN(percent)) {\n _width = Math.floor((percent / 100) * tableWidth);\n }\n }\n return _width;\n}\n\nfunction applySizesMap(sizesMap: Record<string, number>, nextSizesMap: Record<string, number>) {\n Object.keys(sizesMap).forEach((key) => {\n if (!(key in nextSizesMap)) {\n delete sizesMap[key];\n }\n });\n Object.keys(nextSizesMap).forEach((key) => {\n if (sizesMap[key] !== nextSizesMap[key]) {\n sizesMap[key] = nextSizesMap[key];\n }\n });\n}\n\nexport default function useTableResize(\n updatedColumns: Ref<InnerColumn[]>,\n tableRefs: TableRefs,\n prefixCls: Ref<string>,\n isColumnFixed: ComputedRef<boolean>,\n props: TableProps\n) {\n const sizesMap = reactive({} as Record<string, number>);\n const tableWidth = ref<number | undefined>(undefined);\n let lastWrapWidth: number | undefined;\n // Ignore 1px wrap width flicker from subpixel / scrollbar edge cases.\n const WRAP_WIDTH_TOLERANCE = 1;\n\n const syncColumnsWidth = (): boolean => {\n const { bodyTable } = tableRefs;\n if (!bodyTable || (bodyTable as any).getWidth() === undefined) {\n return false;\n }\n let wrapWidth = (bodyTable as any).getWidth() as number;\n if (lastWrapWidth !== undefined && Math.abs(wrapWidth - lastWrapWidth) <= WRAP_WIDTH_TOLERANCE) {\n wrapWidth = lastWrapWidth;\n }\n\n const columns = getLeafColumns(updatedColumns.value);\n let usedWidth = 0;\n const nextSizesMap: Record<string, number> = {};\n const minWidthColumns: InnerColumn[] = [];\n const maxWidthColumns: InnerColumn[] = [];\n const nothingColumns: InnerColumn[] = [];\n columns.forEach((c) => {\n const colKey = getColumnKey(c);\n if (c.width) {\n const _width = getWidth(c.width, wrapWidth);\n usedWidth += _width;\n nextSizesMap[colKey] = _width;\n } else if (c.minWidth) {\n const _width = getWidth(c.minWidth, wrapWidth);\n usedWidth += _width;\n nextSizesMap[colKey] = _width;\n minWidthColumns.push(c);\n } else {\n const minWidth = getMinWidth(c);\n nextSizesMap[colKey] = minWidth;\n usedWidth += minWidth;\n if (c.maxWidth) {\n maxWidthColumns.push(c);\n } else {\n nothingColumns.push(c);\n }\n }\n });\n let unUsedWidth = wrapWidth - usedWidth;\n let length = minWidthColumns.length + maxWidthColumns.length + nothingColumns.length;\n if (unUsedWidth > 0 && length > 0) {\n let avgWidth: number;\n maxWidthColumns.forEach((mc) => {\n avgWidth = Math.floor(unUsedWidth / length);\n if (getWidth(mc.maxWidth as number, wrapWidth) < avgWidth) {\n nextSizesMap[mc.key] = getWidth(mc.maxWidth as number, wrapWidth);\n unUsedWidth -= getWidth(mc.maxWidth as number, wrapWidth) - getMinWidth(mc);\n } else {\n nextSizesMap[mc.key] += avgWidth;\n unUsedWidth -= avgWidth;\n }\n length -= 1;\n });\n avgWidth = Math.floor(unUsedWidth / length);\n if (avgWidth > 50 || nothingColumns.length === 0) {\n [...minWidthColumns, ...nothingColumns].forEach((c, i) => {\n if (i < length - 1) {\n nextSizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n nextSizesMap[c.key] += unUsedWidth;\n }\n });\n } else {\n avgWidth = Math.floor(unUsedWidth / nothingColumns.length);\n nothingColumns.forEach((c, i) => {\n if (i < nothingColumns.length - 1) {\n nextSizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n nextSizesMap[c.key] += unUsedWidth;\n }\n });\n }\n }\n const nextTableWidth = Object.keys(nextSizesMap).reduce((sum, key) => sum + nextSizesMap[key], 0);\n lastWrapWidth = wrapWidth;\n\n if (shallowequal(sizesMap, nextSizesMap) && tableWidth.value === nextTableWidth) {\n return false;\n }\n\n applySizesMap(sizesMap, nextSizesMap);\n tableWidth.value = nextTableWidth;\n return true;\n };\n\n let syncHeightTimer: ReturnType<typeof setTimeout> | null = null;\n let updateBodyTableTimer: ReturnType<typeof setTimeout> | null = null;\n const scrollPosition = ref('left');\n\n const setScrollPositionClass = () => {\n const { bodyTable } = tableRefs;\n if (!bodyTable) {\n return;\n }\n const bodyDom = (bodyTable as any).wrapRef as HTMLElement | undefined;\n if (!bodyDom) {\n return;\n }\n\n // Prefer scrollWidth/clientWidth over getBoundingClientRect to avoid subpixel flicker\n // flipping fixed-column shadow classes (left/right/both).\n const { scrollLeft, scrollWidth, clientWidth } = bodyDom;\n const scrollToLeft = scrollLeft <= 0;\n const scrollToRight = scrollLeft + 1 >= scrollWidth - clientWidth;\n let nextPosition = 'middle';\n if (scrollToLeft && scrollToRight) {\n nextPosition = 'both';\n } else if (scrollToLeft) {\n nextPosition = 'left';\n } else if (scrollToRight) {\n nextPosition = 'right';\n }\n if (scrollPosition.value !== nextPosition) {\n scrollPosition.value = nextPosition;\n }\n };\n const handleResize = () => {\n const changed = syncColumnsWidth();\n\n if (isColumnFixed.value) {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n }\n syncHeightTimer = setTimeout(() => {\n syncHeightTimer = null;\n setScrollPositionClass();\n }, 0);\n }\n // Skip scrollbar metric refresh when column sizes did not change, to avoid\n // onUpdated -> handleResize feedback loops that cause layout jitter.\n if (!changed) {\n return;\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n }\n updateBodyTableTimer = setTimeout(() => {\n updateBodyTableTimer = null;\n const bt = tableRefs.bodyTable as any;\n if (bt?.update) {\n bt.update();\n }\n }, 0);\n };\n\n const setResizeWidth = (column: InnerColumn, width: number) => {\n const columns = getLeafColumns(updatedColumns.value);\n const _column = columns.find((c) => c === column || getColumnKey(c) === getColumnKey(column));\n if (_column) {\n _column.width = width;\n handleResize();\n }\n };\n const isScrollX = computed(() => {\n const { table } = tableRefs;\n if (table) {\n const wrapWidth = props.border ? table.offsetWidth - 1 : table.offsetWidth;\n return tableWidth.value && tableWidth.value > wrapWidth;\n }\n return false;\n });\n\n const resetScrollX = () => {\n const { bodyTable, headTable } = tableRefs;\n if (bodyTable) {\n (bodyTable as any).setScrollLeft(0);\n }\n if (headTable) {\n (headTable as any).setScrollLeft(0);\n }\n };\n const clearResizeTimer = () => {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n syncHeightTimer = null;\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n updateBodyTableTimer = null;\n }\n };\n return {\n sizesMap,\n tableWidth,\n isScrollX,\n scrollPosition,\n handleResize,\n setScrollPositionClass,\n resetScrollX,\n clearResizeTimer,\n setResizeWidth\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../../src/components/Table/Table.vue"],"sourcesContent":["<template>\n <ResizeObserver @resize=\"debouncedHandleResize\">\n <div :class=\"[`${prefixCls}-wrapper`]\" :style=\"{ width: typeof width === 'number' ? `${width}px` : width }\">\n <div\n v-if=\"showPagination && pagination && (pagination.position === 'top' || pagination.position === 'both')\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-top`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n <div\n :ref=\"saveRef('table')\"\n :class=\"[\n prefixCls,\n `${prefixCls}-${size}`,\n {\n [`${prefixCls}-${variant}`]: !isBorder,\n [`${prefixCls}-border`]: !!isBorder,\n [`${prefixCls}-radius`]: variant !== 'ghost' && !border && radius,\n [`${prefixCls}-empty`]: !data.length,\n [`${prefixCls}-without-column-header`]: !showHeader,\n [`${prefixCls}-fixed-header`]: !!maxHeight,\n [`${prefixCls}-layout-fixed`]: true,\n [`${prefixCls}-scroll-position-left`]: scrollPosition === 'left' || scrollPosition === 'both',\n [`${prefixCls}-scroll-position-right`]: scrollPosition === 'right' || scrollPosition === 'both',\n [`${prefixCls}-dragging`]: showResizeLine,\n [`${prefixCls}-stripe`]: stripe\n }\n ]\"\n >\n <div v-if=\"$slots.title\" :class=\"`${prefixCls}-title`\">\n <slot name=\"title\" />\n </div>\n <div :class=\"`${prefixCls}-content`\">\n <TableBox :columns=\"updatedColumns\" @head-scroll=\"handleBodyScrollX\" @body-scroll=\"handleBodyScroll\" />\n <div v-if=\"!currentDatas.length\" :class=\"`${prefixCls}-placeholder`\">\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </div>\n </div>\n <div v-show=\"showResizeLine\" :ref=\"saveRef('resizeLine')\" :class=\"`${prefixCls}-resize-line`\" />\n <Spin v-if=\"loadingType === 'spinner'\" fix :loading=\"loading\" />\n </div>\n <div v-if=\"$slots.footer\" :class=\"`${prefixCls}-footer`\">\n <slot name=\"footer\" />\n </div>\n <div\n v-if=\"showPagination && ((pagination && pagination.position !== 'top') || !pagination)\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-bottom`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n </div>\n </ResizeObserver>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, provide, reactive, toRefs, ref, onMounted, nextTick, onBeforeUnmount, onUpdated, watch } from 'vue';\nimport Spin from '@uxd-ui/components/Spin';\nimport Pagination from '@uxd-ui/components/Pagination';\nimport { debounce } from '../../utils/tools';\n// import Container from '../base/Container';\nimport TableBox from './TableBox.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport ResizeObserver from '../base/ResizeObserver';\nimport useUpdateColumns from './hooks/useUpdateColumns';\nimport useUpdateDatas from './hooks/useUpdateDatas';\nimport useTableResize from './hooks/useTableResize';\nimport useExpander from './hooks/useExpander';\nimport useSelection from './hooks/useSelection';\nimport useDraggable from './hooks/useDraggable';\nimport useFilterSortPage from './hooks/useFilterSortPage';\nimport { tableProps, tableEmits, type SaveRef, type TableRefs, type TableColumn, type InnerColumn } from './Table.type';\n\nexport default defineComponent({\n name: 'UTable',\n components: {\n TableBox,\n Spin,\n Pagination,\n ResizeObserver\n },\n props: tableProps,\n emits: tableEmits,\n setup(props, { slots, emit }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('table');\n const showResizeLine = ref(false);\n const tableRefs = reactive({} as TableRefs);\n const saveRef: SaveRef = (key: string) => {\n return (el: any) => {\n tableRefs[key] = el;\n };\n };\n\n const locale = computed(() => {\n return { ...globalConfig.locale.table, ...props.locale };\n });\n\n const isBorder = computed(() => {\n const b = props.variant === 'border' || props.border;\n return b;\n });\n\n // ============ datas ===============\n const { updatedDatas } = useUpdateDatas(props);\n\n // ============= sort & fitler =============\n const {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n handlePageChange,\n handlePageSizeChange\n } = useFilterSortPage(props, updatedDatas, emit);\n\n // ================ draggable ====================\n const { setRowRefs, draggableColumn } = useDraggable(props, tableRefs);\n\n // ================ expander ====================\n const {\n expandedRowKeys,\n showChildrenRowKeys,\n handleExpandChange,\n isRowExpanded,\n expandedRowRender,\n isTreeTable,\n expandColumn,\n expandIconColumnIndex\n } = useExpander(props, slots, currentDatas, emit);\n\n const { selectionColumn } = useSelection(props, updatedDatas, currentDatas, prefixCls, locale);\n\n // ============ columns ===============\n const { updatedColumns, isColumnFixed, isLeftFixed, isRightFixed, leftColumns, rightColumns } = useUpdateColumns(props, slots, {\n draggableColumn,\n expandColumn,\n selectionColumn\n });\n\n // ============ resize ==============\n // #region\n const {\n sizesMap,\n handleResize,\n isScrollX,\n // fixedHeadRowsHeight,\n // fixedBodyRowsHeight,\n scrollPosition,\n // syncFixedTableRowHeight,\n setScrollPositionClass,\n resetScrollX,\n tableWidth,\n clearResizeTimer,\n setResizeWidth\n } = useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, props);\n\n const debouncedHandleResize = debounce(handleResize, 150);\n\n onMounted(() => {\n nextTick(() => {\n setTimeout(() => {\n handleResize();\n resetScrollX();\n }, 0);\n });\n });\n\n onUpdated(() => {\n nextTick(() => {\n handleResize();\n });\n });\n\n onBeforeUnmount(() => {\n if (debouncedHandleResize) {\n debouncedHandleResize.cancel();\n }\n clearResizeTimer();\n });\n // #endregion\n\n // ============ scroll ===============\n // #region\n const scrollable = computed(() => {\n return props.maxHeight || isScrollX.value || isColumnFixed.value;\n });\n\n let lastScrollLeft = 0;\n const handleBodyScrollX = (e: any) => {\n if (e.currentTarget !== e.target) {\n return;\n }\n\n const { target } = e;\n const { bodyTable, headTable } = tableRefs;\n\n if (target.scrollLeft !== lastScrollLeft && isScrollX.value) {\n if (target === (bodyTable as any).wrapRef && headTable) {\n (headTable as any).setScrollLeft(target.scrollLeft);\n } else if (target === (headTable as any)?.wrapRef && bodyTable) {\n (bodyTable as any).setScrollLeft(target.scrollLeft);\n }\n setScrollPositionClass();\n }\n lastScrollLeft = target.scrollLeft;\n };\n\n const handleBodyScroll = (e: any) => {\n handleBodyScrollX(e);\n };\n\n watch(\n () => props.data,\n (val) => {\n if (val.length === 0 && isScrollX.value) {\n nextTick(() => {\n resetScrollX();\n });\n }\n }\n );\n // #endregion\n // ============ empty ================\n const emptyText = computed(() => {\n return props.data.length ? locale.value.notFoundText : locale.value.noDataText;\n });\n\n // ===========row hover & event ================\n // #region\n const currentHoverKey = ref(null);\n const onRowMouseEnter = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseenter', data, index, e);\n };\n const onRowMouseLeave = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseleave', data, index, e);\n };\n const onRowClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-click', data, index, e);\n };\n const onRowDoubleClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-doubleclick', data, index, e);\n };\n const onRowContextMenu = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-contextmenu', data, index, e);\n };\n // #endregion\n\n // ============= other event =================\n // #region\n const onHeaderCellClick = (column: TableColumn, e: Event) => {\n emit('header-click', column, e);\n };\n\n const handleColumnResize = (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) => {\n emit('column-resize', columnWidth, changeWidth, column, event);\n };\n // #endregion\n\n // ============= provide =================\n\n const { showHeader, maxHeight, expandIcon, rowClassName, indentSize, showSummary, disabledHover, expandIndent, headerSticky, loading } =\n toRefs(props);\n\n provide('tableContext', {\n prefixCls,\n locale,\n data: currentDatas,\n saveRef,\n tableRefs,\n showResizeLine,\n props: {\n showHeader,\n maxHeight,\n expandIcon,\n rowClassName,\n indentSize,\n emptyText,\n showSummary,\n disabledHover,\n expandIndent,\n headerSticky,\n loading\n },\n slots,\n expand: {\n expandedRowRender,\n expandedRowKeys,\n showChildrenRowKeys,\n isRowExpanded,\n expandIconColumnIndex,\n handleExpandChange,\n isTreeTable\n },\n size: {\n tableWidth,\n sizesMap,\n isScrollX,\n setResizeWidth,\n handleColumnResize,\n debouncedHandleResize\n },\n fixed: {\n isColumnFixed,\n currentHoverKey\n },\n draggable: {\n setRowRefs\n },\n rowEvents: {\n onRowMouseEnter,\n onRowMouseLeave,\n onRowClick,\n onRowDoubleClick,\n onRowContextMenu\n },\n headerEvents: {\n onHeaderCellClick\n },\n filterAndSorter: {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter\n },\n pagination: paginationOptions\n });\n return {\n prefixCls,\n saveRef,\n showResizeLine,\n updatedColumns,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n isBorder,\n isLeftFixed,\n leftColumns,\n isRightFixed,\n rightColumns,\n scrollable,\n scrollPosition,\n handleBodyScroll,\n handleBodyScrollX,\n emptyText,\n debouncedHandleResize,\n handlePageChange,\n handlePageSizeChange\n };\n }\n});\n</script>\n"],"names":["defineComponent","TableBox","Spin","Pagination","ResizeObserver","tableProps","tableEmits","useGlobalConfig","ref","reactive","computed","useUpdateDatas","useFilterSortPage","useDraggable","useExpander","useSelection","useUpdateColumns","useTableResize","debounce","toRefs","_createBlock","_createElementVNode","_normalizeClass","_normalizeStyle","_createElementBlock","_createVNode","_mergeProps","_renderSlot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../../src/components/Table/Table.vue"],"sourcesContent":["<template>\n <ResizeObserver @resize=\"debouncedHandleResize\">\n <div :class=\"[`${prefixCls}-wrapper`]\" :style=\"{ width: typeof width === 'number' ? `${width}px` : width }\">\n <div\n v-if=\"showPagination && pagination && (pagination.position === 'top' || pagination.position === 'both')\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-top`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n <div\n :ref=\"saveRef('table')\"\n :class=\"[\n prefixCls,\n `${prefixCls}-${size}`,\n {\n [`${prefixCls}-${variant}`]: !isBorder,\n [`${prefixCls}-border`]: !!isBorder,\n [`${prefixCls}-radius`]: variant !== 'ghost' && !border && radius,\n [`${prefixCls}-empty`]: !data.length,\n [`${prefixCls}-without-column-header`]: !showHeader,\n [`${prefixCls}-fixed-header`]: !!maxHeight,\n [`${prefixCls}-layout-fixed`]: true,\n [`${prefixCls}-scroll-position-left`]: scrollPosition === 'left' || scrollPosition === 'both',\n [`${prefixCls}-scroll-position-right`]: scrollPosition === 'right' || scrollPosition === 'both',\n [`${prefixCls}-dragging`]: showResizeLine,\n [`${prefixCls}-stripe`]: stripe\n }\n ]\"\n >\n <div v-if=\"$slots.title\" :class=\"`${prefixCls}-title`\">\n <slot name=\"title\" />\n </div>\n <div :class=\"`${prefixCls}-content`\">\n <TableBox :columns=\"updatedColumns\" @head-scroll=\"handleBodyScrollX\" @body-scroll=\"handleBodyScroll\" />\n <div v-if=\"!currentDatas.length\" :class=\"`${prefixCls}-placeholder`\">\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </div>\n </div>\n <div v-show=\"showResizeLine\" :ref=\"saveRef('resizeLine')\" :class=\"`${prefixCls}-resize-line`\" />\n <Spin v-if=\"loadingType === 'spinner'\" fix :loading=\"loading\" />\n </div>\n <div v-if=\"$slots.footer\" :class=\"`${prefixCls}-footer`\">\n <slot name=\"footer\" />\n </div>\n <div\n v-if=\"showPagination && ((pagination && pagination.position !== 'top') || !pagination)\"\n :class=\"{\n [`${prefixCls}-pagination`]: true,\n [`${prefixCls}-pagination-bottom`]: true,\n [`${prefixCls}-pagination-right`]: pagination && pagination.align === 'right'\n }\"\n >\n <Pagination v-bind=\"paginationOptions\" :total=\"computedPageTotal\" @change=\"handlePageChange\" @page-size-change=\"handlePageSizeChange\" />\n </div>\n </div>\n </ResizeObserver>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, provide, reactive, toRefs, ref, onMounted, nextTick, onBeforeUnmount, onUpdated, watch } from 'vue';\nimport Spin from '@uxd-ui/components/Spin';\nimport Pagination from '@uxd-ui/components/Pagination';\nimport { debounce } from '../../utils/tools';\n// import Container from '../base/Container';\nimport TableBox from './TableBox.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport ResizeObserver from '../base/ResizeObserver';\nimport useUpdateColumns from './hooks/useUpdateColumns';\nimport useUpdateDatas from './hooks/useUpdateDatas';\nimport useTableResize from './hooks/useTableResize';\nimport useExpander from './hooks/useExpander';\nimport useSelection from './hooks/useSelection';\nimport useDraggable from './hooks/useDraggable';\nimport useFilterSortPage from './hooks/useFilterSortPage';\nimport { tableProps, tableEmits, type SaveRef, type TableRefs, type TableColumn, type InnerColumn } from './Table.type';\n\nexport default defineComponent({\n name: 'UTable',\n components: {\n TableBox,\n Spin,\n Pagination,\n ResizeObserver\n },\n props: tableProps,\n emits: tableEmits,\n setup(props, { slots, emit }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('table');\n const showResizeLine = ref(false);\n const tableRefs = reactive({} as TableRefs);\n const saveRef: SaveRef = (key: string) => {\n return (el: any) => {\n tableRefs[key] = el;\n };\n };\n\n const locale = computed(() => {\n return { ...globalConfig.locale.table, ...props.locale };\n });\n\n const isBorder = computed(() => {\n const b = props.variant === 'border' || props.border;\n return b;\n });\n\n // ============ datas ===============\n const { updatedDatas } = useUpdateDatas(props);\n\n // ============= sort & fitler =============\n const {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n handlePageChange,\n handlePageSizeChange\n } = useFilterSortPage(props, updatedDatas, emit);\n\n // ================ draggable ====================\n const { setRowRefs, draggableColumn } = useDraggable(props, tableRefs);\n\n // ================ expander ====================\n const {\n expandedRowKeys,\n showChildrenRowKeys,\n handleExpandChange,\n isRowExpanded,\n expandedRowRender,\n isTreeTable,\n expandColumn,\n expandIconColumnIndex\n } = useExpander(props, slots, currentDatas, emit);\n\n const { selectionColumn } = useSelection(props, updatedDatas, currentDatas, prefixCls, locale);\n\n // ============ columns ===============\n const { updatedColumns, isColumnFixed, isLeftFixed, isRightFixed, leftColumns, rightColumns } = useUpdateColumns(props, slots, {\n draggableColumn,\n expandColumn,\n selectionColumn\n });\n\n // ============ resize ==============\n // #region\n const {\n sizesMap,\n handleResize,\n isScrollX,\n // fixedHeadRowsHeight,\n // fixedBodyRowsHeight,\n scrollPosition,\n // syncFixedTableRowHeight,\n setScrollPositionClass,\n resetScrollX,\n tableWidth,\n clearResizeTimer,\n setResizeWidth\n } = useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, props);\n\n const debouncedHandleResize = debounce(handleResize, 150);\n\n onMounted(() => {\n nextTick(() => {\n setTimeout(() => {\n handleResize();\n resetScrollX();\n }, 0);\n });\n });\n\n // Debounce onUpdated resize to avoid tight feedback loops:\n // handleResize mutating sizesMap -> re-render -> onUpdated -> handleResize.\n // Actual no-op short-circuit lives in useTableResize.syncColumnsWidth.\n onUpdated(() => {\n nextTick(() => {\n debouncedHandleResize();\n });\n });\n\n onBeforeUnmount(() => {\n if (debouncedHandleResize) {\n debouncedHandleResize.cancel();\n }\n clearResizeTimer();\n });\n // #endregion\n\n // ============ scroll ===============\n // #region\n const scrollable = computed(() => {\n return props.maxHeight || isScrollX.value || isColumnFixed.value;\n });\n\n let lastScrollLeft = 0;\n const handleBodyScrollX = (e: any) => {\n if (e.currentTarget !== e.target) {\n return;\n }\n\n const { target } = e;\n const { bodyTable, headTable } = tableRefs;\n\n if (target.scrollLeft !== lastScrollLeft && isScrollX.value) {\n if (target === (bodyTable as any).wrapRef && headTable) {\n (headTable as any).setScrollLeft(target.scrollLeft);\n } else if (target === (headTable as any)?.wrapRef && bodyTable) {\n (bodyTable as any).setScrollLeft(target.scrollLeft);\n }\n setScrollPositionClass();\n }\n lastScrollLeft = target.scrollLeft;\n };\n\n const handleBodyScroll = (e: any) => {\n handleBodyScrollX(e);\n };\n\n watch(\n () => props.data,\n (val) => {\n if (val.length === 0 && isScrollX.value) {\n nextTick(() => {\n resetScrollX();\n });\n }\n }\n );\n // #endregion\n // ============ empty ================\n const emptyText = computed(() => {\n return props.data.length ? locale.value.notFoundText : locale.value.noDataText;\n });\n\n // ===========row hover & event ================\n // #region\n const currentHoverKey = ref(null);\n const onRowMouseEnter = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseenter', data, index, e);\n };\n const onRowMouseLeave = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-mouseleave', data, index, e);\n };\n const onRowClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-click', data, index, e);\n };\n const onRowDoubleClick = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-doubleclick', data, index, e);\n };\n const onRowContextMenu = (data: Record<string, any>, index: number, e: Event) => {\n emit('row-contextmenu', data, index, e);\n };\n // #endregion\n\n // ============= other event =================\n // #region\n const onHeaderCellClick = (column: TableColumn, e: Event) => {\n emit('header-click', column, e);\n };\n\n const handleColumnResize = (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) => {\n emit('column-resize', columnWidth, changeWidth, column, event);\n };\n // #endregion\n\n // ============= provide =================\n\n const { showHeader, maxHeight, expandIcon, rowClassName, indentSize, showSummary, disabledHover, expandIndent, headerSticky, loading } =\n toRefs(props);\n\n provide('tableContext', {\n prefixCls,\n locale,\n data: currentDatas,\n saveRef,\n tableRefs,\n showResizeLine,\n props: {\n showHeader,\n maxHeight,\n expandIcon,\n rowClassName,\n indentSize,\n emptyText,\n showSummary,\n disabledHover,\n expandIndent,\n headerSticky,\n loading\n },\n slots,\n expand: {\n expandedRowRender,\n expandedRowKeys,\n showChildrenRowKeys,\n isRowExpanded,\n expandIconColumnIndex,\n handleExpandChange,\n isTreeTable\n },\n size: {\n tableWidth,\n sizesMap,\n isScrollX,\n setResizeWidth,\n handleColumnResize,\n debouncedHandleResize\n },\n fixed: {\n isColumnFixed,\n currentHoverKey\n },\n draggable: {\n setRowRefs\n },\n rowEvents: {\n onRowMouseEnter,\n onRowMouseLeave,\n onRowClick,\n onRowDoubleClick,\n onRowContextMenu\n },\n headerEvents: {\n onHeaderCellClick\n },\n filterAndSorter: {\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n isAscend,\n isDescend,\n hasAscend,\n hasDescend,\n toggleSortOrder,\n setColumnFilter\n },\n pagination: paginationOptions\n });\n return {\n prefixCls,\n saveRef,\n showResizeLine,\n updatedColumns,\n currentDatas,\n paginationOptions,\n computedPageTotal,\n isBorder,\n isLeftFixed,\n leftColumns,\n isRightFixed,\n rightColumns,\n scrollable,\n scrollPosition,\n handleBodyScroll,\n handleBodyScrollX,\n emptyText,\n debouncedHandleResize,\n handlePageChange,\n handlePageSizeChange\n };\n }\n});\n</script>\n"],"names":["defineComponent","TableBox","Spin","Pagination","ResizeObserver","tableProps","tableEmits","useGlobalConfig","ref","reactive","computed","useUpdateDatas","useFilterSortPage","useDraggable","useExpander","useSelection","useUpdateColumns","useTableResize","debounce","toRefs","_createBlock","_createElementVNode","_normalizeClass","_normalizeStyle","_createElementBlock","_createVNode","_mergeProps","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkFA,MAAK,YAAaA,oBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,cACVC;AAAA,UACAC;AAAA,gBACAC;AAAA,oBACAC;AAAA;AACF,EACA,OAAOC;AAAA,EACP,OAAOC;AAAA,EACP,MAAM,OAAO,EAAE,OAAO,QAAQ;UACtB,EAAE,WAAW,QAAQ,iBAAiBC,2BAAgB,OAAO;UAC7D,iBAAiBC,QAAI,KAAK;UAC1B,YAAYC,aAAS,EAAe;UACpC,UAAmB,CAAC,QAAgB;aACjC,CAAC,OAAY;kBACR,OAAO;AAAA;AACnB;UAGI,SAASC,aAAS,MAAM;aACrB,EAAE,GAAG,aAAa,OAAO,OAAO,GAAG,MAAM;AAAO,KACxD;UAEK,WAAWA,aAAS,MAAM;YACxB,IAAI,MAAM,YAAY,YAAY,MAAM;aACvC;AAAA,KACR;UAGK,EAAE,iBAAiBC,0BAAe,KAAK;UAGvC;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACEC,6BAAkB,OAAO,cAAc,IAAI;UAGzC,EAAE,YAAY,oBAAoBC,wBAAa,OAAO,SAAS;UAG/D;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACEC,uBAAY,OAAO,OAAO,cAAc,IAAI;UAE1C,EAAE,oBAAoBC,wBAAa,OAAO,cAAc,cAAc,WAAW,MAAM;UAGvF,EAAE,gBAAgB,eAAe,aAAa,cAAc,aAAa,iBAAiBC,4BAAiB,OAAO,OAAO;AAAA,MAC7H;AAAA,MACA;AAAA,MACA;AAAA,KACD;UAIK;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MAGA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACEC,0BAAe,gBAAgB,WAAW,WAAW,eAAe,KAAK;UAEvE,wBAAwBC,eAAS,cAAc,GAAG;kBAE9C,MAAM;mBACL,MAAM;mBACF,MAAM;;;AAEF,WACZ,CAAC;AAAA,OACL;AAAA,KACF;kBAKS,MAAM;mBACL,MAAM;;AACS,OACvB;AAAA,KACF;wBAEe,MAAM;UAChB,uBAAuB;8BACH;AAAO;;AAEd,KAClB;UAKK,aAAaR,aAAS,MAAM;aACzB,MAAM,aAAa,UAAU,SAAS,cAAc;AAAA,KAC5D;QAEG,iBAAiB;UACf,oBAAoB,CAAC,MAAW;UAChC,EAAE,kBAAkB,EAAE,QAAQ;;;YAI5B,EAAE,WAAW;YACb,EAAE,WAAW,cAAc;UAE7B,OAAO,eAAe,kBAAkB,UAAU,OAAO;YACvD,WAAY,UAAkB,WAAW,WAAW;AACrD,oBAAkB,cAAc,OAAO,UAAU;AAAA,mBACzC,YAAY,uCAAmB,YAAW,WAAW;AAC7D,oBAAkB,cAAc,OAAO,UAAU;AAAA;;AAE7B;uBAER,OAAO;AAAA;UAGpB,mBAAmB,CAAC,MAAW;wBACjB,CAAC;AAAA;;MAInB,MAAM,MAAM;AAAA,MACZ,CAAC,QAAQ;YACH,IAAI,WAAW,KAAK,UAAU,OAAO;uBAC9B,MAAM;;AACA,WACd;AAAA;AACH;AACF;UAII,YAAYA,aAAS,MAAM;aACxB,MAAM,KAAK,SAAS,OAAO,MAAM,eAAe,OAAO,MAAM;AAAA,KACrE;UAIK,kBAAkBF,QAAI,IAAI;UAC1B,kBAAkB,CAAC,MAA2B,OAAe,MAAa;WACzE,kBAAkB,MAAM,OAAO,CAAC;AAAA;UAEjC,kBAAkB,CAAC,MAA2B,OAAe,MAAa;WACzE,kBAAkB,MAAM,OAAO,CAAC;AAAA;UAEjC,aAAa,CAAC,MAA2B,OAAe,MAAa;WACpE,aAAa,MAAM,OAAO,CAAC;AAAA;UAE5B,mBAAmB,CAAC,MAA2B,OAAe,MAAa;WAC1E,mBAAmB,MAAM,OAAO,CAAC;AAAA;UAElC,mBAAmB,CAAC,MAA2B,OAAe,MAAa;WAC1E,mBAAmB,MAAM,OAAO,CAAC;AAAA;UAMlC,oBAAoB,CAAC,QAAqB,MAAa;WACtD,gBAAgB,QAAQ,CAAC;AAAA;UAG1B,qBAAqB,CAAC,aAAqB,aAAqB,QAAqB,UAAiB;WACrG,iBAAiB,aAAa,aAAa,QAAQ,KAAK;AAAA;UAMzD,EAAE,YAAY,WAAW,YAAY,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,YAC3HW,WAAO,KAAK;gBAEN,gBAAgB;AAAA,MACtB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AACF,MACA;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AACF,MACA,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AACF,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA;AACF,MACA,WAAW;AAAA,QACT;AAAA;AACF,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AACF,MACA,cAAc;AAAA,QACZ;AAAA;AACF,MACA,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AACF,MACA,YAAY;AAAA,KACb;WACM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;;;0BAvXCC,gBA4DiB,6BA5DA,UAAQ;yBACvB,MA0DM;AAAA,MA1DNC,uBA0DM;QA1DA,OAAKC,uBAAM,wBAAS;QAAc,OAAKC,mCAAkB,eAAK,cAAmB,iBAAY;;QAEzF,uBAAkB,oBAAe,gBAAW,aAAQ,SAAc,gBAAW,aAAQ,4BAD7FC,uBASM;;UAPH,OAAKF;gBAAkB,8BAAS;AAAA,gBAAoC,kCAAS;AAAA,gBAAwC,oCAA+B,mBAAc,gBAAW,UAAK;AAAA;;UAMnLG,gBAAwI,uBAAxIC,eAAoB,KAAoH,mBAAnG;AAAA,YAAG,OAAO;YAAoB,UAAQ;YAAmB,kBAAkB;;;QAElHL,uBAiCM;UAhCH,KAAK,aAAO;UACZ,OAAKC;YAAc;eAAwB,kBAAa;;kBAAoC,kBAAa,iBAAO,CAAM;kBAA0B,0BAAS,EAAc;kBAA0B,0BAAqB,iBAAO,YAAiB,eAAU;kBAAwB,yBAAS,CAAY,UAAK;AAAA,kBAAwB,yCAAS,CAA4B;kBAA4B,gCAAS,EAAoB;kBAA2B,gCAAS;AAAA,kBAAwC,wCAAmC,wBAAc,UAAe,wBAAc;AAAA,kBAA6B,yCAAoC,wBAAc,WAAgB,wBAAc;AAAA,kBAA6B,4BAAuB;kBAAgC,0BAAqB;;;;UAkBtwB,YAAO,0BAAlBE,uBAEM;;YAFoB,OAAKF,sBAAK,sBAAS;AAAA;YAC3CK,eAAqB;;UAEvBN,uBAOM;YAPA,OAAKC,sBAAK,wBAAS;AAAA;YACvBG,gBAAuG;cAA5F,SAAS;cAAiB,cAAa;cAAoB,cAAa;;aACvE,kBAAa,2BAAzBD,uBAIM;;cAJ4B,OAAKF,sBAAK,4BAAS;AAAA;cACnDK,eAEO,0BAFP,MAEO;AAAA,wDADF,cAAS;;;;6BAIlBN,uBAAgG;YAAlE,KAAK,aAAO;YAAiB,OAAKC,sBAAK,4BAAS;AAAA;wBAAjE,mBAAc;AAAA;UACf,qBAAW,8BAAvBF,gBAAgE;;YAAzB;YAAK,SAAS;;;QAE5C,YAAO,2BAAlBI,uBAEM;;UAFqB,OAAKF,sBAAK,uBAAS;AAAA;UAC5CK,eAAsB;;QAGhB,wBAAoB,mBAAc,gBAAW,aAAQ,UAAgB,qCAD7EH,uBASM;;UAPH,OAAKF;gBAAkB,8BAAS;AAAA,gBAAoC,qCAAS;AAAA,gBAA2C,oCAA+B,mBAAc,gBAAW,UAAK;AAAA;;UAMtLG,gBAAwI,uBAAxIC,eAAoB,KAAoH,mBAAnG;AAAA,YAAG,OAAO;YAAoB,UAAQ;YAAmB,kBAAkB;;;;;;;;;;;;"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var vue = require('vue');
|
|
6
|
+
var tools = require('../../../utils/tools.js');
|
|
6
7
|
var utils = require('../utils.js');
|
|
7
8
|
|
|
8
9
|
function getWidth(width, tableWidth) {
|
|
@@ -19,20 +20,35 @@ function getWidth(width, tableWidth) {
|
|
|
19
20
|
}
|
|
20
21
|
return _width;
|
|
21
22
|
}
|
|
23
|
+
function applySizesMap(sizesMap, nextSizesMap) {
|
|
24
|
+
Object.keys(sizesMap).forEach((key) => {
|
|
25
|
+
if (!(key in nextSizesMap)) {
|
|
26
|
+
delete sizesMap[key];
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
Object.keys(nextSizesMap).forEach((key) => {
|
|
30
|
+
if (sizesMap[key] !== nextSizesMap[key]) {
|
|
31
|
+
sizesMap[key] = nextSizesMap[key];
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
22
35
|
function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, props) {
|
|
23
36
|
const sizesMap = vue.reactive({});
|
|
24
37
|
const tableWidth = vue.ref(void 0);
|
|
38
|
+
let lastWrapWidth;
|
|
39
|
+
const WRAP_WIDTH_TOLERANCE = 1;
|
|
25
40
|
const syncColumnsWidth = () => {
|
|
26
41
|
const { bodyTable } = tableRefs;
|
|
27
42
|
if (!bodyTable || bodyTable.getWidth() === void 0) {
|
|
28
|
-
return;
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
let wrapWidth = bodyTable.getWidth();
|
|
46
|
+
if (lastWrapWidth !== void 0 && Math.abs(wrapWidth - lastWrapWidth) <= WRAP_WIDTH_TOLERANCE) {
|
|
47
|
+
wrapWidth = lastWrapWidth;
|
|
29
48
|
}
|
|
30
|
-
const wrapWidth = bodyTable.getWidth();
|
|
31
49
|
const columns = utils.getLeafColumns(updatedColumns.value);
|
|
32
50
|
let usedWidth = 0;
|
|
33
|
-
|
|
34
|
-
delete sizesMap[key];
|
|
35
|
-
});
|
|
51
|
+
const nextSizesMap = {};
|
|
36
52
|
const minWidthColumns = [];
|
|
37
53
|
const maxWidthColumns = [];
|
|
38
54
|
const nothingColumns = [];
|
|
@@ -41,15 +57,15 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
41
57
|
if (c.width) {
|
|
42
58
|
const _width = getWidth(c.width, wrapWidth);
|
|
43
59
|
usedWidth += _width;
|
|
44
|
-
|
|
60
|
+
nextSizesMap[colKey] = _width;
|
|
45
61
|
} else if (c.minWidth) {
|
|
46
62
|
const _width = getWidth(c.minWidth, wrapWidth);
|
|
47
63
|
usedWidth += _width;
|
|
48
|
-
|
|
64
|
+
nextSizesMap[colKey] = _width;
|
|
49
65
|
minWidthColumns.push(c);
|
|
50
66
|
} else {
|
|
51
67
|
const minWidth = utils.getMinWidth(c);
|
|
52
|
-
|
|
68
|
+
nextSizesMap[colKey] = minWidth;
|
|
53
69
|
usedWidth += minWidth;
|
|
54
70
|
if (c.maxWidth) {
|
|
55
71
|
maxWidthColumns.push(c);
|
|
@@ -65,10 +81,10 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
65
81
|
maxWidthColumns.forEach((mc) => {
|
|
66
82
|
avgWidth = Math.floor(unUsedWidth / length);
|
|
67
83
|
if (getWidth(mc.maxWidth, wrapWidth) < avgWidth) {
|
|
68
|
-
|
|
84
|
+
nextSizesMap[mc.key] = getWidth(mc.maxWidth, wrapWidth);
|
|
69
85
|
unUsedWidth -= getWidth(mc.maxWidth, wrapWidth) - utils.getMinWidth(mc);
|
|
70
86
|
} else {
|
|
71
|
-
|
|
87
|
+
nextSizesMap[mc.key] += avgWidth;
|
|
72
88
|
unUsedWidth -= avgWidth;
|
|
73
89
|
}
|
|
74
90
|
length -= 1;
|
|
@@ -77,25 +93,32 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
77
93
|
if (avgWidth > 50 || nothingColumns.length === 0) {
|
|
78
94
|
[...minWidthColumns, ...nothingColumns].forEach((c, i) => {
|
|
79
95
|
if (i < length - 1) {
|
|
80
|
-
|
|
96
|
+
nextSizesMap[c.key] += avgWidth;
|
|
81
97
|
unUsedWidth -= avgWidth;
|
|
82
98
|
} else {
|
|
83
|
-
|
|
99
|
+
nextSizesMap[c.key] += unUsedWidth;
|
|
84
100
|
}
|
|
85
101
|
});
|
|
86
102
|
} else {
|
|
87
103
|
avgWidth = Math.floor(unUsedWidth / nothingColumns.length);
|
|
88
104
|
nothingColumns.forEach((c, i) => {
|
|
89
105
|
if (i < nothingColumns.length - 1) {
|
|
90
|
-
|
|
106
|
+
nextSizesMap[c.key] += avgWidth;
|
|
91
107
|
unUsedWidth -= avgWidth;
|
|
92
108
|
} else {
|
|
93
|
-
|
|
109
|
+
nextSizesMap[c.key] += unUsedWidth;
|
|
94
110
|
}
|
|
95
111
|
});
|
|
96
112
|
}
|
|
97
113
|
}
|
|
98
|
-
|
|
114
|
+
const nextTableWidth = Object.keys(nextSizesMap).reduce((sum, key) => sum + nextSizesMap[key], 0);
|
|
115
|
+
lastWrapWidth = wrapWidth;
|
|
116
|
+
if (tools.shallowequal(sizesMap, nextSizesMap) && tableWidth.value === nextTableWidth) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
applySizesMap(sizesMap, nextSizesMap);
|
|
120
|
+
tableWidth.value = nextTableWidth;
|
|
121
|
+
return true;
|
|
99
122
|
};
|
|
100
123
|
let syncHeightTimer = null;
|
|
101
124
|
let updateBodyTableTimer = null;
|
|
@@ -109,20 +132,23 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
109
132
|
if (!bodyDom) {
|
|
110
133
|
return;
|
|
111
134
|
}
|
|
112
|
-
const
|
|
113
|
-
const
|
|
135
|
+
const { scrollLeft, scrollWidth, clientWidth } = bodyDom;
|
|
136
|
+
const scrollToLeft = scrollLeft <= 0;
|
|
137
|
+
const scrollToRight = scrollLeft + 1 >= scrollWidth - clientWidth;
|
|
138
|
+
let nextPosition = "middle";
|
|
114
139
|
if (scrollToLeft && scrollToRight) {
|
|
115
|
-
|
|
140
|
+
nextPosition = "both";
|
|
116
141
|
} else if (scrollToLeft) {
|
|
117
|
-
|
|
142
|
+
nextPosition = "left";
|
|
118
143
|
} else if (scrollToRight) {
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
144
|
+
nextPosition = "right";
|
|
145
|
+
}
|
|
146
|
+
if (scrollPosition.value !== nextPosition) {
|
|
147
|
+
scrollPosition.value = nextPosition;
|
|
122
148
|
}
|
|
123
149
|
};
|
|
124
150
|
const handleResize = () => {
|
|
125
|
-
syncColumnsWidth();
|
|
151
|
+
const changed = syncColumnsWidth();
|
|
126
152
|
if (isColumnFixed.value) {
|
|
127
153
|
if (syncHeightTimer) {
|
|
128
154
|
clearTimeout(syncHeightTimer);
|
|
@@ -132,6 +158,9 @@ function useTableResize(updatedColumns, tableRefs, prefixCls, isColumnFixed, pro
|
|
|
132
158
|
setScrollPositionClass();
|
|
133
159
|
}, 0);
|
|
134
160
|
}
|
|
161
|
+
if (!changed) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
135
164
|
if (updateBodyTableTimer) {
|
|
136
165
|
clearTimeout(updateBodyTableTimer);
|
|
137
166
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableResize.js","sources":["../../../../../src/components/Table/hooks/useTableResize.ts"],"sourcesContent":["import { computed, reactive, ref } from 'vue';\nimport type { ComputedRef, Ref } from 'vue';\nimport { getLeafColumns, getColumnKey, getMinWidth } from '../utils';\n// import { shallowequal } from '../../../utils/tools';\nimport type { InnerColumn, TableProps, TableRefs } from '../Table.type';\n\nexport function getWidth(width: string | number, tableWidth: number) {\n let _width = 0;\n if (typeof width === 'number') {\n _width = width;\n } else if (/^\\d*px$/.test(width)) {\n _width = Number(width.replace('px', ''));\n } else if (/^[\\d.]*%$/.test(width)) {\n const percent = Number(width.replace('%', ''));\n if (!Number.isNaN(percent)) {\n _width = Math.floor((percent / 100) * tableWidth);\n }\n }\n return _width;\n}\nexport default function useTableResize(\n updatedColumns: Ref<InnerColumn[]>,\n tableRefs: TableRefs,\n prefixCls: Ref<string>,\n isColumnFixed: ComputedRef<boolean>,\n props: TableProps\n) {\n const sizesMap = reactive({} as Record<string, number>);\n const tableWidth = ref<number | undefined>(undefined);\n\n const syncColumnsWidth = () => {\n const { bodyTable } = tableRefs;\n if (!bodyTable || (bodyTable as any).getWidth() === undefined) {\n return;\n }\n // const wrapWidth = props.border ? bodyTable.clientWidth - 1 : bodyTable.clientWidth;\n const wrapWidth = (bodyTable as any).getWidth();\n\n const columns = getLeafColumns(updatedColumns.value);\n let usedWidth = 0;\n // clear the sizesMap.\n Object.keys(sizesMap).forEach((key) => {\n delete sizesMap[key];\n });\n const minWidthColumns: InnerColumn[] = [];\n const maxWidthColumns: InnerColumn[] = [];\n const nothingColumns: InnerColumn[] = [];\n columns.forEach((c) => {\n const colKey = getColumnKey(c);\n if (c.width) {\n const _width = getWidth(c.width, wrapWidth);\n usedWidth += _width;\n sizesMap[colKey] = _width;\n } else if (c.minWidth) {\n const _width = getWidth(c.minWidth, wrapWidth);\n usedWidth += _width;\n sizesMap[colKey] = _width;\n minWidthColumns.push(c);\n } else {\n const minWidth = getMinWidth(c);\n sizesMap[colKey] = minWidth;\n usedWidth += minWidth;\n if (c.maxWidth) {\n maxWidthColumns.push(c);\n } else {\n nothingColumns.push(c);\n }\n }\n });\n let unUsedWidth = wrapWidth - usedWidth;\n let length = minWidthColumns.length + maxWidthColumns.length + nothingColumns.length;\n if (unUsedWidth > 0 && length > 0) {\n let avgWidth: number;\n maxWidthColumns.forEach((mc) => {\n avgWidth = Math.floor(unUsedWidth / length);\n if (getWidth(mc.maxWidth as number, wrapWidth) < avgWidth) {\n sizesMap[mc.key] = getWidth(mc.maxWidth as number, wrapWidth);\n unUsedWidth -= getWidth(mc.maxWidth as number, wrapWidth) - getMinWidth(mc);\n } else {\n sizesMap[mc.key] += avgWidth;\n unUsedWidth -= avgWidth;\n }\n length -= 1;\n });\n avgWidth = Math.floor(unUsedWidth / length);\n if (avgWidth > 50 || nothingColumns.length === 0) {\n [...minWidthColumns, ...nothingColumns].forEach((c, i) => {\n if (i < length - 1) {\n sizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n sizesMap[c.key] += unUsedWidth;\n }\n });\n } else {\n avgWidth = Math.floor(unUsedWidth / nothingColumns.length);\n nothingColumns.forEach((c, i) => {\n if (i < nothingColumns.length - 1) {\n sizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n sizesMap[c.key] += unUsedWidth;\n }\n });\n }\n }\n tableWidth.value = Object.keys(sizesMap).reduce((sum, key) => sum + sizesMap[key], 0);\n };\n\n let syncHeightTimer: ReturnType<typeof setTimeout> | null = null;\n let updateBodyTableTimer: ReturnType<typeof setTimeout> | null = null;\n const scrollPosition = ref('left');\n\n const setScrollPositionClass = () => {\n const { bodyTable } = tableRefs;\n if (!bodyTable) {\n return;\n }\n const bodyDom = (bodyTable as any).wrapRef;\n if (!bodyDom) {\n return;\n }\n\n const scrollToLeft = bodyDom.scrollLeft === 0;\n const scrollToRight = bodyDom.scrollLeft + 1 >= bodyDom.children[0].getBoundingClientRect().width - bodyDom.getBoundingClientRect().width;\n if (scrollToLeft && scrollToRight) {\n scrollPosition.value = 'both';\n } else if (scrollToLeft) {\n scrollPosition.value = 'left';\n } else if (scrollToRight) {\n scrollPosition.value = 'right';\n } else {\n scrollPosition.value = 'middle';\n }\n };\n const handleResize = () => {\n syncColumnsWidth();\n\n if (isColumnFixed.value) {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n }\n syncHeightTimer = setTimeout(() => {\n syncHeightTimer = null;\n setScrollPositionClass();\n }, 0);\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n }\n updateBodyTableTimer = setTimeout(() => {\n updateBodyTableTimer = null;\n const bt = tableRefs.bodyTable as any;\n if (bt?.update) {\n bt.update();\n }\n }, 0);\n };\n\n const setResizeWidth = (column: InnerColumn, width: number) => {\n const columns = getLeafColumns(updatedColumns.value);\n const _column = columns.find((c) => c === column || getColumnKey(c) === getColumnKey(column));\n if (_column) {\n _column.width = width;\n handleResize();\n }\n };\n const isScrollX = computed(() => {\n const { table } = tableRefs;\n if (table) {\n const wrapWidth = props.border ? table.offsetWidth - 1 : table.offsetWidth;\n return tableWidth.value && tableWidth.value > wrapWidth;\n }\n return false;\n });\n\n const resetScrollX = () => {\n const { bodyTable, headTable } = tableRefs;\n if (bodyTable) {\n (bodyTable as any).setScrollLeft(0);\n }\n if (headTable) {\n (headTable as any).setScrollLeft(0);\n }\n };\n const clearResizeTimer = () => {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n syncHeightTimer = null;\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n updateBodyTableTimer = null;\n }\n };\n return {\n sizesMap,\n tableWidth,\n isScrollX,\n scrollPosition,\n handleResize,\n setScrollPositionClass,\n resetScrollX,\n clearResizeTimer,\n setResizeWidth\n };\n}\n"],"names":["reactive","ref","getLeafColumns","getColumnKey","getMinWidth","computed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTableResize.js","sources":["../../../../../src/components/Table/hooks/useTableResize.ts"],"sourcesContent":["import { computed, reactive, ref } from 'vue';\nimport type { ComputedRef, Ref } from 'vue';\nimport { shallowequal } from '../../../utils/tools';\nimport { getLeafColumns, getColumnKey, getMinWidth } from '../utils';\nimport type { InnerColumn, TableProps, TableRefs } from '../Table.type';\n\nexport function getWidth(width: string | number, tableWidth: number) {\n let _width = 0;\n if (typeof width === 'number') {\n _width = width;\n } else if (/^\\d*px$/.test(width)) {\n _width = Number(width.replace('px', ''));\n } else if (/^[\\d.]*%$/.test(width)) {\n const percent = Number(width.replace('%', ''));\n if (!Number.isNaN(percent)) {\n _width = Math.floor((percent / 100) * tableWidth);\n }\n }\n return _width;\n}\n\nfunction applySizesMap(sizesMap: Record<string, number>, nextSizesMap: Record<string, number>) {\n Object.keys(sizesMap).forEach((key) => {\n if (!(key in nextSizesMap)) {\n delete sizesMap[key];\n }\n });\n Object.keys(nextSizesMap).forEach((key) => {\n if (sizesMap[key] !== nextSizesMap[key]) {\n sizesMap[key] = nextSizesMap[key];\n }\n });\n}\n\nexport default function useTableResize(\n updatedColumns: Ref<InnerColumn[]>,\n tableRefs: TableRefs,\n prefixCls: Ref<string>,\n isColumnFixed: ComputedRef<boolean>,\n props: TableProps\n) {\n const sizesMap = reactive({} as Record<string, number>);\n const tableWidth = ref<number | undefined>(undefined);\n let lastWrapWidth: number | undefined;\n // Ignore 1px wrap width flicker from subpixel / scrollbar edge cases.\n const WRAP_WIDTH_TOLERANCE = 1;\n\n const syncColumnsWidth = (): boolean => {\n const { bodyTable } = tableRefs;\n if (!bodyTable || (bodyTable as any).getWidth() === undefined) {\n return false;\n }\n let wrapWidth = (bodyTable as any).getWidth() as number;\n if (lastWrapWidth !== undefined && Math.abs(wrapWidth - lastWrapWidth) <= WRAP_WIDTH_TOLERANCE) {\n wrapWidth = lastWrapWidth;\n }\n\n const columns = getLeafColumns(updatedColumns.value);\n let usedWidth = 0;\n const nextSizesMap: Record<string, number> = {};\n const minWidthColumns: InnerColumn[] = [];\n const maxWidthColumns: InnerColumn[] = [];\n const nothingColumns: InnerColumn[] = [];\n columns.forEach((c) => {\n const colKey = getColumnKey(c);\n if (c.width) {\n const _width = getWidth(c.width, wrapWidth);\n usedWidth += _width;\n nextSizesMap[colKey] = _width;\n } else if (c.minWidth) {\n const _width = getWidth(c.minWidth, wrapWidth);\n usedWidth += _width;\n nextSizesMap[colKey] = _width;\n minWidthColumns.push(c);\n } else {\n const minWidth = getMinWidth(c);\n nextSizesMap[colKey] = minWidth;\n usedWidth += minWidth;\n if (c.maxWidth) {\n maxWidthColumns.push(c);\n } else {\n nothingColumns.push(c);\n }\n }\n });\n let unUsedWidth = wrapWidth - usedWidth;\n let length = minWidthColumns.length + maxWidthColumns.length + nothingColumns.length;\n if (unUsedWidth > 0 && length > 0) {\n let avgWidth: number;\n maxWidthColumns.forEach((mc) => {\n avgWidth = Math.floor(unUsedWidth / length);\n if (getWidth(mc.maxWidth as number, wrapWidth) < avgWidth) {\n nextSizesMap[mc.key] = getWidth(mc.maxWidth as number, wrapWidth);\n unUsedWidth -= getWidth(mc.maxWidth as number, wrapWidth) - getMinWidth(mc);\n } else {\n nextSizesMap[mc.key] += avgWidth;\n unUsedWidth -= avgWidth;\n }\n length -= 1;\n });\n avgWidth = Math.floor(unUsedWidth / length);\n if (avgWidth > 50 || nothingColumns.length === 0) {\n [...minWidthColumns, ...nothingColumns].forEach((c, i) => {\n if (i < length - 1) {\n nextSizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n nextSizesMap[c.key] += unUsedWidth;\n }\n });\n } else {\n avgWidth = Math.floor(unUsedWidth / nothingColumns.length);\n nothingColumns.forEach((c, i) => {\n if (i < nothingColumns.length - 1) {\n nextSizesMap[c.key] += avgWidth;\n unUsedWidth -= avgWidth;\n } else {\n nextSizesMap[c.key] += unUsedWidth;\n }\n });\n }\n }\n const nextTableWidth = Object.keys(nextSizesMap).reduce((sum, key) => sum + nextSizesMap[key], 0);\n lastWrapWidth = wrapWidth;\n\n if (shallowequal(sizesMap, nextSizesMap) && tableWidth.value === nextTableWidth) {\n return false;\n }\n\n applySizesMap(sizesMap, nextSizesMap);\n tableWidth.value = nextTableWidth;\n return true;\n };\n\n let syncHeightTimer: ReturnType<typeof setTimeout> | null = null;\n let updateBodyTableTimer: ReturnType<typeof setTimeout> | null = null;\n const scrollPosition = ref('left');\n\n const setScrollPositionClass = () => {\n const { bodyTable } = tableRefs;\n if (!bodyTable) {\n return;\n }\n const bodyDom = (bodyTable as any).wrapRef as HTMLElement | undefined;\n if (!bodyDom) {\n return;\n }\n\n // Prefer scrollWidth/clientWidth over getBoundingClientRect to avoid subpixel flicker\n // flipping fixed-column shadow classes (left/right/both).\n const { scrollLeft, scrollWidth, clientWidth } = bodyDom;\n const scrollToLeft = scrollLeft <= 0;\n const scrollToRight = scrollLeft + 1 >= scrollWidth - clientWidth;\n let nextPosition = 'middle';\n if (scrollToLeft && scrollToRight) {\n nextPosition = 'both';\n } else if (scrollToLeft) {\n nextPosition = 'left';\n } else if (scrollToRight) {\n nextPosition = 'right';\n }\n if (scrollPosition.value !== nextPosition) {\n scrollPosition.value = nextPosition;\n }\n };\n const handleResize = () => {\n const changed = syncColumnsWidth();\n\n if (isColumnFixed.value) {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n }\n syncHeightTimer = setTimeout(() => {\n syncHeightTimer = null;\n setScrollPositionClass();\n }, 0);\n }\n // Skip scrollbar metric refresh when column sizes did not change, to avoid\n // onUpdated -> handleResize feedback loops that cause layout jitter.\n if (!changed) {\n return;\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n }\n updateBodyTableTimer = setTimeout(() => {\n updateBodyTableTimer = null;\n const bt = tableRefs.bodyTable as any;\n if (bt?.update) {\n bt.update();\n }\n }, 0);\n };\n\n const setResizeWidth = (column: InnerColumn, width: number) => {\n const columns = getLeafColumns(updatedColumns.value);\n const _column = columns.find((c) => c === column || getColumnKey(c) === getColumnKey(column));\n if (_column) {\n _column.width = width;\n handleResize();\n }\n };\n const isScrollX = computed(() => {\n const { table } = tableRefs;\n if (table) {\n const wrapWidth = props.border ? table.offsetWidth - 1 : table.offsetWidth;\n return tableWidth.value && tableWidth.value > wrapWidth;\n }\n return false;\n });\n\n const resetScrollX = () => {\n const { bodyTable, headTable } = tableRefs;\n if (bodyTable) {\n (bodyTable as any).setScrollLeft(0);\n }\n if (headTable) {\n (headTable as any).setScrollLeft(0);\n }\n };\n const clearResizeTimer = () => {\n if (syncHeightTimer) {\n clearTimeout(syncHeightTimer);\n syncHeightTimer = null;\n }\n if (updateBodyTableTimer) {\n clearTimeout(updateBodyTableTimer);\n updateBodyTableTimer = null;\n }\n };\n return {\n sizesMap,\n tableWidth,\n isScrollX,\n scrollPosition,\n handleResize,\n setScrollPositionClass,\n resetScrollX,\n clearResizeTimer,\n setResizeWidth\n };\n}\n"],"names":["reactive","ref","getLeafColumns","getColumnKey","getMinWidth","shallowequal","computed"],"mappings":"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"}
|