@acorex/platform-generator 20.3.0-next.9 → 20.4.1

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 (132) hide show
  1. package/package.json +2 -2
  2. package/src/generators/app-module/files/src/app/app.config.ts.template +63 -13
  3. package/src/generators/app-module/files/src/app/basic-interceptor.interceptor.ts.template +4 -4
  4. package/src/generators/app-module/files/src/app/modules/auth/auth-root.module.ts.template +13 -34
  5. package/src/generators/app-module/files/src/app/{app-version.provider.ts.template → modules/common/app-version.provider.ts.template} +4 -2
  6. package/src/generators/app-module/files/src/app/modules/common/default-settings.providers.ts.template +38 -0
  7. package/src/generators/app-module/files/src/app/modules/common/translation-root.module.ts.template +2 -1
  8. package/src/generators/app-module/files/src/app/modules/layout/entity.loader.ts.template +26 -9
  9. package/src/generators/app-module/files/src/app/modules/layout/layout-root.module.ts.template +15 -17
  10. package/src/generators/app-module/files/src/app/modules/layout/menu.provider.ts.template +1 -15
  11. package/src/generators/app-module/files/src/app/modules/layout/theme-palette.provider.ts.template +57 -0
  12. package/src/generators/app-module/files/src/app/modules/root/const.ts.template +25 -5
  13. package/src/generators/app-module/files/src/app/modules/root/menu.keys.ts.template +9 -0
  14. package/src/generators/app-module/files/src/app/modules/root/menu.provider.ts.template +61 -0
  15. package/src/generators/app-module/files/src/app/modules/root/mock.data.ts.template +13 -37
  16. package/src/generators/app-module/files/src/app/modules/root/permission-definition.provider.ts.template +51 -0
  17. package/src/generators/app-module/files/src/app/modules/root/permission.keys.ts.template +17 -0
  18. package/src/generators/app-module/files/src/app/modules/root/root.module.ts.template +39 -10
  19. package/src/generators/app-module/files/src/app/modules/root/sample/index.ts.template +9 -0
  20. package/src/generators/app-module/files/src/app/modules/root/sample/sample.entity.ts.template +146 -225
  21. package/src/generators/app-module/files/src/app/modules/root/sample/sample.module.ts.template +13 -5
  22. package/src/generators/app-module/files/src/app/modules/root/sample/sample.service.ts.template +26 -6
  23. package/src/generators/app-module/files/src/app/modules/root/sample/sample.types.ts.template +49 -11
  24. package/src/generators/app-module/files/src/app/modules/root/search-command.provider.ts.template +37 -0
  25. package/src/generators/app-module/files/src/assets/i18n/en-US/acorex.json +285 -0
  26. package/src/generators/app-module/files/src/assets/i18n/en-US/activity-log.json +31 -0
  27. package/src/generators/app-module/files/src/assets/i18n/en-US/application-management.json +112 -0
  28. package/src/generators/app-module/files/src/assets/i18n/en-US/auth.json +38 -3
  29. package/src/generators/app-module/files/src/assets/i18n/en-US/calendar-management.json +170 -0
  30. package/src/generators/app-module/files/src/assets/i18n/en-US/contact-management.json +182 -0
  31. package/src/generators/app-module/files/src/assets/i18n/en-US/content-management.json +23 -0
  32. package/src/generators/app-module/files/src/assets/i18n/en-US/conversation.json +120 -0
  33. package/src/generators/app-module/files/src/assets/i18n/en-US/customer-management.json +130 -0
  34. package/src/generators/app-module/files/src/assets/i18n/en-US/dashboard.json +231 -5
  35. package/src/generators/app-module/files/src/assets/i18n/en-US/data-management.json +93 -0
  36. package/src/generators/app-module/files/src/assets/i18n/en-US/document-management.json +321 -22
  37. package/src/generators/app-module/files/src/assets/i18n/en-US/dynamic-form-designer.json +58 -0
  38. package/src/generators/app-module/files/src/assets/i18n/en-US/extra-properties.json +39 -0
  39. package/src/generators/app-module/files/src/assets/i18n/en-US/form-template-management.json +61 -0
  40. package/src/generators/app-module/files/src/assets/i18n/en-US/general-old.json +800 -0
  41. package/src/generators/app-module/files/src/assets/i18n/en-US/general.json +993 -4
  42. package/src/generators/app-module/files/src/assets/i18n/en-US/help-desk.json +55 -0
  43. package/src/generators/app-module/files/src/assets/i18n/en-US/human-capital-management.json +144 -0
  44. package/src/generators/app-module/files/src/assets/i18n/en-US/layout-designer.json +19 -0
  45. package/src/generators/app-module/files/src/assets/i18n/en-US/locale-management.json +30 -0
  46. package/src/generators/app-module/files/src/assets/i18n/en-US/location-management.json +46 -0
  47. package/src/generators/app-module/files/src/assets/i18n/en-US/lock-system.json +40 -0
  48. package/src/generators/app-module/files/src/assets/i18n/en-US/log-management.json +29 -21
  49. package/src/generators/app-module/files/src/assets/i18n/en-US/meeting-management.json +69 -0
  50. package/src/generators/app-module/files/src/assets/i18n/en-US/module.json.template +45 -0
  51. package/src/generators/app-module/files/src/assets/i18n/en-US/notification-management.json +37 -0
  52. package/src/generators/app-module/files/src/assets/i18n/en-US/organization-management.json +59 -138
  53. package/src/generators/app-module/files/src/assets/i18n/en-US/party-management.json +300 -0
  54. package/src/generators/app-module/files/src/assets/i18n/en-US/platform-management.json +20 -79
  55. package/src/generators/app-module/files/src/assets/i18n/en-US/project-management.json +157 -0
  56. package/src/generators/app-module/files/src/assets/i18n/en-US/questionnaire.json +118 -0
  57. package/src/generators/app-module/files/src/assets/i18n/en-US/regional.json +41 -8
  58. package/src/generators/app-module/files/src/assets/i18n/en-US/report-management.json +76 -0
  59. package/src/generators/app-module/files/src/assets/i18n/en-US/security-management.json +42 -3
  60. package/src/generators/app-module/files/src/assets/i18n/en-US/settings.json +17 -0
  61. package/src/generators/app-module/files/src/assets/i18n/en-US/task-management.json +151 -0
  62. package/src/generators/app-module/files/src/assets/i18n/en-US/text-template-management.json +3 -1
  63. package/src/generators/app-module/files/src/assets/i18n/en-US/training-management.json +50 -0
  64. package/src/generators/app-module/files/src/assets/i18n/en-US/workflow-management.json +21 -0
  65. package/src/generators/app-module/files/src/assets/i18n/fa-IR/acorex.json +285 -0
  66. package/src/generators/app-module/files/src/assets/i18n/fa-IR/activity-log.json +31 -0
  67. package/src/generators/app-module/files/src/assets/i18n/fa-IR/application-management.json +112 -0
  68. package/src/generators/app-module/files/src/assets/i18n/fa-IR/auth.json +74 -38
  69. package/src/generators/app-module/files/src/assets/i18n/fa-IR/calendar-management.json +170 -0
  70. package/src/generators/app-module/files/src/assets/i18n/fa-IR/contact-management.json +182 -0
  71. package/src/generators/app-module/files/src/assets/i18n/fa-IR/content-management.json +23 -0
  72. package/src/generators/app-module/files/src/assets/i18n/fa-IR/conversation.json +80 -0
  73. package/src/generators/app-module/files/src/assets/i18n/fa-IR/customer-management.json +130 -0
  74. package/src/generators/app-module/files/src/assets/i18n/fa-IR/dashboard.json +231 -5
  75. package/src/generators/app-module/files/src/assets/i18n/fa-IR/data-management.json +93 -0
  76. package/src/generators/app-module/files/src/assets/i18n/fa-IR/document-management.json +333 -29
  77. package/src/generators/app-module/files/src/assets/i18n/fa-IR/dynamic-form-designer.json +39 -0
  78. package/src/generators/app-module/files/src/assets/i18n/fa-IR/extra-properties.json +39 -0
  79. package/src/generators/app-module/files/src/assets/i18n/fa-IR/form-template-management.json +82 -21
  80. package/src/generators/app-module/files/src/assets/i18n/fa-IR/general-old.json +800 -0
  81. package/src/generators/app-module/files/src/assets/i18n/fa-IR/general.json +987 -9
  82. package/src/generators/app-module/files/src/assets/i18n/fa-IR/global-search.json +5 -5
  83. package/src/generators/app-module/files/src/assets/i18n/fa-IR/help-desk.json +55 -0
  84. package/src/generators/app-module/files/src/assets/i18n/fa-IR/human-capital-management.json +144 -0
  85. package/src/generators/app-module/files/src/assets/i18n/fa-IR/layout-designer.json +19 -0
  86. package/src/generators/app-module/files/src/assets/i18n/fa-IR/layout.json +14 -14
  87. package/src/generators/app-module/files/src/assets/i18n/fa-IR/locale-management.json +30 -0
  88. package/src/generators/app-module/files/src/assets/i18n/fa-IR/location-management.json +46 -0
  89. package/src/generators/app-module/files/src/assets/i18n/fa-IR/lock-system.json +40 -0
  90. package/src/generators/app-module/files/src/assets/i18n/fa-IR/log-management.json +99 -47
  91. package/src/generators/app-module/files/src/assets/i18n/fa-IR/meeting-management.json +69 -0
  92. package/src/generators/app-module/files/src/assets/i18n/fa-IR/module.json.template +45 -0
  93. package/src/generators/app-module/files/src/assets/i18n/fa-IR/notification-management.json +59 -22
  94. package/src/generators/app-module/files/src/assets/i18n/fa-IR/organization-management.json +74 -152
  95. package/src/generators/app-module/files/src/assets/i18n/fa-IR/party-management.json +300 -0
  96. package/src/generators/app-module/files/src/assets/i18n/fa-IR/platform-management.json +38 -93
  97. package/src/generators/app-module/files/src/assets/i18n/fa-IR/project-management.json +157 -0
  98. package/src/generators/app-module/files/src/assets/i18n/fa-IR/questionnaire.json +118 -0
  99. package/src/generators/app-module/files/src/assets/i18n/fa-IR/regional.json +71 -38
  100. package/src/generators/app-module/files/src/assets/i18n/fa-IR/report-management.json +76 -0
  101. package/src/generators/app-module/files/src/assets/i18n/fa-IR/scheduler-job-management.json +4 -4
  102. package/src/generators/app-module/files/src/assets/i18n/fa-IR/security-management.json +43 -4
  103. package/src/generators/app-module/files/src/assets/i18n/fa-IR/settings.json +33 -16
  104. package/src/generators/app-module/files/src/assets/i18n/fa-IR/task-management.json +151 -0
  105. package/src/generators/app-module/files/src/assets/i18n/fa-IR/text-template-management.json +8 -5
  106. package/src/generators/app-module/files/src/assets/i18n/fa-IR/training-management.json +50 -0
  107. package/src/generators/app-module/files/src/assets/i18n/fa-IR/workflow-management.json +20 -0
  108. package/src/generators/app-module/files/src/environments/environment.dev.ts.template +1 -0
  109. package/src/generators/app-module/files/src/environments/environment.ts.template +1 -0
  110. package/src/generators/app-module/generator.js +3 -0
  111. package/src/generators/app-module/generator.js.map +1 -1
  112. package/src/generators/create-module-entity/files/__entityFileName__.entity.ts__tmpl__ +1 -1
  113. package/src/generators/create-tag-entity/files/tag-__entityFileName__.entity.ts__tmpl__ +1 -1
  114. package/src/generators/create-widget/files/__fileName__-widget-column.component.ts__tmpl__ +1 -1
  115. package/src/generators/create-widget/files/__fileName__-widget-edit.component.ts__tmpl__ +1 -1
  116. package/src/generators/create-widget/files/__fileName__-widget-filter.component.ts__tmpl__ +1 -1
  117. package/src/generators/create-widget/files/__fileName__-widget-print.component.ts__tmpl__ +1 -1
  118. package/src/generators/create-widget/files/__fileName__-widget-view.component.ts__tmpl__ +1 -1
  119. package/src/generators/create-widget/files/__fileName__-widget.config.ts__tmpl__ +2 -2
  120. package/src/generators/app-module/files/src/app/app.config.api.ts.template +0 -105
  121. package/src/generators/app-module/files/src/app/app.module.api.ts.template +0 -108
  122. package/src/generators/app-module/files/src/app/app.module.ts.template +0 -113
  123. package/src/generators/app-module/files/src/app/modules/auth/application.loader.ts.template +0 -34
  124. package/src/generators/app-module/files/src/app/modules/auth/auth.strategy.ts.template +0 -93
  125. package/src/generators/app-module/files/src/app/modules/auth/feature.loader.ts.template +0 -17
  126. package/src/generators/app-module/files/src/app/modules/auth/permission.loader.ts.template +0 -20
  127. package/src/generators/app-module/files/src/app/modules/auth/tenant.loader.ts.template +0 -26
  128. package/src/generators/app-module/files/src/app/modules/root/sample/sample.component.html.template +0 -15
  129. package/src/generators/app-module/files/src/app/modules/root/sample/sample.component.scss.template +0 -10
  130. package/src/generators/app-module/files/src/app/modules/root/sample/sample.component.ts.template +0 -20
  131. package/src/generators/app-module/files/src/assets/i18n/en-US/vehicle-management.json +0 -146
  132. package/src/generators/app-module/files/src/assets/i18n/fa-IR/vehicle-management.json +0 -144
@@ -1,50 +1,26 @@
1
+ //#region ---- Imports ----
2
+
1
3
  import { AXPDataGenerator } from '@acorex/platform/core';
2
4
 
3
- export const USERS = Array.from({ length: 20 }).map((_, i) => {
5
+ //#endregion
6
+
7
+ //#region ---- Sample Mock Data ----
8
+
9
+ /**
10
+ * Mock data for Sample entity (20 items)
11
+ * Used by the mock service for testing and development
12
+ */
13
+ export const SAMPLE_DATA = Array.from({ length: 20 }).map((_, i) => {
4
14
  const firstName = AXPDataGenerator.firstName();
5
15
  const lastName = AXPDataGenerator.lastName();
6
16
  return {
7
17
  id: AXPDataGenerator.uuid(),
8
18
  firstname: firstName,
9
19
  lastname: lastName,
10
- phone: AXPDataGenerator.phone(),
11
20
  email: AXPDataGenerator.email(firstName, lastName),
21
+ phone: AXPDataGenerator.phone(),
12
22
  address: AXPDataGenerator.address(),
13
23
  };
14
24
  });
15
25
 
16
- export interface SampleEntity {
17
- id: string;
18
- name: string;
19
- description: string;
20
- isActive: boolean;
21
- createdDate: Date;
22
- category: string;
23
- }
24
-
25
- export const sampleData: SampleEntity[] = [
26
- {
27
- id: '1',
28
- name: 'Sample Item 1',
29
- description: 'This is a sample item for testing',
30
- isActive: true,
31
- createdDate: new Date(2024, 0, 15),
32
- category: 'Category A'
33
- },
34
- {
35
- id: '2',
36
- name: 'Sample Item 2',
37
- description: 'Another sample item with different data',
38
- isActive: false,
39
- createdDate: new Date(2024, 1, 20),
40
- category: 'Category B'
41
- },
42
- {
43
- id: '3',
44
- name: 'Sample Item 3',
45
- description: 'Third sample item for demonstration',
46
- isActive: true,
47
- createdDate: new Date(2024, 2, 5),
48
- category: 'Category A'
49
- }
50
- ];
26
+ //#endregion
@@ -0,0 +1,51 @@
1
+ //#region ---- Imports ----
2
+
3
+ import { AXTranslationService } from '@acorex/core/translation';
4
+ import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';
5
+ import { Injector } from '@angular/core';
6
+ import { <%= className %>ModulePermissionsKeys } from './permission.keys';
7
+
8
+ //#endregion
9
+
10
+ //#region ---- Permission Definition Provider ----
11
+
12
+ export class <%= className %>ModulePermissionDefinitionProvider implements AXPPermissionDefinitionProvider {
13
+
14
+ //#region ---- Services ----
15
+
16
+ private readonly translateService = this.injector.get(AXTranslationService);
17
+
18
+ //#endregion
19
+
20
+ //#region ---- Constructor ----
21
+
22
+ constructor(private injector: Injector) {}
23
+
24
+ //#endregion
25
+
26
+ //#region ---- Define Method ----
27
+
28
+ async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {
29
+ const trans = async (key: string) =>
30
+ await this.translateService.translateAsync(`permissions.<%= name %>-module.${key}`, {
31
+ scope: '<%= name %>-module',
32
+ });
33
+
34
+ const keys = <%= className %>ModulePermissionsKeys;
35
+
36
+ context
37
+ .addGroup(keys.Module.Management, await trans('manage.title'))
38
+ //
39
+ .addPermission(keys.Sample.Management, await trans('sample.manage.title'))
40
+ .addChild(keys.Sample.View, await trans('sample.view.title'))
41
+ .addChild(keys.Sample.Edit, await trans('sample.edit.title'))
42
+ .addChild(keys.Sample.Delete, await trans('sample.delete.title'))
43
+ .addChild(keys.Sample.Create, await trans('sample.create.title'))
44
+ .endPermission();
45
+ }
46
+
47
+ //#endregion
48
+ }
49
+
50
+ //#endregion
51
+
@@ -0,0 +1,17 @@
1
+ //#region ---- Permission Keys ----
2
+
3
+ export const <%= className %>ModulePermissionsKeys = {
4
+ Module: {
5
+ Management: '<%= name %>-module:manage',
6
+ },
7
+ Sample: {
8
+ Management: '<%= name %>-module:sample:manage',
9
+ View: '<%= name %>-module:sample:view',
10
+ Edit: '<%= name %>-module:sample:edit',
11
+ Delete: '<%= name %>-module:sample:delete',
12
+ Create: '<%= name %>-module:sample:create',
13
+ },
14
+ };
15
+
16
+ //#endregion
17
+
@@ -1,9 +1,17 @@
1
- import { AXPAuthGuard } from '@acorex/platform/auth';
2
- import { AXPWidgetRegistryService } from '@acorex/platform/layout/builder';
1
+ //#region ---- Imports ----
2
+
3
+ import { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
4
+ import { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';
3
5
  import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
4
6
  import { CommonModule } from '@angular/common';
5
- import { inject, NgModule } from '@angular/core';
7
+ import { inject, Injector, NgModule } from '@angular/core';
6
8
  import { RouterModule, Routes } from '@angular/router';
9
+ import { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
10
+ import { AXMSampleEntityModule } from './sample/sample.module';
11
+ import { <%= className %>ModuleMenuProvider } from './menu.provider';
12
+ import { <%= className %>ModuleSearchCommandProvider } from './search-command.provider';
13
+
14
+ //#endregion
7
15
 
8
16
  const routes: Routes = [
9
17
  {
@@ -15,25 +23,46 @@ const routes: Routes = [
15
23
  path: 'home',
16
24
  loadComponent: () => import('./home/home.page').then((c) => c.<%= className %>HomePage),
17
25
  },
18
- {
19
- canActivate: [AXPAuthGuard],
20
- path: 'sample',
21
- loadComponent: () => import('./sample/sample.component').then((c) => c.SampleComponent),
22
- },
23
26
  ],
24
27
  },
25
28
  ];
26
29
 
30
+ //#region ---- Module Definition ----
31
+
27
32
  @NgModule({
28
33
  imports: [
29
34
  CommonModule,
30
- RouterModule.forChild(routes)
35
+ RouterModule.forChild(routes),
36
+ //
37
+ AXMSampleEntityModule,
31
38
  ],
32
39
  exports: [RouterModule],
33
- providers: [],
40
+ providers: [
41
+ {
42
+ provide: AXP_MENU_PROVIDER,
43
+ useClass: <%= className %>ModuleMenuProvider,
44
+ multi: true,
45
+ },
46
+ {
47
+ provide: AXP_PERMISSION_DEFINITION_PROVIDER,
48
+ useFactory: async () => {
49
+ const injector = inject(Injector);
50
+ const provider = (await import('./permission-definition.provider')).<%= className %>ModulePermissionDefinitionProvider;
51
+ return new provider(injector);
52
+ },
53
+ multi: true,
54
+ },
55
+ {
56
+ provide: AXP_SEARCH_PROVIDER,
57
+ useClass: <%= className %>ModuleSearchCommandProvider,
58
+ multi: true,
59
+ },
60
+ ],
34
61
  declarations: [],
35
62
  })
36
63
  export class <%= upperCase(name) %>RootModule {
37
64
  registry = inject(AXPWidgetRegistryService);
38
65
  extendedWidgets = [];
39
66
  }
67
+
68
+ //#endregion
@@ -0,0 +1,9 @@
1
+ //#region ---- Exports ----
2
+
3
+ export * from './sample.entity';
4
+ export * from './sample.module';
5
+ export * from './sample.service';
6
+ export * from './sample.types';
7
+
8
+ //#endregion
9
+
@@ -1,34 +1,68 @@
1
- import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType } from '@acorex/platform/common';
2
- import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
1
+ //#region ---- Imports ----
2
+
3
+ import { AXPEntity, AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';
4
+ import { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';
5
+ import { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';
3
6
  import { Injector } from '@angular/core';
4
- import { AXMSampleModuleConst } from '../const';
7
+ import { RootConfig } from '../const';
5
8
  import { AXMSampleEntityService } from './sample.service';
6
9
 
10
+ //#endregion
11
+
12
+ //#region ---- Sample Entity Factory ----
13
+
14
+ /**
15
+ * Factory function to create Sample entity definition
16
+ */
7
17
  export async function sampleFactory(injector: Injector): Promise<AXPEntity | null> {
18
+
19
+ //#region ---- Services ----
20
+
8
21
  const dataService = injector.get(AXMSampleEntityService);
22
+
23
+ //#endregion
9
24
 
10
- const moduleName = AXMSampleModuleConst.moduleName;
25
+ //#region ---- Entity Definition ----
26
+
27
+ const i18n = RootConfig.config.i18n;
11
28
 
12
29
  const entityDef: AXPEntity = {
13
- module: moduleName,
14
- name: AXMSampleModuleConst.categoryEntity,
15
- source: '',
16
- title: 'Sample Entity',
30
+ module: RootConfig.module.name,
31
+ name: RootConfig.entities.sample.name,
32
+ title: RootConfig.entities.sample.title,
33
+ icon: RootConfig.entities.sample.icon,
34
+
17
35
  formats: {
18
- individual: 'Sample',
19
- plural: 'Samples',
36
+ individual: `@${i18n}:sample.individual-title`,
37
+ plural: `@${i18n}:sample.plural-title`,
38
+ displayName: '{{firstname}} {{lastname}}',
39
+ searchResult: {
40
+ title: '{{firstname}} {{lastname}}',
41
+ description: RootConfig.module.title,
42
+ },
20
43
  },
44
+
45
+ plugins: [
46
+ { name: 'history' },
47
+ { name: 'lock' },
48
+ { name: 'compare' },
49
+ { name: 'archive' },
50
+ { name: 'extra-properties' },
51
+ ],
52
+
21
53
  relatedEntities: [],
54
+
22
55
  groups: [
23
56
  {
24
- id: 'personal',
25
- title: 'Personal',
57
+ id: 'personal-info',
58
+ title: `@${i18n}:sample.groups.personal-info`,
26
59
  },
27
60
  {
28
- id: 'address',
29
- title: 'Address',
61
+ id: 'contact-info',
62
+ title: `@${i18n}:sample.groups.contact-info`,
30
63
  },
31
64
  ],
65
+
32
66
  properties: [
33
67
  {
34
68
  name: 'id',
@@ -38,15 +72,13 @@ export async function sampleFactory(injector: Injector): Promise<AXPEntity | nul
38
72
  hidden: true,
39
73
  nullable: false,
40
74
  readonly: true,
41
- unique: {
42
- enabled: true,
43
- },
75
+ unique: { enabled: true },
44
76
  },
45
77
  },
46
78
  {
47
79
  name: 'firstname',
48
- title: 'First Name',
49
- groupId: 'personal',
80
+ title: `@${i18n}:sample.properties.firstname`,
81
+ groupId: 'personal-info',
50
82
  schema: {
51
83
  dataType: 'string',
52
84
  interface: {
@@ -55,24 +87,20 @@ export async function sampleFactory(injector: Injector): Promise<AXPEntity | nul
55
87
  },
56
88
  options: {
57
89
  filter: {
58
- inline: {
59
- enabled: true,
60
- },
61
- },
62
- sort: {
63
- enabled: true,
90
+ inline: { enabled: true },
91
+ advance: { enabled: true },
64
92
  },
93
+ sort: { enabled: true },
65
94
  },
66
95
  validations: [
67
- {
68
- rule: 'required',
69
- },
96
+ { rule: 'required' },
97
+ { rule: 'minLength', options: { value: 2 } },
70
98
  ],
71
99
  },
72
100
  {
73
101
  name: 'lastname',
74
- title: 'Last Name',
75
- groupId: 'personal',
102
+ title: `@${i18n}:sample.properties.lastname`,
103
+ groupId: 'personal-info',
76
104
  schema: {
77
105
  dataType: 'string',
78
106
  interface: {
@@ -81,73 +109,94 @@ export async function sampleFactory(injector: Injector): Promise<AXPEntity | nul
81
109
  },
82
110
  options: {
83
111
  filter: {
84
- inline: {
85
- enabled: true,
86
- },
87
- },
88
- sort: {
89
- enabled: true,
112
+ inline: { enabled: true },
113
+ advance: { enabled: true },
90
114
  },
115
+ sort: { enabled: true },
91
116
  },
92
117
  validations: [
93
- {
94
- rule: 'required',
118
+ { rule: 'required' },
119
+ { rule: 'minLength', options: { value: 2 } },
120
+ ],
121
+ },
122
+ {
123
+ name: 'email',
124
+ title: `@${i18n}:sample.properties.email`,
125
+ groupId: 'contact-info',
126
+ schema: {
127
+ dataType: 'string',
128
+ interface: {
129
+ type: AXPWidgetsCatalog.text,
130
+ },
131
+ },
132
+ options: {
133
+ filter: {
134
+ inline: { enabled: true },
135
+ advance: { enabled: true },
95
136
  },
137
+ sort: { enabled: true },
138
+ },
139
+ validations: [
140
+ { rule: 'required' },
141
+ { rule: 'email' },
96
142
  ],
97
143
  },
98
144
  {
99
- name: 'address',
100
- title: 'Address',
101
- groupId: 'address',
145
+ name: 'phone',
146
+ title: `@${i18n}:sample.properties.phone`,
147
+ groupId: 'contact-info',
102
148
  schema: {
103
149
  dataType: 'string',
104
150
  interface: {
105
151
  type: AXPWidgetsCatalog.text,
152
+ },
153
+ },
154
+ options: {
155
+ filter: {
156
+ inline: { enabled: true },
157
+ advance: { enabled: true },
158
+ },
159
+ },
160
+ },
161
+ {
162
+ name: 'address',
163
+ title: `@${i18n}:sample.properties.address`,
164
+ groupId: 'contact-info',
165
+ schema: {
166
+ dataType: 'string',
167
+ interface: {
168
+ type: AXPWidgetsCatalog.largeText,
106
169
  options: {
107
- multiple: false,
108
- hasLabel: false,
170
+ rows: 3,
109
171
  },
110
172
  },
111
173
  },
112
174
  },
113
175
  ],
114
- columns: [{ name: 'firstname' }, { name: 'lastname' }, { name: 'address' }],
176
+ columns: [
177
+ { name: 'firstname' },
178
+ { name: 'lastname' },
179
+ { name: 'email' },
180
+ { name: 'phone' },
181
+ ],
182
+
115
183
  commands: {
116
184
  create: {
117
- execute: async (data: any) => {
118
- console.log('CREATE', data);
119
- const res = await dataService.insertOne(data);
120
- return { id: res };
121
- },
185
+ execute: async (data: any) => ({ id: await dataService.insertOne(data) }),
122
186
  },
123
187
  delete: {
124
- execute: async (id: any) => {
125
- console.log('DELETE', id);
126
- return await dataService.deleteOne(id);
127
- },
188
+ execute: async (id: any) => await dataService.deleteOne(id),
128
189
  },
129
190
  update: {
130
- execute: async (data: any) => {
131
- console.log('UPDATE', data);
132
- return new Promise((resolve) => {
133
- setTimeout(async () => {
134
- await dataService.updateOne(data.id, data);
135
- resolve(data);
136
- }, 1000);
137
- });
138
- },
191
+ execute: async (data: any) => await dataService.updateOne(data.id, data),
139
192
  },
140
193
  },
194
+
141
195
  queries: {
142
196
  byKey: {
143
197
  execute: async (id: string) => {
144
- console.log('users=>byKey', id);
145
- return new Promise((resolve) => {
146
- setTimeout(async () => {
147
- const entity = await dataService.getOne(id);
148
- resolve(entity);
149
- }, 500);
150
- });
198
+ const item = await dataService.getOne(id);
199
+ return item;
151
200
  },
152
201
  type: AXPEntityQueryType.Single,
153
202
  },
@@ -162,184 +211,56 @@ export async function sampleFactory(injector: Injector): Promise<AXPEntity | nul
162
211
  master: {
163
212
  create: {
164
213
  sections: [
165
- {
166
- id: 'personal',
167
- },
168
- {
169
- id: 'address',
170
- },
214
+ { id: 'personal-info' },
215
+ { id: 'contact-info' },
171
216
  ],
172
217
  properties: [
173
- {
174
- name: 'firstname',
175
- layout: {
176
- positions: {
177
- lg: {
178
- colSpan: 6,
179
- },
180
- },
181
- },
182
- },
183
- {
184
- name: 'lastname',
185
- layout: {
186
- positions: {
187
- lg: {
188
- colSpan: 6,
189
- },
190
- },
191
- },
192
- },
193
- {
194
- name: 'address',
195
- layout: {
196
- positions: {
197
- lg: {
198
- colSpan: 12,
199
- },
200
- },
201
- },
202
- },
218
+ { name: 'firstname', layout: { positions: { lg: { colSpan: 6 } } } },
219
+ { name: 'lastname', layout: { positions: { lg: { colSpan: 6 } } } },
220
+ { name: 'email', layout: { positions: { lg: { colSpan: 6 } } } },
221
+ { name: 'phone', layout: { positions: { lg: { colSpan: 6 } } } },
222
+ { name: 'address', layout: { positions: { lg: { colSpan: 12 } } } },
203
223
  ],
204
224
  },
205
225
  update: {
206
226
  sections: [
207
- {
208
- id: 'personal',
209
- },
210
- {
211
- id: 'address',
212
- },
227
+ { id: 'personal-info' },
228
+ { id: 'contact-info' },
213
229
  ],
214
230
  properties: [
215
- {
216
- name: 'firstname',
217
- layout: {
218
- positions: {
219
- lg: {
220
- colSpan: 6,
221
- },
222
- },
223
- },
224
- },
225
- {
226
- name: 'lastname',
227
- layout: {
228
- positions: {
229
- lg: {
230
- colSpan: 6,
231
- },
232
- },
233
- },
234
- },
235
- {
236
- name: 'address',
237
- layout: {
238
- positions: {
239
- lg: {
240
- colSpan: 12,
241
- },
242
- },
243
- },
244
- },
231
+ { name: 'firstname', layout: { positions: { lg: { colSpan: 6 } } } },
232
+ { name: 'lastname', layout: { positions: { lg: { colSpan: 6 } } } },
233
+ { name: 'email', layout: { positions: { lg: { colSpan: 6 } } } },
234
+ { name: 'phone', layout: { positions: { lg: { colSpan: 6 } } } },
235
+ { name: 'address', layout: { positions: { lg: { colSpan: 12 } } } },
245
236
  ],
246
237
  },
247
238
  single: {
248
239
  title: '{{firstname}} {{lastname}}',
249
240
  sections: [
250
- {
251
- id: 'personal',
252
- layout: {
253
- positions: {
254
- lg: {
255
- colSpan: 12,
256
- },
257
- },
258
- },
259
- },
260
- {
261
- id: 'address',
262
- },
241
+ { id: 'personal-info', layout: { positions: { lg: { colSpan: 12 } } } },
242
+ { id: 'contact-info', layout: { positions: { lg: { colSpan: 12 } } } },
263
243
  ],
264
244
  properties: [
265
- {
266
- name: 'firstname',
267
- layout: {
268
- positions: {
269
- lg: {
270
- colSpan: 6,
271
- },
272
- },
273
- },
274
- },
275
- {
276
- name: 'lastname',
277
- layout: {
278
- positions: {
279
- lg: {
280
- colSpan: 6,
281
- },
282
- },
283
- },
284
- },
285
- {
286
- name: 'address',
287
- layout: {
288
- positions: {
289
- lg: {
290
- colSpan: 12,
291
- },
292
- },
293
- },
294
- },
245
+ { name: 'firstname', layout: { positions: { lg: { colSpan: 6 } } } },
246
+ { name: 'lastname', layout: { positions: { lg: { colSpan: 6 } } } },
247
+ { name: 'email', layout: { positions: { lg: { colSpan: 6 } } } },
248
+ { name: 'phone', layout: { positions: { lg: { colSpan: 6 } } } },
249
+ { name: 'address', layout: { positions: { lg: { colSpan: 12 } } } },
295
250
  ],
296
- actions: [],
251
+ actions: [...entityMasterRecordActions()],
297
252
  },
298
253
  list: {
299
- actions: [
300
- {
301
- title: 'Create New',
302
- command: 'create-entity',
303
- priority: 'primary',
304
- type: 'create',
305
- scope: AXPEntityCommandScope.TypeLevel,
306
- },
307
- {
308
- title: 'Delete Items',
309
- command: 'delete-entity',
310
- priority: 'primary',
311
- type: 'delete',
312
- scope: AXPEntityCommandScope.Selected,
313
- },
314
- {
315
- title: 'Details',
316
- command: 'open-entity',
317
- priority: 'secondary',
318
- type: 'view',
319
- scope: AXPEntityCommandScope.Individual,
320
- },
321
- {
322
- title: 'Delete',
323
- command: 'delete-entity',
324
- priority: 'secondary',
325
- type: 'delete',
326
- scope: AXPEntityCommandScope.Individual,
327
- },
328
- ],
329
- views: [
330
- {
331
- name: 'all',
332
- title: 'All Items',
333
- fixed: true,
334
- columns: [],
335
- conditions: [],
336
- sorts: [{ name: 'firstname', dir: 'asc' }],
337
- },
338
- ],
254
+ actions: [...entityMasterCrudActions()],
255
+ views: [createAllQueryView({ sorts: [{ name: 'firstname', dir: 'asc' }] })],
339
256
  },
340
257
  },
341
258
  },
342
259
  };
343
260
 
261
+ //#endregion
262
+
344
263
  return entityDef;
345
264
  }
265
+
266
+ //#endregion