@acorex-platform/module-settings-management-client 0.0.30 → 0.0.32
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/fesm2022/{acorex-platform-module-settings-management-client-setting-page.component-eAaMh3-8.mjs → acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs} +12 -3
- package/fesm2022/acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-settings-management-client-setting-view.component-CSJ-1pfO.mjs → acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs} +7 -3
- package/fesm2022/acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-settings-management-client.mjs +39 -8
- package/fesm2022/acorex-platform-module-settings-management-client.mjs.map +1 -1
- package/package.json +2 -2
- package/fesm2022/acorex-platform-module-settings-management-client-setting-page.component-eAaMh3-8.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-settings-management-client-setting-view.component-CSJ-1pfO.mjs.map +0 -1
|
@@ -166,6 +166,15 @@ class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {
|
|
|
166
166
|
}
|
|
167
167
|
else if (group) {
|
|
168
168
|
this.vm.setActivateGroupByName(group);
|
|
169
|
+
if (!this.vm.activateGroup() && this.deviceService.isLarge() && !this.vm.isSearching()) {
|
|
170
|
+
const fallback = this.vm.groups()?.[0]?.name;
|
|
171
|
+
if (fallback) {
|
|
172
|
+
this.vm.setActivateGroupByName(fallback);
|
|
173
|
+
this.recompute();
|
|
174
|
+
await this.router.navigate([fallback], { relativeTo: this.activatedRoute, replaceUrl: true });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
169
178
|
this.recompute();
|
|
170
179
|
}
|
|
171
180
|
if (hasQuery) {
|
|
@@ -397,7 +406,7 @@ class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {
|
|
|
397
406
|
provide: AXPPageLayoutBase,
|
|
398
407
|
useExisting: AXPSettingPageComponent,
|
|
399
408
|
},
|
|
400
|
-
], viewQueries: [{ propertyName: "sidebarTabs", first: true, predicate: ["sidebarTabs"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:var(--color-
|
|
409
|
+
], viewQueries: [{ propertyName: "sidebarTabs", first: true, predicate: ["sidebarTabs"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:rgba(var(--ax-sys-color-border-default))}.axp-setting-page axp-layout-section axp-layout-content .--item-container{display:grid;align-items:flex-start;column-gap:calc(var(--spacing, .25rem) * 6);row-gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4);grid-template-columns:minmax(0,1fr)}@media(width>=64rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 6)}}@media(width>=80rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 8)}}@media(width>=96rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 10)}}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container{grid-template-columns:minmax(11rem,34%) minmax(0,max-content)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container:has(.--is-hidden){display:none}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{min-width:0px;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{grid-column:auto}}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{min-width:0px;width:100%;max-width:100%;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{grid-column:2;width:clamp(14rem,36vw,24rem)}}@media(min-width:1024px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(16rem,28vw,28rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(18rem,24vw,32rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control{grid-template-columns:minmax(0,1fr)}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-label,.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{grid-column:1 / -1}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{width:100%;max-width:100%}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(20rem,50vw,36rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(24rem,40vw,42rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container axp-layout-description{margin-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}.axp-setting-page axp-layout-start-side{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.axp-setting-page #ax-settings{padding:calc(var(--spacing, .25rem) * 4)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-divide-y-reverse{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-divide-y-reverse: 0;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type:
|
|
401
410
|
//
|
|
402
411
|
AXSearchBoxModule }, { kind: "component", type: i3.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i7.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i7.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i8.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type:
|
|
403
412
|
//
|
|
@@ -434,8 +443,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
434
443
|
provide: AXPPageLayoutBase,
|
|
435
444
|
useExisting: AXPSettingPageComponent,
|
|
436
445
|
},
|
|
437
|
-
], host: { class: 'axp-setting-page' }, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:var(--color-
|
|
446
|
+
], host: { class: 'axp-setting-page' }, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:rgba(var(--ax-sys-color-border-default))}.axp-setting-page axp-layout-section axp-layout-content .--item-container{display:grid;align-items:flex-start;column-gap:calc(var(--spacing, .25rem) * 6);row-gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4);grid-template-columns:minmax(0,1fr)}@media(width>=64rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 6)}}@media(width>=80rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 8)}}@media(width>=96rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 10)}}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container{grid-template-columns:minmax(11rem,34%) minmax(0,max-content)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container:has(.--is-hidden){display:none}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{min-width:0px;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{grid-column:auto}}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{min-width:0px;width:100%;max-width:100%;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{grid-column:2;width:clamp(14rem,36vw,24rem)}}@media(min-width:1024px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(16rem,28vw,28rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(18rem,24vw,32rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control{grid-template-columns:minmax(0,1fr)}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-label,.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{grid-column:1 / -1}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{width:100%;max-width:100%}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(20rem,50vw,36rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(24rem,40vw,42rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container axp-layout-description{margin-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}.axp-setting-page axp-layout-start-side{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.axp-setting-page #ax-settings{padding:calc(var(--spacing, .25rem) * 4)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-divide-y-reverse{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-divide-y-reverse: 0;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
438
447
|
}], propDecorators: { sidebarTabs: [{ type: i0.ViewChild, args: ['sidebarTabs', { isSignal: true }] }] } });
|
|
439
448
|
|
|
440
449
|
export { AXPSettingPageComponent };
|
|
441
|
-
//# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-
|
|
450
|
+
//# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPBackButton, AXPExecuteCommand, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPSettingDefinitionGroup, AXPUnsavedChangesPopstateService, traceSettingsPageRouteLoad } from '@acorex-platform/framework-client/common';\n\nimport { AXHighlightService, AXPDeviceService, AXPHookService, AXPKeyboardShortcutRegistry } from '@acorex-platform/framework-client/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n resolveDetailsViewFooterCommandShortcuts,\n} from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, RouterModule } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXSearchBoxModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXTranslationModule,\n AXButtonModule,\n AXTabsModule,\n AXBadgeModule,\n AXLoadingModule,\n AXDropdownButtonModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n ],\n templateUrl: './setting-page.component.html',\n styleUrl: './setting-page.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXUnsubscriber,\n AXPSettingsViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPSettingPageComponent,\n },\n ],\n host: { class: 'axp-setting-page' },\n})\nexport class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {\n protected vm = inject(AXPSettingsViewModel);\n protected readonly deviceService = inject(AXPDeviceService);\n private activatedRoute = inject(ActivatedRoute);\n private unsubscribe = inject(AXUnsubscriber);\n private readonly highlightService = inject(AXHighlightService);\n private readonly hooks = inject(AXPHookService);\n\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly sidebarTabs = viewChild<AXTabsComponent>('sidebarTabs');\n private sidebarTabChangeSuppressed = false;\n /** Prevents VM→URL sync from stripping the route group during refresh hydration. */\n private loadingFromRoute = false;\n /** Serializes overlapping route loads (e.g. init + NavigationEnd) so `loadingFromRoute` cannot clear early. */\n private routeLoadChain: Promise<void> = Promise.resolve();\n\n /** Syncs the line indicator when the active group changes programmatically (route load / navigation). */\n #sidebarTabsIndicatorEffect = effect(() => {\n const groups = this.vm.groups();\n const activeName = this.vm.activateGroup()?.name;\n if (!groups.length || !activeName || this.vm.isSearching()) {\n return;\n }\n\n const index = groups.findIndex((group) => group.name === activeName);\n if (index < 0) {\n return;\n }\n\n untracked(() =>\n queueMicrotask(() => {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\n );\n });\n\n #effect = effect(() => {\n if (!this.vm.isLoaded() || this.loadingFromRoute) {\n return;\n }\n const expression = this.vm.searchExpression();\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n const group = this.vm.activateGroup()?.name;\n //\n if (this.vm.isSearching()) {\n this.router.navigate([app, 'settings', scope, group ?? ''], {\n queryParams: { q: expression },\n });\n setTimeout(() => {\n this.highlightService.highlight('#ax-settings', expression!);\n }, 100);\n return;\n }\n // On desktop, scope-only URLs are redirected to the first group in loadFromRoute.\n // Do not sync back to a group-less URL while that redirect is pending.\n if (!group && this.deviceService.isLarge()) {\n return;\n }\n this.router.navigate([app, 'settings', scope, group ?? '']);\n this.highlightService.clear();\n });\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.registerKeyboardShortcuts();\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-setting-page',\n isDirty: () => this.vm.isDirty(),\n });\n this.destroyRef.onDestroy(() => this.unsavedChangesPopstate.unregisterSource('axp-setting-page'));\n //\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.enqueueLoadFromRoute();\n });\n\n await this.enqueueLoadFromRoute();\n }\n\n private enqueueLoadFromRoute(): Promise<void> {\n const load = this.routeLoadChain.then(() => this.loadFromRoute());\n this.routeLoadChain = load.catch(() => undefined);\n return load;\n }\n\n private async loadFromRoute(): Promise<void> {\n if (this.unsavedChangesPopstate.isHandlingPopstate()) {\n return;\n }\n\n this.loadingFromRoute = true;\n try {\n const snapshot = this.activatedRoute.snapshot;\n const routerScope = resolvePlatformScopeKey(snapshot.paramMap.get('scope')?.trim().toLowerCase()!);\n const vmScope = this.vm.scope();\n const query = snapshot.queryParamMap.get('q');\n const groupFromRoute = this.getGroupFromRouteSync();\n //\n if (vmScope != routerScope || !this.vm.isLoaded()) {\n traceSettingsPageRouteLoad(\n routerScope,\n vmScope !== routerScope ? 'scope-changed' : 'not-loaded-yet',\n );\n await this.vm.load(routerScope);\n }\n\n const activeGroup = this.vm.activateGroup()?.name;\n if (groupFromRoute === activeGroup && this.vm.isDirty() && !this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return;\n }\n\n const hasQuery = !!query?.trim();\n if (groupFromRoute && groupFromRoute === activeGroup && !hasQuery && !this.vm.isSearching()) {\n return;\n }\n\n if (groupFromRoute !== activeGroup) {\n this.vm.unloadActivateGroup();\n }\n if (!hasQuery) {\n this.vm.clearSearch();\n }\n\n let group = groupFromRoute;\n if (!group && this.deviceService.isLarge() && !this.vm.isSearching()) {\n group = this.vm.groups()?.[0]?.name;\n if (group) {\n this.vm.setActivateGroupByName(group);\n this.recompute();\n await this.router.navigate([group], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n } else if (group) {\n this.vm.setActivateGroupByName(group);\n if (!this.vm.activateGroup() && this.deviceService.isLarge() && !this.vm.isSearching()) {\n const fallback = this.vm.groups()?.[0]?.name;\n if (fallback) {\n this.vm.setActivateGroupByName(fallback);\n this.recompute();\n await this.router.navigate([fallback], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n }\n this.recompute();\n }\n if (hasQuery) {\n await this.vm.search(query!);\n this.recompute();\n }\n } finally {\n this.loadingFromRoute = false;\n }\n }\n\n private getGroupFromRouteSync(): string | undefined {\n let route: ActivatedRouteSnapshot | null = this.activatedRoute.snapshot;\n while (route) {\n const group = route.paramMap.get('group');\n if (group) {\n return group;\n }\n route = route.firstChild ?? null;\n }\n return undefined;\n }\n\n /**\n * `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + navigate.\n */\n protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void {\n if (this.sidebarTabChangeSuppressed) {\n return;\n }\n\n const groups = this.vm.groups();\n const target = groups[event.index];\n const activeName = this.vm.activateGroup()?.name;\n\n if (!target || target.name === activeName || this.vm.isSearching()) {\n return;\n }\n\n const activeIndex = groups.findIndex((group) => group.name === activeName);\n if (activeIndex >= 0) {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(activeIndex);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }\n\n void this.completeGroupSwitch(target.name);\n }\n\n protected async handleSelectGroup(item: AXPSettingDefinitionGroup) {\n if (item.name === this.vm.activateGroup()?.name) {\n return;\n }\n\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([`${item.name}`], { relativeTo: this.activatedRoute });\n }\n\n private async completeGroupSwitch(groupName: string): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([groupName], { relativeTo: this.activatedRoute });\n }\n\n //#region ---- Keyboard Shortcuts ----\n\n private registerKeyboardShortcuts(): void {\n const saveKeys = resolveDetailsViewFooterCommandShortcuts('update-entity');\n const discardKeys = resolveDetailsViewFooterCommandShortcuts('discard');\n const group = '@general:keyboard-shortcuts.groups.settings';\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n if (saveKeys?.length) {\n shortcuts.push({\n keys: saveKeys,\n title: '@general:actions.apply.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteSaveShortcut(),\n handler: () => {\n void this.vm.apply();\n },\n });\n }\n\n if (discardKeys?.length) {\n shortcuts.push({\n keys: discardKeys,\n title: '@general:actions.discard.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut();\n },\n });\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id: 'settings-page-core',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: group,\n shortcuts,\n });\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private canExecuteDiscardShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private async executeDiscardViaShortcut(): Promise<void> {\n if (!this.canExecuteDiscardShortcut()) {\n return;\n }\n\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(true, {\n title: '@general:messages.unsaved-changes.title',\n message: '@general:messages.discard-changes.message',\n approveLeaveOnConfirm: false,\n });\n if (!confirmed) {\n return;\n }\n\n await this.vm.discard();\n }\n\n //#endregion\n\n //#region ---- Leave Page Gate ----\n\n async canDeactivate(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return true;\n }\n\n return this.confirmLeaveIfDirty();\n }\n\n override onBeforeTabClose(): Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n private shouldPromptLeave(): boolean {\n return this.vm.isDirty();\n }\n\n private async confirmLeaveIfDirty(): Promise<boolean> {\n const wasDirty = this.shouldPromptLeave();\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(wasDirty);\n if (confirmed && wasDirty) {\n await this.vm.discard();\n }\n return confirmed;\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (!this.vm.activateGroup()) {\n return [];\n }\n\n const items: AXPActionMenuItem[] = [\n {\n title: await this.translateService.translateAsync(\n '@settings-management:settings.actions.restore-defaults.title',\n ),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'restore-defaults' },\n },\n ];\n\n const payload = await this.hooks.runAsync('settings-page.secondary-actions', { items });\n return payload.items ?? items;\n }\n\n override async getPageTitle(): Promise<string> {\n const group = this.vm.activateGroup();\n const groupHeadingKey = group?.pageTitle ?? group?.title;\n const scopeTitle = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n );\n if (!this.vm.isSearching()) {\n return groupHeadingKey ?? scopeTitle;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.title', {\n params: { q: this.vm.searchExpression() },\n });\n }\n }\n\n override async getPageDescription(): Promise<string | null> {\n const groupDescription = this.vm.activateGroup()?.description;\n const scopeDescription = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeDescription(),\n );\n if (!this.vm.isSearching()) {\n return groupDescription ?? scopeDescription;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.description');\n }\n }\n\n override hasUnsavedChanges(): boolean {\n return this.vm.isDirty();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n if (this.vm.activateGroup()) {\n return {\n title: await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n ),\n };\n }\n return null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n this.router.navigate([app, 'settings', scope]);\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'restore-defaults':\n await this.vm.resetToDefault();\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>"],"names":["i9"],"mappings":"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"}
|
|
@@ -162,6 +162,10 @@ class AXPSettingsViewComponent {
|
|
|
162
162
|
}
|
|
163
163
|
//#endregion
|
|
164
164
|
//#region ---- Row Visibility ----
|
|
165
|
+
/** Whether a section has at least one visible setting row. */
|
|
166
|
+
isSectionVisible(section) {
|
|
167
|
+
return section.settings.some((setting) => this.isSettingRowVisible(setting));
|
|
168
|
+
}
|
|
165
169
|
/** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */
|
|
166
170
|
isSettingRowVisible(setting) {
|
|
167
171
|
const visibility = setting.widget.options?.['visibility'];
|
|
@@ -256,7 +260,7 @@ class AXPSettingsViewComponent {
|
|
|
256
260
|
return getSmart(context, key);
|
|
257
261
|
}
|
|
258
262
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSettingsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
259
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPSettingsViewComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: "container", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type:
|
|
263
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPSettingsViewComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: "container", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type:
|
|
260
264
|
//
|
|
261
265
|
AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i5$1.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type:
|
|
262
266
|
//
|
|
@@ -286,7 +290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
286
290
|
AXPThemeLayoutSectionComponent,
|
|
287
291
|
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
288
292
|
class: 'w-full',
|
|
289
|
-
}, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>" }]
|
|
293
|
+
}, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>" }]
|
|
290
294
|
}], propDecorators: { form: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXFormComponent), { isSignal: true }] }], container: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPWidgetContainerComponent), { isSignal: true }] }] } });
|
|
291
295
|
function hasSettingContextValue(context, key) {
|
|
292
296
|
const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);
|
|
@@ -303,4 +307,4 @@ function hasSettingContextValue(context, key) {
|
|
|
303
307
|
}
|
|
304
308
|
|
|
305
309
|
export { AXPSettingsViewComponent };
|
|
306
|
-
//# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-
|
|
310
|
+
//# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.html"],"sourcesContent":["import { AXPContextChangeEvent, getSmart } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingLayoutOptions,\n AXPSettingSectionAction,\n} from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPWidgetCoreModule, AXPWidgetContainerComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n templateUrl: 'setting-view.component.html',\n imports: [\n CommonModule,\n FormsModule,\n //\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXButtonModule,\n AXBadgeModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXDropdownButtonModule,\n AXLoadingModule,\n AXFormModule,\n AXValidationModule,\n //\n AXPWidgetCoreModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'w-full',\n },\n})\nexport class AXPSettingsViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPSettingsViewModel);\n private readonly commandService = inject(AXPCommandService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly form = viewChild(AXFormComponent);\n private readonly container = viewChild(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Cached row visibility keyed by setting name (from `widget.options.visibility`). */\n protected readonly rowVisibility = signal<Record<string, boolean>>({});\n\n private visibilityRefreshGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle Effects ----\n\n #registerFormEffect = effect(() => {\n const formRef = this.form();\n if (formRef) {\n this.vm.registerForm(formRef);\n }\n });\n\n #statusEffect = effect(() => {\n this.container()?.builderService.setStatus(this.vm.status());\n });\n\n #formDirtyEffect = effect(() => {\n if (this.vm.syncingBaseline()) {\n return;\n }\n\n const container = this.container();\n const isDirty = container?.isFormDirty() ?? false;\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n untracked(() => this.vm.setFormDirty(isDirty));\n });\n\n #applySyncEffect = effect(() => {\n const nonce = this.vm.applySyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(async () => {\n this.vm.setSyncingBaseline(true);\n try {\n if (container) {\n await container.replaceContext(this.vm.context());\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #discardSyncEffect = effect(() => {\n const nonce = this.vm.discardSyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(() => {\n try {\n if (container) {\n container.revertAndSettle();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #rowVisibilityEffect = effect(() => {\n const context = this.vm.context();\n this.vm.activateGroup();\n this.vm.searchResults();\n this.vm.isSearching();\n const container = this.container();\n\n untracked(() => {\n void this.refreshRowVisibility(context, container);\n });\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent): void {\n this.vm.updateContext(e.data);\n }\n\n protected isSectionActionDisabled(action: AXPSettingSectionAction): boolean {\n if (!action.command?.name || !this.commandService.exists(action.command.name)) {\n return true;\n }\n\n if (action.disabledWhenDirty && this.vm.isDirty()) {\n return true;\n }\n\n if (action.requiredSettingKeys?.length) {\n const context = this.vm.context();\n if (!action.requiredSettingKeys.every((key) => hasSettingContextValue(context, key))) {\n return true;\n }\n }\n\n return false;\n }\n\n protected runSectionAction(action: AXPSettingSectionAction): void {\n if (this.isSectionActionDisabled(action) || !action.command?.name) {\n return;\n }\n void this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ---- Layout Helpers ----\n\n /** Side-by-side settings row with wider control column (`layout.positions` without `stacked`). */\n protected hasWideControlLayout(layout?: AXPSettingLayoutOptions): boolean {\n return !!layout?.positions && layout.stacked !== true;\n }\n\n //#endregion\n\n //#region ---- Row Visibility ----\n\n /** Whether a section has at least one visible setting row. */\n protected isSectionVisible(section: { settings: AXPSettingDefinition[] }): boolean {\n return section.settings.some((setting) => this.isSettingRowVisible(setting));\n }\n\n /** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */\n protected isSettingRowVisible(setting: AXPSettingDefinition): boolean {\n const visibility = setting.widget.options?.['visibility'];\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n return this.rowVisibility()[setting.name] ?? true;\n }\n\n private async refreshRowVisibility(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): Promise<void> {\n const generation = ++this.visibilityRefreshGeneration;\n const settings = this.collectVisibleSettings();\n const scope = this.buildExpressionScope(context, container);\n const next: Record<string, boolean> = {};\n\n await Promise.all(\n settings.map(async (setting) => {\n next[setting.name] = await this.resolveRowVisibility(setting.widget.options?.['visibility'], scope);\n }),\n );\n\n if (generation !== this.visibilityRefreshGeneration) {\n return;\n }\n\n this.rowVisibility.set(next);\n }\n\n private collectVisibleSettings(): AXPSettingDefinition[] {\n if (this.vm.isSearching()) {\n const results = this.vm.searchResults();\n if (!results?.length) {\n return [];\n }\n return results.flatMap((group) => group.sections.flatMap((section) => section.settings));\n }\n\n const group = this.vm.activateGroup();\n if (!group?.sections.length) {\n return [];\n }\n\n return group.sections.flatMap((section) => section.settings);\n }\n\n private async resolveRowVisibility(\n visibility: unknown,\n scope: AXPExpressionEvaluatorScope,\n ): Promise<boolean> {\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n if (typeof visibility === 'string') {\n if (this.expressionEvaluator.isExpression(visibility)) {\n return Boolean(await this.expressionEvaluator.evaluate(visibility, scope));\n }\n return Boolean(visibility);\n }\n return true;\n }\n\n private buildExpressionScope(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): AXPExpressionEvaluatorScope {\n return {\n context: {\n eval: (path: string) => {\n if (container) {\n const fromContainer = container.contextService.getValue(path);\n if (fromContainer !== undefined) {\n return fromContainer;\n }\n }\n return this.readSettingContextValue(context, path);\n },\n set: (path: string, value: unknown) => {\n container?.contextService.update(path, value, { origin: 'user' });\n },\n data: () => (container?.contextService.data() as Record<string, unknown>) ?? context,\n isDirty: () => container?.contextService.isDirty() ?? false,\n options: (path?: string) => {\n if (!container) {\n return undefined;\n }\n if (path == null || path === '') {\n return container.contextService.getValue('options');\n }\n return container.contextService.getValue(`options.${path}`);\n },\n },\n events: {},\n widget: {},\n methods: {},\n vars: {},\n };\n }\n\n /** Flat persisted setting keys may contain dots (e.g. `Common:Setting:Navigation.Mode`). */\n private readSettingContextValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n }\n}\n\nfunction hasSettingContextValue(context: Record<string, unknown>, key: string): boolean {\n const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);\n\n if (value == null) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0;\n }\n\n return true;\n}\n","<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>"],"names":["i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEa,wBAAwB,CAAA;AA7BrC,IAAA,WAAA,GAAA;;AAgCqB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,CAAC;QAC3D,IAAA,CAAA,IAAI,GAAG,SAAS,CAAC,eAAe;iFAAC;QACjC,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,2BAA2B;sFAAC;;;;QAOhD,IAAA,CAAA,aAAa,GAAG,MAAM,CAA0B,EAAE;0FAAC;QAE9D,IAAA,CAAA,2BAA2B,GAAG,CAAC;;;AAMvC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,MAAK;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;YAC3B,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;YAC/B;QACF,CAAC;gGAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9D,CAAC;0FAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE;gBAC7B;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,OAAO,GAAG,SAAS,EAAE,WAAW,EAAE,IAAI,KAAK;YACjD,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE;gBACnC;YACF;AACA,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;6FAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,SAAS,CAAC,YAAW;AACnB,gBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI;oBACF,IAAI,SAAS,EAAE;wBACb,MAAM,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AACjD,wBAAA,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAA6B,CAAC;oBACrF;yBAAO;AACL,wBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;oBAC7B;gBACF;wBAAU;AACR,oBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;6FAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;AACxC,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI;oBACF,IAAI,SAAS,EAAE;wBACb,SAAS,CAAC,eAAe,EAAE;AAC3B,wBAAA,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAA6B,CAAC;oBACrF;gBACF;wBAAU;AACR,oBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;+FAAC;AAEF,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,MAAK;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,SAAS,CAAC,MAAK;gBACb,KAAK,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC;AACpD,YAAA,CAAC,CAAC;QACJ,CAAC;iGAAC;AAwKH,IAAA;;;AArPC,IAAA,mBAAmB;AAOnB,IAAA,aAAa;AAIb,IAAA,gBAAgB;AAahB,IAAA,gBAAgB;AAuBhB,IAAA,kBAAkB;AAoBlB,IAAA,oBAAoB;;;AAgBV,IAAA,oBAAoB,CAAC,CAAwB,EAAA;QACrD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/B;AAEU,IAAA,uBAAuB,CAAC,MAA+B,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7E,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE;AACpF,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,gBAAgB,CAAC,MAA+B,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE;YACjE;QACF;QACA,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACrF;;;;AAOU,IAAA,oBAAoB,CAAC,MAAgC,EAAA;QAC7D,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;IACvD;;;;AAOU,IAAA,gBAAgB,CAAC,OAA6C,EAAA;AACtE,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9E;;AAGU,IAAA,mBAAmB,CAAC,OAA6B,EAAA;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;AACzD,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,OAAO,UAAU;QACnB;QACA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI;IACnD;AAEQ,IAAA,MAAM,oBAAoB,CAChC,OAAgC,EAChC,SAAkD,EAAA;AAElD,QAAA,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,2BAA2B;AACrD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC;QAC3D,MAAM,IAAI,GAA4B,EAAE;AAExC,QAAA,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,OAAO,OAAO,KAAI;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,CAAC;QACrG,CAAC,CAAC,CACH;AAED,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,2BAA2B,EAAE;YACnD;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AACpB,gBAAA,OAAO,EAAE;YACX;YACA,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1F;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE;AAC3B,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC;IAC9D;AAEQ,IAAA,MAAM,oBAAoB,CAChC,UAAmB,EACnB,KAAkC,EAAA;AAElC,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,OAAO,UAAU;QACnB;AACA,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAA,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5E;AACA,YAAA,OAAO,OAAO,CAAC,UAAU,CAAC;QAC5B;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,oBAAoB,CAC1B,OAAgC,EAChC,SAAkD,EAAA;QAElD,OAAO;AACL,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,CAAC,IAAY,KAAI;oBACrB,IAAI,SAAS,EAAE;wBACb,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7D,wBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,4BAAA,OAAO,aAAa;wBACtB;oBACF;oBACA,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC;gBACpD,CAAC;AACD,gBAAA,GAAG,EAAE,CAAC,IAAY,EAAE,KAAc,KAAI;AACpC,oBAAA,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACnE,CAAC;gBACD,IAAI,EAAE,MAAO,SAAS,EAAE,cAAc,CAAC,IAAI,EAA8B,IAAI,OAAO;gBACpF,OAAO,EAAE,MAAM,SAAS,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,KAAK;AAC3D,gBAAA,OAAO,EAAE,CAAC,IAAa,KAAI;oBACzB,IAAI,CAAC,SAAS,EAAE;AACd,wBAAA,OAAO,SAAS;oBAClB;oBACA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;wBAC/B,OAAO,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACrD;oBACA,OAAO,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAC;gBAC7D,CAAC;AACF,aAAA;AACD,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,EAAE,EAAE;SACT;IACH;;IAGQ,uBAAuB,CAAC,OAAgC,EAAE,GAAW,EAAA;AAC3E,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC;QACrB;AACA,QAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IAC/B;8GA1QW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMD,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACV,2BAA2B,gEC9EpE,yuHAyFU,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5CN,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAEX,gBAAA,iBAAiB,sVACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,8BACjB,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,yWACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAElB,gBAAA,mBAAmB,6aACnB,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,6BAA6B,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,6BAA6B,8DAC7B,8BAA8B,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQrB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA7BpC,SAAS;AAEC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;;wBAEX,iBAAiB;wBACjB,mBAAmB;wBACnB,cAAc;wBACd,aAAa;wBACb,mBAAmB;wBACnB,iBAAiB;wBACjB,sBAAsB;wBACtB,eAAe;wBACf,YAAY;wBACZ,kBAAkB;;wBAElB,mBAAmB;wBACnB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,6BAA6B;wBAC7B,8BAA8B;AAC/B,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,QAAQ;AAChB,qBAAA,EAAA,QAAA,EAAA,yuHAAA,EAAA;AAQiC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,eAAe,wFACV,2BAA2B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAsQpE,SAAS,sBAAsB,CAAC,OAAgC,EAAE,GAAW,EAAA;AAC3E,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;AAExG,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;IAChC;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;IAC5C;AAEA,IAAA,OAAO,IAAI;AACb;;;;"}
|
|
@@ -20,6 +20,32 @@ import { AXPCommonMenuKeys, AXPCommonPermissionGroupKeys } from '@acorex-platfor
|
|
|
20
20
|
import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
|
|
21
21
|
import { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';
|
|
22
22
|
|
|
23
|
+
/** Settings with `widget.options.visibility === false` are registered but omitted from the settings UI. */
|
|
24
|
+
function isSettingStaticallyHidden(setting) {
|
|
25
|
+
return setting.widget.options?.['visibility'] === false;
|
|
26
|
+
}
|
|
27
|
+
function filterSettingsPageVisibleSettings(settings) {
|
|
28
|
+
return settings.filter((setting) => !isSettingStaticallyHidden(setting));
|
|
29
|
+
}
|
|
30
|
+
function sectionHasSettingsPageVisibleRows(section) {
|
|
31
|
+
return filterSettingsPageVisibleSettings(section.settings).length > 0;
|
|
32
|
+
}
|
|
33
|
+
/** Drop statically hidden rows, then omit sections/groups that have nothing left to render. */
|
|
34
|
+
function filterSettingsPageVisibleGroups(groups) {
|
|
35
|
+
return groups
|
|
36
|
+
.map((group) => ({
|
|
37
|
+
...group,
|
|
38
|
+
sections: group.sections
|
|
39
|
+
.map((section) => ({
|
|
40
|
+
...section,
|
|
41
|
+
settings: filterSettingsPageVisibleSettings(section.settings),
|
|
42
|
+
}))
|
|
43
|
+
.filter((section) => section.settings.length > 0),
|
|
44
|
+
groups: filterSettingsPageVisibleGroups(group.groups),
|
|
45
|
+
}))
|
|
46
|
+
.filter((group) => group.sections.length > 0 || group.groups.length > 0);
|
|
47
|
+
}
|
|
48
|
+
|
|
23
49
|
/**
|
|
24
50
|
* Filters setting groups for in-page search. When `settingSearchTextByKey` is provided (lowercased
|
|
25
51
|
* translated blobs keyed by setting name), setting matches use it; otherwise a raw key fallback is used.
|
|
@@ -59,8 +85,9 @@ function searchSettings(groups, search, settingSearchTextByKey) {
|
|
|
59
85
|
addGroupToResult(group, matchedSections, settingMatchResult);
|
|
60
86
|
}
|
|
61
87
|
};
|
|
62
|
-
const sectionMatches = (section) => section
|
|
63
|
-
section.
|
|
88
|
+
const sectionMatches = (section) => sectionHasSettingsPageVisibleRows(section) &&
|
|
89
|
+
(section.name.toLowerCase().includes(normalizedSearch) ||
|
|
90
|
+
section.title.toLowerCase().includes(normalizedSearch));
|
|
64
91
|
const settingSearchBlob = (setting) => {
|
|
65
92
|
const fromIndex = settingSearchTextByKey?.[setting.name];
|
|
66
93
|
if (fromIndex) {
|
|
@@ -71,7 +98,7 @@ function searchSettings(groups, search, settingSearchTextByKey) {
|
|
|
71
98
|
.toLowerCase();
|
|
72
99
|
};
|
|
73
100
|
const filterSettings = (section) => {
|
|
74
|
-
const matchedSettings = section.settings.filter((setting) => {
|
|
101
|
+
const matchedSettings = filterSettingsPageVisibleSettings(section.settings).filter((setting) => {
|
|
75
102
|
const blob = settingSearchBlob(setting);
|
|
76
103
|
return (setting.name.toLowerCase().includes(normalizedSearch) ||
|
|
77
104
|
blob.includes(normalizedSearch));
|
|
@@ -170,7 +197,7 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
|
|
|
170
197
|
status: AXPPageStatus.Processing,
|
|
171
198
|
});
|
|
172
199
|
try {
|
|
173
|
-
const groups = await settingDefinitionService.getListAsync(scope);
|
|
200
|
+
const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(scope));
|
|
174
201
|
patchState(store, {
|
|
175
202
|
groups: groups,
|
|
176
203
|
});
|
|
@@ -205,7 +232,7 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
|
|
|
205
232
|
},
|
|
206
233
|
async reload() {
|
|
207
234
|
await settingDefinitionService.reload();
|
|
208
|
-
const groups = await settingDefinitionService.getListAsync(store.scope());
|
|
235
|
+
const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));
|
|
209
236
|
const oldActivateGroupName = store.activateGroup()?.name;
|
|
210
237
|
patchState(store, {
|
|
211
238
|
groups: groups,
|
|
@@ -222,6 +249,9 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
|
|
|
222
249
|
const walkSections = async (sections) => {
|
|
223
250
|
for (const section of sections) {
|
|
224
251
|
for (const setting of section.settings) {
|
|
252
|
+
if (isSettingStaticallyHidden(setting)) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
225
255
|
const parts = [await translateService.translateAsync(setting.title)];
|
|
226
256
|
if (setting.description) {
|
|
227
257
|
parts.push(await translateService.translateAsync(setting.description));
|
|
@@ -544,7 +574,8 @@ class AXPSettingSearchProvider {
|
|
|
544
574
|
}
|
|
545
575
|
return parts.join(' ').toLowerCase();
|
|
546
576
|
}));
|
|
547
|
-
const searchResults = allSettings.filter((setting, i) =>
|
|
577
|
+
const searchResults = allSettings.filter((setting, i) => !isSettingStaticallyHidden(setting) &&
|
|
578
|
+
(translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle)));
|
|
548
579
|
return sortBy(searchResults.map((setting) => ({
|
|
549
580
|
title: setting.title,
|
|
550
581
|
description: setting.description,
|
|
@@ -845,13 +876,13 @@ function routesFacory() {
|
|
|
845
876
|
children: [
|
|
846
877
|
{
|
|
847
878
|
path: '',
|
|
848
|
-
loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-
|
|
879
|
+
loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs').then((c) => c.AXPSettingPageComponent),
|
|
849
880
|
canDeactivate: [axpSettingsPageCanDeactivateGuard],
|
|
850
881
|
data: { reuse: true },
|
|
851
882
|
children: [
|
|
852
883
|
{
|
|
853
884
|
path: ':group',
|
|
854
|
-
loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-
|
|
885
|
+
loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs').then((c) => c.AXPSettingsViewComponent),
|
|
855
886
|
data: { reuse: false },
|
|
856
887
|
},
|
|
857
888
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-settings-management-client.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/convert-setting-data.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings.viewmodel.ts","../../../../libs/modules/settings-management/client/src/lib/manifest.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-page-can-deactivate.guard.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-scope.guard.ts","../../../../libs/modules/settings-management/client/src/lib/menu.provider.ts","../../../../libs/modules/settings-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/profile-page/settings-management-profile-sections.hook.ts","../../../../libs/modules/settings-management/client/src/lib/profile-slot-settings-menu.hook.ts","../../../../libs/modules/settings-management/client/src/lib/settings-management.module.ts","../../../../libs/modules/settings-management/client/src/acorex-platform-module-settings-management-client.ts"],"sourcesContent":["import { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from '@acorex-platform/framework-client/common';\n\n/**\n * Filters setting groups for in-page search. When `settingSearchTextByKey` is provided (lowercased\n * translated blobs keyed by setting name), setting matches use it; otherwise a raw key fallback is used.\n */\nexport function searchSettings(\n groups: AXPSettingDefinitionGroup[],\n search: string,\n settingSearchTextByKey?: Record<string, string>,\n): AXPSettingDefinitionGroup[] {\n const trimmed = search?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n\n const normalizedSearch = trimmed.toLowerCase();\n const sectionMatchResult: AXPSettingDefinitionGroup[] = [];\n const settingMatchResult: AXPSettingDefinitionGroup[] = [];\n const processedGroups = new Set<string>();\n\n const createGroupIdentifier = (group: AXPSettingDefinitionGroup): string => `${group.name}-${group.title}`;\n\n const addGroupToResult = (\n group: AXPSettingDefinitionGroup,\n sections: AXPSettingDefinitionSection[],\n resultArray: AXPSettingDefinitionGroup[]\n ) => {\n const groupId = createGroupIdentifier(group);\n if (!processedGroups.has(groupId)) {\n resultArray.push({\n ...group,\n sections,\n groups: [], // Exclude nested groups\n });\n processedGroups.add(groupId);\n }\n };\n\n const processSections = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => boolean\n ) => {\n const matchedSections = group.sections.filter(filterFn);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, sectionMatchResult);\n }\n };\n\n const processSettings = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => AXPSettingDefinitionSection | null\n ) => {\n const matchedSections = group.sections\n .map(filterFn)\n .filter((section): section is AXPSettingDefinitionSection => section !== null);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, settingMatchResult);\n }\n };\n\n const sectionMatches = (section: AXPSettingDefinitionSection): boolean =>\n section.name.toLowerCase().includes(normalizedSearch) ||\n section.title.toLowerCase().includes(normalizedSearch);\n\n const settingSearchBlob = (setting: AXPSettingDefinition): string => {\n const fromIndex = settingSearchTextByKey?.[setting.name];\n if (fromIndex) {\n return fromIndex;\n }\n return [setting.name, setting.title, setting.description ?? '', ...(setting.searchTagKeys ?? [])]\n .join(' ')\n .toLowerCase();\n };\n\n const filterSettings = (section: AXPSettingDefinitionSection): AXPSettingDefinitionSection | null => {\n const matchedSettings = section.settings.filter((setting) => {\n const blob = settingSearchBlob(setting);\n return (\n setting.name.toLowerCase().includes(normalizedSearch) ||\n blob.includes(normalizedSearch)\n );\n });\n return matchedSettings.length > 0 ? { ...section, settings: matchedSettings } : null;\n };\n\n const processGroupRecursively = (group: AXPSettingDefinitionGroup) => {\n processSections(group, sectionMatches); // Match sections with all settings\n processSettings(group, filterSettings); // Match settings within sections\n group.groups.forEach(processGroupRecursively); // Recurse into nested groups\n };\n\n groups.forEach(processGroupRecursively);\n\n return [...sectionMatchResult, ...settingMatchResult];\n}\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n AXPSettingDefinitionSection,\n AXPSettingsService,\n traceSettingsPageLoadComplete,\n traceSettingsPageLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPPlatformScope,\n AXPPlatformScopeKey,\n getSmart,\n resolvePlatformScopeName,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty, isEqual, isNil } from 'lodash';\nimport { filter, merge } from 'rxjs';\nimport { searchSettings } from './convert-setting-data';\n\n/** Delay before reload so the success toast is visible. */\nconst PAGE_REFRESH_DELAY_MS = 500;\n\n/** Setting keys are flat (may contain dots). Prefer own-property, then smart path. */\nfunction readFlatSettingValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n}\n\nfunction collectSettingKeys(groups: AXPSettingDefinitionGroup[]): string[] {\n const keys: string[] = [];\n const walkSections = (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n keys.push(setting.name);\n }\n }\n };\n const walkGroups = (gs: AXPSettingDefinitionGroup[]) => {\n for (const group of gs) {\n walkSections(group.sections);\n walkGroups(group.groups);\n }\n };\n walkGroups(groups);\n return keys;\n}\n\nexport const AXPSettingsViewModel = signalStore(\n withState(() => ({\n groups: [] as AXPSettingDefinitionGroup[],\n activateGroup: undefined as AXPSettingDefinitionGroup | undefined,\n scope: 'U' as AXPPlatformScopeKey,\n //\n searchExpression: null as string | null,\n settingSearchTextByKey: {} as Record<string, string>,\n //\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n /** Synced from {@link AXPWidgetContainerComponent.isFormDirty}. */\n formDirty: false,\n /** Bumped after apply so the settings view can commit the container saved baseline. */\n applySyncNonce: 0,\n /** Suppresses container→VM dirty echo while post-save baseline sync runs. */\n syncingBaseline: false,\n /** Bumped after discard so the settings view can revert the container to saved. */\n discardSyncNonce: 0,\n //\n status: AXPPageStatus.Processing,\n form: null as AXFormComponent | null,\n })),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n searchResults: computed(() => {\n const q = store.searchExpression();\n if (q == null || !q.trim()) {\n return [];\n }\n return searchSettings(store.groups(), q, store.settingSearchTextByKey());\n }),\n hasActivateGroup: computed(() => store.activateGroup() != null),\n showGroups: computed(() => store.activateGroup() != null && deviceService.isLarge()),\n scopeTitle: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.title`;\n }),\n scopeDescription: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.description`;\n }),\n isSearching: computed(() => store.searchExpression() != null),\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isLoaded: computed(() => store.groups().length > 0),\n isDirty: computed(() => store.formDirty()),\n })),\n withMethods(\n (\n store,\n settingDefinitionService = inject(AXPSettingDefinitionProviderService),\n settingValueService = inject(AXPSettingsService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n ) => ({\n registerForm(form: AXFormComponent) {\n patchState(store, {\n form: form,\n });\n },\n async load(scope: AXPPlatformScopeKey) {\n traceSettingsPageLoadStarted(scope, 'settings-page-vm-load');\n const startedAt = Date.now();\n patchState(store, {\n scope: scope,\n status: AXPPageStatus.Processing,\n });\n try {\n const groups = await settingDefinitionService.getListAsync(scope);\n patchState(store, {\n groups: groups,\n });\n await this.rebuildSettingSearchIndex();\n // Settings admin must bind server partition values. `all()` alone can reuse a warm\n // IndexedDB/memory snapshot that omits non-cacheable keys (e.g. SMTP).\n await settingValueService.reload(scope as AXPPlatformScope, 'settings-page-open');\n const currentContext = await settingValueService.scope(scope as AXPPlatformScope).all();\n const defaults = await settingValueService.scope(scope as AXPPlatformScope).defaultValues();\n const context = { ...defaults, ...currentContext };\n patchState(store, {\n context,\n previousContext: cloneDeep(context),\n formDirty: false,\n });\n traceSettingsPageLoadComplete({\n scope,\n groupCount: groups.length,\n valueKeyCount: Object.keys(store.context()).length,\n durationMs: Date.now() - startedAt,\n });\n } catch (error) {\n console.error('Settings page load failed', error);\n } finally {\n // Always leave Processing so Apply/Discard are not stuck disabled after a partial load.\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n },\n async reload() {\n await settingDefinitionService.reload();\n const groups = await settingDefinitionService.getListAsync(store.scope());\n const oldActivateGroupName = store.activateGroup()?.name;\n patchState(store, {\n groups: groups,\n activateGroup: undefined,\n });\n if (oldActivateGroupName) {\n this.setActivateGroupByName(oldActivateGroupName);\n }\n await this.rebuildSettingSearchIndex();\n },\n async rebuildSettingSearchIndex() {\n const groups = store.groups();\n const map: Record<string, string> = {};\n const walkSections = async (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n const parts: string[] = [await translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await translateService.translateAsync(key));\n }\n }\n map[setting.name] = parts.join(' ').toLowerCase();\n }\n }\n };\n const walkGroups = async (gs: AXPSettingDefinitionGroup[]) => {\n for (const g of gs) {\n await walkSections(g.sections);\n await walkGroups(g.groups);\n }\n };\n await walkGroups(groups);\n patchState(store, { settingSearchTextByKey: map });\n },\n updateContext(context: Record<string, any>) {\n patchState(store, {\n context,\n });\n },\n setFormDirty(dirty: boolean) {\n if (store.syncingBaseline() || store.formDirty() === dirty) {\n return;\n }\n patchState(store, {\n formDirty: dirty,\n });\n },\n setSyncingBaseline(syncing: boolean) {\n if (store.syncingBaseline() === syncing) {\n return;\n }\n patchState(store, {\n syncingBaseline: syncing,\n });\n },\n setActivateGroup(group: AXPSettingDefinitionGroup) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n },\n unloadActivateGroup() {\n patchState(store, {\n activateGroup: undefined,\n formDirty: false,\n });\n },\n setActivateGroupByName(name: string) {\n const group = store.groups().find((g) => g.name === name);\n if (group) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n }\n },\n //\n async search(expression: string) {\n if (!isNil(expression) && !isEmpty(expression)) {\n patchState(store, {\n searchExpression: expression,\n formDirty: false,\n });\n } else {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n }\n },\n clearSearch() {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n },\n async apply(): Promise<boolean> {\n const form = store.form();\n if (!form || !store.isDirty()) {\n return false;\n }\n\n form.resetErrors();\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const formResult = await form.validate();\n if (!formResult.result) {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:actions.apply.messages.invalid.title'),\n content: await translateService.translateAsync('@general:actions.apply.messages.invalid.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n\n // Persist only known flat setting keys. Context may contain nested parent objects\n // created by path-based writes (e.g. Common:Setting:Offline → { AllowWorkingOffline }).\n const settingKeys = collectSettingKeys(store.groups());\n const context = store.context();\n const previous = store.previousContext();\n const changedValues: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = readFlatSettingValue(context, key);\n const previousValue = readFlatSettingValue(previous, key);\n if (!isEqual(value, previousValue)) {\n changedValues[key] = value;\n }\n }\n await settingValueService.scope(store.scope() as AXPPlatformScope).set(changedValues, { flush: true });\n\n const refreshByKey = await settingDefinitionService.requiresPageRefreshByKey();\n const needsPageRefresh = Object.keys(changedValues).some((key) => refreshByKey[key]);\n\n // Keep VM context flat for the next edit session (drop accidental nested parents).\n const nextContext: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = Object.prototype.hasOwnProperty.call(changedValues, key)\n ? changedValues[key]\n : readFlatSettingValue(context, key);\n if (value !== undefined) {\n nextContext[key] = value;\n }\n }\n\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: nextContext,\n previousContext: cloneDeep(nextContext),\n formDirty: false,\n applySyncNonce: store.applySyncNonce() + 1,\n });\n\n const successTitleKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.title'\n : '@settings-management:settings.actions.apply.success.title';\n const successMessageKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.message'\n : '@settings-management:settings.actions.apply.success.message';\n\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync(successTitleKey),\n content: await translateService.translateAsync(successMessageKey),\n location: 'bottom-center',\n closeButton: true,\n timeOut: needsPageRefresh ? PAGE_REFRESH_DELAY_MS : 3000,\n timeOutProgress: true,\n });\n\n if (needsPageRefresh) {\n setTimeout(() => location.reload(), PAGE_REFRESH_DELAY_MS);\n }\n\n return true;\n } catch {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@settings-management:settings.actions.apply.error.title'),\n content: await translateService.translateAsync('@settings-management:settings.actions.apply.error.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n },\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n const form = store.form();\n form?.resetErrors();\n\n const snapshot = cloneDeep(store.previousContext());\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n syncingBaseline: true,\n discardSyncNonce: store.discardSyncNonce() + 1,\n });\n },\n async resetToDefault() {\n const defaults = await settingValueService.scope(store.scope() as AXPPlatformScope).defaultValues();\n patchState(store, {\n context: defaults,\n });\n //\n const result = await this.apply();\n if (!result) {\n this.discard();\n }\n },\n }),\n ),\n withHooks(\n (\n store,\n settingValueService = inject(AXPSettingsService),\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n ) => ({\n async onInit() {\n //\n settingValueService.onChanged.pipe(filter((c) => c.scope == store.scope())).subscribe((e) => {\n e.keys.forEach((k) => {\n const currentValue = e.values[k];\n const contextValue = get(store.context(), k);\n const previousValue = get(store.previousContext(), k);\n if (!isEqual(previousValue, currentValue) || !isEqual(currentValue, contextValue)) {\n patchState(store, {\n previousContext: {\n ...store.previousContext(),\n [k]: currentValue,\n },\n context: {\n ...store.context(),\n [k]: currentValue,\n },\n formDirty: false,\n });\n }\n });\n });\n //\n merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {\n if (store.isLoaded()) {\n await store.reload();\n }\n });\n },\n onDestroy() {},\n }),\n ),\n);\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-settings-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Settings Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SettingsManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex-platform/framework-client/common';\n\nexport class AXPSettingSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('setting', 'Setting', 'setting', 'fa-solid fa-gear', 3, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: 'view',\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSearchProvider,\n AXPSearchResult,\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n} from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { sortBy } from 'lodash';\n\nexport interface AXPSettingDefinitionSearch extends AXPSettingDefinition {\n group: AXPSettingDefinitionGroup;\n}\n\nexport class AXPSettingSearchProvider implements AXPSearchProvider {\n private settingsService = inject(AXPSettingDefinitionProviderService);\n private sessionService = inject(AXPSessionService);\n private translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const groupsSetting = this.settingsService.getList(AXPPlatformScope.User);\n if (groupsSetting.length == 0) {\n groupsSetting.push(...(await this.settingsService.getListAsync(AXPPlatformScope.User)));\n }\n\n // Step 2: Flatten settings from groups\n const allSettings: AXPSettingDefinitionSearch[] = [];\n const extractSettings = (group: AXPSettingDefinitionGroup) => {\n for (const section of group.sections) {\n allSettings.push(...section.settings.map((x) => ({ ...x, group } as AXPSettingDefinitionSearch)));\n }\n for (const subGroup of group.groups) {\n extractSettings(subGroup); // Recursive extraction\n }\n };\n\n for (const group of groupsSetting) {\n extractSettings(group);\n }\n\n const needle = text.trim().toLowerCase();\n if (!needle) {\n return [];\n }\n\n const translatedBlobs = await Promise.all(\n allSettings.map(async (setting) => {\n const parts: string[] = [await this.translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await this.translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await this.translateService.translateAsync(key));\n }\n }\n return parts.join(' ').toLowerCase();\n }),\n );\n\n const searchResults = allSettings.filter(\n (setting, i) =>\n translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle),\n );\n\n return sortBy(\n searchResults.map<AXPSearchResult>((setting) => ({\n title: setting.title,\n description: setting.description,\n group: 'setting',\n data: setting,\n command: {\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: `/${this.sessionService.application?.name}/settings/user/${setting.group.name}#${setting.title}`,\n },\n }\n },\n parent: setting.group\n ? {\n title: setting.group.title,\n data: setting.group as AXPSettingDefinitionGroup,\n }\n : undefined,\n })),\n ['title']\n );\n }\n}\n","import { createUnsavedChangesCanDeactivateGuard } from '@acorex-platform/framework-client/common';\nimport { AXPSettingPageComponent } from './setting-page/setting-page.component';\n\n//#region ---- Settings Page Can Deactivate Guard ----\n\nexport const axpSettingsPageCanDeactivateGuard = createUnsavedChangesCanDeactivateGuard<AXPSettingPageComponent>();\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_UNAUTHORIZED_ROUTE } from '@acorex-platform/framework-client/common';\nimport { AXPApplicationsPlatformPermissionKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { resolvePlatformScopeKey } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { first, map } from 'rxjs';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst SCOPE_PERMISSIONS: Record<string, string | null> = {\n P: AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings,\n T: AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings,\n // Own user settings — always allowed once authenticated.\n U: null,\n};\n\n//#endregion\n\n//#region ----- Guard -----\n\n/**\n * Enforces settings-scope capabilities on direct URL navigation.\n * Menu visibility alone is not enough — hidden Platform Settings items are not\n * menu-matched, so {@link AXPMenuRouteGuard} would otherwise allow the route.\n */\nexport const axpSettingsScopeCanActivateGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n\n return sessionService.isAuthorizedWithLoading$.pipe(\n first(),\n map((): boolean | UrlTree => {\n const scopeParam = resolveScopeParam(route);\n const scopeKey = resolvePlatformScopeKey(scopeParam);\n const requiredPermission = SCOPE_PERMISSIONS[scopeKey];\n\n if (!requiredPermission) {\n return true;\n }\n\n if (sessionService.authorize(requiredPermission)) {\n return true;\n }\n\n return router.parseUrl(AXP_UNAUTHORIZED_ROUTE);\n }),\n );\n};\n\nfunction resolveScopeParam(route: ActivatedRouteSnapshot): string {\n let current: ActivatedRouteSnapshot | null = route;\n while (current) {\n const scope = current.paramMap.get('scope');\n if (scope) {\n return scope;\n }\n current = current.parent;\n }\n return '';\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXPApplicationsPlatformPermissionKeys,\n AXPSettingsManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const appName = this.sessionService.application?.name;\n\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n // Platform Settings — platform console only (not tenant admins).\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n name: AXPSettingsManagementMenuKeys.PlatformSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.platform.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/platform`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings],\n },\n },\n ]);\n\n // Tenant Settings — under Administration; own user settings are profile-only (no menu policy).\n context.find(AXPCommonMenuKeys.Administration).addItems([\n { name: `${AXPSettingsManagementMenuKeys.TenantApplicationSettings}:divider`, text: '', type: 'break', priority: 998 },\n {\n name: AXPSettingsManagementMenuKeys.TenantApplicationSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.tenant.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/tenant`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers tenant settings under Administration and platform settings under\n * Applications & Platform. Own user settings are not registered — always available\n * to the signed-in user.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, {\n order: 120,\n });\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, {\n order: 110,\n });\n\n context\n .addGroup(\n groups.Administration.Settings,\n `${G}.administration-settings.title`,\n `${G}.administration-settings.description`,\n { parent: groups.Administration.Root, order: 15 },\n )\n .addPermission(keys.MaintainTenantSettings, `${P}.maintain-tenant-settings.title`, `${P}.maintain-tenant-settings.description`, {\n modules: ['SettingsManagement'],\n })\n .endPermission()\n .endGroup();\n\n context\n .addGroup(\n groups.ApplicationsPlatform.Configuration,\n `${G}.applications-platform-configuration.title`,\n `${G}.applications-platform-configuration.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 30 },\n )\n .addPermission(keys.MaintainPlatformSettings, `${P}.maintain-platform-settings.title`, `${P}.maintain-platform-settings.description`, {\n modules: ['PlatformManagement'],\n requiredFeatures: ['PlatformManagement'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXMSettingsManagementCommandKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\n\n//#region ---- Types ----\n\ntype ProfileSectionsPayload = {\n sections: Record<string, unknown>[];\n groupId?: string;\n};\n\n//#endregion\n\n//#region ---- Settings management profile sections ----\n\n/** Contributes settings-related sections to the user profile hub. */\nexport const SettingsManagementProfileSectionsHookProvider: AXPDistributedEventListenerProvider<\n ProfileSectionsPayload,\n ProfileSectionsPayload\n> = {\n key: 'profile-page.sections',\n priority: 10,\n execute: (payload) => {\n if (payload.groupId && payload.groupId !== 'account') {\n return payload;\n }\n\n const commandService = inject(AXPCommandService);\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n const sections: Record<string, unknown>[] = [];\n\n if (commandService.exists(AXMSettingsManagementCommandKeys.Client.Export)) {\n sections.push({\n id: 'export-data',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.export-data.title',\n description: '@settings-management:profile-page.sections.export-data.description',\n icon: 'far fa-file-export',\n priority: 30,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'export-local-data',\n title: '@settings-management:profile-page.sections.export-data.actions.manage',\n icon: 'far fa-download',\n command: { name: AXMSettingsManagementCommandKeys.Client.Export },\n },\n ],\n });\n }\n\n if (appName) {\n sections.push({\n id: 'all-preferences',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.all-preferences.title',\n description: '@settings-management:profile-page.sections.all-preferences.description',\n icon: 'far fa-sliders',\n priority: 40,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'view-all-preferences',\n title: '@settings-management:profile-page.sections.all-preferences.actions.manage',\n icon: 'far fa-arrow-right',\n command: {\n name: 'navigate',\n options: { path: `/${appName}/settings/user` },\n },\n },\n ],\n });\n }\n\n if (!sections.length) {\n return payload;\n }\n\n return {\n ...payload,\n sections: [...payload.sections, ...sections],\n };\n },\n};\n\n//#endregion\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- Profile slot settings menu hook ----\n\n/** Registers the user settings entry in the profile dropdown (always available; no permission). */\nexport const ProfileSlotSettingsMenuHookProvider: AXPDistributedEventListenerProvider<\n { items: AXPActionMenuItem[] },\n { items: AXPActionMenuItem[] }\n> = {\n key: 'profile-slot.menu-items',\n priority: 0,\n execute: (payload) => {\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n if (!appName) {\n return payload;\n }\n\n return {\n ...payload,\n items: [\n ...payload.items,\n {\n name: 'settings',\n title: '@auth:profile.settings',\n icon: 'fa-light fa-gear',\n shortcuts: [{ keys: 'ctrl+shift+u', allowInEditableFields: true }],\n command: {\n name: 'navigate',\n options: {\n path: `/${appName}/settings/user`,\n },\n },\n } satisfies AXPActionMenuItem,\n ],\n };\n },\n};\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_DEFINITION_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTINGS_SYNC_KEYS,\n AXPPlatformSettingsLoadState,\n AXPPlatformSettingsOfflineBootstrapService,\n AXPSettingsService,\n traceSettingsAppStartupLoadComplete,\n traceSettingsAppStartupLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPAppStartUpService,\n AXP_APP_STARTUP_PRIORITY,\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n} from '@acorex-platform/framework-client/core';\nimport { SettingsManagementManifest } from './manifest';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXPSettingSearchDefinitionProvider } from './features/settings/search-definition.provider';\nimport { AXPSettingSearchProvider } from './features/settings/search.provider';\nimport { axpSettingsPageCanDeactivateGuard } from './features/settings/settings-page-can-deactivate.guard';\nimport { axpSettingsScopeCanActivateGuard } from './features/settings/settings-scope.guard';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { SettingsManagementProfileSectionsHookProvider } from './features/profile-page/settings-management-profile-sections.hook';\nimport { ProfileSlotSettingsMenuHookProvider } from './profile-slot-settings-menu.hook';\nimport { axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';\n\n//#region ----- Constants -----\n\nconst PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS = 5;\nconst PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS = 2_000;\n\n//#endregion\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function loadPlatformSettingsWithRetry(\n settingsService: AXPSettingsService,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n): Promise<void> {\n let lastError: unknown;\n for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {\n try {\n await settingsService.ensurePlatformSettingsLoaded();\n return;\n } catch (error) {\n lastError = error;\n console.error(\n `Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`,\n error,\n );\n // `navigator.onLine` is a hint only — always try the API at least once\n // (headless / Playwright often starts with onLine=false while localhost works).\n const skipRemainingRetries =\n attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS && offlineBootstrap.isDeviceOffline();\n if (skipRemainingRetries) {\n throw error;\n }\n if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {\n await sleep(PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS);\n }\n }\n }\n throw lastError;\n}\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: ':app/settings/:scope',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS, axpSettingsScopeCanActivateGuard],\n data: { tab: true, rootLayout: true },\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/settings/setting-page/setting-page.component').then((c) => c.AXPSettingPageComponent),\n canDeactivate: [axpSettingsPageCanDeactivateGuard],\n data: { reuse: true },\n children: [\n {\n path: ':group',\n loadComponent: () =>\n import('./features/settings/setting-view/setting-view.component').then(\n (c) => c.AXPSettingsViewComponent,\n ),\n data: { reuse: false },\n },\n ],\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [AXCRuntimeRemoteApiModule],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_SETTINGS_SYNC_KEYS,\n useValue: axmSettingsSyncKeys,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPSettingSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPSettingSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: SettingsManagementManifest,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: ProfileSlotSettingsMenuHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: SettingsManagementProfileSectionsHookProvider,\n multi: true,\n },\n ],\n})\nexport class AXMSettingsManagementModule {\n constructor(\n appInitService: AXPAppStartUpService,\n settingsService: AXPSettingsService,\n platformSettingsLoadState: AXPPlatformSettingsLoadState,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n ) {\n appInitService.registerTask({\n name: 'platform-settings',\n priority: AXP_APP_STARTUP_PRIORITY.platformSettings,\n run: async () => {\n try {\n await loadPlatformSettingsWithRetry(settingsService, offlineBootstrap);\n platformSettingsLoadState.clear();\n } catch (error) {\n console.error('Platform settings bootstrap failed after retries', error);\n // Never open dialogs here (APP_INITIALIZER — overlay host is null).\n // Only inspect IndexedDB; confirm runs later after the app is stable.\n let canOfferOffline = false;\n try {\n canOfferOffline = await offlineBootstrap.canOfferOfflineContinue();\n } catch (offlineError) {\n console.error('Offline continue cache check failed', offlineError);\n }\n if (canOfferOffline) {\n platformSettingsLoadState.setPendingOfflineContinue(error);\n } else {\n platformSettingsLoadState.setFailure(error);\n }\n // Keep only platform-settings-failure-redirect; skip Settings/regional/theme (they hang on API).\n appInitService.abortRemainingStartupTasks();\n }\n },\n });\n\n appInitService.registerTask({\n name: 'Settings',\n statusText: '@settings-management:app-startup.loading-settings',\n priority: AXP_APP_STARTUP_PRIORITY.settings,\n run: async () => {\n if (\n platformSettingsLoadState.hasFailure() ||\n platformSettingsLoadState.hasPendingOfflineContinue() ||\n platformSettingsLoadState.isOfflineMode()\n ) {\n return;\n }\n traceSettingsAppStartupLoadStarted();\n const startedAt = Date.now();\n const settings = await settingsService.load('app-startup');\n traceSettingsAppStartupLoadComplete({\n totalKeys: settings.length,\n keysByScope: {},\n durationMs: Date.now() - startedAt,\n });\n },\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-settings-management-client.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-row-visibility.util.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/convert-setting-data.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings.viewmodel.ts","../../../../libs/modules/settings-management/client/src/lib/manifest.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-page-can-deactivate.guard.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-scope.guard.ts","../../../../libs/modules/settings-management/client/src/lib/menu.provider.ts","../../../../libs/modules/settings-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/profile-page/settings-management-profile-sections.hook.ts","../../../../libs/modules/settings-management/client/src/lib/profile-slot-settings-menu.hook.ts","../../../../libs/modules/settings-management/client/src/lib/settings-management.module.ts","../../../../libs/modules/settings-management/client/src/acorex-platform-module-settings-management-client.ts"],"sourcesContent":["import type {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionSection,\n} from '@acorex-platform/framework-client/common';\n\n/** Settings with `widget.options.visibility === false` are registered but omitted from the settings UI. */\nexport function isSettingStaticallyHidden(setting: AXPSettingDefinition): boolean {\n return setting.widget.options?.['visibility'] === false;\n}\n\nexport function filterSettingsPageVisibleSettings(settings: AXPSettingDefinition[]): AXPSettingDefinition[] {\n return settings.filter((setting) => !isSettingStaticallyHidden(setting));\n}\n\nexport function sectionHasSettingsPageVisibleRows(section: AXPSettingDefinitionSection): boolean {\n return filterSettingsPageVisibleSettings(section.settings).length > 0;\n}\n\n/** Drop statically hidden rows, then omit sections/groups that have nothing left to render. */\nexport function filterSettingsPageVisibleGroups(groups: AXPSettingDefinitionGroup[]): AXPSettingDefinitionGroup[] {\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: filterSettingsPageVisibleSettings(section.settings),\n }))\n .filter((section) => section.settings.length > 0),\n groups: filterSettingsPageVisibleGroups(group.groups),\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0);\n}\n","import { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from '@acorex-platform/framework-client/common';\nimport {\n filterSettingsPageVisibleSettings,\n sectionHasSettingsPageVisibleRows,\n} from './settings-row-visibility.util';\n\n/**\n * Filters setting groups for in-page search. When `settingSearchTextByKey` is provided (lowercased\n * translated blobs keyed by setting name), setting matches use it; otherwise a raw key fallback is used.\n */\nexport function searchSettings(\n groups: AXPSettingDefinitionGroup[],\n search: string,\n settingSearchTextByKey?: Record<string, string>,\n): AXPSettingDefinitionGroup[] {\n const trimmed = search?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n\n const normalizedSearch = trimmed.toLowerCase();\n const sectionMatchResult: AXPSettingDefinitionGroup[] = [];\n const settingMatchResult: AXPSettingDefinitionGroup[] = [];\n const processedGroups = new Set<string>();\n\n const createGroupIdentifier = (group: AXPSettingDefinitionGroup): string => `${group.name}-${group.title}`;\n\n const addGroupToResult = (\n group: AXPSettingDefinitionGroup,\n sections: AXPSettingDefinitionSection[],\n resultArray: AXPSettingDefinitionGroup[]\n ) => {\n const groupId = createGroupIdentifier(group);\n if (!processedGroups.has(groupId)) {\n resultArray.push({\n ...group,\n sections,\n groups: [], // Exclude nested groups\n });\n processedGroups.add(groupId);\n }\n };\n\n const processSections = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => boolean\n ) => {\n const matchedSections = group.sections.filter(filterFn);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, sectionMatchResult);\n }\n };\n\n const processSettings = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => AXPSettingDefinitionSection | null\n ) => {\n const matchedSections = group.sections\n .map(filterFn)\n .filter((section): section is AXPSettingDefinitionSection => section !== null);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, settingMatchResult);\n }\n };\n\n const sectionMatches = (section: AXPSettingDefinitionSection): boolean =>\n sectionHasSettingsPageVisibleRows(section) &&\n (section.name.toLowerCase().includes(normalizedSearch) ||\n section.title.toLowerCase().includes(normalizedSearch));\n\n const settingSearchBlob = (setting: AXPSettingDefinition): string => {\n const fromIndex = settingSearchTextByKey?.[setting.name];\n if (fromIndex) {\n return fromIndex;\n }\n return [setting.name, setting.title, setting.description ?? '', ...(setting.searchTagKeys ?? [])]\n .join(' ')\n .toLowerCase();\n };\n\n const filterSettings = (section: AXPSettingDefinitionSection): AXPSettingDefinitionSection | null => {\n const matchedSettings = filterSettingsPageVisibleSettings(section.settings).filter((setting) => {\n const blob = settingSearchBlob(setting);\n return (\n setting.name.toLowerCase().includes(normalizedSearch) ||\n blob.includes(normalizedSearch)\n );\n });\n return matchedSettings.length > 0 ? { ...section, settings: matchedSettings } : null;\n };\n\n const processGroupRecursively = (group: AXPSettingDefinitionGroup) => {\n processSections(group, sectionMatches); // Match sections with all settings\n processSettings(group, filterSettings); // Match settings within sections\n group.groups.forEach(processGroupRecursively); // Recurse into nested groups\n };\n\n groups.forEach(processGroupRecursively);\n\n return [...sectionMatchResult, ...settingMatchResult];\n}\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n AXPSettingDefinitionSection,\n AXPSettingsService,\n traceSettingsPageLoadComplete,\n traceSettingsPageLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPPlatformScope,\n AXPPlatformScopeKey,\n getSmart,\n resolvePlatformScopeName,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty, isEqual, isNil } from 'lodash';\nimport { filter, merge } from 'rxjs';\nimport { searchSettings } from './convert-setting-data';\nimport { filterSettingsPageVisibleGroups, isSettingStaticallyHidden } from './settings-row-visibility.util';\n\n/** Delay before reload so the success toast is visible. */\nconst PAGE_REFRESH_DELAY_MS = 500;\n\n/** Setting keys are flat (may contain dots). Prefer own-property, then smart path. */\nfunction readFlatSettingValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n}\n\nfunction collectSettingKeys(groups: AXPSettingDefinitionGroup[]): string[] {\n const keys: string[] = [];\n const walkSections = (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n keys.push(setting.name);\n }\n }\n };\n const walkGroups = (gs: AXPSettingDefinitionGroup[]) => {\n for (const group of gs) {\n walkSections(group.sections);\n walkGroups(group.groups);\n }\n };\n walkGroups(groups);\n return keys;\n}\n\nexport const AXPSettingsViewModel = signalStore(\n withState(() => ({\n groups: [] as AXPSettingDefinitionGroup[],\n activateGroup: undefined as AXPSettingDefinitionGroup | undefined,\n scope: 'U' as AXPPlatformScopeKey,\n //\n searchExpression: null as string | null,\n settingSearchTextByKey: {} as Record<string, string>,\n //\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n /** Synced from {@link AXPWidgetContainerComponent.isFormDirty}. */\n formDirty: false,\n /** Bumped after apply so the settings view can commit the container saved baseline. */\n applySyncNonce: 0,\n /** Suppresses container→VM dirty echo while post-save baseline sync runs. */\n syncingBaseline: false,\n /** Bumped after discard so the settings view can revert the container to saved. */\n discardSyncNonce: 0,\n //\n status: AXPPageStatus.Processing,\n form: null as AXFormComponent | null,\n })),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n searchResults: computed(() => {\n const q = store.searchExpression();\n if (q == null || !q.trim()) {\n return [];\n }\n return searchSettings(store.groups(), q, store.settingSearchTextByKey());\n }),\n hasActivateGroup: computed(() => store.activateGroup() != null),\n showGroups: computed(() => store.activateGroup() != null && deviceService.isLarge()),\n scopeTitle: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.title`;\n }),\n scopeDescription: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.description`;\n }),\n isSearching: computed(() => store.searchExpression() != null),\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isLoaded: computed(() => store.groups().length > 0),\n isDirty: computed(() => store.formDirty()),\n })),\n withMethods(\n (\n store,\n settingDefinitionService = inject(AXPSettingDefinitionProviderService),\n settingValueService = inject(AXPSettingsService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n ) => ({\n registerForm(form: AXFormComponent) {\n patchState(store, {\n form: form,\n });\n },\n async load(scope: AXPPlatformScopeKey) {\n traceSettingsPageLoadStarted(scope, 'settings-page-vm-load');\n const startedAt = Date.now();\n patchState(store, {\n scope: scope,\n status: AXPPageStatus.Processing,\n });\n try {\n const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(scope));\n patchState(store, {\n groups: groups,\n });\n await this.rebuildSettingSearchIndex();\n // Settings admin must bind server partition values. `all()` alone can reuse a warm\n // IndexedDB/memory snapshot that omits non-cacheable keys (e.g. SMTP).\n await settingValueService.reload(scope as AXPPlatformScope, 'settings-page-open');\n const currentContext = await settingValueService.scope(scope as AXPPlatformScope).all();\n const defaults = await settingValueService.scope(scope as AXPPlatformScope).defaultValues();\n const context = { ...defaults, ...currentContext };\n patchState(store, {\n context,\n previousContext: cloneDeep(context),\n formDirty: false,\n });\n traceSettingsPageLoadComplete({\n scope,\n groupCount: groups.length,\n valueKeyCount: Object.keys(store.context()).length,\n durationMs: Date.now() - startedAt,\n });\n } catch (error) {\n console.error('Settings page load failed', error);\n } finally {\n // Always leave Processing so Apply/Discard are not stuck disabled after a partial load.\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n },\n async reload() {\n await settingDefinitionService.reload();\n const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));\n const oldActivateGroupName = store.activateGroup()?.name;\n patchState(store, {\n groups: groups,\n activateGroup: undefined,\n });\n if (oldActivateGroupName) {\n this.setActivateGroupByName(oldActivateGroupName);\n }\n await this.rebuildSettingSearchIndex();\n },\n async rebuildSettingSearchIndex() {\n const groups = store.groups();\n const map: Record<string, string> = {};\n const walkSections = async (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n if (isSettingStaticallyHidden(setting)) {\n continue;\n }\n const parts: string[] = [await translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await translateService.translateAsync(key));\n }\n }\n map[setting.name] = parts.join(' ').toLowerCase();\n }\n }\n };\n const walkGroups = async (gs: AXPSettingDefinitionGroup[]) => {\n for (const g of gs) {\n await walkSections(g.sections);\n await walkGroups(g.groups);\n }\n };\n await walkGroups(groups);\n patchState(store, { settingSearchTextByKey: map });\n },\n updateContext(context: Record<string, any>) {\n patchState(store, {\n context,\n });\n },\n setFormDirty(dirty: boolean) {\n if (store.syncingBaseline() || store.formDirty() === dirty) {\n return;\n }\n patchState(store, {\n formDirty: dirty,\n });\n },\n setSyncingBaseline(syncing: boolean) {\n if (store.syncingBaseline() === syncing) {\n return;\n }\n patchState(store, {\n syncingBaseline: syncing,\n });\n },\n setActivateGroup(group: AXPSettingDefinitionGroup) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n },\n unloadActivateGroup() {\n patchState(store, {\n activateGroup: undefined,\n formDirty: false,\n });\n },\n setActivateGroupByName(name: string) {\n const group = store.groups().find((g) => g.name === name);\n if (group) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n }\n },\n //\n async search(expression: string) {\n if (!isNil(expression) && !isEmpty(expression)) {\n patchState(store, {\n searchExpression: expression,\n formDirty: false,\n });\n } else {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n }\n },\n clearSearch() {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n },\n async apply(): Promise<boolean> {\n const form = store.form();\n if (!form || !store.isDirty()) {\n return false;\n }\n\n form.resetErrors();\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const formResult = await form.validate();\n if (!formResult.result) {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:actions.apply.messages.invalid.title'),\n content: await translateService.translateAsync('@general:actions.apply.messages.invalid.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n\n // Persist only known flat setting keys. Context may contain nested parent objects\n // created by path-based writes (e.g. Common:Setting:Offline → { AllowWorkingOffline }).\n const settingKeys = collectSettingKeys(store.groups());\n const context = store.context();\n const previous = store.previousContext();\n const changedValues: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = readFlatSettingValue(context, key);\n const previousValue = readFlatSettingValue(previous, key);\n if (!isEqual(value, previousValue)) {\n changedValues[key] = value;\n }\n }\n await settingValueService.scope(store.scope() as AXPPlatformScope).set(changedValues, { flush: true });\n\n const refreshByKey = await settingDefinitionService.requiresPageRefreshByKey();\n const needsPageRefresh = Object.keys(changedValues).some((key) => refreshByKey[key]);\n\n // Keep VM context flat for the next edit session (drop accidental nested parents).\n const nextContext: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = Object.prototype.hasOwnProperty.call(changedValues, key)\n ? changedValues[key]\n : readFlatSettingValue(context, key);\n if (value !== undefined) {\n nextContext[key] = value;\n }\n }\n\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: nextContext,\n previousContext: cloneDeep(nextContext),\n formDirty: false,\n applySyncNonce: store.applySyncNonce() + 1,\n });\n\n const successTitleKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.title'\n : '@settings-management:settings.actions.apply.success.title';\n const successMessageKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.message'\n : '@settings-management:settings.actions.apply.success.message';\n\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync(successTitleKey),\n content: await translateService.translateAsync(successMessageKey),\n location: 'bottom-center',\n closeButton: true,\n timeOut: needsPageRefresh ? PAGE_REFRESH_DELAY_MS : 3000,\n timeOutProgress: true,\n });\n\n if (needsPageRefresh) {\n setTimeout(() => location.reload(), PAGE_REFRESH_DELAY_MS);\n }\n\n return true;\n } catch {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@settings-management:settings.actions.apply.error.title'),\n content: await translateService.translateAsync('@settings-management:settings.actions.apply.error.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n },\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n const form = store.form();\n form?.resetErrors();\n\n const snapshot = cloneDeep(store.previousContext());\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n syncingBaseline: true,\n discardSyncNonce: store.discardSyncNonce() + 1,\n });\n },\n async resetToDefault() {\n const defaults = await settingValueService.scope(store.scope() as AXPPlatformScope).defaultValues();\n patchState(store, {\n context: defaults,\n });\n //\n const result = await this.apply();\n if (!result) {\n this.discard();\n }\n },\n }),\n ),\n withHooks(\n (\n store,\n settingValueService = inject(AXPSettingsService),\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n ) => ({\n async onInit() {\n //\n settingValueService.onChanged.pipe(filter((c) => c.scope == store.scope())).subscribe((e) => {\n e.keys.forEach((k) => {\n const currentValue = e.values[k];\n const contextValue = get(store.context(), k);\n const previousValue = get(store.previousContext(), k);\n if (!isEqual(previousValue, currentValue) || !isEqual(currentValue, contextValue)) {\n patchState(store, {\n previousContext: {\n ...store.previousContext(),\n [k]: currentValue,\n },\n context: {\n ...store.context(),\n [k]: currentValue,\n },\n formDirty: false,\n });\n }\n });\n });\n //\n merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {\n if (store.isLoaded()) {\n await store.reload();\n }\n });\n },\n onDestroy() {},\n }),\n ),\n);\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-settings-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Settings Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SettingsManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex-platform/framework-client/common';\n\nexport class AXPSettingSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('setting', 'Setting', 'setting', 'fa-solid fa-gear', 3, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: 'view',\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSearchProvider,\n AXPSearchResult,\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n} from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { sortBy } from 'lodash';\nimport { isSettingStaticallyHidden } from './settings-row-visibility.util';\n\nexport interface AXPSettingDefinitionSearch extends AXPSettingDefinition {\n group: AXPSettingDefinitionGroup;\n}\n\nexport class AXPSettingSearchProvider implements AXPSearchProvider {\n private settingsService = inject(AXPSettingDefinitionProviderService);\n private sessionService = inject(AXPSessionService);\n private translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const groupsSetting = this.settingsService.getList(AXPPlatformScope.User);\n if (groupsSetting.length == 0) {\n groupsSetting.push(...(await this.settingsService.getListAsync(AXPPlatformScope.User)));\n }\n\n // Step 2: Flatten settings from groups\n const allSettings: AXPSettingDefinitionSearch[] = [];\n const extractSettings = (group: AXPSettingDefinitionGroup) => {\n for (const section of group.sections) {\n allSettings.push(...section.settings.map((x) => ({ ...x, group } as AXPSettingDefinitionSearch)));\n }\n for (const subGroup of group.groups) {\n extractSettings(subGroup); // Recursive extraction\n }\n };\n\n for (const group of groupsSetting) {\n extractSettings(group);\n }\n\n const needle = text.trim().toLowerCase();\n if (!needle) {\n return [];\n }\n\n const translatedBlobs = await Promise.all(\n allSettings.map(async (setting) => {\n const parts: string[] = [await this.translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await this.translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await this.translateService.translateAsync(key));\n }\n }\n return parts.join(' ').toLowerCase();\n }),\n );\n\n const searchResults = allSettings.filter(\n (setting, i) =>\n !isSettingStaticallyHidden(setting) &&\n (translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle)),\n );\n\n return sortBy(\n searchResults.map<AXPSearchResult>((setting) => ({\n title: setting.title,\n description: setting.description,\n group: 'setting',\n data: setting,\n command: {\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: `/${this.sessionService.application?.name}/settings/user/${setting.group.name}#${setting.title}`,\n },\n }\n },\n parent: setting.group\n ? {\n title: setting.group.title,\n data: setting.group as AXPSettingDefinitionGroup,\n }\n : undefined,\n })),\n ['title']\n );\n }\n}\n","import { createUnsavedChangesCanDeactivateGuard } from '@acorex-platform/framework-client/common';\nimport { AXPSettingPageComponent } from './setting-page/setting-page.component';\n\n//#region ---- Settings Page Can Deactivate Guard ----\n\nexport const axpSettingsPageCanDeactivateGuard = createUnsavedChangesCanDeactivateGuard<AXPSettingPageComponent>();\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_UNAUTHORIZED_ROUTE } from '@acorex-platform/framework-client/common';\nimport { AXPApplicationsPlatformPermissionKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { resolvePlatformScopeKey } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { first, map } from 'rxjs';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst SCOPE_PERMISSIONS: Record<string, string | null> = {\n P: AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings,\n T: AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings,\n // Own user settings — always allowed once authenticated.\n U: null,\n};\n\n//#endregion\n\n//#region ----- Guard -----\n\n/**\n * Enforces settings-scope capabilities on direct URL navigation.\n * Menu visibility alone is not enough — hidden Platform Settings items are not\n * menu-matched, so {@link AXPMenuRouteGuard} would otherwise allow the route.\n */\nexport const axpSettingsScopeCanActivateGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n\n return sessionService.isAuthorizedWithLoading$.pipe(\n first(),\n map((): boolean | UrlTree => {\n const scopeParam = resolveScopeParam(route);\n const scopeKey = resolvePlatformScopeKey(scopeParam);\n const requiredPermission = SCOPE_PERMISSIONS[scopeKey];\n\n if (!requiredPermission) {\n return true;\n }\n\n if (sessionService.authorize(requiredPermission)) {\n return true;\n }\n\n return router.parseUrl(AXP_UNAUTHORIZED_ROUTE);\n }),\n );\n};\n\nfunction resolveScopeParam(route: ActivatedRouteSnapshot): string {\n let current: ActivatedRouteSnapshot | null = route;\n while (current) {\n const scope = current.paramMap.get('scope');\n if (scope) {\n return scope;\n }\n current = current.parent;\n }\n return '';\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXPApplicationsPlatformPermissionKeys,\n AXPSettingsManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const appName = this.sessionService.application?.name;\n\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n // Platform Settings — platform console only (not tenant admins).\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n name: AXPSettingsManagementMenuKeys.PlatformSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.platform.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/platform`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings],\n },\n },\n ]);\n\n // Tenant Settings — under Administration; own user settings are profile-only (no menu policy).\n context.find(AXPCommonMenuKeys.Administration).addItems([\n { name: `${AXPSettingsManagementMenuKeys.TenantApplicationSettings}:divider`, text: '', type: 'break', priority: 998 },\n {\n name: AXPSettingsManagementMenuKeys.TenantApplicationSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.tenant.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/tenant`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers tenant settings under Administration and platform settings under\n * Applications & Platform. Own user settings are not registered — always available\n * to the signed-in user.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, {\n order: 120,\n });\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, {\n order: 110,\n });\n\n context\n .addGroup(\n groups.Administration.Settings,\n `${G}.administration-settings.title`,\n `${G}.administration-settings.description`,\n { parent: groups.Administration.Root, order: 15 },\n )\n .addPermission(keys.MaintainTenantSettings, `${P}.maintain-tenant-settings.title`, `${P}.maintain-tenant-settings.description`, {\n modules: ['SettingsManagement'],\n })\n .endPermission()\n .endGroup();\n\n context\n .addGroup(\n groups.ApplicationsPlatform.Configuration,\n `${G}.applications-platform-configuration.title`,\n `${G}.applications-platform-configuration.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 30 },\n )\n .addPermission(keys.MaintainPlatformSettings, `${P}.maintain-platform-settings.title`, `${P}.maintain-platform-settings.description`, {\n modules: ['PlatformManagement'],\n requiredFeatures: ['PlatformManagement'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXMSettingsManagementCommandKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\n\n//#region ---- Types ----\n\ntype ProfileSectionsPayload = {\n sections: Record<string, unknown>[];\n groupId?: string;\n};\n\n//#endregion\n\n//#region ---- Settings management profile sections ----\n\n/** Contributes settings-related sections to the user profile hub. */\nexport const SettingsManagementProfileSectionsHookProvider: AXPDistributedEventListenerProvider<\n ProfileSectionsPayload,\n ProfileSectionsPayload\n> = {\n key: 'profile-page.sections',\n priority: 10,\n execute: (payload) => {\n if (payload.groupId && payload.groupId !== 'account') {\n return payload;\n }\n\n const commandService = inject(AXPCommandService);\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n const sections: Record<string, unknown>[] = [];\n\n if (commandService.exists(AXMSettingsManagementCommandKeys.Client.Export)) {\n sections.push({\n id: 'export-data',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.export-data.title',\n description: '@settings-management:profile-page.sections.export-data.description',\n icon: 'far fa-file-export',\n priority: 30,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'export-local-data',\n title: '@settings-management:profile-page.sections.export-data.actions.manage',\n icon: 'far fa-download',\n command: { name: AXMSettingsManagementCommandKeys.Client.Export },\n },\n ],\n });\n }\n\n if (appName) {\n sections.push({\n id: 'all-preferences',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.all-preferences.title',\n description: '@settings-management:profile-page.sections.all-preferences.description',\n icon: 'far fa-sliders',\n priority: 40,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'view-all-preferences',\n title: '@settings-management:profile-page.sections.all-preferences.actions.manage',\n icon: 'far fa-arrow-right',\n command: {\n name: 'navigate',\n options: { path: `/${appName}/settings/user` },\n },\n },\n ],\n });\n }\n\n if (!sections.length) {\n return payload;\n }\n\n return {\n ...payload,\n sections: [...payload.sections, ...sections],\n };\n },\n};\n\n//#endregion\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- Profile slot settings menu hook ----\n\n/** Registers the user settings entry in the profile dropdown (always available; no permission). */\nexport const ProfileSlotSettingsMenuHookProvider: AXPDistributedEventListenerProvider<\n { items: AXPActionMenuItem[] },\n { items: AXPActionMenuItem[] }\n> = {\n key: 'profile-slot.menu-items',\n priority: 0,\n execute: (payload) => {\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n if (!appName) {\n return payload;\n }\n\n return {\n ...payload,\n items: [\n ...payload.items,\n {\n name: 'settings',\n title: '@auth:profile.settings',\n icon: 'fa-light fa-gear',\n shortcuts: [{ keys: 'ctrl+shift+u', allowInEditableFields: true }],\n command: {\n name: 'navigate',\n options: {\n path: `/${appName}/settings/user`,\n },\n },\n } satisfies AXPActionMenuItem,\n ],\n };\n },\n};\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_DEFINITION_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTINGS_SYNC_KEYS,\n AXPPlatformSettingsLoadState,\n AXPPlatformSettingsOfflineBootstrapService,\n AXPSettingsService,\n traceSettingsAppStartupLoadComplete,\n traceSettingsAppStartupLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPAppStartUpService,\n AXP_APP_STARTUP_PRIORITY,\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n} from '@acorex-platform/framework-client/core';\nimport { SettingsManagementManifest } from './manifest';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXPSettingSearchDefinitionProvider } from './features/settings/search-definition.provider';\nimport { AXPSettingSearchProvider } from './features/settings/search.provider';\nimport { axpSettingsPageCanDeactivateGuard } from './features/settings/settings-page-can-deactivate.guard';\nimport { axpSettingsScopeCanActivateGuard } from './features/settings/settings-scope.guard';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { SettingsManagementProfileSectionsHookProvider } from './features/profile-page/settings-management-profile-sections.hook';\nimport { ProfileSlotSettingsMenuHookProvider } from './profile-slot-settings-menu.hook';\nimport { axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';\n\n//#region ----- Constants -----\n\nconst PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS = 5;\nconst PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS = 2_000;\n\n//#endregion\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function loadPlatformSettingsWithRetry(\n settingsService: AXPSettingsService,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n): Promise<void> {\n let lastError: unknown;\n for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {\n try {\n await settingsService.ensurePlatformSettingsLoaded();\n return;\n } catch (error) {\n lastError = error;\n console.error(\n `Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`,\n error,\n );\n // `navigator.onLine` is a hint only — always try the API at least once\n // (headless / Playwright often starts with onLine=false while localhost works).\n const skipRemainingRetries =\n attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS && offlineBootstrap.isDeviceOffline();\n if (skipRemainingRetries) {\n throw error;\n }\n if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {\n await sleep(PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS);\n }\n }\n }\n throw lastError;\n}\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: ':app/settings/:scope',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS, axpSettingsScopeCanActivateGuard],\n data: { tab: true, rootLayout: true },\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/settings/setting-page/setting-page.component').then((c) => c.AXPSettingPageComponent),\n canDeactivate: [axpSettingsPageCanDeactivateGuard],\n data: { reuse: true },\n children: [\n {\n path: ':group',\n loadComponent: () =>\n import('./features/settings/setting-view/setting-view.component').then(\n (c) => c.AXPSettingsViewComponent,\n ),\n data: { reuse: false },\n },\n ],\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [AXCRuntimeRemoteApiModule],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_SETTINGS_SYNC_KEYS,\n useValue: axmSettingsSyncKeys,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPSettingSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPSettingSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: SettingsManagementManifest,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: ProfileSlotSettingsMenuHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: SettingsManagementProfileSectionsHookProvider,\n multi: true,\n },\n ],\n})\nexport class AXMSettingsManagementModule {\n constructor(\n appInitService: AXPAppStartUpService,\n settingsService: AXPSettingsService,\n platformSettingsLoadState: AXPPlatformSettingsLoadState,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n ) {\n appInitService.registerTask({\n name: 'platform-settings',\n priority: AXP_APP_STARTUP_PRIORITY.platformSettings,\n run: async () => {\n try {\n await loadPlatformSettingsWithRetry(settingsService, offlineBootstrap);\n platformSettingsLoadState.clear();\n } catch (error) {\n console.error('Platform settings bootstrap failed after retries', error);\n // Never open dialogs here (APP_INITIALIZER — overlay host is null).\n // Only inspect IndexedDB; confirm runs later after the app is stable.\n let canOfferOffline = false;\n try {\n canOfferOffline = await offlineBootstrap.canOfferOfflineContinue();\n } catch (offlineError) {\n console.error('Offline continue cache check failed', offlineError);\n }\n if (canOfferOffline) {\n platformSettingsLoadState.setPendingOfflineContinue(error);\n } else {\n platformSettingsLoadState.setFailure(error);\n }\n // Keep only platform-settings-failure-redirect; skip Settings/regional/theme (they hang on API).\n appInitService.abortRemainingStartupTasks();\n }\n },\n });\n\n appInitService.registerTask({\n name: 'Settings',\n statusText: '@settings-management:app-startup.loading-settings',\n priority: AXP_APP_STARTUP_PRIORITY.settings,\n run: async () => {\n if (\n platformSettingsLoadState.hasFailure() ||\n platformSettingsLoadState.hasPendingOfflineContinue() ||\n platformSettingsLoadState.isOfflineMode()\n ) {\n return;\n }\n traceSettingsAppStartupLoadStarted();\n const startedAt = Date.now();\n const settings = await settingsService.load('app-startup');\n traceSettingsAppStartupLoadComplete({\n totalKeys: settings.length,\n keysByScope: {},\n durationMs: Date.now() - startedAt,\n });\n },\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex-platform/module-settings-management-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.32",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0 || ^22.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0 || ^22.0.0"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@acorex-platform/client-connectivity-api": "0.0.
|
|
10
|
+
"@acorex-platform/client-connectivity-api": "0.0.32",
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"module": "fesm2022/acorex-platform-module-settings-management-client.mjs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-eAaMh3-8.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPBackButton, AXPExecuteCommand, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPSettingDefinitionGroup, AXPUnsavedChangesPopstateService, traceSettingsPageRouteLoad } from '@acorex-platform/framework-client/common';\n\nimport { AXHighlightService, AXPDeviceService, AXPHookService, AXPKeyboardShortcutRegistry } from '@acorex-platform/framework-client/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n resolveDetailsViewFooterCommandShortcuts,\n} from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, RouterModule } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXSearchBoxModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXTranslationModule,\n AXButtonModule,\n AXTabsModule,\n AXBadgeModule,\n AXLoadingModule,\n AXDropdownButtonModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n ],\n templateUrl: './setting-page.component.html',\n styleUrl: './setting-page.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXUnsubscriber,\n AXPSettingsViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPSettingPageComponent,\n },\n ],\n host: { class: 'axp-setting-page' },\n})\nexport class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {\n protected vm = inject(AXPSettingsViewModel);\n protected readonly deviceService = inject(AXPDeviceService);\n private activatedRoute = inject(ActivatedRoute);\n private unsubscribe = inject(AXUnsubscriber);\n private readonly highlightService = inject(AXHighlightService);\n private readonly hooks = inject(AXPHookService);\n\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly sidebarTabs = viewChild<AXTabsComponent>('sidebarTabs');\n private sidebarTabChangeSuppressed = false;\n /** Prevents VM→URL sync from stripping the route group during refresh hydration. */\n private loadingFromRoute = false;\n /** Serializes overlapping route loads (e.g. init + NavigationEnd) so `loadingFromRoute` cannot clear early. */\n private routeLoadChain: Promise<void> = Promise.resolve();\n\n /** Syncs the line indicator when the active group changes programmatically (route load / navigation). */\n #sidebarTabsIndicatorEffect = effect(() => {\n const groups = this.vm.groups();\n const activeName = this.vm.activateGroup()?.name;\n if (!groups.length || !activeName || this.vm.isSearching()) {\n return;\n }\n\n const index = groups.findIndex((group) => group.name === activeName);\n if (index < 0) {\n return;\n }\n\n untracked(() =>\n queueMicrotask(() => {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\n );\n });\n\n #effect = effect(() => {\n if (!this.vm.isLoaded() || this.loadingFromRoute) {\n return;\n }\n const expression = this.vm.searchExpression();\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n const group = this.vm.activateGroup()?.name;\n //\n if (this.vm.isSearching()) {\n this.router.navigate([app, 'settings', scope, group ?? ''], {\n queryParams: { q: expression },\n });\n setTimeout(() => {\n this.highlightService.highlight('#ax-settings', expression!);\n }, 100);\n return;\n }\n // On desktop, scope-only URLs are redirected to the first group in loadFromRoute.\n // Do not sync back to a group-less URL while that redirect is pending.\n if (!group && this.deviceService.isLarge()) {\n return;\n }\n this.router.navigate([app, 'settings', scope, group ?? '']);\n this.highlightService.clear();\n });\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.registerKeyboardShortcuts();\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-setting-page',\n isDirty: () => this.vm.isDirty(),\n });\n this.destroyRef.onDestroy(() => this.unsavedChangesPopstate.unregisterSource('axp-setting-page'));\n //\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.enqueueLoadFromRoute();\n });\n\n await this.enqueueLoadFromRoute();\n }\n\n private enqueueLoadFromRoute(): Promise<void> {\n const load = this.routeLoadChain.then(() => this.loadFromRoute());\n this.routeLoadChain = load.catch(() => undefined);\n return load;\n }\n\n private async loadFromRoute(): Promise<void> {\n if (this.unsavedChangesPopstate.isHandlingPopstate()) {\n return;\n }\n\n this.loadingFromRoute = true;\n try {\n const snapshot = this.activatedRoute.snapshot;\n const routerScope = resolvePlatformScopeKey(snapshot.paramMap.get('scope')?.trim().toLowerCase()!);\n const vmScope = this.vm.scope();\n const query = snapshot.queryParamMap.get('q');\n const groupFromRoute = this.getGroupFromRouteSync();\n //\n if (vmScope != routerScope || !this.vm.isLoaded()) {\n traceSettingsPageRouteLoad(\n routerScope,\n vmScope !== routerScope ? 'scope-changed' : 'not-loaded-yet',\n );\n await this.vm.load(routerScope);\n }\n\n const activeGroup = this.vm.activateGroup()?.name;\n if (groupFromRoute === activeGroup && this.vm.isDirty() && !this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return;\n }\n\n const hasQuery = !!query?.trim();\n if (groupFromRoute && groupFromRoute === activeGroup && !hasQuery && !this.vm.isSearching()) {\n return;\n }\n\n if (groupFromRoute !== activeGroup) {\n this.vm.unloadActivateGroup();\n }\n if (!hasQuery) {\n this.vm.clearSearch();\n }\n\n let group = groupFromRoute;\n if (!group && this.deviceService.isLarge() && !this.vm.isSearching()) {\n group = this.vm.groups()?.[0]?.name;\n if (group) {\n this.vm.setActivateGroupByName(group);\n this.recompute();\n await this.router.navigate([group], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n } else if (group) {\n this.vm.setActivateGroupByName(group);\n this.recompute();\n }\n if (hasQuery) {\n await this.vm.search(query!);\n this.recompute();\n }\n } finally {\n this.loadingFromRoute = false;\n }\n }\n\n private getGroupFromRouteSync(): string | undefined {\n let route: ActivatedRouteSnapshot | null = this.activatedRoute.snapshot;\n while (route) {\n const group = route.paramMap.get('group');\n if (group) {\n return group;\n }\n route = route.firstChild ?? null;\n }\n return undefined;\n }\n\n /**\n * `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + navigate.\n */\n protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void {\n if (this.sidebarTabChangeSuppressed) {\n return;\n }\n\n const groups = this.vm.groups();\n const target = groups[event.index];\n const activeName = this.vm.activateGroup()?.name;\n\n if (!target || target.name === activeName || this.vm.isSearching()) {\n return;\n }\n\n const activeIndex = groups.findIndex((group) => group.name === activeName);\n if (activeIndex >= 0) {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(activeIndex);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }\n\n void this.completeGroupSwitch(target.name);\n }\n\n protected async handleSelectGroup(item: AXPSettingDefinitionGroup) {\n if (item.name === this.vm.activateGroup()?.name) {\n return;\n }\n\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([`${item.name}`], { relativeTo: this.activatedRoute });\n }\n\n private async completeGroupSwitch(groupName: string): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([groupName], { relativeTo: this.activatedRoute });\n }\n\n //#region ---- Keyboard Shortcuts ----\n\n private registerKeyboardShortcuts(): void {\n const saveKeys = resolveDetailsViewFooterCommandShortcuts('update-entity');\n const discardKeys = resolveDetailsViewFooterCommandShortcuts('discard');\n const group = '@general:keyboard-shortcuts.groups.settings';\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n if (saveKeys?.length) {\n shortcuts.push({\n keys: saveKeys,\n title: '@general:actions.apply.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteSaveShortcut(),\n handler: () => {\n void this.vm.apply();\n },\n });\n }\n\n if (discardKeys?.length) {\n shortcuts.push({\n keys: discardKeys,\n title: '@general:actions.discard.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut();\n },\n });\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id: 'settings-page-core',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: group,\n shortcuts,\n });\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private canExecuteDiscardShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private async executeDiscardViaShortcut(): Promise<void> {\n if (!this.canExecuteDiscardShortcut()) {\n return;\n }\n\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(true, {\n title: '@general:messages.unsaved-changes.title',\n message: '@general:messages.discard-changes.message',\n approveLeaveOnConfirm: false,\n });\n if (!confirmed) {\n return;\n }\n\n await this.vm.discard();\n }\n\n //#endregion\n\n //#region ---- Leave Page Gate ----\n\n async canDeactivate(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return true;\n }\n\n return this.confirmLeaveIfDirty();\n }\n\n override onBeforeTabClose(): Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n private shouldPromptLeave(): boolean {\n return this.vm.isDirty();\n }\n\n private async confirmLeaveIfDirty(): Promise<boolean> {\n const wasDirty = this.shouldPromptLeave();\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(wasDirty);\n if (confirmed && wasDirty) {\n await this.vm.discard();\n }\n return confirmed;\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (!this.vm.activateGroup()) {\n return [];\n }\n\n const items: AXPActionMenuItem[] = [\n {\n title: await this.translateService.translateAsync(\n '@settings-management:settings.actions.restore-defaults.title',\n ),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'restore-defaults' },\n },\n ];\n\n const payload = await this.hooks.runAsync('settings-page.secondary-actions', { items });\n return payload.items ?? items;\n }\n\n override async getPageTitle(): Promise<string> {\n const group = this.vm.activateGroup();\n const groupHeadingKey = group?.pageTitle ?? group?.title;\n const scopeTitle = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n );\n if (!this.vm.isSearching()) {\n return groupHeadingKey ?? scopeTitle;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.title', {\n params: { q: this.vm.searchExpression() },\n });\n }\n }\n\n override async getPageDescription(): Promise<string | null> {\n const groupDescription = this.vm.activateGroup()?.description;\n const scopeDescription = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeDescription(),\n );\n if (!this.vm.isSearching()) {\n return groupDescription ?? scopeDescription;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.description');\n }\n }\n\n override hasUnsavedChanges(): boolean {\n return this.vm.isDirty();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n if (this.vm.activateGroup()) {\n return {\n title: await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n ),\n };\n }\n return null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n this.router.navigate([app, 'settings', scope]);\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'restore-defaults':\n await this.vm.resetToDefault();\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>"],"names":["i9"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-CSJ-1pfO.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.html"],"sourcesContent":["import { AXPContextChangeEvent, getSmart } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingLayoutOptions,\n AXPSettingSectionAction,\n} from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPWidgetCoreModule, AXPWidgetContainerComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n templateUrl: 'setting-view.component.html',\n imports: [\n CommonModule,\n FormsModule,\n //\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXButtonModule,\n AXBadgeModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXDropdownButtonModule,\n AXLoadingModule,\n AXFormModule,\n AXValidationModule,\n //\n AXPWidgetCoreModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'w-full',\n },\n})\nexport class AXPSettingsViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPSettingsViewModel);\n private readonly commandService = inject(AXPCommandService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly form = viewChild(AXFormComponent);\n private readonly container = viewChild(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Cached row visibility keyed by setting name (from `widget.options.visibility`). */\n protected readonly rowVisibility = signal<Record<string, boolean>>({});\n\n private visibilityRefreshGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle Effects ----\n\n #registerFormEffect = effect(() => {\n const formRef = this.form();\n if (formRef) {\n this.vm.registerForm(formRef);\n }\n });\n\n #statusEffect = effect(() => {\n this.container()?.builderService.setStatus(this.vm.status());\n });\n\n #formDirtyEffect = effect(() => {\n if (this.vm.syncingBaseline()) {\n return;\n }\n\n const container = this.container();\n const isDirty = container?.isFormDirty() ?? false;\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n untracked(() => this.vm.setFormDirty(isDirty));\n });\n\n #applySyncEffect = effect(() => {\n const nonce = this.vm.applySyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(async () => {\n this.vm.setSyncingBaseline(true);\n try {\n if (container) {\n await container.replaceContext(this.vm.context());\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #discardSyncEffect = effect(() => {\n const nonce = this.vm.discardSyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(() => {\n try {\n if (container) {\n container.revertAndSettle();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #rowVisibilityEffect = effect(() => {\n const context = this.vm.context();\n this.vm.activateGroup();\n this.vm.searchResults();\n this.vm.isSearching();\n const container = this.container();\n\n untracked(() => {\n void this.refreshRowVisibility(context, container);\n });\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent): void {\n this.vm.updateContext(e.data);\n }\n\n protected isSectionActionDisabled(action: AXPSettingSectionAction): boolean {\n if (!action.command?.name || !this.commandService.exists(action.command.name)) {\n return true;\n }\n\n if (action.disabledWhenDirty && this.vm.isDirty()) {\n return true;\n }\n\n if (action.requiredSettingKeys?.length) {\n const context = this.vm.context();\n if (!action.requiredSettingKeys.every((key) => hasSettingContextValue(context, key))) {\n return true;\n }\n }\n\n return false;\n }\n\n protected runSectionAction(action: AXPSettingSectionAction): void {\n if (this.isSectionActionDisabled(action) || !action.command?.name) {\n return;\n }\n void this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ---- Layout Helpers ----\n\n /** Side-by-side settings row with wider control column (`layout.positions` without `stacked`). */\n protected hasWideControlLayout(layout?: AXPSettingLayoutOptions): boolean {\n return !!layout?.positions && layout.stacked !== true;\n }\n\n //#endregion\n\n //#region ---- Row Visibility ----\n\n /** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */\n protected isSettingRowVisible(setting: AXPSettingDefinition): boolean {\n const visibility = setting.widget.options?.['visibility'];\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n return this.rowVisibility()[setting.name] ?? true;\n }\n\n private async refreshRowVisibility(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): Promise<void> {\n const generation = ++this.visibilityRefreshGeneration;\n const settings = this.collectVisibleSettings();\n const scope = this.buildExpressionScope(context, container);\n const next: Record<string, boolean> = {};\n\n await Promise.all(\n settings.map(async (setting) => {\n next[setting.name] = await this.resolveRowVisibility(setting.widget.options?.['visibility'], scope);\n }),\n );\n\n if (generation !== this.visibilityRefreshGeneration) {\n return;\n }\n\n this.rowVisibility.set(next);\n }\n\n private collectVisibleSettings(): AXPSettingDefinition[] {\n if (this.vm.isSearching()) {\n const results = this.vm.searchResults();\n if (!results?.length) {\n return [];\n }\n return results.flatMap((group) => group.sections.flatMap((section) => section.settings));\n }\n\n const group = this.vm.activateGroup();\n if (!group?.sections.length) {\n return [];\n }\n\n return group.sections.flatMap((section) => section.settings);\n }\n\n private async resolveRowVisibility(\n visibility: unknown,\n scope: AXPExpressionEvaluatorScope,\n ): Promise<boolean> {\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n if (typeof visibility === 'string') {\n if (this.expressionEvaluator.isExpression(visibility)) {\n return Boolean(await this.expressionEvaluator.evaluate(visibility, scope));\n }\n return Boolean(visibility);\n }\n return true;\n }\n\n private buildExpressionScope(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): AXPExpressionEvaluatorScope {\n return {\n context: {\n eval: (path: string) => {\n if (container) {\n const fromContainer = container.contextService.getValue(path);\n if (fromContainer !== undefined) {\n return fromContainer;\n }\n }\n return this.readSettingContextValue(context, path);\n },\n set: (path: string, value: unknown) => {\n container?.contextService.update(path, value, { origin: 'user' });\n },\n data: () => (container?.contextService.data() as Record<string, unknown>) ?? context,\n isDirty: () => container?.contextService.isDirty() ?? false,\n options: (path?: string) => {\n if (!container) {\n return undefined;\n }\n if (path == null || path === '') {\n return container.contextService.getValue('options');\n }\n return container.contextService.getValue(`options.${path}`);\n },\n },\n events: {},\n widget: {},\n methods: {},\n vars: {},\n };\n }\n\n /** Flat persisted setting keys may contain dots (e.g. `Common:Setting:Navigation.Mode`). */\n private readSettingContextValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n }\n}\n\nfunction hasSettingContextValue(context: Record<string, unknown>, key: string): boolean {\n const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);\n\n if (value == null) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0;\n }\n\n return true;\n}\n","<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>"],"names":["i3","i4"],"mappings":"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"}
|