UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 22.4 kB
{"version":3,"file":"primary-table.mjs","sources":["../../src/table/primary-table.tsx"],"sourcesContent":["import { computed, defineComponent, toRefs, h, ref, onMounted, SetupContext } from 'vue';\nimport get from 'lodash/get';\nimport omit from 'lodash/omit';\nimport baseTableProps from './base-table-props';\nimport primaryTableProps from './primary-table-props';\nimport BaseTable from './base-table';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport useColumnController from './hooks/useColumnController';\nimport useRowExpand from './hooks/useRowExpand';\nimport useTableHeader, { renderTitle } from './hooks/useTableHeader';\nimport useRowSelect from './hooks/useRowSelect';\nimport { TdPrimaryTableProps, PrimaryTableCol, TableRowData, PrimaryTableCellParams } from './type';\nimport useSorter from './hooks/useSorter';\nimport useFilter from './hooks/useFilter';\nimport useDragSort from './hooks/useDragSort';\nimport useAsyncLoading from './hooks/useAsyncLoading';\nimport EditableCell, { EditableCellProps } from './editable-cell';\nimport { PageInfo } from '../pagination';\nimport useClassName from './hooks/useClassName';\nimport useEditableRow from './hooks/useEditableRow';\nimport useStyle from './hooks/useStyle';\nimport { ScrollToElementParams } from '../hooks/useVirtualScrollNew';\n\nexport { BASE_TABLE_ALL_EVENTS } from './base-table';\n\nconst OMIT_PROPS = [\n 'hideSortTips',\n 'dragSort',\n 'defaultExpandedRowKeys',\n 'defaultSelectedRowKeys',\n 'columnController',\n 'filterRow',\n 'sortOnRowDraggable',\n 'expandOnRowClick',\n 'multipleSort',\n 'expandIcon',\n 'reserveSelectedRowOnPaginate',\n 'selectOnRowClick',\n 'onChange',\n 'onAsyncLoadingClick',\n 'onColumnChange',\n 'onColumnControllerVisibleChange',\n 'onDataChange',\n 'onDisplayColumnsChange',\n 'onDragSort',\n 'onExpandChange',\n 'onFilterChange',\n 'onSelectChange',\n 'onSortChange',\n];\n\nexport default defineComponent({\n name: 'XPrimaryTable',\n\n props: {\n ...baseTableProps,\n ...primaryTableProps,\n },\n\n setup(props: TdPrimaryTableProps, context: SetupContext) {\n const renderTNode = useTNodeJSX();\n const { columns, columnController } = toRefs(props);\n const primaryTableRef = ref(null);\n\n const { classPrefix, tableDraggableClasses, tableBaseClass, tableSelectedClasses, tableSortClasses } =\n useClassName();\n const { sizeClassNames } = useStyle(props);\n // 自定义列配置功能\n const { tDisplayColumns, renderColumnController } = useColumnController(props, context);\n // 展开/收起行功能\n const { showExpandedRow, showExpandIconColumn, getExpandColumn, renderExpandedRow, onInnerExpandRowClick } =\n useRowExpand(props, context);\n // 排序功能\n const { renderSortIcon } = useSorter(props, context);\n // 行选中功能\n const {\n selectedRowClassNames,\n currentPaginateData,\n formatToRowSelectColumn,\n setTSelectedRowKeys,\n onInnerSelectRowClick,\n } = useRowSelect(props, tableSelectedClasses);\n // 过滤功能\n const {\n hasEmptyCondition,\n isTableOverflowHidden,\n renderFilterIcon,\n renderFirstFilterRow,\n setFilterPrimaryTableRef,\n } = useFilter(props, context);\n\n // 拖拽排序功能\n const { isRowHandlerDraggable, isRowDraggable, isColDraggable, setDragSortPrimaryTableRef, setDragSortColumns } =\n useDragSort(props, context);\n\n const { renderTitleWidthIcon } = useTableHeader(props);\n const { renderAsyncLoading } = useAsyncLoading(props);\n\n const {\n errorListMap,\n editableKeysMap,\n validateRowData,\n validateTableData,\n onRuleChange,\n clearValidateData,\n onPrimaryTableCellEditChange,\n } = useEditableRow(props);\n\n const primaryTableClasses = computed(() => {\n return {\n [tableDraggableClasses.colDraggable]: isColDraggable.value,\n [tableDraggableClasses.rowHandlerDraggable]: isRowHandlerDraggable.value,\n [tableDraggableClasses.rowDraggable]: isRowDraggable.value,\n [tableBaseClass.overflowVisible]: isTableOverflowHidden.value === false,\n [tableBaseClass.tableRowEdit]: props.editableRowKeys,\n };\n });\n\n // 如果想给 TR 添加类名,请在这里补充,不要透传更多额外 Props 到 BaseTable\n const tRowClassNames = computed(() => {\n const tClassNames = [props.rowClassName, selectedRowClassNames.value];\n return tClassNames.filter((v) => v);\n });\n\n // 如果想给 TR 添加属性,请在这里补充,不要透传更多额外 Props 到 BaseTable\n const tRowAttributes = computed(() => {\n const tAttributes = [props.rowAttributes];\n if (isRowHandlerDraggable.value || isRowDraggable.value) {\n tAttributes.push(({ row }) => ({ 'data-id': get(row, props.rowKey || 'id') }));\n }\n return tAttributes.filter((v) => v);\n });\n\n // 多个 Hook 共用 primaryTableRef\n onMounted(() => {\n setFilterPrimaryTableRef(primaryTableRef.value);\n setDragSortPrimaryTableRef(primaryTableRef.value);\n });\n\n // 对外暴露的方法\n context.expose({\n validateRowData,\n validateTableData,\n clearValidateData,\n refreshTable: () => {\n primaryTableRef.value.refreshTable();\n },\n scrollToElement: (data: ScrollToElementParams) => {\n primaryTableRef.value.virtualConfig.scrollToElement(data);\n },\n scrollColumnIntoView: (colKey: string) => {\n primaryTableRef.value.scrollColumnIntoView(colKey);\n },\n // 暴露基础表格 ref 及相关方法\n baseTableRef: primaryTableRef,\n });\n\n // 1. 影响列数量的因素有:自定义列配置、展开/收起行、多级表头;2. 影响表头内容的因素有:排序图标、筛选图标\n const getColumns = (columns: PrimaryTableCol<TableRowData>[]) => {\n const arr: PrimaryTableCol<TableRowData>[] = [];\n for (let i = 0, len = columns.length; i < len; i++) {\n let item = { ...columns[i] };\n // 自定义列显示控制\n const isDisplayColumn = item.children?.length || tDisplayColumns.value?.includes(item.colKey);\n if (!isDisplayColumn && props.columnController) continue;\n item = formatToRowSelectColumn(item);\n const { sort } = props;\n if (item.sorter && props.showSortColumnBgColor) {\n const sorts = sort instanceof Array ? sort : [sort];\n const sortedColumn = sorts.find(\n (sort) => sort && sort.sortBy === item.colKey && sort.descending !== undefined,\n );\n if (sortedColumn) {\n item.className =\n item.className instanceof Array\n ? item.className.concat(tableSortClasses.sortColumn)\n : [item.className, tableSortClasses.sortColumn];\n }\n }\n // 添加排序图标和过滤图标\n if (item.sorter || item.filter) {\n const titleContent = renderTitle(context.slots, item, i);\n const { ellipsisTitle } = item;\n item.title = (h, p) => {\n const sortIcon = item.sorter ? renderSortIcon(p) : null;\n const filterIcon = item.filter ? renderFilterIcon(p) : null;\n // @ts-ignore 注意:此处 Vue2 和 Vue3 有所不同\n const attach = primaryTableRef.value?.tableContentRef;\n return renderTitleWidthIcon(\n [titleContent, sortIcon, filterIcon],\n p.col,\n p.colIndex,\n ellipsisTitle,\n attach,\n {\n classPrefix,\n ellipsisOverlayClassName: props.size !== 'medium' ? sizeClassNames[props.size] : '',\n },\n );\n };\n item.ellipsisTitle = false;\n }\n // 如果是单元格可编辑状态\n if (item.edit?.component) {\n const oldCell = item.cell;\n item.cell = (h, p: PrimaryTableCellParams<TableRowData>) => {\n const cellProps: EditableCellProps = {\n ...p,\n oldCell,\n tableBaseClass,\n cellEmptyContent: props.cellEmptyContent,\n onChange: props.onRowEdit,\n onValidate: props.onRowValidate,\n onRuleChange,\n onEditableChange: onPrimaryTableCellEditChange,\n };\n if (props.editableRowKeys) {\n const rowValue = get(p.row, props.rowKey || 'id');\n cellProps.editable = editableKeysMap.value[rowValue] || false;\n const key = [rowValue, p.col.colKey].join('__');\n const errorList = errorListMap.value?.[key];\n errorList && (cellProps.errors = errorList);\n }\n if (props.editableCellState) {\n cellProps.readonly = !props.editableCellState(p);\n }\n return <EditableCell {...cellProps} v-slots={context.slots} />;\n };\n }\n if (item.children?.length) {\n item.children = getColumns(item.children);\n }\n // 多级表头和自定义列配置特殊逻辑:要么子节点不存在,要么子节点长度大于 1,方便做自定义列配置\n if (!item.children || item.children?.length) {\n arr.push(item);\n }\n }\n return arr;\n };\n\n const tColumns = computed(() => {\n const cols = getColumns(columns.value);\n if (showExpandIconColumn.value) {\n cols.unshift(getExpandColumn());\n }\n return cols;\n });\n\n const onInnerPageChange = (pageInfo: PageInfo, newData: Array<TableRowData>) => {\n currentPaginateData.value = newData;\n props.onPageChange?.(pageInfo, newData);\n const changeParams: Parameters<TdPrimaryTableProps['onChange']> = [\n { pagination: pageInfo },\n { trigger: 'pagination', currentData: newData },\n ];\n props.onChange?.(...changeParams);\n // 是否在分页时保留选中结果,如果不保留则需清空\n if (!props.reserveSelectedRowOnPaginate) {\n setTSelectedRowKeys([], {\n selectedRowData: [],\n type: 'uncheck',\n currentRowKey: 'CLEAR_ON_PAGINATE',\n });\n }\n };\n\n // handle click and dblclick exits at the same time\n let timer: any;\n const DURATION = 250;\n const onInnerRowClick: TdPrimaryTableProps['onRowClick'] = (params) => {\n // no dbl click conflict, no delay\n if (!props.onRowDblclick) {\n onInnerExpandRowClick(params);\n onInnerSelectRowClick(params);\n return;\n }\n if (timer) {\n // dblclick\n clearTimeout(timer);\n timer = undefined;\n } else {\n timer = setTimeout(() => {\n onInnerExpandRowClick(params);\n onInnerSelectRowClick(params);\n timer = undefined;\n }, DURATION);\n }\n };\n\n return () => {\n const formatNode = (\n api: string,\n renderInnerNode: Function,\n condition: boolean,\n extra?: { reverse?: boolean },\n ) => {\n if (!condition) return props[api];\n const innerNode = renderInnerNode(h);\n const propsNode = renderTNode(api);\n if (innerNode && !propsNode) return () => innerNode;\n if (propsNode && !innerNode) return () => propsNode;\n if (innerNode && propsNode) {\n return () =>\n extra?.reverse ? (\n <div>\n {innerNode}\n {propsNode}\n </div>\n ) : (\n <div>\n {propsNode}\n {innerNode}\n </div>\n );\n }\n return null;\n };\n const isColumnController = !!(columnController.value && Object.keys(columnController.value).length);\n // @ts-ignore\n const placement = isColumnController ? columnController.value.placement || 'top-right' : '';\n const isBottomController = isColumnController && placement?.indexOf('bottom') !== -1;\n const topContent = formatNode('topContent', renderColumnController, isColumnController && !isBottomController);\n const bottomContent = formatNode('bottomContent', renderColumnController, isBottomController, {\n reverse: true,\n });\n const firstFullRow = formatNode('firstFullRow', renderFirstFilterRow, !hasEmptyCondition.value);\n const lastFullRow = formatNode('lastFullRow', renderAsyncLoading, !!props.asyncLoading);\n\n const baseTableProps = {\n ...omit(props, OMIT_PROPS),\n rowClassName: tRowClassNames.value,\n rowAttributes: tRowAttributes.value,\n columns: tColumns.value,\n topContent,\n bottomContent,\n firstFullRow,\n lastFullRow,\n thDraggable: ['col', 'row-handler-col'].includes(props.dragSort),\n onPageChange: onInnerPageChange,\n renderExpandedRow: showExpandedRow.value ? renderExpandedRow : undefined,\n };\n\n if (props.expandOnRowClick || props.selectOnRowClick) {\n baseTableProps.onRowClick = onInnerRowClick;\n }\n\n return (\n // @ts-ignore\n <BaseTable\n ref={primaryTableRef}\n v-slots={context.slots}\n {...baseTableProps}\n class={primaryTableClasses.value}\n onLeafColumnsChange={setDragSortColumns}\n />\n );\n };\n },\n});\n"],"names":["name","setup","useEditableRow","tAttributes","onMounted","setFilterPrimaryTableRef","setDragSortPrimaryTableRef","validateRowData","validateTableData","clearValidateData","primaryTableRef","scrollToElement","scrollColumnIntoView","baseTableRef","item","classPrefix","ellipsisOverlayClassName","oldCell","tableBaseClass","onRuleChange","onEditableChange","get","errorList","arr","cols","pagination","trigger","currentData","selectedRowData","type","currentRowKey","_createVNode","reverse","topContent","bottomContent","firstFullRow","lastFullRow","thDraggable","onPageChange","renderExpandedRow","BaseTable","_mergeProps"],"mappings":"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"}