UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.82 kB
{"version":3,"file":"use-table.mjs","names":[],"sources":["../../../../../../packages/components/table-v2/src/use-table.ts"],"sourcesContent":["import {\n computed,\n getCurrentInstance,\n ref,\n shallowRef,\n toRef,\n unref,\n watch,\n} from 'vue'\nimport { isArray, isNumber } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport {\n useColumns,\n useData,\n useRow,\n useScrollbar,\n useStyles,\n} from './composables'\n\nimport type { TableV2Props } from './table'\nimport type { TableGridInstance } from './table-grid'\n\nfunction useTable(props: TableV2Props) {\n const mainTableRef = ref<TableGridInstance>()\n const leftTableRef = ref<TableGridInstance>()\n const rightTableRef = ref<TableGridInstance>()\n const {\n columns,\n columnsStyles,\n columnsTotalWidth,\n fixedColumnsOnLeft,\n fixedColumnsOnRight,\n hasFixedColumns,\n mainColumns,\n\n onColumnSorted,\n } = useColumns(props, toRef(props, 'columns'), toRef(props, 'fixed'))\n\n const {\n scrollTo,\n scrollToLeft,\n scrollToTop,\n scrollToRow,\n onScroll,\n onVerticalScroll,\n scrollPos,\n } = useScrollbar(props, {\n mainTableRef,\n leftTableRef,\n rightTableRef,\n\n onMaybeEndReached,\n })\n\n const ns = useNamespace('table-v2')\n const instance = getCurrentInstance()!\n\n // state\n const isScrolling = shallowRef(false)\n\n const {\n expandedRowKeys,\n lastRenderedRowIndex,\n isDynamic,\n isResetting,\n rowHeights,\n resetAfterIndex,\n onRowExpanded,\n onRowHeightChange,\n onRowHovered,\n onRowsRendered,\n } = useRow(props, {\n mainTableRef,\n leftTableRef,\n rightTableRef,\n tableInstance: instance,\n ns,\n isScrolling,\n })\n\n const { data, depthMap } = useData(props, {\n expandedRowKeys,\n lastRenderedRowIndex,\n resetAfterIndex,\n })\n\n const rowsHeight = computed(() => {\n const { estimatedRowHeight, rowHeight } = props\n const _data = unref(data)\n if (isNumber(estimatedRowHeight)) {\n // calculate the actual height\n return Object.values(unref(rowHeights)).reduce(\n (acc, curr) => acc + curr,\n 0\n )\n }\n\n return _data.length * rowHeight\n })\n\n const {\n bodyWidth,\n fixedTableHeight,\n mainTableHeight,\n leftTableWidth,\n rightTableWidth,\n windowHeight,\n footerHeight,\n emptyStyle,\n rootStyle,\n headerHeight,\n } = useStyles(props, {\n columnsTotalWidth,\n fixedColumnsOnLeft,\n fixedColumnsOnRight,\n rowsHeight,\n })\n\n // DOM/Component refs\n const containerRef = ref()\n\n const showEmpty = computed(() => {\n const noData = unref(data).length === 0\n\n return isArray(props.fixedData)\n ? props.fixedData.length === 0 && noData\n : noData\n })\n\n function getRowHeight(rowIndex: number) {\n const { estimatedRowHeight, rowHeight, rowKey } = props\n\n if (!estimatedRowHeight) return rowHeight\n\n return (\n unref(rowHeights)[unref(data)[rowIndex][rowKey]] || estimatedRowHeight\n )\n }\n\n const isEndReached = ref(false)\n function onMaybeEndReached() {\n const { onEndReached } = props\n if (!onEndReached) return\n\n const { scrollTop } = unref(scrollPos)\n\n const _totalHeight = unref(rowsHeight)\n const clientHeight = unref(windowHeight)\n\n const remainDistance =\n _totalHeight - (scrollTop + clientHeight) + props.hScrollbarSize\n\n if (\n !isEndReached.value &&\n unref(lastRenderedRowIndex) >= 0 &&\n _totalHeight <= scrollTop + unref(mainTableHeight) - unref(headerHeight)\n ) {\n isEndReached.value = true\n onEndReached(remainDistance)\n } else {\n isEndReached.value = false\n }\n }\n\n // events\n\n watch(\n () => unref(rowsHeight),\n () => (isEndReached.value = false)\n )\n\n watch(\n () => props.expandedRowKeys,\n (val) => (expandedRowKeys.value = val),\n {\n deep: true,\n }\n )\n\n return {\n // models\n columns,\n containerRef,\n mainTableRef,\n leftTableRef,\n rightTableRef,\n // states\n isDynamic,\n isResetting,\n isScrolling,\n hasFixedColumns,\n // records\n columnsStyles,\n columnsTotalWidth,\n data,\n expandedRowKeys,\n depthMap,\n fixedColumnsOnLeft,\n fixedColumnsOnRight,\n mainColumns,\n // metadata\n bodyWidth,\n emptyStyle,\n rootStyle,\n footerHeight,\n mainTableHeight,\n fixedTableHeight,\n leftTableWidth,\n rightTableWidth,\n // flags\n showEmpty,\n\n // methods\n getRowHeight,\n\n // event handlers\n onColumnSorted,\n onRowHovered,\n onRowExpanded,\n onRowsRendered,\n onRowHeightChange,\n // use scrollbars\n scrollTo,\n scrollToLeft,\n scrollToTop,\n scrollToRow,\n onScroll,\n onVerticalScroll,\n }\n}\n\nexport { useTable }\n\nexport type UseTableReturn = ReturnType<typeof useTable>\n"],"mappings":";;;;;;;;;;AAsBA,SAAS,SAAS,OAAqB;CACrC,MAAM,eAAe,KAAwB;CAC7C,MAAM,eAAe,KAAwB;CAC7C,MAAM,gBAAgB,KAAwB;CAC9C,MAAM,EACJ,SACA,eACA,mBACA,oBACA,qBACA,iBACA,aAEA,mBACE,WAAW,OAAO,MAAM,OAAO,UAAU,EAAE,MAAM,OAAO,QAAQ,CAAC;CAErE,MAAM,EACJ,UACA,cACA,aACA,aACA,UACA,kBACA,cACE,aAAa,OAAO;EACtB;EACA;EACA;EAEA;EACD,CAAC;CAEF,MAAM,KAAK,aAAa,WAAW;CACnC,MAAM,WAAW,oBAAoB;CAGrC,MAAM,cAAc,WAAW,MAAM;CAErC,MAAM,EACJ,iBACA,sBACA,WACA,aACA,YACA,iBACA,eACA,mBACA,cACA,mBACE,OAAO,OAAO;EAChB;EACA;EACA;EACA,eAAe;EACf;EACA;EACD,CAAC;CAEF,MAAM,EAAE,MAAM,aAAa,QAAQ,OAAO;EACxC;EACA;EACA;EACD,CAAC;CAEF,MAAM,aAAa,eAAe;EAChC,MAAM,EAAE,oBAAoB,cAAc;EAC1C,MAAM,QAAQ,MAAM,KAAK;AACzB,MAAI,SAAS,mBAAmB,CAE9B,QAAO,OAAO,OAAO,MAAM,WAAW,CAAC,CAAC,QACrC,KAAK,SAAS,MAAM,MACrB,EACD;AAGH,SAAO,MAAM,SAAS;GACtB;CAEF,MAAM,EACJ,WACA,kBACA,iBACA,gBACA,iBACA,cACA,cACA,YACA,WACA,iBACE,UAAU,OAAO;EACnB;EACA;EACA;EACA;EACD,CAAC;CAGF,MAAM,eAAe,KAAK;CAE1B,MAAM,YAAY,eAAe;EAC/B,MAAM,SAAS,MAAM,KAAK,CAAC,WAAW;AAEtC,SAAO,QAAQ,MAAM,UAAU,GAC3B,MAAM,UAAU,WAAW,KAAK,SAChC;GACJ;CAEF,SAAS,aAAa,UAAkB;EACtC,MAAM,EAAE,oBAAoB,WAAW,WAAW;AAElD,MAAI,CAAC,mBAAoB,QAAO;AAEhC,SACE,MAAM,WAAW,CAAC,MAAM,KAAK,CAAC,UAAU,YAAY;;CAIxD,MAAM,eAAe,IAAI,MAAM;CAC/B,SAAS,oBAAoB;EAC3B,MAAM,EAAE,iBAAiB;AACzB,MAAI,CAAC,aAAc;EAEnB,MAAM,EAAE,cAAc,MAAM,UAAU;EAEtC,MAAM,eAAe,MAAM,WAAW;EAGtC,MAAM,iBACJ,gBAAgB,YAHG,MAAM,aAAa,IAGM,MAAM;AAEpD,MACE,CAAC,aAAa,SACd,MAAM,qBAAqB,IAAI,KAC/B,gBAAgB,YAAY,MAAM,gBAAgB,GAAG,MAAM,aAAa,EACxE;AACA,gBAAa,QAAQ;AACrB,gBAAa,eAAe;QAE5B,cAAa,QAAQ;;AAMzB,aACQ,MAAM,WAAW,QAChB,aAAa,QAAQ,MAC7B;AAED,aACQ,MAAM,kBACX,QAAS,gBAAgB,QAAQ,KAClC,EACE,MAAM,MACP,CACF;AAED,QAAO;EAEL;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAGA;EAGA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACD"}