Blame view

Yi.Vben5.Vue3/packages/effects/plugins/src/vxe-table/use-vxe-grid.ts 1.35 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  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';
  
  export function useVbenVxeGrid<
    T extends Record<string, any> = any,
    D extends BaseFormComponentType = BaseFormComponentType,
  >(options: VxeGridProps<T, D>) {
    // const IS_REACTIVE = isReactive(options);
    const api = new VxeGridApi(options);
    const extendedApi: ExtendedVxeGridApi<T, D> = api as ExtendedVxeGridApi<T, D>;
    extendedApi.useStore = (selector) => {
      return useStore(api.store, selector);
    };
  
    const Grid = defineComponent(
      (props: VxeGridProps<T>, { attrs, slots }) => {
        onBeforeUnmount(() => {
          api.unmount();
        });
        api.setState({ ...props, ...attrs });
        return () => h(VxeGrid, { ...props, ...attrs, api: extendedApi }, slots);
      },
      {
        name: 'VbenVxeGrid',
        inheritAttrs: false,
      },
    );
    // Add reactivity support
    // if (IS_REACTIVE) {
    //   watch(
    //     () => options,
    //     () => {
    //       api.setState(options);
    //     },
    //     { immediate: true },
    //   );
    // }
  
    return [Grid, extendedApi] as const;
  }
  
  export type UseVbenVxeGrid = typeof useVbenVxeGrid;