cabloy 5.1.64 → 5.1.66

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 (173) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/cabloy-docs/.vitepress/config.mjs +1 -1
  3. package/cabloy-docs/backend/crud-workflow.md +33 -0
  4. package/cabloy-docs/backend/master-detail-workflow.md +149 -0
  5. package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
  6. package/cabloy-docs/frontend/cli.md +12 -1
  7. package/cabloy-docs/frontend/command-scene-authoring.md +12 -1
  8. package/cabloy-docs/frontend/component-guide.md +10 -0
  9. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +69 -7
  10. package/cabloy-docs/frontend/table-cell-cookbook.md +10 -0
  11. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +83 -2
  12. package/cabloy-docs/reference/bean-scene-boilerplates.md +9 -4
  13. package/package.json +1 -1
  14. package/vona/packages-cli/cabloy-cli/package.json +1 -1
  15. package/vona/packages-cli/cabloy-cli/src/lib/local.helper.ts +38 -0
  16. package/vona/packages-cli/cli/package.json +1 -1
  17. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoBaseName%>.tsx_ +18 -0
  18. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoMutateName%>.tsx_ +17 -0
  19. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoResItemName%>.tsx_ +60 -0
  20. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoViewName%>.tsx_ +17 -0
  21. package/vona/packages-cli/cli-set-api/package.json +1 -1
  22. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.bean.ts +2 -6
  23. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.module.ts +3 -6
  24. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.suite.ts +1 -1
  25. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.test.ts +2 -6
  26. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.asset.ts +2 -6
  27. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.config.ts +2 -6
  28. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.constant.ts +2 -6
  29. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.error.ts +2 -6
  30. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.lib.ts +2 -6
  31. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.locale.ts +2 -6
  32. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.main.ts +2 -6
  33. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.monkey.ts +2 -6
  34. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.static.ts +2 -6
  35. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.types.ts +2 -6
  36. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crud.ts +2 -6
  37. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crudBasic.ts +2 -6
  38. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crudStart.ts +2 -6
  39. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.masterDetail.ts +699 -0
  40. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.metadata.ts +1 -2
  41. package/vona/packages-cli/cli-set-api/src/lib/beans.ts +2 -0
  42. package/vona/packages-cli/cli-set-api/src/lib/command/tools.masterDetail.ts +78 -0
  43. package/vona/packages-cli/cli-set-api/src/lib/commands.ts +2 -0
  44. package/vona/packages-vona/vona/package.json +1 -1
  45. package/vona/packages-vona/vona-core/package.json +1 -1
  46. package/vona/packages-vona/vona-core/src/lib/mappedClass/type.ts +1 -0
  47. package/vona/packages-vona/vona-core/src/lib/mappedClass/utils.ts +36 -14
  48. package/vona/packages-vona/vona-mock/package.json +1 -1
  49. package/vona/pnpm-lock.yaml +29 -11
  50. package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +1 -7
  51. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +3 -0
  52. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +3 -0
  53. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +8 -2
  54. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordMutate.tsx +1 -15
  55. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordResItem.tsx +27 -8
  56. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordView.tsx +1 -12
  57. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +6 -4
  58. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +3 -6
  59. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +1 -1
  60. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +14 -1
  61. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +14 -1
  62. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +1 -5
  63. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +9 -4
  64. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  65. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +1 -1
  66. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/const/decorator.ts +3 -1
  67. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/schema/makeSchemaLikes.ts +21 -17
  68. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/utils.ts +44 -2
  69. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  70. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +2 -2
  71. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +8 -1
  72. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +32 -16
  73. package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +1 -1
  74. package/vona/src/suite-vendor/a-vona/modules/a-web/src/lib/decorator/bean.ts +26 -5
  75. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  76. package/zova/packages-cli/cli/package.json +3 -3
  77. package/zova/packages-cli/cli-set-front/cli/templates/create/component/boilerplateDetailsActionBulk/controller.tsx_ +31 -0
  78. package/zova/packages-cli/cli-set-front/cli/templates/rest/component.ts +24 -2
  79. package/zova/packages-cli/cli-set-front/cli/templates/rest/render.ts +4 -0
  80. package/zova/packages-cli/cli-set-front/package.json +2 -2
  81. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.bean.ts +2 -6
  82. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.mock.ts +2 -6
  83. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.module.ts +3 -6
  84. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.suite.ts +1 -1
  85. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.asset.ts +2 -6
  86. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.config.ts +2 -6
  87. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.constant.ts +2 -6
  88. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.error.ts +2 -6
  89. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.icon.ts +2 -6
  90. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.lib.ts +2 -6
  91. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.locale.ts +2 -6
  92. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.main.ts +2 -6
  93. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.mainSys.ts +2 -6
  94. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.monkey.ts +2 -6
  95. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.monkeySys.ts +2 -6
  96. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.types.ts +2 -6
  97. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.config.ts +1 -4
  98. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +2 -2
  99. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.anotherRender.ts +2 -6
  100. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.anotherStyle.ts +2 -6
  101. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentEmits.ts +2 -6
  102. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentGeneric.ts +2 -6
  103. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentModel.ts +2 -6
  104. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentProps.ts +2 -6
  105. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentSlots.ts +2 -6
  106. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.firstRender.ts +2 -6
  107. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.firstStyle.ts +2 -6
  108. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.pageParams.ts +2 -6
  109. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.pageQuery.ts +2 -6
  110. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.renameComponent.ts +2 -6
  111. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -2
  112. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreateComponent.ts +2 -6
  113. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreatePage.ts +2 -6
  114. package/zova/packages-zova/zova/package.json +2 -2
  115. package/zova/pnpm-lock.yaml +744 -884
  116. package/zova/src/suite/a-training/modules/training-student/package.json +2 -1
  117. package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +131 -13
  118. package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/config.ts +15 -0
  119. package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +23 -5
  120. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +30 -4
  121. package/zova/src/suite/cabloy-basic/modules/basic-details/package.json +6 -1
  122. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/component/blockForm.ts +31 -0
  123. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/component/blockTable.ts +31 -0
  124. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/component/blockToolbarBulk.ts +31 -0
  125. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/index.ts +204 -9
  126. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/command.delete.tsx +47 -0
  127. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionDelete.tsx +52 -0
  128. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionOperationsRow.tsx +72 -0
  129. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionUpdate.tsx +73 -0
  130. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionView.tsx +64 -0
  131. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.lineNumber.tsx +30 -0
  132. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/actionCreate/controller.tsx +31 -7
  133. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockDetails/controller.tsx +28 -12
  134. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockForm/controller.tsx +53 -0
  135. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockTable/controller.tsx +49 -0
  136. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/{blockDetailsToolbarBulk → blockToolbarBulk}/controller.tsx +6 -4
  137. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/formFieldDetails/controller.tsx +24 -12
  138. package/zova/src/suite/cabloy-basic/modules/basic-details/src/config/locale/en-us.ts +5 -1
  139. package/zova/src/suite/cabloy-basic/modules/basic-details/src/config/locale/zh-cn.ts +5 -1
  140. package/zova/src/suite/cabloy-basic/modules/basic-details/src/index.ts +1 -0
  141. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/index.ts +1 -0
  142. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/utils.ts +12 -0
  143. package/zova/src/suite/cabloy-basic/modules/basic-details/src/service/detail.tsx +172 -0
  144. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/detail.ts +18 -0
  145. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/details.ts +11 -0
  146. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/dialogForm.ts +22 -0
  147. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/index.ts +2 -0
  148. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  149. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx +1 -2
  150. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  151. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/command/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  152. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandBulk/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  153. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandDetailsRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +20 -0
  154. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  155. package/zova/src/suite-vendor/a-zova/modules/a-command/package.json +3 -2
  156. package/zova/src/suite-vendor/a-zova/modules/a-command/src/types/command.ts +2 -0
  157. package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +1 -1
  158. package/zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx +1 -0
  159. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +2 -2
  160. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/lib/schema.ts +20 -4
  161. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/action.ts +2 -1
  162. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/detail.ts +10 -0
  163. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/details.ts +4 -1
  164. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/detailsActionRow.ts +24 -0
  165. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/index.ts +2 -0
  166. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/permissions.ts +4 -0
  167. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/rest.ts +2 -0
  168. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/detailsActionRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +24 -0
  169. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +3 -2
  170. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +5 -3
  171. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  172. package/zova/src/suite-vendor/a-zova/package.json +6 -6
  173. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/component/blockDetailsToolbarBulk.ts +0 -31
@@ -26,6 +26,7 @@ import { CliToolsCrud } from './bean/cli.tools.crud.ts';
26
26
  import { CliToolsCrudBasic } from './bean/cli.tools.crudBasic.ts';
27
27
  import { CliToolsCrudStart } from './bean/cli.tools.crudStart.ts';
28
28
  import { CliToolsDeps } from './bean/cli.tools.deps.ts';
29
+ import { CliToolsMasterDetail } from './bean/cli.tools.masterDetail.ts';
29
30
  import { CliToolsMetadata } from './bean/cli.tools.metadata.ts';
30
31
 
31
32
  export const beans = {
@@ -58,4 +59,5 @@ export const beans = {
58
59
  'tools.crudBasic': CliToolsCrudBasic,
59
60
  'tools.crudStart': CliToolsCrudStart,
60
61
  'tools.crud': CliToolsCrud,
62
+ 'tools.masterDetail': CliToolsMasterDetail,
61
63
  };
@@ -0,0 +1,78 @@
1
+ export default {
2
+ bean: 'tools.masterDetail',
3
+ info: {
4
+ version: '5.0.0',
5
+ title: 'Cli: Tools: Master Detail',
6
+ usage:
7
+ 'npm run vona :tools:masterDetail resourceName -- [--module=] [--detailModule=] [--detailResourceName=] [--relationName=] [--fk=] [--detailMode=aggregate|standalone]',
8
+ },
9
+ options: {
10
+ module: {
11
+ description: 'master module relative name, such as training-student',
12
+ type: 'string',
13
+ },
14
+ detailModule: {
15
+ description: 'detail module relative name, such as training-record',
16
+ type: 'string',
17
+ },
18
+ detailResourceName: {
19
+ description: 'detail resource name',
20
+ type: 'string',
21
+ },
22
+ relationName: {
23
+ description: 'master relation name',
24
+ type: 'string',
25
+ },
26
+ fk: {
27
+ description: 'detail foreign key field name',
28
+ type: 'string',
29
+ },
30
+ detailMode: {
31
+ description: 'detail mode: aggregate or standalone',
32
+ type: 'string',
33
+ },
34
+ },
35
+ groups: {
36
+ default: {
37
+ questions: {
38
+ resourceName: {
39
+ type: 'input',
40
+ message: 'master resourceName',
41
+ initial: {
42
+ expression: 'arg0',
43
+ },
44
+ required: true,
45
+ },
46
+ module: {
47
+ type: 'input',
48
+ message: 'master module relative name (for example training-student)',
49
+ required: true,
50
+ },
51
+ detailModule: {
52
+ type: 'input',
53
+ message: 'detail module relative name (for example training-record)',
54
+ required: true,
55
+ },
56
+ detailResourceName: {
57
+ type: 'input',
58
+ message: 'detail resourceName',
59
+ required: true,
60
+ },
61
+ relationName: {
62
+ type: 'input',
63
+ message: 'master relation name',
64
+ },
65
+ fk: {
66
+ type: 'input',
67
+ message: 'detail foreign key field name',
68
+ },
69
+ detailMode: {
70
+ type: 'input',
71
+ message: 'detail mode (aggregate|standalone)',
72
+ initial: 'aggregate',
73
+ required: true,
74
+ },
75
+ },
76
+ },
77
+ },
78
+ };
@@ -26,6 +26,7 @@ import toolsCrud from './command/tools.crud.ts';
26
26
  import toolsCrudBasic from './command/tools.crudBasic.ts';
27
27
  import toolsCrudStart from './command/tools.crudStart.ts';
28
28
  import toolsDeps from './command/tools.deps.ts';
29
+ import toolsMasterDetail from './command/tools.masterDetail.ts';
29
30
  import toolsMetadata from './command/tools.metadata.ts';
30
31
 
31
32
  export const commands = {
@@ -68,5 +69,6 @@ export const commands = {
68
69
  crudBasic: toolsCrudBasic,
69
70
  crudStart: toolsCrudStart,
70
71
  crud: toolsCrud,
72
+ masterDetail: toolsMasterDetail,
71
73
  },
72
74
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona",
3
- "version": "5.1.49",
3
+ "version": "5.1.53",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "Vona is an intuitive, elegant and powerful Node.js framework for rapidly developing enterprise applications of any size",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-core",
3
- "version": "5.1.23",
3
+ "version": "5.1.24",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona",
6
6
  "keywords": [
@@ -5,5 +5,6 @@ export const SymbolMappedClassMetadataKeys = Symbol('SymbolMappedClassMetakeys')
5
5
  export type MappedClassMetadataKeys = Record<MetadataKey, IMappedClassMetadataOptions | undefined>;
6
6
 
7
7
  export interface IMappedClassMetadataOptions {
8
+ replace?: boolean;
8
9
  partialClass?: Function;
9
10
  }
@@ -81,22 +81,44 @@ export function copyMetadataOfClasses(target: object, sources: object[], transfo
81
81
  setMappedClassMetadataKeys(target, metadataKeys);
82
82
  //
83
83
  for (const metadataKey of Object.getOwnPropertySymbols(metadataKeys)) {
84
- const metadataKeyOptions = metadataKeys[metadataKey];
85
- const rulesNew = {};
86
- for (const source of sources) {
87
- const rules = appMetadata.getMetadata(metadataKey, source);
88
- if (!rules) continue;
89
- if (!transform) {
90
- Object.assign(rulesNew, rules);
91
- } else {
92
- for (const key in rules) {
93
- const ruleNew = transform(rules, key, metadataKeyOptions);
94
- if (ruleNew !== undefined) {
95
- rulesNew[key] = ruleNew;
96
- }
84
+ const metadataKeyOptions: IMappedClassMetadataOptions = metadataKeys[metadataKey];
85
+ if (metadataKeyOptions.replace) {
86
+ _copyMetadataOfClassesReplace(metadataKey, target, sources);
87
+ } else {
88
+ _copyMetadataOfClassesMap(metadataKey, metadataKeyOptions, target, sources, transform);
89
+ }
90
+ }
91
+ }
92
+
93
+ function _copyMetadataOfClassesReplace(metadataKey: symbol, target: object, sources: object[]) {
94
+ let valueNew;
95
+ for (const source of sources) {
96
+ valueNew = appMetadata.getMetadata(metadataKey, source);
97
+ }
98
+ appMetadata.defineMetadata(metadataKey, valueNew, target);
99
+ }
100
+
101
+ function _copyMetadataOfClassesMap(
102
+ metadataKey: symbol,
103
+ metadataKeyOptions: IMappedClassMetadataOptions,
104
+ target: object,
105
+ sources: object[],
106
+ transform?: Function,
107
+ ) {
108
+ const rulesNew = {};
109
+ for (const source of sources) {
110
+ const rules = appMetadata.getMetadata(metadataKey, source);
111
+ if (!rules) continue;
112
+ if (!transform) {
113
+ Object.assign(rulesNew, rules);
114
+ } else {
115
+ for (const key in rules) {
116
+ const ruleNew = transform(rules, key, metadataKeyOptions);
117
+ if (ruleNew !== undefined) {
118
+ rulesNew[key] = ruleNew;
97
119
  }
98
120
  }
99
121
  }
100
- appMetadata.defineMetadata(metadataKey, rulesNew, target);
101
122
  }
123
+ appMetadata.defineMetadata(metadataKey, rulesNew, target);
102
124
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-mock",
3
- "version": "6.1.23",
3
+ "version": "6.1.24",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona mock",
6
6
  "keywords": [
@@ -7418,6 +7418,12 @@ packages:
7418
7418
  zova-module-a-openapi@5.1.34:
7419
7419
  resolution: {integrity: sha512-6Sd+lPURN63tXCOn1FufB6HJYs3OVLQA6lusdnFruq43CT8GDe4kwL8oGAYtKdDJlDBx/++x9Web+40/5Moxpg==}
7420
7420
 
7421
+ zova-module-a-openapi@5.1.35:
7422
+ resolution: {integrity: sha512-DT7KUxOpLAWfCvXkBvE4VPfTv+2zlMEGQuFg5QI00GNaSCEs7fmB4nNWDf6cZRr4OBTXOzYAmfgDoM4q19/V9g==}
7423
+
7424
+ zova-module-a-openapi@5.1.36:
7425
+ resolution: {integrity: sha512-Sm5U1Im3kIumriz6w9xtab9QK2p8atAINIQIiP9Bcu46M2OA7gWDWR/jfdty2/G+nDBOn54+3yxHEWQZ9raCiQ==}
7426
+
7421
7427
  zova-module-a-router@5.1.26:
7422
7428
  resolution: {integrity: sha512-TMNPX62+haeqNk0KejrH6ID5HLdi6CngRC7B1XsnjqKR8E0eQJL1YxxrPkaf4AQQKc9c9BHjRdL6EEZFqintiQ==}
7423
7429
 
@@ -7463,14 +7469,14 @@ packages:
7463
7469
  zova-suite-a-zova@5.1.102:
7464
7470
  resolution: {integrity: sha512-R5HB45pBHN9lZhWRmCuWH0DSMcDb6iBsgCQojxSZNsD8ttSCvWyu2FwNAmCQFguwEuPyZw8ZZndwr/8HAU3IxQ==}
7465
7471
 
7466
- zova-suite-a-zova@5.1.103:
7467
- resolution: {integrity: sha512-8xQLu9mGdTqQlSGl/yzel+NqKpeh9jjL3nf0kphwwm15wzgEy4XjH+s9jLAAit21QekmxgUHArb3j2VmJsrnMw==}
7472
+ zova-suite-a-zova@5.1.105:
7473
+ resolution: {integrity: sha512-34A9uB8A0rPBW6akpYl2nCSzck7jEi+D9PQJwDVx5Ms01sLhzdQk9QIf3Ux3uxoa4nmAnyDEtxKgvPSoUdpgPQ==}
7468
7474
 
7469
7475
  zova@5.1.103:
7470
7476
  resolution: {integrity: sha512-AR+Pk9hozKvB6/R/fZ4WPtKX4I0TJxmHx8Ao8dpLovlXhacYi50dUHOTxUQDavwspkWjMDinNqjQWo2MpAVc9g==}
7471
7477
 
7472
- zova@5.1.104:
7473
- resolution: {integrity: sha512-a+Ib22pFmhO/0AtuFgZnMIdYbxH3I3ppPW14FmHg4xV7/uTofNBuE4BfOGrIuPxXUUlrSllxYUDdJfPaf/Vzmw==}
7478
+ zova@5.1.106:
7479
+ resolution: {integrity: sha512-zRNxKjKZi9yxBpWixQmz/OVdmh4KzZwpGSD1r6fk6q0jrU4JmfJ7VETNlN4PsSPZ3/Bu3Z9MwlmI/nCbNV9cFg==}
7474
7480
 
7475
7481
  zwitch@1.0.5:
7476
7482
  resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
@@ -13036,6 +13042,18 @@ snapshots:
13036
13042
  openapi3-ts: 4.6.0
13037
13043
  typestyle: 2.4.0
13038
13044
 
13045
+ zova-module-a-openapi@5.1.35:
13046
+ dependencies:
13047
+ '@cabloy/json-schema-to-zod': 2.6.4
13048
+ openapi3-ts: 4.6.0
13049
+ typestyle: 2.4.0
13050
+
13051
+ zova-module-a-openapi@5.1.36:
13052
+ dependencies:
13053
+ '@cabloy/json-schema-to-zod': 2.6.4
13054
+ openapi3-ts: 4.6.0
13055
+ typestyle: 2.4.0
13056
+
13039
13057
  zova-module-a-router@5.1.26: {}
13040
13058
 
13041
13059
  zova-module-a-routerstack@5.1.23: {}
@@ -13108,7 +13126,7 @@ snapshots:
13108
13126
  table-identity: link:packages-utils/table-identity
13109
13127
  vue: 3.5.38(typescript@5.9.3)
13110
13128
  zod: '@cabloy/zod@4.3.6'
13111
- zova: 5.1.104(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3))
13129
+ zova: 5.1.106(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3))
13112
13130
  zova-jsx: 1.1.63(typescript@5.9.3)
13113
13131
  zova-module-a-api: 5.1.18
13114
13132
  zova-module-a-bean: 5.1.28
@@ -13118,7 +13136,7 @@ snapshots:
13118
13136
  zova-module-a-icon: 5.1.23
13119
13137
  zova-module-a-interceptor: 5.1.26
13120
13138
  zova-module-a-model: 5.1.27(vue@3.5.38(typescript@5.9.3))
13121
- zova-module-a-openapi: 5.1.34
13139
+ zova-module-a-openapi: 5.1.36
13122
13140
  zova-module-a-router: 5.1.26
13123
13141
  zova-module-a-routertabs: 5.1.29
13124
13142
  zova-module-a-ssr: 5.1.23
@@ -13178,7 +13196,7 @@ snapshots:
13178
13196
  zova-module-a-logger: 5.1.23
13179
13197
  zova-module-a-meta: 5.1.18
13180
13198
  zova-module-a-model: 5.1.27(vue@3.5.38(typescript@5.9.3))
13181
- zova-module-a-openapi: 5.1.34
13199
+ zova-module-a-openapi: 5.1.35
13182
13200
  zova-module-a-router: 5.1.26
13183
13201
  zova-module-a-routerstack: 5.1.23
13184
13202
  zova-module-a-routertabs: 5.1.29
@@ -13196,7 +13214,7 @@ snapshots:
13196
13214
  - typescript
13197
13215
  - vue
13198
13216
 
13199
- zova-suite-a-zova@5.1.103(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3)):
13217
+ zova-suite-a-zova@5.1.105(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3)):
13200
13218
  dependencies:
13201
13219
  zova-module-a-api: 5.1.18
13202
13220
  zova-module-a-app: 5.1.21
@@ -13212,7 +13230,7 @@ snapshots:
13212
13230
  zova-module-a-logger: 5.1.23
13213
13231
  zova-module-a-meta: 5.1.18
13214
13232
  zova-module-a-model: 5.1.27(vue@3.5.38(typescript@5.9.3))
13215
- zova-module-a-openapi: 5.1.34
13233
+ zova-module-a-openapi: 5.1.36
13216
13234
  zova-module-a-router: 5.1.26
13217
13235
  zova-module-a-routerstack: 5.1.23
13218
13236
  zova-module-a-routertabs: 5.1.29
@@ -13241,10 +13259,10 @@ snapshots:
13241
13259
  - typescript
13242
13260
  - vue
13243
13261
 
13244
- zova@5.1.104(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3)):
13262
+ zova@5.1.106(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3)):
13245
13263
  dependencies:
13246
13264
  zova-core: 5.1.57(typescript@5.9.3)
13247
- zova-suite-a-zova: 5.1.103(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3))
13265
+ zova-suite-a-zova: 5.1.105(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3))
13248
13266
  transitivePeerDependencies:
13249
13267
  - '@vue/composition-api'
13250
13268
  - debug
@@ -31,13 +31,7 @@ export class EntityRecord extends EntityBase {
31
31
  @Api.field(v.required(), ZovaRender.visible(false))
32
32
  studentId: TableIdentity;
33
33
 
34
- @Api.field(
35
- v.title($locale('Name')),
36
- v.required(),
37
- v.min(2),
38
- ZovaRender.order(1),
39
- ZovaRender.cell('basic-table:actionView'),
40
- )
34
+ @Api.field(v.title($locale('Name')), v.required(), v.min(2), ZovaRender.order(1))
41
35
  name: string;
42
36
 
43
37
  @Api.field(v.title($locale('Score')), v.optional(), ZovaRender.order(2))
@@ -13,4 +13,7 @@ export default {
13
13
  DescriptionLength: 'Description Length',
14
14
  ForceDelete: 'Force Delete',
15
15
  TrainingRecords: 'Training Records',
16
+ AddTrainingRecord: 'Add Training Record',
17
+ EditTrainingRecord: 'Edit Training Record',
18
+ ViewTrainingRecord: 'View Training Record',
16
19
  };
@@ -13,4 +13,7 @@ export default {
13
13
  DescriptionLength: '描述长度',
14
14
  ForceDelete: '强制删除',
15
15
  TrainingRecords: '培训记录',
16
+ AddTrainingRecord: '添加培训记录',
17
+ EditTrainingRecord: '编辑培训记录',
18
+ ViewTrainingRecord: '查看培训记录',
16
19
  };
@@ -1,12 +1,18 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { $makeMetadata } from 'vona-module-a-openapiutils';
3
4
  import { $Dto } from 'vona-module-a-orm';
4
5
  import { Dto } from 'vona-module-a-web';
5
6
  import { ModelRecord } from 'vona-module-training-record';
7
+ import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
6
8
 
7
9
  export interface IDtoOptionsDetailRecordBase extends IDecoratorDtoOptions {}
8
10
 
9
- @Dto<IDtoOptionsDetailRecordBase>()
11
+ @Dto<IDtoOptionsDetailRecordBase>({
12
+ fields: {
13
+ id: $makeMetadata(ZovaRender.visible(false)),
14
+ },
15
+ })
10
16
  export class DtoDetailRecordBase extends $Dto.get(() => ModelRecord, {
11
- columns: ['id', 'name', 'score', 'description'],
17
+ columns: ['id', 'deleted', 'name', 'score', 'description'],
12
18
  }) {}
@@ -10,21 +10,7 @@ import { DtoDetailRecordBase } from './detailRecordBase.tsx';
10
10
  export interface IDtoOptionsDetailRecordMutate extends IDecoratorDtoOptions {}
11
11
 
12
12
  @Dto<IDtoOptionsDetailRecordMutate>({
13
- blocks: [
14
- ZovaRender.block('basic-pageentry:blockPageEntry', {
15
- blocks: [
16
- ZovaRender.block('basic-pageentry:blockForm'),
17
- ZovaRender.block('basic-pageentry:blockToolbarRow', {
18
- actions: [
19
- ZovaRender.formActionRow('basic-form:actionSubmit', {
20
- permission: { actionInherit: 'update', formScene: ['create', 'edit'] },
21
- }),
22
- ZovaRender.formActionRow('basic-form:actionBack', { permission: { public: true } }),
23
- ],
24
- }),
25
- ],
26
- }),
27
- ],
13
+ blocks: [ZovaRender.block('basic-details:blockForm')],
28
14
  })
29
15
  export class DtoDetailRecordMutate extends $Dto.mutate(() => ModelRecord, {
30
16
  dtoClass: DtoDetailRecordBase,
@@ -1,6 +1,6 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
- import { Api, v } from 'vona-module-a-openapiutils';
3
+ import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
4
  import { $Dto } from 'vona-module-a-orm';
5
5
  import { Dto } from 'vona-module-a-web';
6
6
  import { ModelRecord } from 'vona-module-training-record';
@@ -15,25 +15,44 @@ export interface IDtoOptionsDetailRecordResItem extends IDecoratorDtoOptions {}
15
15
  blocks: [
16
16
  ZovaRender.block('basic-details:blockDetails', {
17
17
  blocks: [
18
- ZovaRender.block('basic-details:blockDetailsToolbarBulk', {
19
- actions: [ZovaRender.tableActionBulk('basic-table:actionCreate')],
18
+ ZovaRender.block('basic-details:blockToolbarBulk', {
19
+ actions: [
20
+ ZovaRender.detailsActionBulk('basic-details:actionCreate', {
21
+ dialogOptions: { title: $locale('AddTrainingRecord') },
22
+ permission: { formScene: ['create', 'edit'] },
23
+ }),
24
+ ],
20
25
  }),
21
- // ZovaRender.block('basic-page:blockTable'),
22
- // ZovaRender.block('basic-page:blockPager'),
26
+ ZovaRender.block('basic-details:blockTable'),
23
27
  ],
24
28
  }),
25
29
  ],
30
+ fields: {
31
+ name: $makeMetadata(
32
+ ZovaRender.cell('basic-details:actionView', {
33
+ dialogOptions: { title: $locale('ViewTrainingRecord') },
34
+ }),
35
+ ),
36
+ },
26
37
  })
27
38
  export class DtoDetailRecordResItem extends $Dto.get(() => ModelRecord, {
28
39
  dtoClass: DtoDetailRecordBase,
29
40
  }) {
41
+ @Api.field(v.title('#'), ZovaRender.order(1, 'core'), ZovaRender.cell('basic-details:lineNumber'))
42
+ _lineNumber?: number;
43
+
30
44
  @Api.field(
31
45
  v.title($locale('Operations')),
32
46
  ZovaRender.order(1, 'max'),
33
- ZovaRender.cell('basic-table:actionOperationsRow', {
47
+ ZovaRender.cell('basic-details:actionOperationsRow', {
34
48
  actions: [
35
- ZovaRender.tableActionRow('basic-table:actionUpdate'),
36
- ZovaRender.tableActionRow('basic-table:actionDelete'),
49
+ ZovaRender.detailsActionRow('basic-details:actionUpdate', {
50
+ dialogOptions: { title: $locale('EditTrainingRecord') },
51
+ permission: { formScene: ['create', 'edit'] },
52
+ }),
53
+ ZovaRender.detailsActionRow('basic-details:actionDelete', {
54
+ permission: { formScene: ['create', 'edit'] },
55
+ }),
37
56
  ],
38
57
  }),
39
58
  )
@@ -10,18 +10,7 @@ import { DtoDetailRecordBase } from './detailRecordBase.tsx';
10
10
  export interface IDtoOptionsDetailRecordView extends IDecoratorDtoOptions {}
11
11
 
12
12
  @Dto<IDtoOptionsDetailRecordView>({
13
- blocks: [
14
- ZovaRender.block('basic-pageentry:blockPageEntry', {
15
- blocks: [
16
- ZovaRender.block('basic-pageentry:blockForm'),
17
- ZovaRender.block('basic-pageentry:blockToolbarRow', {
18
- actions: [
19
- ZovaRender.formActionRow('basic-form:actionBack', { permission: { public: true } }),
20
- ],
21
- }),
22
- ],
23
- }),
24
- ],
13
+ blocks: [ZovaRender.block('basic-details:blockForm')],
25
14
  })
26
15
  export class DtoDetailRecordView extends $Dto.get(() => ModelRecord, {
27
16
  dtoClass: DtoDetailRecordBase,
@@ -1,6 +1,6 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
- import { $makeSchema, v } from 'vona-module-a-openapiutils';
3
+ import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
4
  import { $Dto } from 'vona-module-a-orm';
5
5
  import { Dto } from 'vona-module-a-web';
6
6
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
@@ -29,15 +29,17 @@ export interface IDtoOptionsStudentCreate extends IDecoratorDtoOptions {}
29
29
  }),
30
30
  ],
31
31
  fields: {
32
- trainingRecords: $makeSchema(
32
+ trainingRecords: $makeMetadata(
33
33
  v.title($locale('TrainingRecords')),
34
34
  ZovaRender.order(5),
35
35
  ZovaRender.field('basic-details:formFieldDetails'),
36
36
  v.optional(),
37
- v.array(DtoDetailRecordResItem),
38
37
  ),
39
38
  },
40
39
  })
41
40
  export class DtoStudentCreate extends $Dto.create(() => ModelStudent, {
42
41
  include: { trainingRecords: { dtoClass: DtoDetailRecordMutate } },
43
- }) {}
42
+ }) {
43
+ @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordResItem))
44
+ _trainingRecords?: DtoDetailRecordResItem[];
45
+ }
@@ -7,7 +7,7 @@ import z from 'zod';
7
7
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
8
8
 
9
9
  import { $locale } from '../.metadata/locales.ts';
10
- import { EntityStudent, studentLevelItems, studentLevelSchema } from '../entity/student.tsx';
10
+ import { EntityStudent, studentLevelItems } from '../entity/student.tsx';
11
11
 
12
12
  export interface IDtoOptionsStudentSelectReq extends IDecoratorDtoOptions {}
13
13
 
@@ -17,17 +17,14 @@ export interface IDtoOptionsStudentSelectReq extends IDecoratorDtoOptions {}
17
17
  name: $makeSchema(v.optional(), z.string()),
18
18
  level: $makeSchema(
19
19
  v.title($locale('Level')),
20
- v.optional(),
21
20
  ZovaRender.field('basic-select:formFieldSelect', {
22
21
  items: studentLevelItems,
23
22
  // Keep placeholder undefined so the filter select gets a real empty option
24
23
  // instead of a disabled placeholder, allowing users to clear the filter.
25
24
  placeholder: undefined,
26
25
  }),
27
- z.preprocess(value => {
28
- if (typeof value === 'string') return Number.parseInt(value);
29
- return value;
30
- }, studentLevelSchema),
26
+ v.optional(),
27
+ z.number(),
31
28
  ),
32
29
  createdAt: $makeSchema(
33
30
  ZovaRender.field('basic-date:formFieldDateRange'),
@@ -26,7 +26,7 @@ export class DtoStudentSummary {
26
26
  mobile: string;
27
27
 
28
28
  @Api.field(v.title($locale('Level')))
29
- level: 1 | 2 | 3;
29
+ level: number;
30
30
 
31
31
  @Api.field(v.title($locale('LevelTitle')))
32
32
  levelTitle: string;
@@ -1,11 +1,14 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
3
4
  import { $Dto } from 'vona-module-a-orm';
4
5
  import { Dto } from 'vona-module-a-web';
5
6
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
6
7
 
8
+ import { $locale } from '../.metadata/locales.ts';
7
9
  import { ModelStudent } from '../model/student.ts';
8
10
  import { DtoDetailRecordMutate } from './detailRecordMutate.tsx';
11
+ import { DtoDetailRecordResItem } from './detailRecordResItem.tsx';
9
12
 
10
13
  export interface IDtoOptionsStudentUpdate extends IDecoratorDtoOptions {}
11
14
 
@@ -25,7 +28,17 @@ export interface IDtoOptionsStudentUpdate extends IDecoratorDtoOptions {}
25
28
  ],
26
29
  }),
27
30
  ],
31
+ fields: {
32
+ trainingRecords: $makeMetadata(
33
+ v.title($locale('TrainingRecords')),
34
+ ZovaRender.order(5),
35
+ ZovaRender.field('basic-details:formFieldDetails'),
36
+ ),
37
+ },
28
38
  })
29
39
  export class DtoStudentUpdate extends $Dto.update(() => ModelStudent, {
30
40
  include: { trainingRecords: { dtoClass: DtoDetailRecordMutate } },
31
- }) {}
41
+ }) {
42
+ @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordResItem))
43
+ _trainingRecords?: DtoDetailRecordResItem[];
44
+ }
@@ -1,10 +1,13 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
3
4
  import { $Dto } from 'vona-module-a-orm';
4
5
  import { Dto } from 'vona-module-a-web';
5
6
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
6
7
 
8
+ import { $locale } from '../.metadata/locales.ts';
7
9
  import { ModelStudent } from '../model/student.ts';
10
+ import { DtoDetailRecordResItem } from './detailRecordResItem.tsx';
8
11
  import { DtoDetailRecordView } from './detailRecordView.tsx';
9
12
 
10
13
  export interface IDtoOptionsStudentView extends IDecoratorDtoOptions {}
@@ -22,7 +25,17 @@ export interface IDtoOptionsStudentView extends IDecoratorDtoOptions {}
22
25
  ],
23
26
  }),
24
27
  ],
28
+ fields: {
29
+ trainingRecords: $makeMetadata(
30
+ v.title($locale('TrainingRecords')),
31
+ ZovaRender.order(5),
32
+ ZovaRender.field('basic-details:formFieldDetails'),
33
+ ),
34
+ },
25
35
  })
26
36
  export class DtoStudentView extends $Dto.get(() => ModelStudent, {
27
37
  include: { trainingRecords: { dtoClass: DtoDetailRecordView } },
28
- }) {}
38
+ }) {
39
+ @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordResItem))
40
+ _trainingRecords?: DtoDetailRecordResItem[];
41
+ }
@@ -2,13 +2,10 @@ import type { IDecoratorEntityOptions } from 'vona-module-a-orm';
2
2
 
3
3
  import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
4
  import { Entity, EntityBase } from 'vona-module-a-orm';
5
- import z from 'zod';
6
5
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
7
6
 
8
7
  import { $locale } from '../.metadata/locales.ts';
9
8
 
10
- export const studentLevelSchema = z.union([z.literal(1), z.literal(2), z.literal(3)]);
11
-
12
9
  export const studentLevelItems = [
13
10
  { value: 1, title: $locale('LevelBeginner') },
14
11
  { value: 2, title: $locale('LevelIntermediate') },
@@ -78,7 +75,6 @@ export class EntityStudent extends EntityBase {
78
75
  }),
79
76
  // Tutorial 4 custom table cell renderer example used by the current implementation.
80
77
  ZovaRender.cell('training-student:level', { items: studentLevelItems }),
81
- studentLevelSchema,
82
78
  )
83
- level: 1 | 2 | 3;
79
+ level: number;
84
80
  }