@acorex/platform-generator 20.3.0-next.8 → 20.4.0
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.
- package/package.json +2 -2
- package/src/bin/interactive-entity-creator.js +84 -90
- package/src/generators/app-module/files/src/app/app.config.ts.template +63 -13
- package/src/generators/app-module/files/src/app/basic-interceptor.interceptor.ts.template +4 -4
- package/src/generators/app-module/files/src/app/modules/auth/auth-root.module.ts.template +13 -34
- package/src/generators/app-module/files/src/app/{app-version.provider.ts.template → modules/common/app-version.provider.ts.template} +4 -2
- package/src/generators/app-module/files/src/app/modules/common/default-settings.providers.ts.template +38 -0
- package/src/generators/app-module/files/src/app/modules/common/translation-root.module.ts.template +4 -3
- package/src/generators/app-module/files/src/app/modules/layout/entity.loader.ts.template +26 -9
- package/src/generators/app-module/files/src/app/modules/layout/layout-root.module.ts.template +15 -17
- package/src/generators/app-module/files/src/app/modules/layout/menu.provider.ts.template +1 -15
- package/src/generators/app-module/files/src/app/modules/layout/theme-palette.provider.ts.template +57 -0
- package/src/generators/app-module/files/src/app/modules/root/const.ts.template +25 -5
- package/src/generators/app-module/files/src/app/modules/root/menu.keys.ts.template +9 -0
- package/src/generators/app-module/files/src/app/modules/root/menu.provider.ts.template +61 -0
- package/src/generators/app-module/files/src/app/modules/root/mock.data.ts.template +13 -37
- package/src/generators/app-module/files/src/app/modules/root/permission-definition.provider.ts.template +51 -0
- package/src/generators/app-module/files/src/app/modules/root/permission.keys.ts.template +17 -0
- package/src/generators/app-module/files/src/app/modules/root/root.module.ts.template +39 -10
- package/src/generators/app-module/files/src/app/modules/root/sample/index.ts.template +9 -0
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.entity.ts.template +146 -225
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.module.ts.template +13 -5
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.service.ts.template +26 -6
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.types.ts.template +49 -11
- package/src/generators/app-module/files/src/app/modules/root/search-command.provider.ts.template +37 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/acorex.json +285 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/activity-log.json +31 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/application-management.json +112 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/auth.json +38 -3
- package/src/generators/app-module/files/src/assets/i18n/en-US/calendar-management.json +170 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/contact-management.json +182 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/content-management.json +23 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/conversation.json +120 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/customer-management.json +130 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/dashboard.json +231 -5
- package/src/generators/app-module/files/src/assets/i18n/en-US/data-management.json +93 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/document-management.json +321 -22
- package/src/generators/app-module/files/src/assets/i18n/en-US/dynamic-form-designer.json +58 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/extra-properties.json +39 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/form-template-management.json +61 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/general-old.json +800 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/general.json +993 -4
- package/src/generators/app-module/files/src/assets/i18n/en-US/help-desk.json +55 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/human-capital-management.json +144 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/layout-designer.json +19 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/locale-management.json +30 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/location-management.json +46 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/lock-system.json +40 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/log-management.json +29 -21
- package/src/generators/app-module/files/src/assets/i18n/en-US/meeting-management.json +69 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/module.json.template +45 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/notification-management.json +37 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/organization-management.json +59 -138
- package/src/generators/app-module/files/src/assets/i18n/en-US/party-management.json +300 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/platform-management.json +20 -79
- package/src/generators/app-module/files/src/assets/i18n/en-US/project-management.json +157 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/questionnaire.json +118 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/regional.json +41 -8
- package/src/generators/app-module/files/src/assets/i18n/en-US/report-management.json +76 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/security-management.json +42 -3
- package/src/generators/app-module/files/src/assets/i18n/en-US/settings.json +17 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/task-management.json +151 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/text-template-management.json +3 -1
- package/src/generators/app-module/files/src/assets/i18n/en-US/training-management.json +50 -0
- package/src/generators/app-module/files/src/assets/i18n/en-US/workflow-management.json +21 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/acorex.json +285 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/activity-log.json +31 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/application-management.json +112 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/auth.json +74 -38
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/calendar-management.json +170 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/contact-management.json +182 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/content-management.json +23 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/conversation.json +80 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/customer-management.json +130 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/dashboard.json +231 -5
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/data-management.json +93 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/document-management.json +333 -29
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/dynamic-form-designer.json +39 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/extra-properties.json +39 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/form-template-management.json +82 -21
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/general-old.json +800 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/general.json +987 -9
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/global-search.json +5 -5
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/help-desk.json +55 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/human-capital-management.json +144 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/layout-designer.json +19 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/layout.json +14 -14
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/locale-management.json +30 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/location-management.json +46 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/lock-system.json +40 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/log-management.json +99 -47
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/meeting-management.json +69 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/module.json.template +45 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/notification-management.json +59 -22
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/organization-management.json +74 -152
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/party-management.json +300 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/platform-management.json +38 -93
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/project-management.json +157 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/questionnaire.json +118 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/regional.json +71 -38
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/report-management.json +76 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/scheduler-job-management.json +4 -4
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/security-management.json +43 -4
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/settings.json +33 -16
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/task-management.json +151 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/text-template-management.json +8 -5
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/training-management.json +50 -0
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/workflow-management.json +20 -0
- package/src/generators/app-module/files/src/environments/environment.dev.ts.template +1 -0
- package/src/generators/app-module/files/src/environments/environment.ts.template +1 -0
- package/src/generators/app-module/generator.js +3 -0
- package/src/generators/app-module/generator.js.map +1 -1
- package/src/generators/create-module-entity/files/__entityFileName__.entity.ts__tmpl__ +1 -1
- package/src/generators/create-tag-entity/files/tag-__entityFileName__.entity.ts__tmpl__ +1 -1
- package/src/generators/create-widget/files/__fileName__-widget-column.component.ts__tmpl__ +1 -1
- package/src/generators/create-widget/files/__fileName__-widget-edit.component.ts__tmpl__ +1 -1
- package/src/generators/create-widget/files/__fileName__-widget-filter.component.ts__tmpl__ +1 -1
- package/src/generators/create-widget/files/__fileName__-widget-print.component.ts__tmpl__ +1 -1
- package/src/generators/create-widget/files/__fileName__-widget-view.component.ts__tmpl__ +1 -1
- package/src/generators/create-widget/files/__fileName__-widget.config.ts__tmpl__ +2 -2
- package/src/generators/app-module/files/src/app/app.config.api.ts.template +0 -105
- package/src/generators/app-module/files/src/app/app.module.api.ts.template +0 -108
- package/src/generators/app-module/files/src/app/app.module.ts.template +0 -113
- package/src/generators/app-module/files/src/app/modules/auth/application.loader.ts.template +0 -34
- package/src/generators/app-module/files/src/app/modules/auth/auth.strategy.ts.template +0 -93
- package/src/generators/app-module/files/src/app/modules/auth/feature.loader.ts.template +0 -17
- package/src/generators/app-module/files/src/app/modules/auth/permission.loader.ts.template +0 -20
- package/src/generators/app-module/files/src/app/modules/auth/tenant.loader.ts.template +0 -26
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.component.html.template +0 -15
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.component.scss.template +0 -10
- package/src/generators/app-module/files/src/app/modules/root/sample/sample.component.ts.template +0 -20
- package/src/generators/app-module/files/src/assets/i18n/en-US/common.json +0 -404
- package/src/generators/app-module/files/src/assets/i18n/en-US/vehicle-management.json +0 -146
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/common.json +0 -386
- package/src/generators/app-module/files/src/assets/i18n/fa-IR/vehicle-management.json +0 -144
|
@@ -1,26 +1,9 @@
|
|
|
1
1
|
import { AXMAuthModule, AXMAuthenticationTypes, AXM_AUTH_CONFIG_TOKEN, configAuthModule } from '@acorex/modules/auth';
|
|
2
|
-
import {
|
|
3
|
-
AXPAuthModule,
|
|
4
|
-
AXP_APPLICATION_LOADER,
|
|
5
|
-
AXP_FEATURE_LOADER,
|
|
6
|
-
AXP_PERMISSION_LOADER,
|
|
7
|
-
AXP_TENANT_LOADER,
|
|
8
|
-
} from '@acorex/platform/auth';
|
|
9
2
|
import { NgModule } from '@angular/core';
|
|
10
3
|
import { environment } from '../../../environments/environment';
|
|
11
|
-
import { <%= className %>ApplicationLoader } from './application.loader';
|
|
12
|
-
import { <%= className %>Strategy } from './auth.strategy';
|
|
13
|
-
import { <%= className %>FeatureLoader } from './feature.loader';
|
|
14
|
-
import { <%= className %>PermissionLoader } from './permission.loader';
|
|
15
|
-
import { <%= className %>TenantLoader } from './tenant.loader';
|
|
16
4
|
|
|
17
5
|
@NgModule({
|
|
18
|
-
imports: [
|
|
19
|
-
AXMAuthModule,
|
|
20
|
-
AXPAuthModule.forRoot({
|
|
21
|
-
strategies: [<%= className %>Strategy],
|
|
22
|
-
}),
|
|
23
|
-
],
|
|
6
|
+
imports: [AXMAuthModule],
|
|
24
7
|
exports: [],
|
|
25
8
|
providers: [
|
|
26
9
|
{
|
|
@@ -28,6 +11,18 @@ import { <%= className %>TenantLoader } from './tenant.loader';
|
|
|
28
11
|
useValue: configAuthModule({
|
|
29
12
|
type: AXMAuthenticationTypes.UsernameEmailPassword,
|
|
30
13
|
authConfig: { ...environment.oidcConfig },
|
|
14
|
+
baseUrl: environment.baseUrl,
|
|
15
|
+
logoutUrl: environment.logoutUrl,
|
|
16
|
+
signup: {
|
|
17
|
+
enable: true,
|
|
18
|
+
url: '/auth/register',
|
|
19
|
+
},
|
|
20
|
+
defaultStrategyName: 'user-pass',
|
|
21
|
+
externalProviders: {
|
|
22
|
+
google: {
|
|
23
|
+
providerName: 'google',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
31
26
|
signinPage: {
|
|
32
27
|
description: `In this kind of post, the blogger introduces a person they've
|
|
33
28
|
interviewed and provides some background information about the
|
|
@@ -37,22 +32,6 @@ import { <%= className %>TenantLoader } from './tenant.loader';
|
|
|
37
32
|
},
|
|
38
33
|
}),
|
|
39
34
|
},
|
|
40
|
-
{
|
|
41
|
-
provide: AXP_TENANT_LOADER,
|
|
42
|
-
useClass: <%= className %>TenantLoader,
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
provide: AXP_APPLICATION_LOADER,
|
|
46
|
-
useClass: <%= className %>ApplicationLoader,
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
provide: AXP_PERMISSION_LOADER,
|
|
50
|
-
useClass: <%= className %>PermissionLoader,
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
provide: AXP_FEATURE_LOADER,
|
|
54
|
-
useClass: <%= className %>FeatureLoader,
|
|
55
|
-
},
|
|
56
35
|
],
|
|
57
36
|
})
|
|
58
37
|
export class <%= className %>AuthRootModule {}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AXPAppVersion, AXPAppVersionProvider } from '@acorex/platform/common';
|
|
2
|
-
import pkg from '
|
|
2
|
+
import pkg from '../../../../../../package.json';
|
|
3
3
|
|
|
4
4
|
export class <%= className %>AppVersionProvider implements AXPAppVersionProvider {
|
|
5
5
|
provider(): Promise<AXPAppVersion> {
|
|
@@ -9,4 +9,6 @@ export class <%= className %>AppVersionProvider implements AXPAppVersionProvider
|
|
|
9
9
|
date: new Date(),
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
|
-
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region ---- Imports ----
|
|
2
|
+
|
|
3
|
+
import { AXPRegionalSetting } from '@acorex/modules/locale-management';
|
|
4
|
+
import {
|
|
5
|
+
AXP_SETTING_DEFAULT_VALUES_PROVIDERS,
|
|
6
|
+
AXPCommonSettings,
|
|
7
|
+
AXPSettingDefaultValuesProvider,
|
|
8
|
+
} from '@acorex/platform/common';
|
|
9
|
+
import { AXPThemeLayoutSetting } from '@acorex/platform/themes/shared';
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
|
|
13
|
+
//#region ---- App Default Settings Providers ----
|
|
14
|
+
|
|
15
|
+
export const APP_DEFAULT_SETTINGS_PROVIDER: AXPSettingDefaultValuesProvider = {
|
|
16
|
+
priority: 50,
|
|
17
|
+
async provide() {
|
|
18
|
+
return {
|
|
19
|
+
[AXPRegionalSetting.LocaleProfile]: 'en-US',
|
|
20
|
+
[AXPRegionalSetting.Language]: 'en-US',
|
|
21
|
+
[AXPRegionalSetting.TimeZone]: 'UTC',
|
|
22
|
+
[AXPRegionalSetting.FirstDayOfWeek]: 1,
|
|
23
|
+
[AXPThemeLayoutSetting.Palette]: 'golden-dusk',
|
|
24
|
+
[AXPThemeLayoutSetting.MenuBadgeVisible]: true,
|
|
25
|
+
[AXPCommonSettings.EnableOperationToasts]: true,
|
|
26
|
+
} as Record<string, unknown>;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const APP_DEFAULT_SETTINGS_PROVIDERS = {
|
|
31
|
+
provide: AXP_SETTING_DEFAULT_VALUES_PROVIDERS,
|
|
32
|
+
useValue: APP_DEFAULT_SETTINGS_PROVIDER,
|
|
33
|
+
multi: true,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
|
|
38
|
+
|
package/src/generators/app-module/files/src/app/modules/common/translation-root.module.ts.template
CHANGED
|
@@ -19,7 +19,8 @@ export class MyTranslationLoader implements AXTranslationLoader {
|
|
|
19
19
|
|
|
20
20
|
load(options: AXTranslationLoaderOptions): Observable<AXTranslation> {
|
|
21
21
|
try {
|
|
22
|
-
|
|
22
|
+
const scope = options.scope?.startsWith('general-') ? options.scope?.replace('-', '/') : options.scope;
|
|
23
|
+
return this.http.get<AXTranslation>(`/assets/i18n/${options.lang}/${scope}.json`);
|
|
23
24
|
} catch (error) {
|
|
24
25
|
console.error(error);
|
|
25
26
|
return of({});
|
|
@@ -41,11 +42,11 @@ export class MyTranslationLoader implements AXTranslationLoader {
|
|
|
41
42
|
useValue: translationConfig({
|
|
42
43
|
preload: {
|
|
43
44
|
langs: ['en-US'],
|
|
44
|
-
scopes: ['
|
|
45
|
+
scopes: ['acorex', 'general'],
|
|
45
46
|
},
|
|
46
47
|
defaults: {
|
|
47
48
|
lang: 'en-US',
|
|
48
|
-
scope: '
|
|
49
|
+
scope: 'general',
|
|
49
50
|
},
|
|
50
51
|
}),
|
|
51
52
|
},
|
|
@@ -1,22 +1,39 @@
|
|
|
1
|
+
//#region ---- Imports ----
|
|
2
|
+
|
|
1
3
|
import { AXPEntity } from '@acorex/platform/common';
|
|
2
4
|
import { AXPEntityDefinitionLoader } from '@acorex/platform/layout/entity';
|
|
3
5
|
import { Injectable, Injector, inject } from '@angular/core';
|
|
6
|
+
import { RootConfig } from '../<%= name %>/const';
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
|
|
10
|
+
//#region ---- Root Entity Loader ----
|
|
4
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Entity definition loader for <%= className %> module entities
|
|
14
|
+
*/
|
|
5
15
|
@Injectable()
|
|
6
16
|
export class AXPRootEntityLoader implements AXPEntityDefinitionLoader {
|
|
17
|
+
|
|
18
|
+
//#region ---- Services ----
|
|
19
|
+
|
|
7
20
|
private injector = inject(Injector);
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
|
|
24
|
+
//#region ---- Get Method ----
|
|
8
25
|
|
|
9
26
|
async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {
|
|
10
|
-
|
|
27
|
+
if (moduleName === RootConfig.module.name) {
|
|
11
28
|
switch (entityName) {
|
|
12
|
-
case
|
|
13
|
-
|
|
14
|
-
resolve(entity(this.injector) as any);
|
|
15
|
-
break;
|
|
16
|
-
}
|
|
17
|
-
default:
|
|
18
|
-
resolve(null);
|
|
29
|
+
case RootConfig.entities.sample.name:
|
|
30
|
+
return (await import('../<%= name %>/sample/sample.entity')).sampleFactory(this.injector);
|
|
19
31
|
}
|
|
20
|
-
}
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
21
34
|
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
22
37
|
}
|
|
38
|
+
|
|
39
|
+
//#endregion
|
package/src/generators/app-module/files/src/app/modules/layout/layout-root.module.ts.template
CHANGED
|
@@ -1,46 +1,44 @@
|
|
|
1
|
+
import { AXMAppVersionSlotComponent } from '@acorex/modules/platform-management';
|
|
1
2
|
import {
|
|
2
3
|
AXPCommonModule,
|
|
3
4
|
AXPFooterTextSlotComponent,
|
|
4
5
|
AXPNavBarSlotComponent,
|
|
6
|
+
AXPSettingService,
|
|
5
7
|
AXP_MENU_PROVIDER,
|
|
6
8
|
AXP_PLATFORM_CONFIG_TOKEN,
|
|
7
9
|
} from '@acorex/platform/common';
|
|
8
|
-
import {
|
|
10
|
+
import { AXPWidgetCoreModule, AXPWidgetGroupEnum, AXPWidgetsCatalog, AXP_WIDGETS_EDITOR_CATEGORY } from '@acorex/platform/layout/widget-core';
|
|
9
11
|
import { AXPEntityModule, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
|
|
10
12
|
import { AXPDefaultThemeModule } from '@acorex/platform/themes/default';
|
|
11
13
|
import { AXP_THEME_PALETTE_PROVIDER } from '@acorex/platform/themes/shared';
|
|
12
|
-
import { AXPComponentSlotModule } from '@acorex/platform/layout/components';
|
|
13
|
-
|
|
14
|
-
|
|
15
14
|
import { NgModule, inject } from '@angular/core';
|
|
16
|
-
import pkg from '../../../../../../package.json';
|
|
17
15
|
import { AXPRootEntityLoader } from './entity.loader';
|
|
18
16
|
import { AXPRootMenuProvider } from './menu.provider';
|
|
19
|
-
|
|
17
|
+
import { AXPComponentSlotModule } from '@acorex/platform/layout/components';
|
|
18
|
+
import { AXPPlatformScope } from '@acorex/platform/core';
|
|
20
19
|
@NgModule({
|
|
21
20
|
imports: [
|
|
22
21
|
AXPDefaultThemeModule,
|
|
23
22
|
AXPCommonModule,
|
|
24
23
|
AXPEntityModule,
|
|
25
|
-
|
|
24
|
+
AXPWidgetCoreModule.forChild({
|
|
26
25
|
widgets: [],
|
|
27
26
|
extendedWidgets: [],
|
|
28
27
|
}),
|
|
29
28
|
AXPComponentSlotModule.forRoot({
|
|
30
|
-
'
|
|
29
|
+
'root-footer-start': [
|
|
31
30
|
{
|
|
32
31
|
name: 'version',
|
|
33
|
-
component:
|
|
34
|
-
options: () => {
|
|
35
|
-
return { text: `v${pkg.version}` };
|
|
36
|
-
},
|
|
32
|
+
component: AXMAppVersionSlotComponent,
|
|
37
33
|
},
|
|
38
34
|
{
|
|
39
35
|
name: 'copyright',
|
|
40
36
|
component: AXPFooterTextSlotComponent,
|
|
41
|
-
options: () => {
|
|
42
|
-
const
|
|
43
|
-
|
|
37
|
+
options: async () => {
|
|
38
|
+
const platformConfig = inject(AXP_PLATFORM_CONFIG_TOKEN);
|
|
39
|
+
const settingService = inject(AXPSettingService);
|
|
40
|
+
const copyrightText = await settingService.scope(AXPPlatformScope.Tenant).get("organization:copyright-text");
|
|
41
|
+
return { text: copyrightText ?? platformConfig.copyright };
|
|
44
42
|
},
|
|
45
43
|
},
|
|
46
44
|
],
|
|
@@ -52,7 +50,7 @@ import { AXPRootMenuProvider } from './menu.provider';
|
|
|
52
50
|
],
|
|
53
51
|
}),
|
|
54
52
|
],
|
|
55
|
-
exports: [],
|
|
53
|
+
exports: [AXPDefaultThemeModule],
|
|
56
54
|
providers: [
|
|
57
55
|
{
|
|
58
56
|
provide: AXP_MENU_PROVIDER,
|
|
@@ -73,4 +71,4 @@ import { AXPRootMenuProvider } from './menu.provider';
|
|
|
73
71
|
},
|
|
74
72
|
],
|
|
75
73
|
})
|
|
76
|
-
export class AXPLayoutRootModule {}
|
|
74
|
+
export class AXPLayoutRootModule { }
|
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
import { AXPMenuProviderContext, AXPMenuProvider } from '@acorex/platform/common';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
|
-
import { Router } from '@angular/router';
|
|
4
|
-
import { cloneDeep, omit } from 'lodash-es';
|
|
5
|
-
import { Observable, of } from 'rxjs';
|
|
6
3
|
|
|
7
4
|
@Injectable()
|
|
8
5
|
export class AXPRootMenuProvider implements AXPMenuProvider {
|
|
9
6
|
async provide(context: AXPMenuProviderContext): Promise<void> {
|
|
10
|
-
|
|
11
|
-
{
|
|
12
|
-
text: 'Sample',
|
|
13
|
-
path: '/<%= name %>/m/sample/e/sample/list',
|
|
14
|
-
icon: 'fa-solid fa-grid-2',
|
|
15
|
-
data: {
|
|
16
|
-
//requiredPermission: '',
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
]);
|
|
7
|
+
// Intentionally empty; feature modules should register their own menus.
|
|
20
8
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
9
|
}
|
package/src/generators/app-module/files/src/app/modules/layout/theme-palette.provider.ts.template
CHANGED
|
@@ -213,6 +213,63 @@ export class AXPRootThemePaletteProvider implements AXPThemePaletteProvider {
|
|
|
213
213
|
light: '#fafafa',
|
|
214
214
|
},
|
|
215
215
|
},
|
|
216
|
+
{
|
|
217
|
+
name: 'cherry-blossom',
|
|
218
|
+
title: 'Cherry Blossom',
|
|
219
|
+
colors: {
|
|
220
|
+
primary: '#d63384',
|
|
221
|
+
secondary: '#f8b4cb',
|
|
222
|
+
success: '#20c997',
|
|
223
|
+
warning: '#fd7e14',
|
|
224
|
+
danger: '#dc3545',
|
|
225
|
+
accents: ['#6f42c1', '#0dcaf0', '#6c757d'],
|
|
226
|
+
dark: '#251821',
|
|
227
|
+
light: '#ffffff',
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: 'autumn-harvest',
|
|
232
|
+
title: 'Autumn Harvest',
|
|
233
|
+
colors: {
|
|
234
|
+
primary: '#d2691e',
|
|
235
|
+
secondary: '#cd853f',
|
|
236
|
+
success: '#228b22',
|
|
237
|
+
warning: '#daa520',
|
|
238
|
+
danger: '#b22222',
|
|
239
|
+
accents: ['#8b4513', '#4682b4', '#2f4f4f'],
|
|
240
|
+
dark: '#25140e',
|
|
241
|
+
light: '#ffffff',
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
name: 'arctic-glacier',
|
|
246
|
+
title: 'Arctic Glacier',
|
|
247
|
+
colors: {
|
|
248
|
+
primary: '#4169e1',
|
|
249
|
+
secondary: '#87ceeb',
|
|
250
|
+
success: '#32cd32',
|
|
251
|
+
warning: '#ffa500',
|
|
252
|
+
danger: '#dc143c',
|
|
253
|
+
accents: ['#483d8b', '#20b2aa', '#708090'],
|
|
254
|
+
dark: '#172028',
|
|
255
|
+
light: '#ffffff',
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: 'teal-ocean',
|
|
260
|
+
title: 'Teal Ocean',
|
|
261
|
+
colors: {
|
|
262
|
+
primary: '#018b77',
|
|
263
|
+
secondary: '#00a693',
|
|
264
|
+
neutral: '#606c76',
|
|
265
|
+
success: '#2d9c67',
|
|
266
|
+
warning: '#e9a01b',
|
|
267
|
+
danger: '#c02f1d',
|
|
268
|
+
accents: ['#006b5c', '#4db6ac', '#80cbc4'],
|
|
269
|
+
dark: '#131f1c',
|
|
270
|
+
light: '#ffffff',
|
|
271
|
+
},
|
|
272
|
+
},
|
|
216
273
|
]);
|
|
217
274
|
}
|
|
218
275
|
}
|
|
@@ -1,6 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
//#region ---- Module Configuration ----
|
|
2
|
+
|
|
3
|
+
const config = {
|
|
4
|
+
i18n: '<%= name %>-module',
|
|
5
|
+
module: '<%= className %>Module',
|
|
6
6
|
};
|
|
7
|
+
|
|
8
|
+
export const RootConfig = {
|
|
9
|
+
config,
|
|
10
|
+
module: {
|
|
11
|
+
route: '<%= name %>',
|
|
12
|
+
name: '<%= className %>Module',
|
|
13
|
+
title: `t('module-name', {scope:"${config.i18n}"})`,
|
|
14
|
+
icon: 'fa-light fa-cube',
|
|
15
|
+
},
|
|
16
|
+
entities: {
|
|
17
|
+
sample: {
|
|
18
|
+
name: 'Sample',
|
|
19
|
+
title: `t("sample.individual-title",{scope:"${config.i18n}"})`,
|
|
20
|
+
source: `${config.module}.Sample`,
|
|
21
|
+
icon: 'fa-light fa-box',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region ---- Imports ----
|
|
2
|
+
|
|
3
|
+
import { AXPSessionService } from '@acorex/platform/auth';
|
|
4
|
+
import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';
|
|
5
|
+
import { AXPEntityService } from '@acorex/platform/layout/entity';
|
|
6
|
+
import { inject } from '@angular/core';
|
|
7
|
+
import { firstValueFrom } from 'rxjs';
|
|
8
|
+
import { RootConfig } from './const';
|
|
9
|
+
import { <%= className %>ModuleMenuKeys } from './menu.keys';
|
|
10
|
+
import { <%= className %>ModulePermissionsKeys } from './permission.keys';
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
|
|
14
|
+
//#region ---- Menu Provider ----
|
|
15
|
+
|
|
16
|
+
export class <%= className %>ModuleMenuProvider implements AXPMenuProvider {
|
|
17
|
+
|
|
18
|
+
//#region ---- Services ----
|
|
19
|
+
|
|
20
|
+
private entityService = inject(AXPEntityService);
|
|
21
|
+
private sessionService = inject(AXPSessionService);
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
|
|
25
|
+
//#region ---- Provider Method ----
|
|
26
|
+
|
|
27
|
+
async provide(context: AXPMenuProviderContext): Promise<void> {
|
|
28
|
+
const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);
|
|
29
|
+
if (!isAuthorized) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const scope = RootConfig.config.i18n;
|
|
34
|
+
const module = RootConfig.module;
|
|
35
|
+
|
|
36
|
+
context.addItems([
|
|
37
|
+
{
|
|
38
|
+
name: <%= className %>ModuleMenuKeys.Root,
|
|
39
|
+
priority: 9000,
|
|
40
|
+
text: `t('root-menu', {scope:"${scope}"})`,
|
|
41
|
+
icon: module.icon,
|
|
42
|
+
data: {},
|
|
43
|
+
children: [
|
|
44
|
+
{
|
|
45
|
+
name: <%= className %>ModuleMenuKeys.Samples,
|
|
46
|
+
text: `t('samples-menu', {scope:"${scope}"})`,
|
|
47
|
+
path: this.entityService.createPath(module.name, RootConfig.entities.sample.name),
|
|
48
|
+
icon: RootConfig.entities.sample.icon,
|
|
49
|
+
priority: 1,
|
|
50
|
+
data: {},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
|
|
@@ -1,50 +1,26 @@
|
|
|
1
|
+
//#region ---- Imports ----
|
|
2
|
+
|
|
1
3
|
import { AXPDataGenerator } from '@acorex/platform/core';
|
|
2
4
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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
|