{"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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"}