UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 5.65 kB
{"version":3,"file":"useTableHeader.mjs","sources":["../../../src/table/hooks/useTableHeader.tsx"],"sourcesContent":["import { SetupContext, computed, h } from 'vue';\nimport isString from 'lodash/isString';\nimport isFunction from 'lodash/isFunction';\nimport { BaseTableCol, PrimaryTableCol, TableRowData, TdBaseTableProps } from '../type';\nimport { getThRowspanAndColspan, getThList } from './useMultiHeader';\nimport useClassName from './useClassName';\nimport { TNodeReturnValue } from '../../common';\nimport { BaseTableColumns } from '../interface';\nimport TEllipsis from '../ellipsis';\n\n// 渲染表头的通用方法\nexport function renderTitle(slots: SetupContext['slots'], col: BaseTableColumns[0], index: number) {\n const params = { col, colIndex: index };\n if (isFunction(col.title)) {\n return col.title(h, params);\n }\n if (isString(col.title) && slots[col.title]) {\n return slots[col.title](params);\n }\n if (isFunction(col.render)) {\n return (\n col.render(h, {\n ...params,\n type: 'title',\n row: {},\n rowIndex: -1,\n }) || col.title\n );\n }\n return col.title;\n}\n\nexport default function useTableHeader(props: TdBaseTableProps) {\n const { tableSortClasses, tableFilterClasses } = useClassName();\n // 一次性获取 colspan 和 rowspan 可以避免其他数据更新导致的重复计算\n const spansAndLeafNodes = computed(() => getThRowspanAndColspan(props.columns));\n // 表头二维数据\n const thList = computed(() => getThList(props.columns));\n const isMultipleHeader = computed(() => thList.value.length > 1);\n\n const renderTitleWidthIcon = (\n [title, sortIcon, filterIcon]: TNodeReturnValue[],\n col: PrimaryTableCol<TableRowData>,\n colIndex: number,\n ellipsisTitle: BaseTableCol['ellipsisTitle'],\n attach: HTMLElement,\n extra?: {\n classPrefix: string;\n ellipsisOverlayClassName: string;\n },\n ) => {\n const classes = {\n [tableSortClasses.sortable]: sortIcon,\n [tableFilterClasses.filterable]: filterIcon,\n };\n const content = isFunction(ellipsisTitle) ? ellipsisTitle(h, { col, colIndex }) : undefined;\n const isEllipsis = ellipsisTitle !== undefined ? Boolean(ellipsisTitle) : Boolean(col.ellipsis);\n return (\n <div class={classes}>\n <div class={tableSortClasses.title}>\n {isEllipsis ? (\n <TEllipsis\n placement=\"bottom\"\n attach={props.attach || (attach ? () => attach : undefined)}\n tooltipContent={content && (() => content)}\n tooltipProps={typeof ellipsisTitle === 'object' ? ellipsisTitle : undefined}\n classPrefix={extra?.classPrefix}\n overlayClassName={extra?.ellipsisOverlayClassName}\n >\n {title}\n </TEllipsis>\n ) : (\n <div>{title}</div>\n )}\n {Boolean(sortIcon || filterIcon) && (\n <div class={tableFilterClasses.iconWrap}>\n {sortIcon}\n {filterIcon}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n return {\n thList,\n isMultipleHeader,\n spansAndLeafNodes,\n renderTitleWidthIcon,\n };\n}\n"],"names":["_isVNode","col","colIndex","isFunction","isString","type","rowIndex","title","sortIcon","filterIcon","_createVNode","thList","isMultipleHeader","spansAndLeafNodes","renderTitleWidthIcon"],"mappings":"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"}