@acorex/modules 18.1.1 → 18.1.2

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 (37) hide show
  1. package/application-management/lib/application-management-mock-data.d.ts +7 -0
  2. package/application-management/lib/layouts/index.d.ts +1 -0
  3. package/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +5 -1
  4. package/application-management/lib/layouts/property-detail-view/modify-property-interface.component.d.ts +5 -0
  5. package/application-management/lib/module-designer/module-designer.component.d.ts +3 -1
  6. package/application-management/lib/workflows/create-module-entity.workflow.d.ts +8 -1
  7. package/application-management/lib/workflows/index.d.ts +1 -0
  8. package/application-management/lib/workflows/modify-property-interface.workflow.d.ts +26 -0
  9. package/backend/lib/data/api/comment.service.d.ts +7 -6
  10. package/esm2022/application-management/lib/application-management-mock-data.mjs +21 -1
  11. package/esm2022/application-management/lib/application-management.module.mjs +6 -3
  12. package/esm2022/application-management/lib/application-management.service.mjs +3 -3
  13. package/esm2022/application-management/lib/entities/applications.entity.mjs +3 -3
  14. package/esm2022/application-management/lib/entities/entity.entity.mjs +16 -2
  15. package/esm2022/application-management/lib/entities/modules.entity.mjs +4 -4
  16. package/esm2022/application-management/lib/entities/property.entity.mjs +7 -3
  17. package/esm2022/application-management/lib/layouts/index.mjs +2 -1
  18. package/esm2022/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.mjs +32 -8
  19. package/esm2022/application-management/lib/layouts/property-detail-view/modify-property-interface.component.mjs +55 -0
  20. package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +13 -5
  21. package/esm2022/application-management/lib/services/context-menu.service.mjs +1 -2
  22. package/esm2022/application-management/lib/workflows/create-module-entity.workflow.mjs +25 -1
  23. package/esm2022/application-management/lib/workflows/index.mjs +2 -1
  24. package/esm2022/application-management/lib/workflows/modify-property-interface.workflow.mjs +79 -0
  25. package/esm2022/backend/lib/data/api/comment.service.mjs +14 -16
  26. package/fesm2022/{acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs → acorex-modules-application-management-module-designer.component-CRPUuYUe.mjs} +19 -9
  27. package/fesm2022/acorex-modules-application-management-module-designer.component-CRPUuYUe.mjs.map +1 -0
  28. package/fesm2022/acorex-modules-application-management.mjs +217 -43
  29. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  30. package/fesm2022/acorex-modules-backend.mjs +13 -15
  31. package/fesm2022/acorex-modules-backend.mjs.map +1 -1
  32. package/package.json +7 -7
  33. package/application-management/lib/actions/index.d.ts +0 -1
  34. package/application-management/lib/actions/show-detail.action.d.ts +0 -8
  35. package/esm2022/application-management/lib/actions/index.mjs +0 -2
  36. package/esm2022/application-management/lib/actions/show-detail.action.mjs +0 -25
  37. package/fesm2022/acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs.map +0 -1
@@ -1,16 +1,15 @@
1
- import { AXPEntityDetailViewModelResolver, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';
2
- import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
1
+ import { AXPEntityDefinitionRegistryService, AXP_ENTITY_CONFIG_TOKEN, AXPEntityMasterUpdateViewModelFactory, AXPEntityDetailViewModelResolver } from '@acorex/platform/layout/entity';
2
+ import { AXPEntityDetailListViewComponent, AXPRootLayoutComponent } from '@acorex/platform/themes/default';
3
3
  import * as i1$1 from '@acorex/platform/workflow';
4
- import { AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
4
+ import { AXPWorkflowService, AXPWorkflowAction, createWorkFlowEvent, AXPWorkflowModule } from '@acorex/platform/workflow';
5
5
  import * as i0 from '@angular/core';
6
- import { inject, Injectable, signal, Component, ChangeDetectionStrategy, Injector, NgModule, Optional, Inject } from '@angular/core';
6
+ import { inject, signal, Component, ChangeDetectionStrategy, Injectable, Injector, NgModule, Optional, Inject } from '@angular/core';
7
7
  import * as i2 from '@angular/router';
8
8
  import { ActivatedRoute, RouterModule } from '@angular/router';
9
- import { AXPWorkflowNavigateAction, isSmallScreen, getChildDrawer, AXPStickyDirective, AXPGridLayoutDirective, AXPDataGenerator, AXPStorageService, AXPEntityDataProviderImpl, AXPEntityQueryType, AXPEntityCommandScope } from '@acorex/platform/common';
10
9
  import { AXActionSheetModule } from '@acorex/components/action-sheet';
11
- import * as i7 from '@acorex/components/breadcrumbs';
10
+ import * as i8 from '@acorex/components/breadcrumbs';
12
11
  import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
13
- import * as i6 from '@acorex/components/button';
12
+ import * as i7 from '@acorex/components/button';
14
13
  import { AXButtonModule } from '@acorex/components/button';
15
14
  import * as i3 from '@acorex/components/decorators';
16
15
  import { AXDecoratorModule } from '@acorex/components/decorators';
@@ -22,59 +21,64 @@ import * as i5 from '@acorex/components/form';
22
21
  import { AXFormModule } from '@acorex/components/form';
23
22
  import { AXLoadingModule } from '@acorex/components/loading';
24
23
  import { AXPopoverModule } from '@acorex/components/popover';
24
+ import * as i6 from '@acorex/components/tabs';
25
25
  import { AXTabsModule } from '@acorex/components/tabs';
26
26
  import { AXTranslationModule } from '@acorex/core/translation';
27
- import * as i8 from '@acorex/platform/layout/builder';
27
+ import { isSmallScreen, getChildDrawer, AXPStickyDirective, AXPGridLayoutDirective, AXPWorkflowNavigateAction, AXPDataGenerator, AXPStorageService, AXPEntityDataProviderImpl, AXPEntityQueryType, AXPEntityCommandScope } from '@acorex/platform/common';
28
+ import * as i9 from '@acorex/platform/layout/builder';
28
29
  import { AXPLayoutBuilderModule, AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
29
30
  import { AXPWidgetsModule } from '@acorex/platform/widgets';
30
31
  import * as i1 from '@angular/common';
31
32
  import { CommonModule } from '@angular/common';
32
33
  import { Store } from '@ngrx/store';
34
+ import { AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/designer';
35
+ import { AXPopupService } from '@acorex/components/popup';
36
+ import { AXPlatform } from '@acorex/core/platform';
37
+ import { cloneDeep } from 'lodash-es';
33
38
  import { applySortArray, applyFilterArray } from '@acorex/platform/core';
34
39
 
35
- class AXPShowModuleEntityDetailViewAction extends AXPWorkflowAction {
36
- constructor() {
37
- super(...arguments);
38
- this.navigation = inject(AXPWorkflowNavigateAction);
39
- }
40
- async execute(context) {
41
- const [module, entity] = context.getVariable('entity').split('.');
42
- const { id } = context.getVariable('data');
43
- const newPayload = {
44
- commands: `/console/module-designer/m/${module}/e/${entity}/${id}/view`,
45
- };
46
- context.setVariable('payload', newPayload);
47
- this.navigation.execute(context);
48
- }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
50
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction }); }
51
- }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction, decorators: [{
53
- type: Injectable
54
- }] });
55
-
56
40
  class AXPModuleEntityDetailViewComponent {
57
41
  constructor() {
58
42
  this.activeRoute = inject(ActivatedRoute);
43
+ this.workflow = inject(AXPWorkflowService);
59
44
  this.vm = this.activeRoute.snapshot.data['vm'];
60
45
  //
61
46
  this.store = inject((Store));
62
47
  this.isSM = this.store.select(isSmallScreen());
63
48
  this.isOpen = this.store.select(getChildDrawer());
49
+ this.selectedRelatedIEntityTabIndex = signal(0);
64
50
  this.selectedDetailTabIndex = signal(0);
65
51
  }
52
+ handleActiveRelatedEntityChanged(e) {
53
+ this.selectedRelatedIEntityTabIndex.set(e.index);
54
+ this.vm.sections;
55
+ }
66
56
  handleActiveDetailTabChanged(e) {
67
57
  this.selectedDetailTabIndex.set(e.index);
68
58
  }
59
+ handleEditSection(section) {
60
+ if (section.group.id === 'interface') {
61
+ this.workflow.execute('modify-property-interface', {
62
+ entity: 'application.property',
63
+ data: {
64
+ id: this.vm.context().id,
65
+ properties: section.editableProps().map((m) => m.name()),
66
+ },
67
+ });
68
+ }
69
+ else {
70
+ this.vm.executeCommand('modify-entity-section', section);
71
+ }
72
+ }
69
73
  ngOnDestroy() {
70
74
  this.vm.destroy();
71
75
  }
72
76
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPModuleEntityDetailViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPModuleEntityDetailViewComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-full ax-px-4 ax-pb-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 -ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n >\n <!-------- Begin Toolbar -------->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold\">{{ vm.title() }}</div>\n @if(vm.description()) {\n <div class=\"ax-text-sm ax-text-neutral-600\" [class.ax-hidden]=\"sticky.isSticky\">\n {{ vm.description() }}\n </div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\" [class.ax-hidden]=\"isSM | async\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [routerLink]=\"b.url\"\n >\n @if(b.icon) {\n <i [class]=\"b.icon\"></i>\n }\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-- Begin Action Menu -->\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n @for(tr of vm.primaryActions();track $index) {\n <ax-button [text]=\"tr.title\" [color]=\"tr.color\" (onClick)=\"vm.executeCommand(tr.name)\">\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n } @if(vm.secondaryActions().length) {\n <ax-button [text]=\"(isSM | async) ? null : 'Actions'\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(tr of vm.secondaryActions();track $index) {\n <ng-container>\n @if(tr.separated) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"tr.title\"\n class=\"ax-font-semibold ax-text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Finish Action Menu -->\n </div>\n <!-- Start Sections -->\n <div class=\"ax-grid ax-grid-cols-12 ax-gap-4\">\n @for(section of vm.sections(); track section.name()) {\n <div class=\"ax-card ax-shadow-md ax-mt-2\" [gridLayout]=\"section.layout()\">\n <ax-form #form>\n <axp-widgets-container [context]=\"vm.context()\">\n <div class=\"ax-card-header !ax-py-2 !ax-px-4\">\n <p>\n <span class=\"!ax-text-lg ax-font-semibold\">{{ section.title() }}</span>\n <br />\n @if(section.description()) {\n <span class=\"ax-text-sm ax-font-normal ax-text-gray-500\">{{ section.description() }}</span>\n }\n </p>\n @if(section.editable()) {\n <ax-button\n class=\"ax-xs\"\n color=\"ghost\"\n [look]=\"'blank'\"\n (onClick)=\"vm.executeCommand('modify-entity-section', section)\"\n >\n <ax-icon class=\"fa-solid fa-pen ax-text-gray-600\"> </ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-card-body !ax-grid !ax-grid-cols-12 !ax-gap-4\">\n @for(attr of section.props(); track $index) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\" [gridLayout]=\"attr.layout()\">\n <div>\n <div>\n <span class=\"ax-font-semibold\">{{ attr.title() }}</span>\n </div>\n </div>\n <div class=\"ax-text-neutral-500\">\n <axp-widget-renderer [node]=\"attr.node()\" [mode]=\"'view'\"> </axp-widget-renderer>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n </div>\n <!-- Finish Sections -->\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i6.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i6.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i7.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i7.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type:
77
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPModuleEntityDetailViewComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-full ax-px-4 ax-pb-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 -ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n >\n <!-------- Begin Toolbar -------->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold\">{{ vm.title() }}</div>\n @if(vm.description()) {\n <div class=\"ax-text-sm ax-text-neutral-600\" [class.ax-hidden]=\"sticky.isSticky\">\n {{ vm.description() }}\n </div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\" [class.ax-hidden]=\"isSM | async\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [routerLink]=\"b.url\"\n >\n @if(b.icon) {\n <i [class]=\"b.icon\"></i>\n }\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-- Begin Action Menu -->\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n @for(tr of vm.primaryActions();track $index) {\n <ax-button [text]=\"tr.title\" [color]=\"tr.color\" (onClick)=\"vm.executeCommand(tr.name)\">\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n } @if(vm.secondaryActions().length) {\n <ax-button [text]=\"(isSM | async) ? null : 'Actions'\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(tr of vm.secondaryActions();track $index) {\n <ng-container>\n @if(tr.separated) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"tr.title\"\n class=\"ax-font-semibold ax-text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Finish Action Menu -->\n </div>\n <!-- Start Sections -->\n <div class=\"ax-grid ax-grid-cols-12 ax-gap-4\">\n @for(section of vm.sections(); track section.name()) {\n <div class=\"ax-card ax-mt-4\" [gridLayout]=\"section.layout()\">\n <ax-form #form>\n <axp-widgets-container [context]=\"vm.context()\">\n <div class=\"ax-card-header !ax-py-2 !ax-px-4\">\n <p>\n <span class=\"!ax-text-lg ax-font-semibold\">{{ section.title() }}</span>\n <br />\n @if(section.description()) {\n <span class=\"ax-text-sm ax-font-normal ax-text-gray-500\">{{ section.description() }}</span>\n }\n </p>\n @if(section.editable()) {\n <ax-button\n class=\"ax-xs\"\n color=\"ghost\"\n [look]=\"'blank'\"\n (onClick)=\"handleEditSection(section)\"\n >\n <ax-icon class=\"fa-solid fa-pen ax-text-gray-600\"> </ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-card-body !ax-grid !ax-grid-cols-12 !ax-gap-4\">\n @for(attr of section.props(); track $index) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\" [gridLayout]=\"attr.layout()\">\n <div>\n <div>\n <span class=\"ax-font-semibold\">{{ attr.title() }}</span>\n </div>\n </div>\n <div class=\"ax-text-neutral-500\">\n <axp-widget-renderer [node]=\"attr.node()\" [mode]=\"'view'\"> </axp-widget-renderer>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n </div>\n <!-- Finish Sections -->\n @if(vm.relatedEntities().length) {\n <ax-tabs\n [look]=\"'with-line'\"\n class=\"ax-mt-2 ax-font-semibold\"\n #tab\n (onActiveTabChanged)=\"handleActiveRelatedEntityChanged($event)\"\n >\n @for(e of vm.relatedEntities();track $index;let index= $index){\n <ax-tab-item [text]=\"e.title()\" [key]=\"index.toString()\"> </ax-tab-item>\n }\n </ax-tabs>\n @for(e of vm.relatedEntities();track $index;let index= $index){\n <div [class.ax-hidden]=\"$index !== selectedRelatedIEntityTabIndex()\">\n <axp-entity-detail-list-view [viewModel]=\"e\"></axp-entity-detail-list-view>\n </div>\n } }\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i7.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i7.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i8.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i8.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type:
74
78
  //
75
- AXPLayoutBuilderModule }, { kind: "component", type: i8.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i8.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "directive", type: AXPGridLayoutDirective, selector: "[gridLayout]", inputs: ["gridLayout"] }, { kind: "ngmodule", type:
79
+ AXPLayoutBuilderModule }, { kind: "component", type: i9.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i9.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "directive", type: AXPGridLayoutDirective, selector: "[gridLayout]", inputs: ["gridLayout"] }, { kind: "ngmodule", type:
76
80
  //
77
- AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
81
+ AXTranslationModule }, { kind: "component", type: AXPEntityDetailListViewComponent, selector: "axp-entity-detail-list-view", inputs: ["viewModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
78
82
  }
79
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPModuleEntityDetailViewComponent, decorators: [{
80
84
  type: Component,
@@ -99,9 +103,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
99
103
  AXPGridLayoutDirective,
100
104
  //
101
105
  AXTranslationModule,
102
- ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-full ax-px-4 ax-pb-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 -ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n >\n <!-------- Begin Toolbar -------->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold\">{{ vm.title() }}</div>\n @if(vm.description()) {\n <div class=\"ax-text-sm ax-text-neutral-600\" [class.ax-hidden]=\"sticky.isSticky\">\n {{ vm.description() }}\n </div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\" [class.ax-hidden]=\"isSM | async\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [routerLink]=\"b.url\"\n >\n @if(b.icon) {\n <i [class]=\"b.icon\"></i>\n }\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-- Begin Action Menu -->\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n @for(tr of vm.primaryActions();track $index) {\n <ax-button [text]=\"tr.title\" [color]=\"tr.color\" (onClick)=\"vm.executeCommand(tr.name)\">\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n } @if(vm.secondaryActions().length) {\n <ax-button [text]=\"(isSM | async) ? null : 'Actions'\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(tr of vm.secondaryActions();track $index) {\n <ng-container>\n @if(tr.separated) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"tr.title\"\n class=\"ax-font-semibold ax-text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Finish Action Menu -->\n </div>\n <!-- Start Sections -->\n <div class=\"ax-grid ax-grid-cols-12 ax-gap-4\">\n @for(section of vm.sections(); track section.name()) {\n <div class=\"ax-card ax-shadow-md ax-mt-2\" [gridLayout]=\"section.layout()\">\n <ax-form #form>\n <axp-widgets-container [context]=\"vm.context()\">\n <div class=\"ax-card-header !ax-py-2 !ax-px-4\">\n <p>\n <span class=\"!ax-text-lg ax-font-semibold\">{{ section.title() }}</span>\n <br />\n @if(section.description()) {\n <span class=\"ax-text-sm ax-font-normal ax-text-gray-500\">{{ section.description() }}</span>\n }\n </p>\n @if(section.editable()) {\n <ax-button\n class=\"ax-xs\"\n color=\"ghost\"\n [look]=\"'blank'\"\n (onClick)=\"vm.executeCommand('modify-entity-section', section)\"\n >\n <ax-icon class=\"fa-solid fa-pen ax-text-gray-600\"> </ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-card-body !ax-grid !ax-grid-cols-12 !ax-gap-4\">\n @for(attr of section.props(); track $index) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\" [gridLayout]=\"attr.layout()\">\n <div>\n <div>\n <span class=\"ax-font-semibold\">{{ attr.title() }}</span>\n </div>\n </div>\n <div class=\"ax-text-neutral-500\">\n <axp-widget-renderer [node]=\"attr.node()\" [mode]=\"'view'\"> </axp-widget-renderer>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n </div>\n <!-- Finish Sections -->\n </div>\n</div>\n" }]
106
+ AXPEntityDetailListViewComponent,
107
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-full ax-px-4 ax-pb-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 -ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n >\n <!-------- Begin Toolbar -------->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold\">{{ vm.title() }}</div>\n @if(vm.description()) {\n <div class=\"ax-text-sm ax-text-neutral-600\" [class.ax-hidden]=\"sticky.isSticky\">\n {{ vm.description() }}\n </div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\" [class.ax-hidden]=\"isSM | async\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [routerLink]=\"b.url\"\n >\n @if(b.icon) {\n <i [class]=\"b.icon\"></i>\n }\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-- Begin Action Menu -->\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n @for(tr of vm.primaryActions();track $index) {\n <ax-button [text]=\"tr.title\" [color]=\"tr.color\" (onClick)=\"vm.executeCommand(tr.name)\">\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n } @if(vm.secondaryActions().length) {\n <ax-button [text]=\"(isSM | async) ? null : 'Actions'\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(tr of vm.secondaryActions();track $index) {\n <ng-container>\n @if(tr.separated) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"tr.title\"\n class=\"ax-font-semibold ax-text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Finish Action Menu -->\n </div>\n <!-- Start Sections -->\n <div class=\"ax-grid ax-grid-cols-12 ax-gap-4\">\n @for(section of vm.sections(); track section.name()) {\n <div class=\"ax-card ax-mt-4\" [gridLayout]=\"section.layout()\">\n <ax-form #form>\n <axp-widgets-container [context]=\"vm.context()\">\n <div class=\"ax-card-header !ax-py-2 !ax-px-4\">\n <p>\n <span class=\"!ax-text-lg ax-font-semibold\">{{ section.title() }}</span>\n <br />\n @if(section.description()) {\n <span class=\"ax-text-sm ax-font-normal ax-text-gray-500\">{{ section.description() }}</span>\n }\n </p>\n @if(section.editable()) {\n <ax-button\n class=\"ax-xs\"\n color=\"ghost\"\n [look]=\"'blank'\"\n (onClick)=\"handleEditSection(section)\"\n >\n <ax-icon class=\"fa-solid fa-pen ax-text-gray-600\"> </ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-card-body !ax-grid !ax-grid-cols-12 !ax-gap-4\">\n @for(attr of section.props(); track $index) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\" [gridLayout]=\"attr.layout()\">\n <div>\n <div>\n <span class=\"ax-font-semibold\">{{ attr.title() }}</span>\n </div>\n </div>\n <div class=\"ax-text-neutral-500\">\n <axp-widget-renderer [node]=\"attr.node()\" [mode]=\"'view'\"> </axp-widget-renderer>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n </div>\n }\n </div>\n <!-- Finish Sections -->\n @if(vm.relatedEntities().length) {\n <ax-tabs\n [look]=\"'with-line'\"\n class=\"ax-mt-2 ax-font-semibold\"\n #tab\n (onActiveTabChanged)=\"handleActiveRelatedEntityChanged($event)\"\n >\n @for(e of vm.relatedEntities();track $index;let index= $index){\n <ax-tab-item [text]=\"e.title()\" [key]=\"index.toString()\"> </ax-tab-item>\n }\n </ax-tabs>\n @for(e of vm.relatedEntities();track $index;let index= $index){\n <div [class.ax-hidden]=\"$index !== selectedRelatedIEntityTabIndex()\">\n <axp-entity-detail-list-view [viewModel]=\"e\"></axp-entity-detail-list-view>\n </div>\n } }\n </div>\n</div>\n" }]
103
108
  }] });
104
109
 
110
+ class AXPModifyPropertyInterfaceComponent {
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPModifyPropertyInterfaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPModifyPropertyInterfaceComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "MODIFY\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type:
113
+ //
114
+ AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "ngmodule", type:
115
+ //
116
+ AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
+ }
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPModifyPropertyInterfaceComponent, decorators: [{
119
+ type: Component,
120
+ args: [{ imports: [
121
+ CommonModule,
122
+ RouterModule,
123
+ AXDecoratorModule,
124
+ AXDropdownModule,
125
+ AXPopoverModule,
126
+ AXFormModule,
127
+ AXActionSheetModule,
128
+ AXDrawerModule,
129
+ AXDialogModule,
130
+ AXLoadingModule,
131
+ AXTabsModule,
132
+ AXButtonModule,
133
+ AXBreadcrumbsModule,
134
+ //
135
+ AXPLayoutBuilderModule,
136
+ AXPWidgetsModule,
137
+ AXPStickyDirective,
138
+ AXPGridLayoutDirective,
139
+ AXPWidgetPropertyViewerComponent,
140
+ //
141
+ AXTranslationModule,
142
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "MODIFY\n" }]
143
+ }] });
144
+
145
+ class AXPShowModuleEntityDetailViewAction extends AXPWorkflowAction {
146
+ constructor() {
147
+ super(...arguments);
148
+ this.navigation = inject(AXPWorkflowNavigateAction);
149
+ }
150
+ async execute(context) {
151
+ const [module, entity] = context.getVariable('entity').split('.');
152
+ const { id } = context.getVariable('data');
153
+ const newPayload = {
154
+ commands: `/console/module-designer/m/${module}/e/${entity}/${id}/view`,
155
+ };
156
+ context.setVariable('payload', newPayload);
157
+ this.navigation.execute(context);
158
+ }
159
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
160
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction }); }
161
+ }
162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPShowModuleEntityDetailViewAction, decorators: [{
163
+ type: Injectable
164
+ }] });
105
165
  const AXPCreateModuleEntityWorkflow = {
106
166
  startStepId: 'show-popup',
107
167
  steps: {
@@ -144,6 +204,78 @@ const AXPCreateModuleEntityWorkflow = {
144
204
  },
145
205
  };
146
206
 
207
+ const AXPEntityModifyEvent = createWorkFlowEvent('[Entity] Modified');
208
+ class AXPEntityModifyPropertyInterfacePopupAction extends AXPWorkflowAction {
209
+ constructor() {
210
+ super(...arguments);
211
+ this.popupService = inject(AXPopupService);
212
+ this.platform = inject(AXPlatform);
213
+ this.entityRegistery = inject(AXPEntityDefinitionRegistryService);
214
+ this.config = inject(AXP_ENTITY_CONFIG_TOKEN);
215
+ this.factory = inject(AXPEntityMasterUpdateViewModelFactory);
216
+ }
217
+ async execute(context) {
218
+ const [moduleName, entityName] = context.getVariable('entity').split('.');
219
+ const { properties, id, title } = context.getVariable('data');
220
+ const entityRef = await this.entityRegistery.resolve(moduleName, entityName);
221
+ const vm = await this.factory.create(moduleName, entityName, id, properties);
222
+ const com = await this.config.viewers.master.modify();
223
+ const popup = await this.popupService.open(com, {
224
+ title: title ?? `Modify ${entityRef.formats.individual}`,
225
+ size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : 'md',
226
+ data: {
227
+ vm,
228
+ properties,
229
+ entity: entityRef,
230
+ },
231
+ });
232
+ context.setOutput('result', false);
233
+ if (popup.data?.result == true) {
234
+ context.setOutput('result', true);
235
+ context.setVariable('data', cloneDeep(popup.data.context));
236
+ }
237
+ }
238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPEntityModifyPropertyInterfacePopupAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
239
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPEntityModifyPropertyInterfacePopupAction }); }
240
+ }
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPEntityModifyPropertyInterfacePopupAction, decorators: [{
242
+ type: Injectable
243
+ }] });
244
+ const AXPModifyPropertyInterfaceWorkflow = {
245
+ startStepId: 'modifyPopup',
246
+ steps: {
247
+ modifyPopup: {
248
+ id: 'modifyPopup',
249
+ action: 'AXPEntityModifyPropertyInterfacePopupAction',
250
+ nextSteps: [
251
+ {
252
+ conditions: [{ type: 'SINGLE', expression: 'context.getOutput("result") == true' }],
253
+ nextStepId: 'successToast',
254
+ },
255
+ ],
256
+ },
257
+ successToast: {
258
+ id: 'successToast',
259
+ action: 'AXPToastAction',
260
+ input: {
261
+ color: 'success',
262
+ title: 'Entity Modified',
263
+ content: 'Record has been successfully updated.',
264
+ },
265
+ nextSteps: [
266
+ {
267
+ conditions: [],
268
+ nextStepId: 'modifyConfirmed',
269
+ },
270
+ ],
271
+ },
272
+ modifyConfirmed: {
273
+ id: 'modifyConfirmed',
274
+ action: 'AXPEntityModifyConfirmedAction',
275
+ },
276
+ },
277
+ };
278
+
147
279
  const AXPShowModuleEntityDetailsViewWorkflow = {
148
280
  startStepId: 'showDetailView',
149
281
  steps: {
@@ -160,7 +292,7 @@ const routes = [
160
292
  children: [
161
293
  {
162
294
  path: 'module-designer',
163
- loadComponent: () => import('./acorex-modules-application-management-module-designer.component-Bgq9-BVv.mjs').then((c) => c.AXMModuleDesignerComponent),
295
+ loadComponent: () => import('./acorex-modules-application-management-module-designer.component-CRPUuYUe.mjs').then((c) => c.AXMModuleDesignerComponent),
164
296
  children: [
165
297
  {
166
298
  path: 'm/:module',
@@ -212,10 +344,12 @@ class AXMApplicationManagementModule {
212
344
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMApplicationManagementModule, imports: [AXPWorkflowModule.forChild({
213
345
  actions: {
214
346
  AXPShowModuleEntityDetailViewAction,
347
+ AXPEntityModifyPropertyInterfacePopupAction,
215
348
  },
216
349
  workflows: {
217
350
  'create-module-entity': AXPCreateModuleEntityWorkflow,
218
351
  'show-module-entity-details': AXPShowModuleEntityDetailsViewWorkflow,
352
+ 'modify-property-interface': AXPModifyPropertyInterfaceWorkflow,
219
353
  },
220
354
  }),
221
355
  RouterModule.forChild(routes)] }); }
@@ -227,10 +361,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
227
361
  AXPWorkflowModule.forChild({
228
362
  actions: {
229
363
  AXPShowModuleEntityDetailViewAction,
364
+ AXPEntityModifyPropertyInterfacePopupAction,
230
365
  },
231
366
  workflows: {
232
367
  'create-module-entity': AXPCreateModuleEntityWorkflow,
233
368
  'show-module-entity-details': AXPShowModuleEntityDetailsViewWorkflow,
369
+ 'modify-property-interface': AXPModifyPropertyInterfaceWorkflow,
234
370
  },
235
371
  }),
236
372
  RouterModule.forChild(routes),
@@ -332,6 +468,26 @@ const PERMISSIONS = Array.from({ length: 5 }).map((_, i) => {
332
468
  isArchived: AXPDataGenerator.boolean(),
333
469
  };
334
470
  });
471
+ const PROPERTIES = Array.from({ length: 10 }).map((_, i) => {
472
+ const source = [
473
+ 'property1',
474
+ 'property2',
475
+ 'property3',
476
+ 'property4',
477
+ 'property5',
478
+ 'property6',
479
+ 'property7',
480
+ 'property8',
481
+ ];
482
+ const name = AXPDataGenerator.pick(source);
483
+ return {
484
+ id: AXPDataGenerator.uuid(),
485
+ entityId: AXPDataGenerator.pick(ENTITIES).id,
486
+ name: name,
487
+ title: name,
488
+ path: name,
489
+ };
490
+ });
335
491
 
336
492
  class AXPApplicationManagementService {
337
493
  constructor(injector) {
@@ -356,7 +512,7 @@ class AXPApplicationManagementService {
356
512
  this._entityDataProvider.initial(ENTITIES);
357
513
  //
358
514
  this._propertyDataProvider = new AXPEntityDataProviderImpl(storageService, 'properties');
359
- this._propertyDataProvider.initial([]);
515
+ this._propertyDataProvider.initial(PROPERTIES);
360
516
  //
361
517
  this._permissionDataProvider = new AXPEntityDataProviderImpl(storageService, 'permissions');
362
518
  this._permissionDataProvider.initial(PERMISSIONS);
@@ -681,7 +837,7 @@ async function applicationEntityFactory(injector) {
681
837
  columns: ['application.title', 'module.title'],
682
838
  conditions: [
683
839
  {
684
- name: 'application.id',
840
+ name: 'applicationId',
685
841
  operator: {
686
842
  type: 'equal',
687
843
  },
@@ -694,7 +850,7 @@ async function applicationEntityFactory(injector) {
694
850
  columns: ['name', 'title', 'isArchived'],
695
851
  conditions: [
696
852
  {
697
- name: 'application.id',
853
+ name: 'applicationId',
698
854
  operator: {
699
855
  type: 'equal',
700
856
  },
@@ -1262,7 +1418,21 @@ async function entityEntityFactory(injector) {
1262
1418
  individual: 'Entity',
1263
1419
  plural: 'Entities',
1264
1420
  },
1265
- relatedEntities: [],
1421
+ relatedEntities: [
1422
+ {
1423
+ entity: 'application-management.property',
1424
+ columns: ['entity.title', 'name', 'title', 'isArchived'],
1425
+ conditions: [
1426
+ {
1427
+ name: 'entityId',
1428
+ operator: {
1429
+ type: 'equal',
1430
+ },
1431
+ value: 'id',
1432
+ },
1433
+ ],
1434
+ },
1435
+ ],
1266
1436
  groups: [
1267
1437
  {
1268
1438
  id: 'entity',
@@ -1838,7 +2008,7 @@ async function modulesEntityFactory(injector) {
1838
2008
  columns: ['module.title', 'name', 'title', 'isArchived'],
1839
2009
  conditions: [
1840
2010
  {
1841
- name: 'module.id',
2011
+ name: 'moduleId',
1842
2012
  operator: {
1843
2013
  type: 'equal',
1844
2014
  },
@@ -1851,7 +2021,7 @@ async function modulesEntityFactory(injector) {
1851
2021
  columns: ['module.title', 'name', 'title', 'isArchived'],
1852
2022
  conditions: [
1853
2023
  {
1854
- name: 'module.id',
2024
+ name: 'moduleId',
1855
2025
  operator: {
1856
2026
  type: 'equal',
1857
2027
  },
@@ -1864,7 +2034,7 @@ async function modulesEntityFactory(injector) {
1864
2034
  columns: ['module.title', 'name', 'title', 'isArchived'],
1865
2035
  conditions: [
1866
2036
  {
1867
- name: 'module.id',
2037
+ name: 'moduleId',
1868
2038
  operator: {
1869
2039
  type: 'equal',
1870
2040
  },
@@ -2521,6 +2691,10 @@ async function propertyEntityFactory(injector) {
2521
2691
  dataType: 'boolean',
2522
2692
  interface: {
2523
2693
  type: AXPWidgetsCatalog.toggle,
2694
+ options: {
2695
+ falsyText: 'False',
2696
+ trulyText: 'True',
2697
+ },
2524
2698
  },
2525
2699
  },
2526
2700
  },
@@ -2744,7 +2918,7 @@ async function propertyEntityFactory(injector) {
2744
2918
  layout: {
2745
2919
  positions: {
2746
2920
  lg: {
2747
- colSpan: 6,
2921
+ colSpan: 12,
2748
2922
  },
2749
2923
  },
2750
2924
  },
@@ -2820,7 +2994,7 @@ async function propertyEntityFactory(injector) {
2820
2994
  layout: {
2821
2995
  positions: {
2822
2996
  lg: {
2823
- colSpan: 6,
2997
+ colSpan: 12,
2824
2998
  },
2825
2999
  },
2826
3000
  },