| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import type { VxeGridSlots, VxeGridSlotTypes } from 'vxe-table';
- import type { SlotsType } from 'vue';
- import type { BaseFormComponentType } from '@vben-core/form-ui';
- import type { ExtendedVxeGridApi, VxeGridProps } from './types';
- import { defineComponent, h, onBeforeUnmount } from 'vue';
- import { useStore } from '@vben-core/shared/store';
- import { VxeGridApi } from './api';
- import VxeGrid from './use-vxe-grid.vue';
- type FilteredSlots<T> = {
- [K in keyof VxeGridSlots<T> as K extends 'form'
- ? never
- : K]: VxeGridSlots<T>[K];
- };
- export function useVbenVxeGrid<
- T extends Record<string, any> = any,
- D extends BaseFormComponentType = BaseFormComponentType,
- P extends Record<string, any> = Record<never, never>,
- >(options: VxeGridProps<T, D, P>) {
- // const IS_REACTIVE = isReactive(options);
- const api = new VxeGridApi<T, D, P>(options);
- const extendedApi: ExtendedVxeGridApi<T, D, P> = api as ExtendedVxeGridApi<
- T,
- D,
- P
- >;
- extendedApi.useStore = (selector) => {
- return useStore(api.store, selector);
- };
- const Grid = defineComponent(
- (props: VxeGridProps<T, D, P>, { attrs, slots }) => {
- onBeforeUnmount(() => {
- api.unmount();
- });
- api.setState({ ...props, ...attrs } as Partial<VxeGridProps<T, D, P>>);
- return () =>
- h(
- VxeGrid,
- {
- ...props,
- ...attrs,
- api: extendedApi as ExtendedVxeGridApi,
- },
- slots,
- );
- },
- {
- name: 'VbenVxeGrid',
- inheritAttrs: false,
- slots: Object as SlotsType<
- {
- // 表格标题
- 'table-title': undefined;
- // 工具栏左侧部分
- 'toolbar-actions': VxeGridSlotTypes.DefaultSlotParams<T>;
- // 工具栏右侧部分
- 'toolbar-tools': VxeGridSlotTypes.DefaultSlotParams<T>;
- } & FilteredSlots<T>
- >,
- },
- );
- // Add reactivity support
- // if (IS_REACTIVE) {
- // watch(
- // () => options,
- // () => {
- // api.setState(options);
- // },
- // { immediate: true },
- // );
- // }
- return [Grid, extendedApi] as const;
- }
- export type UseVbenVxeGrid = typeof useVbenVxeGrid;
|