You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
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 '@vben/shared';
|
|
import { getSlot } from '/@/utils/helper/tsxHelper';
|
|
|
|
export function useTableHeader(
|
|
propsRef: ComputedRef<BasicTableProps>,
|
|
slots: Slots,
|
|
handlers: InnerHandlers,
|
|
) {
|
|
const getHeaderProps = computed((): Recordable => {
|
|
const { title, showTableSetting, titleHelpMessage, tableSetting } = unref(propsRef);
|
|
const hideTitle = !slots.tableTitle && !title && !slots.toolbar && !showTableSetting;
|
|
if (hideTitle && !isString(title)) {
|
|
return {};
|
|
}
|
|
|
|
return {
|
|
title: hideTitle
|
|
? null
|
|
: () =>
|
|
h(
|
|
TableHeader,
|
|
{
|
|
title,
|
|
titleHelpMessage,
|
|
showTableSetting,
|
|
tableSetting,
|
|
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 };
|
|
}
|
|
|