zova-module-a-table 5.1.8 → 5.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/cli/tableCell/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +9 -2
  2. package/cli/tableCell/metadata/generate.ts +4 -1
  3. package/dist/.metadata/component/table.d.ts.map +1 -1
  4. package/dist/component/table/controller.d.ts +13 -11
  5. package/dist/component/table/controller.d.ts.map +1 -1
  6. package/dist/component/table/render.d.ts.map +1 -1
  7. package/dist/index.js +89 -66
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/beanControllerPageTableBase.d.ts +1 -0
  10. package/dist/lib/beanControllerPageTableBase.d.ts.map +1 -1
  11. package/dist/lib/beanControllerTableBase.d.ts +1 -0
  12. package/dist/lib/beanControllerTableBase.d.ts.map +1 -1
  13. package/dist/types/index.d.ts +0 -1
  14. package/dist/types/index.d.ts.map +1 -1
  15. package/dist/types/table.d.ts +9 -5
  16. package/dist/types/table.d.ts.map +1 -1
  17. package/dist/types/tableCell.d.ts +2 -1
  18. package/dist/types/tableCell.d.ts.map +1 -1
  19. package/dist/types/tableColumn.d.ts +5 -4
  20. package/dist/types/tableColumn.d.ts.map +1 -1
  21. package/package.json +2 -2
  22. package/rest/component/table.ts +2 -1
  23. package/src/.metadata/component/table.ts +11 -5
  24. package/src/component/table/controller.tsx +171 -107
  25. package/src/component/table/render.tsx +8 -2
  26. package/src/lib/beanControllerPageTableBase.ts +4 -0
  27. package/src/lib/beanControllerTableBase.ts +4 -0
  28. package/src/types/index.ts +0 -1
  29. package/src/types/table.ts +18 -5
  30. package/src/types/tableCell.ts +2 -1
  31. package/src/types/tableColumn.ts +6 -5
  32. package/dist/types/providers.d.ts +0 -24
  33. package/dist/types/providers.d.ts.map +0 -1
  34. package/src/types/providers.ts +0 -26
@@ -1,11 +1,15 @@
1
- import type { ColumnDef, RowData, useVueTable } from '@tanstack/vue-table';
1
+ import type { ColumnDef, useVueTable } from '@tanstack/vue-table';
2
2
  import type { SchemaObject } from 'openapi3-ts/oas31';
3
+ import type { TypeTableCellRenderComponent } from 'zova-module-a-openapi';
4
+ import type { ControllerTable } from '../component/table/controller.jsx';
3
5
  import type { TypeTableCellRender } from './tableColumn.js';
4
- export type TypeTable<TData extends RowData = RowData> = ReturnType<typeof useVueTable<TData>>;
5
- export type TypeColumn<TData extends RowData = RowData> = ColumnDef<TData, any>;
6
- export interface ITableMeta<TData extends RowData = RowData> {
6
+ export type TypeTable<TData extends {} = {}> = ReturnType<typeof useVueTable<TData>>;
7
+ export type TypeColumn<TData extends {} = {}> = ColumnDef<TData, any>;
8
+ export interface ITableMeta<TData extends {} = {}> {
7
9
  properties: SchemaObject[];
8
10
  renders: Record<string, TypeTableCellRender<TData>>;
9
11
  }
10
- export type TypeTableGetColumnsNext<TData extends RowData = RowData> = (properties?: SchemaObject[]) => Promise<TypeColumn<TData>[]>;
12
+ export type TypeTableGetColumnsNext<TData extends {} = {}> = (properties?: SchemaObject[]) => Promise<TypeColumn<TData>[]>;
13
+ export type TypeTableCreateColumnRender<TData extends {} = {}> = (key: string, render: TypeTableCellRenderComponent) => Promise<TypeTableCellRender<TData, any> | undefined>;
14
+ export type TypeTableGetColumns<TData extends {} = {}> = (next: TypeTableGetColumnsNext<TData>, createColumnRender: TypeTableCreateColumnRender<TData>, table: ControllerTable<TData>) => Promise<TypeColumn<TData>[]>;
11
15
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/types/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,OAAO,GAAG,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAEhF,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,OAAO,GAAG,OAAO;IACzD,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/types/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,EAAE,GAAG,EAAE,IAAI,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAErF,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,EAAE,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAEtE,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,EAAE,GAAG,EAAE;IAC/C,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE3H,MAAM,MAAM,2BAA2B,CAAC,KAAK,SAAS,EAAE,GAAG,EAAE,IAAI,CAC/D,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,4BAA4B,KACjC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;AAE1D,MAAM,MAAM,mBAAmB,CAAC,KAAK,SAAS,EAAE,GAAG,EAAE,IAAI,CACvD,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC,EACpC,kBAAkB,EAAE,2BAA2B,CAAC,KAAK,CAAC,EACtD,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,KAC1B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC"}
@@ -3,7 +3,7 @@ import type { OmitNever } from 'zova';
3
3
  import type { ServiceOnion } from 'zova-module-a-bean';
4
4
  import type { IJsxRenderContextBase } from 'zova-module-a-openapi';
5
5
  import type { ControllerTable } from '../component/table/controller.jsx';
6
- import type { ITableCellScope } from './tableColumn.js';
6
+ import type { IJsxRenderContextTableColumn, ITableCellScope } from './tableColumn.js';
7
7
  export interface IJsxRenderContextTableCell<TData extends {} = any> extends IJsxRenderContextBase {
8
8
  $celScope: ITableCellScope;
9
9
  $$table: ControllerTable<TData>;
@@ -14,6 +14,7 @@ export interface ITableCellRecord {
14
14
  }
15
15
  export interface ITableCellRender {
16
16
  render(options: IDecoratorTableCellOptions, renderContext: IJsxRenderContextTableCell, next: NextTableCellRender): any;
17
+ checkVisible?(options: IDecoratorTableCellOptions, renderContext: IJsxRenderContextTableColumn): Promise<boolean>;
17
18
  }
18
19
  export interface IDecoratorTableCellOptions {
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tableCell.d.ts","sourceRoot":"","sources":["../../src/types/tableCell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,0BAA0B,CAAC,KAAK,SAAS,EAAE,GAAG,GAAG,CAAE,SAAQ,qBAAqB;IAC/F,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,CAAC;AAE5C,MAAM,WAAW,gBAAgB;CAAG;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,0BAA0B,EAAE,IAAI,EAAE,mBAAmB,GAAG,GAAG,CAAC;CACxH;AAED,MAAM,WAAW,0BAA0B;CAAG;AAE9C,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAiB,QAAQ;QACvB,SAAS,EAAE,YAAY,CAAC,0BAA0B,EAAE,MAAM,gBAAgB,CAAC,CAAC;KAC7E;CACF;AAED,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,YAAY;QAC3B,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;KACxC;IAED,UAAiB,gBAAgB;QAC/B,SAAS,EAAE,KAAK,CAAC;KAClB;CACF"}
1
+ {"version":3,"file":"tableCell.d.ts","sourceRoot":"","sources":["../../src/types/tableCell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,WAAW,0BAA0B,CAAC,KAAK,SAAS,EAAE,GAAG,GAAG,CAAE,SAAQ,qBAAqB;IAC/F,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,CAAC;AAE5C,MAAM,WAAW,gBAAgB;CAAG;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,0BAA0B,EAAE,IAAI,EAAE,mBAAmB,GAAG,GAAG,CAAC;IACvH,YAAY,CAAC,CAAC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnH;AAED,MAAM,WAAW,0BAA0B;CAAG;AAE9C,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAiB,QAAQ;QACvB,SAAS,EAAE,YAAY,CAAC,0BAA0B,EAAE,MAAM,gBAAgB,CAAC,CAAC;KAC7E;CACF;AAED,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,YAAY;QAC3B,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;KACxC;IAED,UAAiB,gBAAgB;QAC/B,SAAS,EAAE,KAAK,CAAC;KAClB;CACF"}
@@ -2,7 +2,6 @@ import type { CellContext, RowData } from '@tanstack/table-core';
2
2
  import type { SchemaObject } from 'openapi3-ts/oas31';
3
3
  import type { IJsxRenderContextBase, TypeTableCellRenderComponent } from 'zova-module-a-openapi';
4
4
  import type { ControllerTable } from '../component/table/controller.jsx';
5
- export declare const constColumnProps = "$$ColumnProps";
6
5
  export type TypeTableCellRender<TData extends RowData = RowData, TValue = any> = (props?: CellContext<TData, TValue>) => any;
7
6
  export interface IJsxRenderContextTableColumn<TData extends {} = any> extends IJsxRenderContextBase {
8
7
  $celScope: ITableColumnScope;
@@ -10,9 +9,11 @@ export interface IJsxRenderContextTableColumn<TData extends {} = any> extends IJ
10
9
  }
11
10
  export interface ITableCellRenderColumnProps {
12
11
  key: string;
13
- name: string;
12
+ }
13
+ export interface ITableCellRenderColumnOptions {
14
14
  visible?: boolean;
15
- render: TypeTableCellRenderComponent;
15
+ render?: TypeTableCellRenderComponent;
16
+ columnProps: ITableCellRenderColumnProps;
16
17
  }
17
18
  export interface ITableScope {
18
19
  }
@@ -22,6 +23,6 @@ export interface ITableColumnScope extends ITableScope {
22
23
  }
23
24
  export interface ITableCellScope extends ITableColumnScope {
24
25
  value: any;
25
- displayValue?: any;
26
+ fallbackValue: any;
26
27
  }
27
28
  //# sourceMappingURL=tableColumn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableColumn.d.ts","sourceRoot":"","sources":["../../src/types/tableColumn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD,MAAM,MAAM,mBAAmB,CAAC,KAAK,SAAS,OAAO,GAAG,OAAO,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC;AAE7H,MAAM,WAAW,4BAA4B,CAAC,KAAK,SAAS,EAAE,GAAG,GAAG,CAAE,SAAQ,qBAAqB;IACjG,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,4BAA4B,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;CAAG;AAE/B,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB"}
1
+ {"version":3,"file":"tableColumn.d.ts","sourceRoot":"","sources":["../../src/types/tableColumn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,MAAM,MAAM,mBAAmB,CAAC,KAAK,SAAS,OAAO,GAAG,OAAO,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC;AAE7H,MAAM,WAAW,4BAA4B,CAAC,KAAK,SAAS,EAAE,GAAG,GAAG,CAAE,SAAQ,qBAAqB;IACjG,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,4BAA4B,CAAC;IACtC,WAAW,EAAE,2BAA2B,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;CAAG;AAE/B,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,KAAK,EAAE,GAAG,CAAC;IACX,aAAa,EAAE,GAAG,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zova-module-a-table",
3
- "version": "5.1.8",
4
- "gitHead": "4caf955ae46d889cab5dd7efc981f562b3b54aa2",
3
+ "version": "5.1.10",
4
+ "gitHead": "a247f88a55c663d313296039f874560ee5a13e01",
5
5
  "description": "",
6
6
  "keywords": [
7
7
  "Zova Module"
@@ -1,7 +1,8 @@
1
1
  import type { TypeRenderComponentJsxPropsPublic } from 'zova-jsx';
2
2
  import type { ControllerTableProps } from 'zova-module-a-table';
3
3
 
4
- type TypeControllerTablePublicProps<TData extends {} = {}> = TypeRenderComponentJsxPropsPublic & ControllerTableProps<TData>;
4
+ type TypeControllerTablePublicProps<TData extends {} = {}> = TypeRenderComponentJsxPropsPublic &
5
+ ControllerTableProps<TData>;
5
6
  export function BBZTable<TData extends {} = {}>(_props: TypeControllerTablePublicProps<TData>) {
6
7
  return 'a-table:table';
7
8
  }
@@ -11,7 +11,10 @@ export type TypeControllerTablePublicProps<TData extends {} = {}> = {
11
11
  controllerRef?: (ref: ControllerTable<TData>) => void;
12
12
  } & ControllerTableProps<TData>;
13
13
 
14
- type ControllerInnerProps<TData extends {} = {}> = TypeControllerInnerProps<ControllerTableProps<TData>, keyof typeof ControllerTable.$propsDefault>;
14
+ type ControllerInnerProps<TData extends {} = {}> = TypeControllerInnerProps<
15
+ ControllerTableProps<TData>,
16
+ keyof typeof ControllerTable.$propsDefault
17
+ >;
15
18
  declare module 'zova-module-a-table' {
16
19
  export interface ControllerTable<TData extends {} = {}> {
17
20
  $props: ControllerInnerProps<TData>;
@@ -20,7 +23,10 @@ declare module 'zova-module-a-table' {
20
23
  declare module 'zova-module-a-table' {
21
24
  export interface RenderTable<TData extends {} = {}> extends ControllerTable<TData> {}
22
25
  }
23
- export const ZTable = defineComponent(<TData extends {} = {}>(_props: TypeControllerTablePublicProps<TData>) => {
24
- useController(ControllerTable, RenderTable, undefined);
25
- return () => {};
26
- }, prepareComponentOptions());
26
+ export const ZTable = defineComponent(
27
+ <TData extends {} = {}>(_props: TypeControllerTablePublicProps<TData>) => {
28
+ useController(ControllerTable, RenderTable, undefined);
29
+ return () => {};
30
+ },
31
+ prepareComponentOptions(),
32
+ );
@@ -1,29 +1,32 @@
1
- import { celEnvBase } from '@cabloy/utils';
1
+ import type {
2
+ IResourceActionRowOptionsBase,
3
+ ISchemaObjectExtensionFieldRest,
4
+ ITableProvider,
5
+ TypeTableCellRenderComponent,
6
+ TypeTableCellRenderComponentProvider,
7
+ } from 'zova-module-a-openapi';
8
+
9
+ import { celEnvBase, isNilOrEmptyString } from '@cabloy/utils';
2
10
  import { CellContext, createColumnHelper, getCoreRowModel, TableOptionsWithReactiveData } from '@tanstack/vue-table';
3
11
  import { SchemaObject } from 'openapi3-ts/oas31';
4
12
  import { VNode } from 'vue';
5
- import { appResource, cast, deepEqual, deepExtend, objectAssignReactive, UseScope } from 'zova';
13
+ import { appResource, cast, deepEqual, deepExtend, objectAssignReactive, Use } from 'zova';
6
14
  import { isJsxComponent, ZovaJsx } from 'zova-jsx';
7
15
  import { Controller } from 'zova-module-a-bean';
8
- import {
9
- renderTableColumnTopPropsSystem,
10
- ScopeModuleAOpenapi,
11
- TypeTableCellRenderComponent,
12
- TypeTableCellRenderComponentProvider,
13
- } from 'zova-module-a-openapi';
16
+ import { BeanResourceProviders } from 'zova-module-a-openapi';
17
+
18
+ import type { ITableMeta, TypeColumn, TypeTable, TypeTableGetColumns } from '../../types/table.js';
19
+ import type { IDecoratorTableCellOptions, IJsxRenderContextTableCell, ITableCellRender } from '../../types/tableCell.js';
14
20
 
15
21
  import { BeanControllerTableBase } from '../../lib/beanControllerTableBase.js';
16
- import { ITableProvider } from '../../types/providers.js';
17
- import { ITableMeta, TypeColumn, TypeTable, TypeTableGetColumnsNext } from '../../types/table.js';
18
- import { IDecoratorTableCellOptions, IJsxRenderContextTableCell, ITableCellRender } from '../../types/tableCell.js';
19
22
  import {
20
- constColumnProps,
21
- IJsxRenderContextTableColumn,
22
- ITableCellRenderColumnProps,
23
- ITableCellScope,
24
- ITableColumnScope,
25
- ITableScope,
26
- TypeTableCellRender,
23
+ ITableCellRenderColumnOptions,
24
+ type IJsxRenderContextTableColumn,
25
+ type ITableCellRenderColumnProps,
26
+ type ITableCellScope,
27
+ type ITableColumnScope,
28
+ type ITableScope,
29
+ type TypeTableCellRender,
27
30
  } from '../../types/tableColumn.js';
28
31
 
29
32
  export interface ControllerTableProps<TData extends {} = {}> {
@@ -31,7 +34,7 @@ export interface ControllerTableProps<TData extends {} = {}> {
31
34
  schema?: SchemaObject;
32
35
  tableProvider?: ITableProvider;
33
36
  tableScope?: ITableScope;
34
- getColumns?: (next: TypeTableGetColumnsNext<TData>, table: ControllerTable<TData>) => Promise<TypeColumn<TData>[]>;
37
+ getColumns?: TypeTableGetColumns<TData>;
35
38
  slotDefault?: (table: ControllerTable<TData>) => VNode;
36
39
  }
37
40
 
@@ -47,35 +50,28 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
47
50
  zovaJsx: ZovaJsx;
48
51
  columnCelEnv: typeof celEnvBase;
49
52
 
50
- @UseScope()
51
- $$scopeModuleAOpenapi: ScopeModuleAOpenapi;
53
+ @Use()
54
+ $$beanResourceProviders: BeanResourceProviders;
52
55
 
53
56
  protected async __init__() {
54
57
  this.bean._setBean('$$table', this);
55
58
  this.tableProvider = this.$useComputed(() => {
56
- return deepExtend(
57
- {},
58
- this.$$scopeModuleAOpenapi.config.resourceMeta.provider,
59
- this.$$scopeModuleAOpenapi.config.resourceMeta.table?.provider,
60
- this.$props.tableProvider,
61
- );
59
+ const tableProvider = this.$$beanResourceProviders.tableProvider;
60
+ return this.$props.tableProvider ? deepExtend({}, tableProvider, this.$props.tableProvider) : tableProvider;
62
61
  });
63
62
  // jsx
64
63
  this.columnCelEnv = this._getColumnCelEnv();
65
64
  this.zovaJsx = this.app.bean._newBeanSimple(ZovaJsx, false, this.tableProvider.components, this.tableProvider.actions, this.columnCelEnv);
66
65
  // properties
67
66
  this._createProperties();
68
- // tableMeta
69
- this.tableMeta = await this._createTableMeta();
70
- // columns
71
- this.columns = await this._createColumns();
67
+ // tableMeta/columns
68
+ await this.refreshMeta();
72
69
  // watch
73
70
  this.$watch(
74
71
  () => this.$props.schema,
75
72
  async (newValue, oldValue) => {
76
73
  if (deepEqual(newValue, oldValue)) return;
77
- this.tableMeta = await this._createTableMeta();
78
- this.columns = await this._createColumns();
74
+ await this.refreshMeta();
79
75
  },
80
76
  );
81
77
  // table
@@ -90,7 +86,13 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
90
86
  return this.$props.data;
91
87
  }
92
88
 
89
+ public async refreshMeta() {
90
+ this.tableMeta = await this._createTableMeta();
91
+ this.columns = await this._createColumns();
92
+ }
93
+
93
94
  private _createTable() {
95
+ // eslint-disable-next-line
94
96
  const self = this;
95
97
  const tableOptions: TableOptionsWithReactiveData<TData> = {
96
98
  getRowId: (row: TData) => cast(row).id,
@@ -110,12 +112,26 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
110
112
  private async _createColumns() {
111
113
  if (!this.properties) return [];
112
114
  if (!this.$props.getColumns) return await this._createColumnsMiddle(this.tableMeta.properties);
113
- return await this.$props.getColumns(async properties => {
114
- return await this._createColumnsMiddle(properties ?? this.tableMeta.properties);
115
- }, this);
115
+ return await this.$props.getColumns(
116
+ async properties => {
117
+ return await this._createColumnsMiddle(properties ?? this.tableMeta.properties);
118
+ },
119
+ async (key: string, render: TypeTableCellRenderComponent): Promise<TypeTableCellRender<TData, any> | undefined> => {
120
+ // columnScope
121
+ const columnScope = this.getColumnScope(key);
122
+ // renderContext
123
+ const jsxRenderContext = this.getColumnJsxRenderContext(columnScope);
124
+ // columnProps
125
+ const { visible, columnProps } = this.getColumnComponentPropsTop(key, columnScope, jsxRenderContext);
126
+ // visible
127
+ if (visible === false) return;
128
+ return await this._createColumnRender(render, columnProps, columnScope, jsxRenderContext);
129
+ },
130
+ this,
131
+ );
116
132
  }
117
133
 
118
- private async _createColumnsMiddle(properties: SchemaObject[]) {
134
+ private async _createColumnsMiddle(properties: SchemaObject[]): Promise<TypeColumn<TData>[]> {
119
135
  const tableMeta = this.tableMeta;
120
136
  const columnHelper = createColumnHelper<TData>();
121
137
  const columns: TypeColumn<TData>[] = [];
@@ -141,7 +157,7 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
141
157
  }
142
158
 
143
159
  private async _createTableMeta() {
144
- const properties: SchemaObject[] = [];
160
+ let properties: SchemaObject[] = [];
145
161
  const renders: Record<string, TypeTableCellRender<TData>> = {};
146
162
  if (!this.properties) return { properties, renders };
147
163
  const promises: Promise<any>[] = [];
@@ -152,16 +168,20 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
152
168
  // renderContext
153
169
  const jsxRenderContext = this.getColumnJsxRenderContext(columnScope);
154
170
  // columnProps
155
- const columnProps = this.getColumnComponentPropsTop(key, columnScope, jsxRenderContext);
171
+ const { visible, render, columnProps } = this.getColumnComponentPropsTop(key, columnScope, jsxRenderContext);
156
172
  // visible
157
- if (columnProps.visible === false) continue;
173
+ if (visible === false) continue;
158
174
  // property
159
175
  properties.push(property);
160
176
  // render
161
- promises.push(this._createColumnRender(columnProps.render, property, columnProps, columnScope));
177
+ promises.push(this._createColumnRender(render, columnProps, columnScope, jsxRenderContext));
162
178
  }
163
- const res = await Promise.all(promises);
164
- properties.forEach((item, index) => (renders[item.key!] = res[index]));
179
+ let res = await Promise.all(promises);
180
+ properties = properties.filter((_item, index) => !!res[index]);
181
+ res = res.filter(item => !!item);
182
+ properties.forEach((item, index) => {
183
+ renders[item.key!] = res[index];
184
+ });
165
185
  return { properties, renders };
166
186
  }
167
187
 
@@ -190,43 +210,82 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
190
210
  };
191
211
  }
192
212
 
193
- public async createColumnRender(key: string, render: TypeTableCellRenderComponent) {
194
- // columnScope
195
- const columnScope = this.getColumnScope(key);
196
- return await this._createColumnRender(render, undefined, undefined, columnScope);
213
+ public async cellRenderPrepare(renders: TypeTableCellRenderComponent | TypeTableCellRenderComponent[]) {
214
+ if (!Array.isArray(renders)) renders = [renders];
215
+ const renderProviders = renders.map(item => this.getRenderProvider(item));
216
+ const promises: Promise<any>[] = renderProviders.map(renderProvider =>
217
+ (async () => {
218
+ if (typeof renderProvider === 'string' && renderProvider.includes('.tableCell.')) {
219
+ return await this.sys.bean._getBean(renderProvider as any, true);
220
+ }
221
+ })(),
222
+ );
223
+ return await Promise.all(promises);
197
224
  }
198
225
 
199
226
  private async _createColumnRender(
200
- render: TypeTableCellRenderComponent,
201
- property: SchemaObject | undefined,
227
+ render: TypeTableCellRenderComponent | undefined,
202
228
  columnProps: ITableCellRenderColumnProps | undefined,
203
229
  columnScope: ITableColumnScope,
204
- ): Promise<TypeTableCellRender<TData, any>> {
230
+ renderContext: IJsxRenderContextTableColumn,
231
+ ): Promise<TypeTableCellRender<TData, any> | undefined> {
205
232
  // renderProvider
206
233
  const renderProvider = this.getRenderProvider(render);
207
234
  // beanInstance
208
235
  let beanInstance: ITableCellRender | undefined;
209
- let onionOptions: IDecoratorTableCellOptions | undefined;
210
236
  if (typeof renderProvider === 'string' && renderProvider.includes('.tableCell.')) {
211
237
  beanInstance = await this.sys.bean._getBean(renderProvider as any, true);
212
238
  const beanOptions = appResource.getBean(renderProvider as any);
213
- onionOptions = beanOptions?.options as IDecoratorTableCellOptions | undefined;
239
+ const onionOptions = beanOptions?.options as IDecoratorTableCellOptions | undefined;
240
+ columnProps = deepExtend({}, onionOptions, columnProps);
241
+ columnProps = this.zovaJsx.renderJsxProps(columnProps as any, {}, columnScope, renderContext) as any;
242
+ if (beanInstance?.checkVisible && !(await beanInstance.checkVisible(columnProps as any, renderContext))) return;
214
243
  }
215
244
  return cellContext => {
216
245
  if (!cellContext) return;
217
- return this._cellRender(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions);
246
+ return this._cellRender(render, columnProps, columnScope, cellContext, renderProvider, beanInstance, undefined, undefined, undefined);
218
247
  };
219
248
  }
220
249
 
250
+ public cellRender(render: TypeTableCellRenderComponent, columnProps: IResourceActionRowOptionsBase, renderContext: IJsxRenderContextTableCell) {
251
+ // render
252
+ const cellScope = renderContext.$celScope;
253
+ // renderProvider
254
+ const renderProvider = this.getRenderProvider(render);
255
+ // beanInstance
256
+ let beanInstance: ITableCellRender | undefined;
257
+ if (typeof renderProvider === 'string' && renderProvider.includes('.tableCell.')) {
258
+ beanInstance = this.sys.bean._getBeanSyncOnly(renderProvider as any);
259
+ const beanOptions = appResource.getBean(renderProvider as any);
260
+ const onionOptions = beanOptions?.options as IDecoratorTableCellOptions | undefined;
261
+ columnProps = deepExtend({}, onionOptions, columnProps);
262
+ columnProps = this.zovaJsx.renderJsxProps(columnProps as any, {}, renderContext.$celScope, renderContext) as any;
263
+ }
264
+ // const cellProps = isJsxComponent(render) ? Object.assign({}, columnProps, cast(render).props) : columnProps;
265
+ const cellProps = columnProps;
266
+ return this._cellRender(
267
+ render,
268
+ columnProps as ITableCellRenderColumnProps,
269
+ undefined,
270
+ renderContext.cellContext,
271
+ renderProvider,
272
+ beanInstance,
273
+ cellProps,
274
+ cellScope,
275
+ renderContext,
276
+ );
277
+ }
278
+
221
279
  private _cellRender(
222
- render: TypeTableCellRenderComponent,
223
- property: SchemaObject | undefined,
280
+ render: TypeTableCellRenderComponent | undefined,
224
281
  columnProps: ITableCellRenderColumnProps | undefined,
225
- columnScope: ITableColumnScope,
282
+ columnScope: ITableColumnScope | undefined,
226
283
  cellContext: CellContext<TData, any>,
227
284
  renderProvider: TypeTableCellRenderComponentProvider,
228
285
  beanInstance: ITableCellRender | undefined,
229
- onionOptions: IDecoratorTableCellOptions | undefined,
286
+ cellProps: any | undefined,
287
+ cellScope: ITableCellScope | undefined,
288
+ jsxRenderContext: IJsxRenderContextTableCell | undefined,
230
289
  ) {
231
290
  return this.zovaJsx.setTransientObject(
232
291
  {
@@ -235,57 +294,67 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
235
294
  },
236
295
  },
237
296
  () => {
238
- return this._cellRenderInner(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions);
297
+ return this._cellRenderInner(
298
+ render,
299
+ columnProps,
300
+ columnScope,
301
+ cellContext,
302
+ renderProvider,
303
+ beanInstance,
304
+ cellProps,
305
+ cellScope,
306
+ jsxRenderContext,
307
+ );
239
308
  },
240
309
  );
241
310
  }
242
311
 
243
312
  private _cellRenderInner(
244
- render: TypeTableCellRenderComponent,
245
- property: SchemaObject | undefined,
313
+ render: TypeTableCellRenderComponent | undefined,
246
314
  columnProps: ITableCellRenderColumnProps | undefined,
247
- columnScope: ITableColumnScope,
315
+ columnScope: ITableColumnScope | undefined,
248
316
  cellContext: CellContext<TData, any>,
249
317
  renderProvider: TypeTableCellRenderComponentProvider,
250
318
  beanInstance: ITableCellRender | undefined,
251
- onionOptions: IDecoratorTableCellOptions | undefined,
319
+ cellProps: any | undefined,
320
+ cellScope: ITableCellScope | undefined,
321
+ jsxRenderContext: IJsxRenderContextTableCell | undefined,
252
322
  ) {
253
323
  // value
254
324
  const value = cellContext.getValue();
325
+ // renderFallbackValue
326
+ const fallbackValue = this.table.options.renderFallbackValue;
255
327
  // cellScope
256
- const cellScope: ITableCellScope = objectAssignReactive({}, columnScope, { value });
257
- // displayValue
258
- let displayValue = property?.rest?.displayValue !== undefined ? this.zovaJsx.evaluateExpression(property?.rest?.displayValue, cellScope) : value;
259
- if (displayValue === undefined || displayValue === null || displayValue === '') {
260
- displayValue = this.table.options.renderFallbackValue;
328
+ if (!cellScope) {
329
+ cellScope = objectAssignReactive({}, columnScope, { value, fallbackValue })!;
261
330
  }
262
- cellScope.displayValue = displayValue;
263
331
  // render: text
264
332
  if (renderProvider === 'text') {
265
- return displayValue;
333
+ return isNilOrEmptyString(value) ? fallbackValue : value;
266
334
  }
267
335
  // renderContext
268
- const jsxRenderContext = this.getCellJsxRenderContext(cellScope, cellContext);
336
+ if (!jsxRenderContext) {
337
+ jsxRenderContext = this.getCellJsxRenderContext(cellScope, cellContext);
338
+ }
269
339
  // beanInstance
270
340
  if (beanInstance) {
271
341
  // jsx: props
272
- let cellProps = isJsxComponent(render)
273
- ? this.zovaJsx.renderJsxProps(cast(render).props, { ...columnProps }, cellScope, jsxRenderContext)
274
- : columnProps;
275
- if (onionOptions) {
276
- cellProps = deepExtend({}, onionOptions, cellProps);
342
+ if (!cellProps) {
343
+ // cellProps = isJsxComponent(render) ? Object.assign({}, columnProps, cast(render).props) : columnProps;
344
+ cellProps = columnProps;
277
345
  }
278
- return beanInstance.render(cellProps ?? {}, jsxRenderContext, () => {
346
+ // const cellProps2 = this.zovaJsx.renderJsxProps(cellProps, {}, cellScope, jsxRenderContext);
347
+ return beanInstance.render(cellProps, jsxRenderContext, () => {
279
348
  const children = isJsxComponent(render) && cast(render).children;
280
349
  if (children && children.length > 0) {
281
350
  return this.zovaJsx.renderJsxChildrenDirect(children, cellScope, jsxRenderContext);
282
351
  } else {
283
- return displayValue;
352
+ return value;
284
353
  }
285
354
  });
286
355
  }
287
356
  // general component
288
- return this.zovaJsx.render(render, {}, cellScope, jsxRenderContext);
357
+ return this.zovaJsx.render(render!, {}, cellScope, jsxRenderContext);
289
358
  }
290
359
 
291
360
  public getColumnProperty(name: string): SchemaObject | undefined {
@@ -312,40 +381,35 @@ export class ControllerTable<TData extends {} = {}> extends BeanControllerTableB
312
381
  });
313
382
  }
314
383
 
315
- public getColumnComponentPropsTop(name: string, celScope: {}, renderContext: {}): ITableCellRenderColumnProps {
316
- const props: any = { [constColumnProps]: true, key: name, name };
384
+ public getColumnComponentPropsTop(name: string, celScope: {}, renderContext: {}): ITableCellRenderColumnOptions {
317
385
  const property = this.getColumnProperty(name);
318
- if (!property) return props;
319
- const rest = property.rest;
320
- if (!rest) return props;
321
- const keys = Object.keys(rest).filter(item => !renderTableColumnTopPropsSystem.includes(item));
322
- if (keys.length === 0) return props;
323
- for (const key of keys) {
324
- const value = rest[key];
325
- let keyValue;
326
- if (key === 'render') {
327
- if (typeof value === 'string') {
328
- keyValue = this.zovaJsx.evaluateExpression(value, celScope);
329
- } else {
330
- keyValue = value;
331
- }
332
- } else {
333
- keyValue = this.zovaJsx.renderJsxOrCel(value, undefined, celScope, renderContext);
334
- }
335
- props[key] = keyValue;
336
- }
337
- return props;
386
+ const rest = property?.rest;
387
+ return this._getColumnComponentPropsTopByRest(rest, name, celScope, renderContext);
338
388
  }
339
389
 
340
- public getRenderFlattern(render: TypeTableCellRenderComponent): TypeTableCellRenderComponent {
341
- return isJsxComponent(render) ? cast(render).type : render;
390
+ private _getColumnComponentPropsTopByRest(
391
+ rest: ISchemaObjectExtensionFieldRest | undefined,
392
+ name: string,
393
+ celScope: {},
394
+ _renderContext: {},
395
+ ): ITableCellRenderColumnOptions {
396
+ const visible = this.zovaJsx.evaluateExpression(rest?.visible, celScope);
397
+ const render = rest?.render as TypeTableCellRenderComponent | undefined;
398
+ const columnProps = Object.assign({ key: name }, cast(rest)?.columnProps);
399
+ return { visible, render, columnProps };
342
400
  }
343
401
 
344
- public getRenderProvider(render: TypeTableCellRenderComponent): TypeTableCellRenderComponentProvider {
345
- let renderProvider = this.getRenderFlattern(render);
346
- if (typeof renderProvider === 'string') {
347
- renderProvider = this.tableProvider.components?.[renderProvider] ?? renderProvider;
402
+ // public getRenderFlattern(render: TypeTableCellRenderComponent): TypeTableCellRenderComponent {
403
+ // return isJsxComponent(render) ? cast(render).type : render;
404
+ // }
405
+
406
+ public getRenderProvider(render: TypeTableCellRenderComponent | undefined): TypeTableCellRenderComponentProvider {
407
+ if (!render) return 'text';
408
+ if (typeof render === 'string') {
409
+ const render2 = this.tableProvider.components?.[render];
410
+ if (!render2) throw new Error(`not found table cell component of: ${render}`);
411
+ return render2;
348
412
  }
349
- return (renderProvider ?? 'text') as TypeTableCellRenderComponentProvider;
413
+ return render;
350
414
  }
351
415
  }
@@ -13,7 +13,10 @@ export class RenderTable extends BeanRenderBase {
13
13
  {table.getFlatHeaders().map(header => {
14
14
  return (
15
15
  <th key={header.id}>
16
- <FlexRender render={header.column.columnDef.header} props={header.getContext()}></FlexRender>
16
+ <FlexRender
17
+ render={header.column.columnDef.header}
18
+ props={header.getContext()}
19
+ ></FlexRender>
17
20
  </th>
18
21
  );
19
22
  })}
@@ -26,7 +29,10 @@ export class RenderTable extends BeanRenderBase {
26
29
  {row.getVisibleCells().map(cell => {
27
30
  return (
28
31
  <td key={cell.id}>
29
- <FlexRender render={cell.column.columnDef.cell} props={cell.getContext()}></FlexRender>
32
+ <FlexRender
33
+ render={cell.column.columnDef.cell}
34
+ props={cell.getContext()}
35
+ ></FlexRender>
30
36
  </td>
31
37
  );
32
38
  })}
@@ -11,4 +11,8 @@ export class BeanControllerPageTableBase extends BeanControllerPageBase {
11
11
  return markRaw(useVueTable(initialOptions));
12
12
  });
13
13
  }
14
+
15
+ public async refreshMeta() {
16
+ throw new Error('should implement refreshMeta');
17
+ }
14
18
  }
@@ -11,4 +11,8 @@ export class BeanControllerTableBase extends BeanControllerBase {
11
11
  return markRaw(useVueTable(initialOptions));
12
12
  });
13
13
  }
14
+
15
+ public async refreshMeta() {
16
+ throw new Error('should implement refreshMeta');
17
+ }
14
18
  }
@@ -1,4 +1,3 @@
1
- export * from './providers.js';
2
1
  export * from './table.js';
3
2
  export * from './tableCell.js';
4
3
  export * from './tableColumn.js';