@acorex/modules 20.3.0-next.3 → 20.3.0-next.5
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-modules-content-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DDriJFmP.mjs → acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs} +122 -80
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DDriJFmP.mjs.map → acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-OYJu4IJz.mjs → acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-OYJu4IJz.mjs.map → acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CZzlGMcu.mjs → acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CZzlGMcu.mjs.map → acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-details-view.component-VdV7xGPS.mjs → acorex-modules-document-management-details-view.component-3DmulyK_.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-details-view.component-VdV7xGPS.mjs.map → acorex-modules-document-management-details-view.component-3DmulyK_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-Gi0_m0oe.mjs → acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-Gi0_m0oe.mjs.map → acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-BgRZ_nhs.mjs → acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-BgRZ_nhs.mjs.map → acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive.component-BRCGsnuI.mjs → acorex-modules-document-management-drive.component-D5X_bI5D.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive.component-BRCGsnuI.mjs.map → acorex-modules-document-management-drive.component-D5X_bI5D.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-CnsPx3K3.mjs → acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-CnsPx3K3.mjs.map → acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-D4OUme1W.mjs → acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-D4OUme1W.mjs.map → acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-list-view.component-C7i4jI9h.mjs → acorex-modules-document-management-list-view.component-Cb2OVElN.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-list-view.component-C7i4jI9h.mjs.map → acorex-modules-document-management-list-view.component-Cb2OVElN.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DHVn7RIv.mjs → acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DHVn7RIv.mjs.map → acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-By36moe5.mjs → acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-By36moe5.mjs.map → acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CO6MfsEU.mjs → acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CO6MfsEU.mjs.map → acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-WkDn4mpE.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs} +23 -12
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-WkDn4mpE.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DsUYujPr.mjs → acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DsUYujPr.mjs.map → acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-CC-LIIki.mjs → acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs} +10 -8
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Mgkdm2vo.mjs → acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Mgkdm2vo.mjs.map → acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BJyciZGL.mjs → acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BJyciZGL.mjs.map → acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-IewYlMLV.mjs → acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-IewYlMLV.mjs.map → acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BlKFRnO0.mjs → acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs} +7 -53
- package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-De1qKpcU.mjs → acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-De1qKpcU.mjs.map → acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-skill.entity-RrnBU0M5.mjs → acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-skill.entity-RrnBU0M5.mjs.map → acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs +544 -0
- package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-position.entity-DK-i78ck.mjs → acorex-modules-organization-management-position.entity-CzBbuApR.mjs} +47 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-CzBbuApR.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-settings.provider-feVwZnkw.mjs → acorex-modules-organization-management-settings.provider-BvOAb0jb.mjs} +21 -2
- package/fesm2022/acorex-modules-organization-management-settings.provider-BvOAb0jb.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +358 -240
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +76 -16
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-Y-liTcuX.mjs → acorex-modules-settings-management-setting-page.component-IG1o_0Dp.mjs} +17 -14
- package/fesm2022/acorex-modules-settings-management-setting-page.component-IG1o_0Dp.mjs.map +1 -0
- package/fesm2022/acorex-modules-settings-management.mjs +1 -1
- package/fesm2022/acorex-modules-settings-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-task-management.mjs +0 -3
- package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
- package/organization-management/README.md +98 -2
- package/organization-management/index.d.ts +44 -123
- package/package.json +1 -1
- package/report-management/index.d.ts +31 -3
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-CC-LIIki.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-BlKFRnO0.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-add-item.component-CtuULLkY.mjs +0 -89
- package/fesm2022/acorex-modules-organization-management-add-item.component-CtuULLkY.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-branch.entity-C4Le6Kv6.mjs +0 -317
- package/fesm2022/acorex-modules-organization-management-branch.entity-C4Le6Kv6.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-department.entity-BkEbajpN.mjs +0 -288
- package/fesm2022/acorex-modules-organization-management-department.entity-BkEbajpN.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-division.entity-Cds8jkR5.mjs +0 -515
- package/fesm2022/acorex-modules-organization-management-division.entity-Cds8jkR5.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs +0 -116
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs +0 -147
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-DeqD7PyH.mjs +0 -989
- package/fesm2022/acorex-modules-organization-management-org-chart.page-DeqD7PyH.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-DK-i78ck.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs +0 -22
- package/fesm2022/acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-settings.provider-feVwZnkw.mjs.map +0 -1
- package/fesm2022/acorex-modules-settings-management-setting-page.component-Y-liTcuX.mjs.map +0 -1
package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import * as i5 from '@acorex/components/alert';
|
|
2
|
-
import { AXAlertModule } from '@acorex/components/alert';
|
|
3
|
-
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
|
4
|
-
import * as i3 from '@acorex/components/button';
|
|
5
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
6
|
-
import { AXCheckBoxModule } from '@acorex/components/check-box';
|
|
7
|
-
import * as i3$1 from '@acorex/components/decorators';
|
|
8
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
9
|
-
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
|
10
|
-
import * as i4$1 from '@acorex/components/loading';
|
|
11
|
-
import { AXLoadingModule } from '@acorex/components/loading';
|
|
12
|
-
import { AXMenuModule } from '@acorex/components/menu';
|
|
13
|
-
import * as i4 from '@acorex/core/translation';
|
|
14
|
-
import { AXTranslationModule } from '@acorex/core/translation';
|
|
15
|
-
import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
|
|
16
|
-
import { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
|
|
17
|
-
import * as i0 from '@angular/core';
|
|
18
|
-
import { inject, signal, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
19
|
-
import { FormsModule } from '@angular/forms';
|
|
20
|
-
import { RouterModule } from '@angular/router';
|
|
21
|
-
import { RootConfig } from './acorex-modules-organization-management.mjs';
|
|
22
|
-
import { A as AXMOrgChartConfigService } from './acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs';
|
|
23
|
-
|
|
24
|
-
class AXMOrgChartConfigurationPage extends AXPPageLayoutBaseComponent {
|
|
25
|
-
constructor() {
|
|
26
|
-
super(...arguments);
|
|
27
|
-
this.chartService = inject(AXMOrgChartConfigService);
|
|
28
|
-
this.loadingStates = signal({}, ...(ngDevMode ? [{ debugName: "loadingStates" }] : []));
|
|
29
|
-
this.rootConfig = RootConfig;
|
|
30
|
-
}
|
|
31
|
-
async ngOnInit() {
|
|
32
|
-
await super.ngOnInit();
|
|
33
|
-
await this.chartService.load();
|
|
34
|
-
}
|
|
35
|
-
async togglePermission(parent, child) {
|
|
36
|
-
//TODO: Check the async and loading
|
|
37
|
-
// Set the loading state for this cell to true.
|
|
38
|
-
this.loadingStates.update((states) => {
|
|
39
|
-
if (!states[parent]) {
|
|
40
|
-
states[parent] = {};
|
|
41
|
-
}
|
|
42
|
-
states[parent][child] = true;
|
|
43
|
-
return states;
|
|
44
|
-
});
|
|
45
|
-
this.chartService.set(parent, child, !this.chartService.get(parent, child));
|
|
46
|
-
await this.chartService.update();
|
|
47
|
-
// Turn off the loading state.
|
|
48
|
-
this.loadingStates.update((states) => {
|
|
49
|
-
if (!states[parent]) {
|
|
50
|
-
states[parent] = {};
|
|
51
|
-
}
|
|
52
|
-
states[parent][child] = false;
|
|
53
|
-
return states;
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
async getPageTitle() {
|
|
57
|
-
return await this.translateService.translateAsync('chart-configuration.page-title', { scope: this.rootConfig.config.i18n });
|
|
58
|
-
}
|
|
59
|
-
async getPageDescription() {
|
|
60
|
-
return await this.translateService.translateAsync('chart-configuration.page-description', { scope: this.rootConfig.config.i18n });
|
|
61
|
-
}
|
|
62
|
-
async getSecondaryMenuItems() {
|
|
63
|
-
return [
|
|
64
|
-
{
|
|
65
|
-
title: await this.translateService.translateAsync('chart-configuration.actions.reset', { scope: this.rootConfig.config.i18n }),
|
|
66
|
-
icon: 'fa-light fa-rotate-left',
|
|
67
|
-
color: 'primary',
|
|
68
|
-
command: {
|
|
69
|
-
name: 'reset',
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
];
|
|
73
|
-
}
|
|
74
|
-
async getPageBreadcrumbs() {
|
|
75
|
-
return [
|
|
76
|
-
{
|
|
77
|
-
title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n })
|
|
78
|
-
},
|
|
79
|
-
];
|
|
80
|
-
}
|
|
81
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigurationPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
82
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXMOrgChartConfigurationPage, isStandalone: true, selector: "ng-component", providers: [
|
|
83
|
-
AXMOrgChartConfigService,
|
|
84
|
-
{
|
|
85
|
-
provide: AXPPageLayoutBase,
|
|
86
|
-
useExisting: AXMOrgChartConfigurationPage
|
|
87
|
-
}
|
|
88
|
-
], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content>\n <div class=\"ax-flex ax-flex-col ax-gap-6 ax-w-full\">\n <div>\n <h3 class=\"ax-font-semibold ax-text-xl\">Relations Permissions</h3>\n <p class=\"ax-text-sm ax-opacity-85\">\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\n relation between <span class=\"ax-text-danger-500\">Allowed</span> and\n <span class=\"ax-text-success-500\">Denied</span>.\n </p>\n </div>\n <!---------------- Matrix Table ---------------->\n <div class=\"ax-w-full ax-overflow-auto\">\n <table class=\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\">\n <thead>\n <tr class=\"ax-dark-surface\">\n <!-- Top-left empty cell -->\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">Parent \\ Child</th>\n <!-- Horizontal headers -->\n @for ( type of chartService.types; track $index) {\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\">{{ type }}</th>\n }\n </tr>\n </thead>\n <tbody>\n <!-- For each parent type, render a row with alternating backgrounds -->\n @for ( parent of chartService.types; track $index) {\n <tr>\n <!-- Vertical header cell with custom header colors -->\n <td class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">{{ parent }}</td>\n <!-- Render a cell for each potential child type -->\n @for ( child of chartService.types; track $index) {\n <td class=\"ax-border ax-lightest-surface ax-border-surface ax-p-2\">\n <div class=\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\">\n @let isLoading = loadingStates()[parent]?.[child];\n <ax-button\n look=\"blank\"\n [color]=\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\"\n [text]=\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\"\n [disabled]=\"isLoading\"\n (onClick)=\"togglePermission(parent, child)\"\n >\n @if(isLoading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <div>\n <ax-alert [color]=\"'warning'\" class=\"ax-max-w-fit\">\n <ax-icon></ax-icon>\n <ax-title>Attention</ax-title>\n <ax-content>\n Changes made here will not update your current organization chart. They will only affect future charts or\n updates.\n </ax-content>\n </ax-alert>\n </div>\n </div>\n </axp-page-content>\n</axp-page-layout>\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$1.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: AXLoadingModule }, { kind: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXAlertModule }, { kind: "component", type: i5.AXAlertComponent, selector: "ax-alert", inputs: ["color", "timeOut"], outputs: ["colorChange", "onClosed", "timeOutChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
89
|
-
}
|
|
90
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigurationPage, decorators: [{
|
|
91
|
-
type: Component,
|
|
92
|
-
args: [{ imports: [
|
|
93
|
-
RouterModule,
|
|
94
|
-
FormsModule,
|
|
95
|
-
AXPThemeLayoutBlockComponent,
|
|
96
|
-
AXPPageLayoutComponent,
|
|
97
|
-
AXMenuModule,
|
|
98
|
-
AXButtonModule,
|
|
99
|
-
AXDropdownButtonModule,
|
|
100
|
-
AXTranslationModule,
|
|
101
|
-
AXDecoratorModule,
|
|
102
|
-
AXLoadingModule,
|
|
103
|
-
AXCheckBoxModule,
|
|
104
|
-
AXBreadcrumbsModule,
|
|
105
|
-
AXAlertModule
|
|
106
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
107
|
-
AXMOrgChartConfigService,
|
|
108
|
-
{
|
|
109
|
-
provide: AXPPageLayoutBase,
|
|
110
|
-
useExisting: AXMOrgChartConfigurationPage
|
|
111
|
-
}
|
|
112
|
-
], template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content>\n <div class=\"ax-flex ax-flex-col ax-gap-6 ax-w-full\">\n <div>\n <h3 class=\"ax-font-semibold ax-text-xl\">Relations Permissions</h3>\n <p class=\"ax-text-sm ax-opacity-85\">\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\n relation between <span class=\"ax-text-danger-500\">Allowed</span> and\n <span class=\"ax-text-success-500\">Denied</span>.\n </p>\n </div>\n <!---------------- Matrix Table ---------------->\n <div class=\"ax-w-full ax-overflow-auto\">\n <table class=\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\">\n <thead>\n <tr class=\"ax-dark-surface\">\n <!-- Top-left empty cell -->\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">Parent \\ Child</th>\n <!-- Horizontal headers -->\n @for ( type of chartService.types; track $index) {\n <th class=\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\">{{ type }}</th>\n }\n </tr>\n </thead>\n <tbody>\n <!-- For each parent type, render a row with alternating backgrounds -->\n @for ( parent of chartService.types; track $index) {\n <tr>\n <!-- Vertical header cell with custom header colors -->\n <td class=\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\">{{ parent }}</td>\n <!-- Render a cell for each potential child type -->\n @for ( child of chartService.types; track $index) {\n <td class=\"ax-border ax-lightest-surface ax-border-surface ax-p-2\">\n <div class=\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\">\n @let isLoading = loadingStates()[parent]?.[child];\n <ax-button\n look=\"blank\"\n [color]=\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\"\n [text]=\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\"\n [disabled]=\"isLoading\"\n (onClick)=\"togglePermission(parent, child)\"\n >\n @if(isLoading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <div>\n <ax-alert [color]=\"'warning'\" class=\"ax-max-w-fit\">\n <ax-icon></ax-icon>\n <ax-title>Attention</ax-title>\n <ax-content>\n Changes made here will not update your current organization chart. They will only affect future charts or\n updates.\n </ax-content>\n </ax-alert>\n </div>\n </div>\n </axp-page-content>\n</axp-page-layout>\n" }]
|
|
113
|
-
}] });
|
|
114
|
-
|
|
115
|
-
export { AXMOrgChartConfigurationPage };
|
|
116
|
-
//# sourceMappingURL=acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart-configuration.page.js"],"sourcesContent":["import { AXAlertModule } from '@acorex/components/alert';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXMOrgChartConfigService } from './org-chart-configuration.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/core/translation\";\nimport * as i3 from \"@acorex/components/decorators\";\nimport * as i4 from \"@acorex/components/loading\";\nimport * as i5 from \"@acorex/components/alert\";\nexport class AXMOrgChartConfigurationPage extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.chartService = inject(AXMOrgChartConfigService);\n this.loadingStates = signal({}, ...(ngDevMode ? [{ debugName: \"loadingStates\" }] : []));\n this.rootConfig = RootConfig;\n }\n async ngOnInit() {\n await super.ngOnInit();\n await this.chartService.load();\n }\n async togglePermission(parent, child) {\n //TODO: Check the async and loading\n // Set the loading state for this cell to true.\n this.loadingStates.update((states) => {\n if (!states[parent]) {\n states[parent] = {};\n }\n states[parent][child] = true;\n return states;\n });\n this.chartService.set(parent, child, !this.chartService.get(parent, child));\n await this.chartService.update();\n // Turn off the loading state.\n this.loadingStates.update((states) => {\n if (!states[parent]) {\n states[parent] = {};\n }\n states[parent][child] = false;\n return states;\n });\n }\n async getPageTitle() {\n return await this.translateService.translateAsync('chart-configuration.page-title', { scope: this.rootConfig.config.i18n });\n }\n async getPageDescription() {\n return await this.translateService.translateAsync('chart-configuration.page-description', { scope: this.rootConfig.config.i18n });\n }\n async getSecondaryMenuItems() {\n return [\n {\n title: await this.translateService.translateAsync('chart-configuration.actions.reset', { scope: this.rootConfig.config.i18n }),\n icon: 'fa-light fa-rotate-left',\n color: 'primary',\n command: {\n name: 'reset',\n }\n }\n ];\n }\n async getPageBreadcrumbs() {\n return [\n {\n title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n })\n },\n ];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigurationPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: AXMOrgChartConfigurationPage, isStandalone: true, selector: \"ng-component\", providers: [\n AXMOrgChartConfigService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartConfigurationPage\n }\n ], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-6 ax-w-full\\\">\\n <div>\\n <h3 class=\\\"ax-font-semibold ax-text-xl\\\">Relations Permissions</h3>\\n <p class=\\\"ax-text-sm ax-opacity-85\\\">\\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\\n relation between <span class=\\\"ax-text-danger-500\\\">Allowed</span> and\\n <span class=\\\"ax-text-success-500\\\">Denied</span>.\\n </p>\\n </div>\\n <!---------------- Matrix Table ---------------->\\n <div class=\\\"ax-w-full ax-overflow-auto\\\">\\n <table class=\\\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\\\">\\n <thead>\\n <tr class=\\\"ax-dark-surface\\\">\\n <!-- Top-left empty cell -->\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">Parent \\\\ Child</th>\\n <!-- Horizontal headers -->\\n @for ( type of chartService.types; track $index) {\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\\\">{{ type }}</th>\\n }\\n </tr>\\n </thead>\\n <tbody>\\n <!-- For each parent type, render a row with alternating backgrounds -->\\n @for ( parent of chartService.types; track $index) {\\n <tr>\\n <!-- Vertical header cell with custom header colors -->\\n <td class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">{{ parent }}</td>\\n <!-- Render a cell for each potential child type -->\\n @for ( child of chartService.types; track $index) {\\n <td class=\\\"ax-border ax-lightest-surface ax-border-surface ax-p-2\\\">\\n <div class=\\\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\\\">\\n @let isLoading = loadingStates()[parent]?.[child];\\n <ax-button\\n look=\\\"blank\\\"\\n [color]=\\\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\\\"\\n [text]=\\\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\\\"\\n [disabled]=\\\"isLoading\\\"\\n (onClick)=\\\"togglePermission(parent, child)\\\"\\n >\\n @if(isLoading) {\\n <ax-loading></ax-loading>\\n }\\n </ax-button>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n <div>\\n <ax-alert [color]=\\\"'warning'\\\" class=\\\"ax-max-w-fit\\\">\\n <ax-icon></ax-icon>\\n <ax-title>Attention</ax-title>\\n <ax-content>\\n Changes made here will not update your current organization chart. They will only affect future charts or\\n updates.\\n </ax-content>\\n </ax-alert>\\n </div>\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\\n\", dependencies: [{ kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"ngmodule\", type: AXMenuModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.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: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i2.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i3.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i3.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i4.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXAlertModule }, { kind: \"component\", type: i5.AXAlertComponent, selector: \"ax-alert\", inputs: [\"color\", \"timeOut\"], outputs: [\"colorChange\", \"onClosed\", \"timeOutChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigurationPage, decorators: [{\n type: Component,\n args: [{ imports: [\n RouterModule,\n FormsModule,\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXCheckBoxModule,\n AXBreadcrumbsModule,\n AXAlertModule\n ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n AXMOrgChartConfigService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartConfigurationPage\n }\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-6 ax-w-full\\\">\\n <div>\\n <h3 class=\\\"ax-font-semibold ax-text-xl\\\">Relations Permissions</h3>\\n <p class=\\\"ax-text-sm ax-opacity-85\\\">\\n This matrix sets the relationships between nodes in your organization chart. Click a cell to toggle the\\n relation between <span class=\\\"ax-text-danger-500\\\">Allowed</span> and\\n <span class=\\\"ax-text-success-500\\\">Denied</span>.\\n </p>\\n </div>\\n <!---------------- Matrix Table ---------------->\\n <div class=\\\"ax-w-full ax-overflow-auto\\\">\\n <table class=\\\"ax-table-auto ax-border-collapse ax-max-w-fit ax-border-surface ax-rounded-md\\\">\\n <thead>\\n <tr class=\\\"ax-dark-surface\\\">\\n <!-- Top-left empty cell -->\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">Parent \\\\ Child</th>\\n <!-- Horizontal headers -->\\n @for ( type of chartService.types; track $index) {\\n <th class=\\\"ax-border ax-dark-surface ax-p-4 ax-min-w-32 ax-text-center ax-font-semibold\\\">{{ type }}</th>\\n }\\n </tr>\\n </thead>\\n <tbody>\\n <!-- For each parent type, render a row with alternating backgrounds -->\\n @for ( parent of chartService.types; track $index) {\\n <tr>\\n <!-- Vertical header cell with custom header colors -->\\n <td class=\\\"ax-border ax-dark-surface ax-p-4 ax-font-semibold ax-text-start\\\">{{ parent }}</td>\\n <!-- Render a cell for each potential child type -->\\n @for ( child of chartService.types; track $index) {\\n <td class=\\\"ax-border ax-lightest-surface ax-border-surface ax-p-2\\\">\\n <div class=\\\"ax-flex ax-justify-center ax-cursor-pointer ax-sm\\\">\\n @let isLoading = loadingStates()[parent]?.[child];\\n <ax-button\\n look=\\\"blank\\\"\\n [color]=\\\"chartService.isAllowed(parent, child) ? 'success' : 'danger'\\\"\\n [text]=\\\"chartService.isAllowed(parent, child) ? 'Allowed' : 'Denied'\\\"\\n [disabled]=\\\"isLoading\\\"\\n (onClick)=\\\"togglePermission(parent, child)\\\"\\n >\\n @if(isLoading) {\\n <ax-loading></ax-loading>\\n }\\n </ax-button>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n <div>\\n <ax-alert [color]=\\\"'warning'\\\" class=\\\"ax-max-w-fit\\\">\\n <ax-icon></ax-icon>\\n <ax-title>Attention</ax-title>\\n <ax-content>\\n Changes made here will not update your current organization chart. They will only affect future charts or\\n updates.\\n </ax-content>\\n </ax-alert>\\n </div>\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\\n\" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LWNvbmZpZ3VyYXRpb24ucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9vcmdhbml6YXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL29yZ2FuaXphdGlvbi1jaGFydC9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL29yZ2FuaXphdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvb3JnYW5pemF0aW9uLWNoYXJ0L29yZy1jaGFydC1jb25maWd1cmF0aW9uLnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEYsT0FBTyxFQUFFLHVCQUF1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ICdAYWNvcmV4L2NvbXBvbmVudHMvYWxlcnQnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDaGVja0JveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jaGVjay1ib3gnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWE1lbnVNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbWVudSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1PcmdDaGFydENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL29yZy1jaGFydC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWE1lbnVNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWENoZWNrQm94TW9kdWxlLFxuICAgIEFYQnJlYWRjcnVtYnNNb2R1bGUsXG4gICAgQVhBbGVydE1vZHVsZVxuXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIEFYTU9yZ0NoYXJ0Q29uZmlnU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1PcmdDaGFydENvbmZpZ3VyYXRpb25QYWdlXG4gICAgfVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1PcmdDaGFydENvbmZpZ3VyYXRpb25QYWdlIGV4dGVuZHMgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhcnRTZXJ2aWNlID0gaW5qZWN0KEFYTU9yZ0NoYXJ0Q29uZmlnU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmdTdGF0ZXMgPSBzaWduYWw8eyBbcGFyZW50OiBzdHJpbmddOiB7IFtjaGlsZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgdW5kZWZpbmVkIH0+KHt9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbmZpZyA9IFJvb3RDb25maWc7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgc3VwZXIubmdPbkluaXQoKTtcbiAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5sb2FkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdG9nZ2xlUGVybWlzc2lvbihwYXJlbnQ6IHN0cmluZywgY2hpbGQ6IHN0cmluZykge1xuICAgIC8vVE9ETzogQ2hlY2sgdGhlIGFzeW5jIGFuZCBsb2FkaW5nXG5cbiAgICAvLyBTZXQgdGhlIGxvYWRpbmcgc3RhdGUgZm9yIHRoaXMgY2VsbCB0byB0cnVlLlxuICAgIHRoaXMubG9hZGluZ1N0YXRlcy51cGRhdGUoKHN0YXRlcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZXNbcGFyZW50XSkge1xuICAgICAgICBzdGF0ZXNbcGFyZW50XSA9IHt9O1xuICAgICAgfVxuICAgICAgc3RhdGVzW3BhcmVudF1bY2hpbGRdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBzdGF0ZXM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5zZXQocGFyZW50LCBjaGlsZCwgIXRoaXMuY2hhcnRTZXJ2aWNlLmdldChwYXJlbnQsIGNoaWxkKSk7XG5cbiAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS51cGRhdGUoKTtcblxuICAgIC8vIFR1cm4gb2ZmIHRoZSBsb2FkaW5nIHN0YXRlLlxuICAgIHRoaXMubG9hZGluZ1N0YXRlcy51cGRhdGUoKHN0YXRlcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZXNbcGFyZW50XSkge1xuICAgICAgICBzdGF0ZXNbcGFyZW50XSA9IHt9O1xuICAgICAgfVxuICAgICAgc3RhdGVzW3BhcmVudF1bY2hpbGRdID0gZmFsc2U7XG4gICAgICByZXR1cm4gc3RhdGVzO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLXRpdGxlJywgeyBzY29wZTogdGhpcy5yb290Q29uZmlnLmNvbmZpZy5pMThuIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZURlc2NyaXB0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnY2hhcnQtY29uZmlndXJhdGlvbi5wYWdlLWRlc2NyaXB0aW9uJywgeyBzY29wZTogdGhpcy5yb290Q29uZmlnLmNvbmZpZy5pMThuIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ2NoYXJ0LWNvbmZpZ3VyYXRpb24uYWN0aW9ucy5yZXNldCcsIHsgc2NvcGU6IHRoaXMucm9vdENvbmZpZy5jb25maWcuaTE4biB9KSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXJvdGF0ZS1sZWZ0JyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdyZXNldCcsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICB9XG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VCcmVhZGNydW1icygpOiBQcm9taXNlPEFYUEJyZWFkY3J1bWJJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdyb290LW1lbnUnLCB7IHNjb3BlOiB0aGlzLnJvb3RDb25maWcuY29uZmlnLmkxOG4gfSlcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgPGF4cC1wYWdlLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtZ2FwLTYgYXgtdy1mdWxsXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8aDMgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQteGxcIj5SZWxhdGlvbnMgUGVybWlzc2lvbnM8L2gzPlxuICAgICAgICA8cCBjbGFzcz1cImF4LXRleHQtc20gYXgtb3BhY2l0eS04NVwiPlxuICAgICAgICAgIFRoaXMgbWF0cml4IHNldHMgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBub2RlcyBpbiB5b3VyIG9yZ2FuaXphdGlvbiBjaGFydC4gQ2xpY2sgYSBjZWxsIHRvIHRvZ2dsZSB0aGVcbiAgICAgICAgICByZWxhdGlvbiBiZXR3ZWVuIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC1kYW5nZXItNTAwXCI+QWxsb3dlZDwvc3Bhbj4gYW5kXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LXN1Y2Nlc3MtNTAwXCI+RGVuaWVkPC9zcGFuPi5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tLS0tLS0tLS0tLS0tLS0gTWF0cml4IFRhYmxlIC0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtdy1mdWxsIGF4LW92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiYXgtdGFibGUtYXV0byBheC1ib3JkZXItY29sbGFwc2UgYXgtbWF4LXctZml0IGF4LWJvcmRlci1zdXJmYWNlIGF4LXJvdW5kZWQtbWRcIj5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJheC1kYXJrLXN1cmZhY2VcIj5cbiAgICAgICAgICAgICAgPCEtLSBUb3AtbGVmdCBlbXB0eSBjZWxsIC0tPlxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJheC1ib3JkZXIgYXgtZGFyay1zdXJmYWNlIGF4LXAtNCBheC1mb250LXNlbWlib2xkIGF4LXRleHQtc3RhcnRcIj5QYXJlbnQgXFwgQ2hpbGQ8L3RoPlxuICAgICAgICAgICAgICA8IS0tIEhvcml6b250YWwgaGVhZGVycyAtLT5cbiAgICAgICAgICAgICAgQGZvciAoIHR5cGUgb2YgY2hhcnRTZXJ2aWNlLnR5cGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYXgtYm9yZGVyIGF4LWRhcmstc3VyZmFjZSBheC1wLTQgYXgtbWluLXctMzIgYXgtdGV4dC1jZW50ZXIgYXgtZm9udC1zZW1pYm9sZFwiPnt7IHR5cGUgfX08L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPCEtLSBGb3IgZWFjaCBwYXJlbnQgdHlwZSwgcmVuZGVyIGEgcm93IHdpdGggYWx0ZXJuYXRpbmcgYmFja2dyb3VuZHMgLS0+XG4gICAgICAgICAgICBAZm9yICggcGFyZW50IG9mIGNoYXJ0U2VydmljZS50eXBlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDwhLS0gVmVydGljYWwgaGVhZGVyIGNlbGwgd2l0aCBjdXN0b20gaGVhZGVyIGNvbG9ycyAtLT5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXgtYm9yZGVyIGF4LWRhcmstc3VyZmFjZSBheC1wLTQgYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LXN0YXJ0XCI+e3sgcGFyZW50IH19PC90ZD5cbiAgICAgICAgICAgICAgPCEtLSBSZW5kZXIgYSBjZWxsIGZvciBlYWNoIHBvdGVudGlhbCBjaGlsZCB0eXBlIC0tPlxuICAgICAgICAgICAgICBAZm9yICggY2hpbGQgb2YgY2hhcnRTZXJ2aWNlLnR5cGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXgtYm9yZGVyIGF4LWxpZ2h0ZXN0LXN1cmZhY2UgYXgtYm9yZGVyLXN1cmZhY2UgYXgtcC0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1jZW50ZXIgYXgtY3Vyc29yLXBvaW50ZXIgYXgtc21cIj5cbiAgICAgICAgICAgICAgICAgIEBsZXQgaXNMb2FkaW5nID0gbG9hZGluZ1N0YXRlcygpW3BhcmVudF0/LltjaGlsZF07XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGxvb2s9XCJibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJjaGFydFNlcnZpY2UuaXNBbGxvd2VkKHBhcmVudCwgY2hpbGQpID8gJ3N1Y2Nlc3MnIDogJ2RhbmdlcidcIlxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjaGFydFNlcnZpY2UuaXNBbGxvd2VkKHBhcmVudCwgY2hpbGQpID8gJ0FsbG93ZWQnIDogJ0RlbmllZCdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlUGVybWlzc2lvbihwYXJlbnQsIGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZihpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGF4LWxvYWRpbmc+PC9heC1sb2FkaW5nPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YXgtYWxlcnQgW2NvbG9yXT1cIid3YXJuaW5nJ1wiIGNsYXNzPVwiYXgtbWF4LXctZml0XCI+XG4gICAgICAgICAgPGF4LWljb24+PC9heC1pY29uPlxuICAgICAgICAgIDxheC10aXRsZT5BdHRlbnRpb248L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1jb250ZW50PlxuICAgICAgICAgICAgQ2hhbmdlcyBtYWRlIGhlcmUgd2lsbCBub3QgdXBkYXRlIHlvdXIgY3VycmVudCBvcmdhbml6YXRpb24gY2hhcnQuIFRoZXkgd2lsbCBvbmx5IGFmZmVjdCBmdXR1cmUgY2hhcnRzIG9yXG4gICAgICAgICAgICB1cGRhdGVzLlxuICAgICAgICAgIDwvYXgtY29udGVudD5cbiAgICAgICAgPC9heC1hbGVydD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD5cbiJdfQ=="],"names":["i1","i2","i3","i4"],"mappings":"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"}
|
package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, signal, Injectable } from '@angular/core';
|
|
3
|
-
import { AXPSettingService } from '@acorex/platform/common';
|
|
4
|
-
import { AXPPlatformScope } from '@acorex/platform/core';
|
|
5
|
-
import { A as AXPOrganizationSetting } from './acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs';
|
|
6
|
-
import { AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS } from './acorex-modules-organization-management.mjs';
|
|
7
|
-
|
|
8
|
-
class AXMOrgChartConfigService {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.settingService = inject(AXPSettingService);
|
|
11
|
-
//
|
|
12
|
-
this._types = Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).map(c => c[1].type);
|
|
13
|
-
this._defaultPermissioEncoded = '011111100001011100000111100000011100011111110011111110011111110000000011000000000';
|
|
14
|
-
this.permissions = signal(this.defaultPermissions(), ...(ngDevMode ? [{ debugName: "permissions" }] : []));
|
|
15
|
-
}
|
|
16
|
-
get types() {
|
|
17
|
-
return this._types;
|
|
18
|
-
}
|
|
19
|
-
defaultPermissions() {
|
|
20
|
-
return this.decode(this._defaultPermissioEncoded);
|
|
21
|
-
}
|
|
22
|
-
encode(permissions) {
|
|
23
|
-
let str = '';
|
|
24
|
-
for (const parent of this.types) {
|
|
25
|
-
for (const child of this.types) {
|
|
26
|
-
str += (permissions[parent]?.[child] ?? 0).toString();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return str;
|
|
30
|
-
}
|
|
31
|
-
decode(encoded) {
|
|
32
|
-
const result = {};
|
|
33
|
-
const expectedLength = this.types.length * this.types.length;
|
|
34
|
-
if (encoded.length !== expectedLength) {
|
|
35
|
-
throw new Error(`Invalid permissions string length. Expected ${expectedLength} but got ${encoded.length}`);
|
|
36
|
-
}
|
|
37
|
-
let index = 0;
|
|
38
|
-
for (const parent of this.types) {
|
|
39
|
-
result[parent] = {};
|
|
40
|
-
for (const child of this.types) {
|
|
41
|
-
const char = encoded.charAt(index);
|
|
42
|
-
result[parent][child] = parseInt(char, 10);
|
|
43
|
-
index++;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
decodeMatrix(matrix) {
|
|
49
|
-
const newPermissions = {};
|
|
50
|
-
this.types.forEach((parent, rowIndex) => {
|
|
51
|
-
newPermissions[parent] = {};
|
|
52
|
-
this.types.forEach((child, colIndex) => {
|
|
53
|
-
newPermissions[parent][child] = matrix[rowIndex][colIndex];
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
return newPermissions;
|
|
57
|
-
}
|
|
58
|
-
validateEncodedValue(storedValue) {
|
|
59
|
-
try {
|
|
60
|
-
if (typeof storedValue === 'string') {
|
|
61
|
-
const expectedLength = this.types.length * this.types.length;
|
|
62
|
-
// Check that the string is the correct length and only contains 0s and 1s.
|
|
63
|
-
if (storedValue.length === expectedLength && /^[01]+$/.test(storedValue)) {
|
|
64
|
-
return this.decode(storedValue);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else if (Array.isArray(storedValue)) {
|
|
68
|
-
// Validate the 2D array dimensions and values.
|
|
69
|
-
if (storedValue.length === this.types.length &&
|
|
70
|
-
storedValue.every(row => Array.isArray(row) &&
|
|
71
|
-
row.length === this.types.length &&
|
|
72
|
-
row.every(val => val === 0 || val === 1))) {
|
|
73
|
-
return this.decodeMatrix(storedValue);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else if (typeof storedValue === 'object' && storedValue !== null) {
|
|
77
|
-
// Validate that the object has all the required keys and that their values are 0 or 1.
|
|
78
|
-
let valid = true;
|
|
79
|
-
for (const parent of this.types) {
|
|
80
|
-
if (!(parent in storedValue)) {
|
|
81
|
-
valid = false;
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
const childPermissions = storedValue[parent];
|
|
85
|
-
for (const child of this.types) {
|
|
86
|
-
if (!(child in childPermissions) || (childPermissions[child] !== 0 && childPermissions[child] !== 1)) {
|
|
87
|
-
valid = false;
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (!valid)
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
if (valid) {
|
|
95
|
-
return storedValue;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
// In case of any errors during validation, fall back to default permissions.
|
|
101
|
-
}
|
|
102
|
-
// Return the default permissions if validation fails.
|
|
103
|
-
return this.defaultPermissions();
|
|
104
|
-
}
|
|
105
|
-
isAllowed(parent, child) {
|
|
106
|
-
return (this.permissions()[parent]?.[child] ?? 0) === 1;
|
|
107
|
-
}
|
|
108
|
-
set(parent, child, value) {
|
|
109
|
-
this.permissions.update((p) => {
|
|
110
|
-
if (!p[parent]) {
|
|
111
|
-
p[parent] = {};
|
|
112
|
-
}
|
|
113
|
-
p[parent][child] = value ? 1 : 0;
|
|
114
|
-
return p;
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
get(parent, child) {
|
|
118
|
-
return this.permissions()[parent]?.[child] === 1;
|
|
119
|
-
}
|
|
120
|
-
async load() {
|
|
121
|
-
const storedValue = await this.settingService
|
|
122
|
-
.scope(AXPPlatformScope.Tenant)
|
|
123
|
-
.get(AXPOrganizationSetting.Relations);
|
|
124
|
-
// Use the validation method to ensure the stored value is correct.
|
|
125
|
-
if (storedValue) {
|
|
126
|
-
const validatedPermissions = this.validateEncodedValue(storedValue);
|
|
127
|
-
this.permissions.set(validatedPermissions);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
this.permissions.set(this.defaultPermissions());
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
async update() {
|
|
134
|
-
const matrix = this.encode(this.permissions());
|
|
135
|
-
await this.settingService
|
|
136
|
-
.scope(AXPPlatformScope.Tenant)
|
|
137
|
-
.set(AXPOrganizationSetting.Relations, matrix);
|
|
138
|
-
}
|
|
139
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
140
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigService }); }
|
|
141
|
-
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMOrgChartConfigService, decorators: [{
|
|
143
|
-
type: Injectable
|
|
144
|
-
}] });
|
|
145
|
-
|
|
146
|
-
export { AXMOrgChartConfigService as A };
|
|
147
|
-
//# sourceMappingURL=acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart-configuration.service.js"],"sourcesContent":["import { inject, Injectable, signal } from '@angular/core';\nimport { AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPOrganizationSetting } from '../../settings.keys';\nimport { AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS } from './org-chart.type';\nimport * as i0 from \"@angular/core\";\nexport class AXMOrgChartConfigService {\n constructor() {\n this.settingService = inject(AXPSettingService);\n //\n this._types = Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).map(c => c[1].type);\n this._defaultPermissioEncoded = '011111100001011100000111100000011100011111110011111110011111110000000011000000000';\n this.permissions = signal(this.defaultPermissions(), ...(ngDevMode ? [{ debugName: \"permissions\" }] : []));\n }\n get types() {\n return this._types;\n }\n defaultPermissions() {\n return this.decode(this._defaultPermissioEncoded);\n }\n encode(permissions) {\n let str = '';\n for (const parent of this.types) {\n for (const child of this.types) {\n str += (permissions[parent]?.[child] ?? 0).toString();\n }\n }\n return str;\n }\n decode(encoded) {\n const result = {};\n const expectedLength = this.types.length * this.types.length;\n if (encoded.length !== expectedLength) {\n throw new Error(`Invalid permissions string length. Expected ${expectedLength} but got ${encoded.length}`);\n }\n let index = 0;\n for (const parent of this.types) {\n result[parent] = {};\n for (const child of this.types) {\n const char = encoded.charAt(index);\n result[parent][child] = parseInt(char, 10);\n index++;\n }\n }\n return result;\n }\n decodeMatrix(matrix) {\n const newPermissions = {};\n this.types.forEach((parent, rowIndex) => {\n newPermissions[parent] = {};\n this.types.forEach((child, colIndex) => {\n newPermissions[parent][child] = matrix[rowIndex][colIndex];\n });\n });\n return newPermissions;\n }\n validateEncodedValue(storedValue) {\n try {\n if (typeof storedValue === 'string') {\n const expectedLength = this.types.length * this.types.length;\n // Check that the string is the correct length and only contains 0s and 1s.\n if (storedValue.length === expectedLength && /^[01]+$/.test(storedValue)) {\n return this.decode(storedValue);\n }\n }\n else if (Array.isArray(storedValue)) {\n // Validate the 2D array dimensions and values.\n if (storedValue.length === this.types.length &&\n storedValue.every(row => Array.isArray(row) &&\n row.length === this.types.length &&\n row.every(val => val === 0 || val === 1))) {\n return this.decodeMatrix(storedValue);\n }\n }\n else if (typeof storedValue === 'object' && storedValue !== null) {\n // Validate that the object has all the required keys and that their values are 0 or 1.\n let valid = true;\n for (const parent of this.types) {\n if (!(parent in storedValue)) {\n valid = false;\n break;\n }\n const childPermissions = storedValue[parent];\n for (const child of this.types) {\n if (!(child in childPermissions) || (childPermissions[child] !== 0 && childPermissions[child] !== 1)) {\n valid = false;\n break;\n }\n }\n if (!valid)\n break;\n }\n if (valid) {\n return storedValue;\n }\n }\n }\n catch (error) {\n // In case of any errors during validation, fall back to default permissions.\n }\n // Return the default permissions if validation fails.\n return this.defaultPermissions();\n }\n isAllowed(parent, child) {\n return (this.permissions()[parent]?.[child] ?? 0) === 1;\n }\n set(parent, child, value) {\n this.permissions.update((p) => {\n if (!p[parent]) {\n p[parent] = {};\n }\n p[parent][child] = value ? 1 : 0;\n return p;\n });\n }\n get(parent, child) {\n return this.permissions()[parent]?.[child] === 1;\n }\n async load() {\n const storedValue = await this.settingService\n .scope(AXPPlatformScope.Tenant)\n .get(AXPOrganizationSetting.Relations);\n // Use the validation method to ensure the stored value is correct.\n if (storedValue) {\n const validatedPermissions = this.validateEncodedValue(storedValue);\n this.permissions.set(validatedPermissions);\n }\n else {\n this.permissions.set(this.defaultPermissions());\n }\n }\n async update() {\n const matrix = this.encode(this.permissions());\n await this.settingService\n .scope(AXPPlatformScope.Tenant)\n .set(AXPOrganizationSetting.Relations, matrix);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXMOrgChartConfigService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LWNvbmZpZ3VyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9vcmdhbml6YXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL29yZ2FuaXphdGlvbi1jaGFydC9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUNBQXVDLEVBQTZCLE1BQU0sa0JBQWtCLENBQUM7O0FBTXRHLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFHcUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1RCxFQUFFO1FBQ1EsV0FBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFNdkYsNkJBQXdCLEdBQUcsbUZBQW1GLENBQUM7UUFFaEgsZ0JBQVcsR0FBRyxNQUFNLENBQTRCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSx1REFBQyxDQUFDO0tBOElyRjtJQXBKRyxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQU9PLGtCQUFrQjtRQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdC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O2FBQzlCLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQyxtRUFBbUU7UUFDbkUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxDQUFDLGNBQWM7YUFDcEIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzthQUM5QixHQUFHLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OEdBeEpRLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQUGxhdGZvcm1TY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBPcmdhbml6YXRpb25TZXR0aW5nIH0gZnJvbSAnLi4vLi4vc2V0dGluZ3Mua2V5cyc7XG5pbXBvcnQgeyBBWE1fT1JHX0NIQVJUX05PREVfVFlQRV9FTlRJVFlfTUFQUElOR1MsIEFYTU9yZ0NoYXJ0Tm9kZVBlcm1pc3Npb24gfSBmcm9tICcuL29yZy1jaGFydC50eXBlJztcblxuXG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTU9yZ0NoYXJ0Q29uZmlnU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdTZXJ2aWNlKTtcbiAgICAvL1xuICAgIHByb3RlY3RlZCBfdHlwZXMgPSBPYmplY3QuZW50cmllcyhBWE1fT1JHX0NIQVJUX05PREVfVFlQRV9FTlRJVFlfTUFQUElOR1MpLm1hcChjID0+IGNbMV0udHlwZSk7XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RlZmF1bHRQZXJtaXNzaW9FbmNvZGVkID0gJzAxMTExMTEwMDAwMTAxMTEwMDAwMDExMTEwMDAwMDAxMTEwMDAxMTExMTExMDAxMTExMTExMDAxMTExMTExMDAwMDAwMDAxMTAwMDAwMDAwMCc7XG5cbiAgICBwdWJsaWMgcGVybWlzc2lvbnMgPSBzaWduYWw8QVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbj4odGhpcy5kZWZhdWx0UGVybWlzc2lvbnMoKSk7XG5cblxuICAgIHByaXZhdGUgZGVmYXVsdFBlcm1pc3Npb25zKCk6IEFYTU9yZ0NoYXJ0Tm9kZVBlcm1pc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUodGhpcy5fZGVmYXVsdFBlcm1pc3Npb0VuY29kZWQpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBlbmNvZGUoXG4gICAgICAgIHBlcm1pc3Npb25zOiBBWE1PcmdDaGFydE5vZGVQZXJtaXNzaW9uXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMudHlwZXMpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gKHBlcm1pc3Npb25zW3BhcmVudF0/LltjaGlsZF0gPz8gMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBkZWNvZGUoZW5jb2RlZDogc3RyaW5nKTogQVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbiA9IHt9O1xuICAgICAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IHRoaXMudHlwZXMubGVuZ3RoICogdGhpcy50eXBlcy5sZW5ndGg7XG4gICAgICAgIGlmIChlbmNvZGVkLmxlbmd0aCAhPT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwZXJtaXNzaW9ucyBzdHJpbmcgbGVuZ3RoLiBFeHBlY3RlZCAke2V4cGVjdGVkTGVuZ3RofSBidXQgZ290ICR7ZW5jb2RlZC5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy50eXBlcykge1xuICAgICAgICAgICAgcmVzdWx0W3BhcmVudF0gPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy50eXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBlbmNvZGVkLmNoYXJBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3BhcmVudF1bY2hpbGRdID0gcGFyc2VJbnQoY2hhciwgMTApO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZGVjb2RlTWF0cml4KG1hdHJpeDogbnVtYmVyW11bXSk6IEFYTU9yZ0NoYXJ0Tm9kZVBlcm1pc3Npb24ge1xuICAgICAgICBjb25zdCBuZXdQZXJtaXNzaW9uczogQVhNT3JnQ2hhcnROb2RlUGVybWlzc2lvbiA9IHt9O1xuICAgICAgICB0aGlzLnR5cGVzLmZvckVhY2goKHBhcmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIG5ld1Blcm1pc3Npb25zW3BhcmVudF0gPSB7fTtcbiAgICAgICAgICAgIHRoaXMudHlwZXMuZm9yRWFjaCgoY2hpbGQsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3UGVybWlzc2lvbnNbcGFyZW50XVtjaGlsZF0gPSBtYXRyaXhbcm93SW5kZXhdW2NvbEluZGV4XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1Blcm1pc3Npb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVFbmNvZGVkVmFsdWUoc3RvcmVkVmFsdWU6IHVua25vd24pOiBBWE1PcmdDaGFydE5vZGVQZXJtaXNzaW9uIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RvcmVkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSB0aGlzLnR5cGVzLmxlbmd0aCAqIHRoaXMudHlwZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHN0cmluZyBpcyB0aGUgY29ycmVjdCBsZW5ndGggYW5kIG9ubHkgY29udGFpbnMgMHMgYW5kIDFzLlxuICAgICAgICAgICAgICAgIGlmIChzdG9yZWRWYWx1ZS5sZW5ndGggPT09IGV4cGVjdGVkTGVuZ3RoICYmIC9eWzAxXSskLy50ZXN0KHN0b3JlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUoc3RvcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgMkQgYXJyYXkgZGltZW5zaW9ucyBhbmQgdmFsdWVzLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVkVmFsdWUubGVuZ3RoID09PSB0aGlzLnR5cGVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBzdG9yZWRWYWx1ZS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocm93KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZW5ndGggPT09IHRoaXMudHlwZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmV2ZXJ5KHZhbCA9PiB2YWwgPT09IDAgfHwgdmFsID09PSAxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZU1hdHJpeChzdG9yZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RvcmVkVmFsdWUgPT09ICdvYmplY3QnICYmIHN0b3JlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgb2JqZWN0IGhhcyBhbGwgdGhlIHJlcXVpcmVkIGtleXMgYW5kIHRoYXQgdGhlaXIgdmFsdWVzIGFyZSAwIG9yIDEuXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHBhcmVudCBpbiBzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFBlcm1pc3Npb25zID0gKHN0b3JlZFZhbHVlIGFzIGFueSlbcGFyZW50XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLnR5cGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGlsZCBpbiBjaGlsZFBlcm1pc3Npb25zKSB8fCAoY2hpbGRQZXJtaXNzaW9uc1tjaGlsZF0gIT09IDAgJiYgY2hpbGRQZXJtaXNzaW9uc1tjaGlsZF0gIT09IDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZWRWYWx1ZSBhcyBBWE1PcmdDaGFydE5vZGVQZXJtaXNzaW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYW55IGVycm9ycyBkdXJpbmcgdmFsaWRhdGlvbiwgZmFsbCBiYWNrIHRvIGRlZmF1bHQgcGVybWlzc2lvbnMuXG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQZXJtaXNzaW9ucygpO1xuICAgIH1cblxuXG4gICAgcHVibGljIGlzQWxsb3dlZChwYXJlbnQ6IHN0cmluZywgY2hpbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMoKVtwYXJlbnRdPy5bY2hpbGRdID8/IDApID09PSAxO1xuICAgIH1cblxuXG4gICAgcHVibGljIHNldChwYXJlbnQ6IHN0cmluZywgY2hpbGQ6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy51cGRhdGUoKHApID0+IHtcbiAgICAgICAgICAgIGlmICghcFtwYXJlbnRdKSB7XG4gICAgICAgICAgICAgICAgcFtwYXJlbnRdID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwW3BhcmVudF1bY2hpbGRdID0gdmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhcmVudDogc3RyaW5nLCBjaGlsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zKClbcGFyZW50XT8uW2NoaWxkXSA9PT0gMTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkKCkge1xuICAgICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IGF3YWl0IHRoaXMuc2V0dGluZ1NlcnZpY2VcbiAgICAgICAgICAgIC5zY29wZShBWFBQbGF0Zm9ybVNjb3BlLlRlbmFudClcbiAgICAgICAgICAgIC5nZXQoQVhQT3JnYW5pemF0aW9uU2V0dGluZy5SZWxhdGlvbnMpO1xuXG4gICAgICAgIC8vIFVzZSB0aGUgdmFsaWRhdGlvbiBtZXRob2QgdG8gZW5zdXJlIHRoZSBzdG9yZWQgdmFsdWUgaXMgY29ycmVjdC5cbiAgICAgICAgaWYgKHN0b3JlZFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRQZXJtaXNzaW9ucyA9IHRoaXMudmFsaWRhdGVFbmNvZGVkVmFsdWUoc3RvcmVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy5zZXQodmFsaWRhdGVkUGVybWlzc2lvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy5zZXQodGhpcy5kZWZhdWx0UGVybWlzc2lvbnMoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlKCkge1xuICAgICAgICBjb25zdCBtYXRyaXggPSB0aGlzLmVuY29kZSh0aGlzLnBlcm1pc3Npb25zKCkpO1xuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlXG4gICAgICAgICAgICAuc2NvcGUoQVhQUGxhdGZvcm1TY29wZS5UZW5hbnQpXG4gICAgICAgICAgICAuc2V0KEFYUE9yZ2FuaXphdGlvblNldHRpbmcuUmVsYXRpb25zLCBtYXRyaXgpO1xuICAgIH1cblxufVxuIl19"],"names":[],"mappings":"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"}
|