UNPKG

tdesign-vue-next

Version:
1 lines 11.8 kB
{"version":3,"file":"useRowExpand.mjs","sources":["../../../../components/table/hooks/useRowExpand.tsx"],"sourcesContent":["import { computed, SetupContext, toRefs, h } from 'vue';\nimport { ChevronRightCircleIcon as TdChevronRightCircleIcon } from 'tdesign-icons-vue-next';\nimport { get } from 'lodash-es';\n\nimport {\n TdPrimaryTableProps,\n PrimaryTableCol,\n TableRowData,\n PrimaryTableCellParams,\n TableExpandedRowParams,\n RowEventContext,\n RowClassNameParams,\n} from '../type';\nimport useClassName from './useClassName';\nimport { useConfig, useTNodeJSX, useGlobalIcon, useDefaultValue } from '@tdesign/shared-hooks';\n\nexport default function useRowExpand(props: TdPrimaryTableProps, context: SetupContext) {\n const { expandedRowKeys } = toRefs(props);\n const renderTNode = useTNodeJSX();\n const { t, globalConfig } = useConfig('table', props.locale);\n const { ChevronRightCircleIcon } = useGlobalIcon({ ChevronRightCircleIcon: TdChevronRightCircleIcon });\n const { tableExpandClasses, positiveRotate90, tableFullRowClasses } = useClassName();\n // controlled and uncontrolled\n const [tExpandedRowKeys, setTExpandedRowKeys] = useDefaultValue(\n expandedRowKeys,\n props.defaultExpandedRowKeys || [],\n props.onExpandChange,\n 'expandedRowKeys',\n );\n\n const showExpandedRow = computed(() =>\n Boolean(props.expandedRow || context.slots.expandedRow || context.slots['expanded-row']),\n );\n\n const showExpandIconColumn = computed(() => props.expandIcon !== false && showExpandedRow.value);\n\n const isFirstColumnFixed = computed(() => props.columns?.[0]?.fixed === 'left');\n\n const getExpandedRowClass = (params: RowClassNameParams<TableRowData>) => {\n // 如果没有配置展开行,则不需要增加展开收起相关的类名\n if (!showExpandedRow.value) return null;\n const { row, rowKey } = params;\n const currentRowKey = get(row, rowKey || 'id');\n return tableExpandClasses[tExpandedRowKeys.value?.includes(currentRowKey) ? 'rowExpanded' : 'rowFolded'];\n };\n\n const onToggleExpand = (e: MouseEvent, row: TableRowData) => {\n props.expandOnRowClick && e.stopPropagation();\n const currentId = get(row, props.rowKey || 'id');\n const index = tExpandedRowKeys.value.indexOf(currentId);\n const newKeys = [...tExpandedRowKeys.value];\n index !== -1 ? newKeys.splice(index, 1) : newKeys.push(currentId);\n setTExpandedRowKeys(newKeys, {\n expandedRowData: props.data.filter((t) => newKeys.includes(get(t, props.rowKey || 'id'))),\n currentRowData: row,\n });\n };\n\n const renderExpandIcon = (_: typeof h, p: PrimaryTableCellParams<TableRowData>) => {\n const { row, rowIndex } = p;\n const currentId = get(row, props.rowKey || 'id');\n const expanded = tExpandedRowKeys.value.includes(currentId);\n const icon = renderTNode('expandIcon', {\n defaultNode: t(globalConfig.value.expandIcon) || <ChevronRightCircleIcon />,\n params: { row, index: rowIndex },\n });\n if (!icon) return null;\n const classes = [\n tableExpandClasses.iconBox,\n tableExpandClasses[expanded ? 'expanded' : 'collapsed'],\n { [positiveRotate90]: expanded },\n ];\n return (\n <span class={classes} onClick={(e: MouseEvent) => onToggleExpand(e, row)}>\n {icon}\n </span>\n );\n };\n\n const getExpandColumn = () => {\n const expandCol: PrimaryTableCol<TableRowData> = {\n colKey: '__EXPAND_ROW_ICON_COLUMN__',\n width: 46,\n className: tableExpandClasses.iconCell,\n fixed: isFirstColumnFixed.value ? 'left' : undefined,\n cell: renderExpandIcon,\n stopPropagation: true,\n };\n return expandCol;\n };\n\n const renderExpandedRow = (\n p: TableExpandedRowParams<TableRowData> & { tableWidth: number; isWidthOverflow: boolean },\n ) => {\n const rowId = get(p.row, props.rowKey || 'id');\n if (!tExpandedRowKeys.value || !tExpandedRowKeys.value.includes(rowId)) return null;\n const isFixedLeft = p.isWidthOverflow && props.columns.find((item) => item.fixed === 'left');\n return (\n <tr key={`expand_${rowId}`} class={[tableExpandClasses.row, { [tableFullRowClasses.base]: isFixedLeft }]}>\n <td colspan={p.columns.length}>\n <div\n class={[tableExpandClasses.rowInner, { [tableFullRowClasses.innerFullRow]: isFixedLeft }]}\n style={isFixedLeft ? { width: `${p.tableWidth}px` } : {}}\n >\n <div class={tableFullRowClasses.innerFullElement}>{renderTNode('expandedRow', { params: p })}</div>\n </div>\n </td>\n </tr>\n );\n };\n\n const onInnerExpandRowClick = (p: RowEventContext<TableRowData>) => {\n onToggleExpand(p.e as MouseEvent, p.row);\n };\n\n return {\n showExpandedRow,\n showExpandIconColumn,\n getExpandColumn,\n renderExpandedRow,\n onInnerExpandRowClick,\n getExpandedRowClass,\n };\n}\n"],"names":["useRowExpand","props","context","_toRefs","toRefs","expandedRowKeys","renderTNode","useTNodeJSX","_useConfig","useConfig","locale","t","globalConfig","_useGlobalIcon","useGlobalIcon","ChevronRightCircleIcon","TdChevronRightCircleIcon","_useClassName","useClassName","tableExpandClasses","positiveRotate90","tableFullRowClasses","_useDefaultValue","useDefaultValue","defaultExpandedRowKeys","onExpandChange","_useDefaultValue2","_slicedToArray","tExpandedRowKeys","setTExpandedRowKeys","showExpandedRow","computed","Boolean","expandedRow","slots","showExpandIconColumn","expandIcon","value","isFirstColumnFixed","_props$columns","columns","fixed","getExpandedRowClass","params","_tExpandedRowKeys$val","row","rowKey","currentRowKey","get","includes","onToggleExpand","e","expandOnRowClick","stopPropagation","currentId","index","indexOf","newKeys","_toConsumableArray","splice","push","expandedRowData","data","filter","currentRowData","renderExpandIcon","_","p","rowIndex","expanded","icon","defaultNode","_createVNode","classes","iconBox","_defineProperty","onClick","getExpandColumn","expandCol","colKey","width","className","iconCell","cell","renderExpandedRow","rowId","isFixedLeft","isWidthOverflow","find","item","concat","base","length","rowInner","innerFullRow","tableWidth","innerFullElement","onInnerExpandRowClick"],"mappings":"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"}