import type { ComputedRef, Slots } from 'vue'; import type { BasicTableProps, InnerHandlers } from '../types/table'; import { unref, computed, h } from 'vue'; import TableHeader from '../components/TableHeader.vue'; import { isString } from '/@/utils/is'; import { getSlot } from '/@/utils/helper/tsxHelper'; export function useTableHeader( propsRef: ComputedRef, slots: Slots, handlers: InnerHandlers, ) { const getHeaderProps = computed((): Recordable => { const { title, titleHelpMessage } = unref(propsRef); const hideTitle = !slots.tableTitle && !title && !slots.toolbar; if (hideTitle && !isString(title)) { return {}; } return { title: hideTitle ? null : () => h( TableHeader, { title, titleHelpMessage, onColumnsChange: handlers.onColumnsChange, } as Recordable, { ...(slots.toolbar ? { toolbar: () => getSlot(slots, 'toolbar'), } : {}), ...(slots.tableTitle ? { tableTitle: () => getSlot(slots, 'tableTitle'), } : {}), ...(slots.headerTop ? { headerTop: () => getSlot(slots, 'headerTop'), } : {}), }, ), }; }); return { getHeaderProps }; }