import type { ComputedRef, Slots } from 'vue'; import type { BasicTableProps, FetchParams } from '../types/table'; import { unref, computed } from 'vue'; import type { FormProps } from '/@/components/Form'; import { isFunction } from '/@/utils/is'; export function useTableForm( propsRef: ComputedRef, slots: Slots, fetch: (opt?: FetchParams | undefined) => Promise, getLoading: ComputedRef, ) { const getFormProps = computed((): Partial => { const { formConfig } = unref(propsRef); const { submitButtonOptions } = formConfig || {}; return { showAdvancedButton: true, ...formConfig, submitButtonOptions: { loading: unref(getLoading), ...submitButtonOptions }, compact: true, }; }); const getFormSlotKeys: ComputedRef = computed(() => { const keys = Object.keys(slots); return keys .map((item) => (item.startsWith('form-') ? item : null)) .filter((item) => !!item) as string[]; }); function replaceFormSlotKey(key: string) { if (!key) return ''; return key?.replace?.(/form-/, '') ?? ''; } function handleSearchInfoChange(info: Recordable) { const { handleSearchInfoFn } = unref(propsRef); if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) { info = handleSearchInfoFn(info) || info; } fetch({ searchInfo: info, page: 1 }); } return { getFormProps, replaceFormSlotKey, getFormSlotKeys, handleSearchInfoChange, }; }