@acorex/modules 19.2.4 → 19.2.6
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/auth/lib/store/auth.effects.d.ts +2 -2
- package/fesm2022/{acorex-modules-application-management-module-designer.component-uLfQYtpy.mjs → acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs} +5 -5
- package/fesm2022/acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management.mjs +3 -3
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-C-qPiQhk.mjs → acorex-modules-auth-acorex-modules-auth-D75igkfc.mjs} +25 -25
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-D75igkfc.mjs.map +1 -0
- package/fesm2022/acorex-modules-auth-app-chooser.component-BZb8n5Ag.mjs +64 -0
- package/fesm2022/acorex-modules-auth-app-chooser.component-BZb8n5Ag.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-login.module-nqFBpUaE.mjs → acorex-modules-auth-login.module-DAtJYcHZ.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-nqFBpUaE.mjs.map → acorex-modules-auth-login.module-DAtJYcHZ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-master.layout-qeAQTygT.mjs +23 -0
- package/fesm2022/acorex-modules-auth-master.layout-qeAQTygT.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-DZ6TiNI-.mjs → acorex-modules-auth-password.component-20Ofs9FL.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-DZ6TiNI-.mjs.map → acorex-modules-auth-password.component-20Ofs9FL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-3t_WqB4c.mjs → acorex-modules-auth-password.component-CRvI9sIa.mjs} +4 -4
- package/fesm2022/acorex-modules-auth-password.component-CRvI9sIa.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-routes-nnrAlvkD.mjs → acorex-modules-auth-routes-BDED-qaZ.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-nnrAlvkD.mjs.map → acorex-modules-auth-routes-BDED-qaZ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs +83 -0
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-two-factor.module-DWtEYnHW.mjs → acorex-modules-auth-two-factor.module-B0C2aBWh.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-DWtEYnHW.mjs.map → acorex-modules-auth-two-factor.module-B0C2aBWh.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +10 -10
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-xiRKc4FF.mjs +126 -0
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-xiRKc4FF.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +417 -4
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-organization-managment-employee.entity-oo5Tyyp2.mjs → acorex-modules-organization-managment-employee.entity-D4BSxGAW.mjs} +40 -2
- package/fesm2022/acorex-modules-organization-managment-employee.entity-D4BSxGAW.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-managment-org-chart-configuration.page-DEFgztyn.mjs +92 -0
- package/fesm2022/acorex-modules-organization-managment-org-chart-configuration.page-DEFgztyn.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-managment-org-chart-configuration.service-D-LkPUIw.mjs +145 -0
- package/fesm2022/acorex-modules-organization-managment-org-chart-configuration.service-D-LkPUIw.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-managment-org-chart.page-B3aaLlm2.mjs +597 -0
- package/fesm2022/acorex-modules-organization-managment-org-chart.page-B3aaLlm2.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-managment-setting.keys-CF6Giykz.mjs +22 -0
- package/fesm2022/acorex-modules-organization-managment-setting.keys-CF6Giykz.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-managment-setting.provider-BtkaTjLS.mjs → acorex-modules-organization-managment-setting.provider-nKs53GcA.mjs} +2 -20
- package/fesm2022/acorex-modules-organization-managment-setting.provider-nKs53GcA.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-managment.mjs +44 -27
- package/fesm2022/acorex-modules-organization-managment.mjs.map +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +404 -145
- package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +12 -1
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/notification-management/lib/components/promotion-slot/promotion-slot.component.d.ts +11 -0
- package/notification-management/lib/entities/channel/channel.types.d.ts +11 -1
- package/organization-managment/lib/const.d.ts +12 -0
- package/organization-managment/lib/features/organization-chart/org-chart-configuration.page.d.ts +141 -0
- package/organization-managment/lib/features/organization-chart/org-chart-configuration.service.d.ts +24 -0
- package/organization-managment/lib/features/organization-chart/org-chart-print.service.d.ts +22 -0
- package/organization-managment/lib/features/organization-chart/org-chart.page.d.ts +162 -0
- package/organization-managment/lib/features/organization-chart/org-chart.service.d.ts +19 -0
- package/organization-managment/lib/features/organization-chart/org-chart.type.d.ts +25 -0
- package/organization-managment/lib/setting.keys.d.ts +2 -1
- package/package.json +5 -5
- package/platform-management/index.d.ts +1 -0
- package/platform-management/lib/const.d.ts +2 -0
- package/platform-management/lib/entities/app-term/app-term.types.d.ts +12 -2
- package/platform-management/lib/entities/app-term/components/notify-app/notify-app.component.d.ts +16 -0
- package/platform-management/lib/entities/app-term/index.d.ts +2 -0
- package/platform-management/lib/entities/app-term/pages/index.d.ts +1 -0
- package/platform-management/lib/entities/app-term/pages/list/list-terms.component.d.ts +20 -0
- package/platform-management/lib/entities/app-term/workflows/index.d.ts +1 -0
- package/platform-management/lib/entities/app-term/workflows/notify-new-term.workflow.d.ts +15 -0
- package/platform-management/lib/entities/app-version/app-version.types.d.ts +7 -0
- package/platform-management/lib/entities/app-version/components/index.d.ts +2 -0
- package/platform-management/lib/entities/app-version/components/list-versions/list-version.component.d.ts +13 -0
- package/platform-management/lib/entities/app-version/{workflow/test/test.component.d.ts → components/notify-app/notify-app.component.d.ts} +3 -3
- package/platform-management/lib/entities/app-version/components/slots/app-version-slot.component.d.ts +12 -0
- package/platform-management/lib/entities/app-version/index.d.ts +2 -1
- package/platform-management/lib/entities/app-version/{workflow → workflows}/index.d.ts +0 -1
- package/platform-management/lib/entities/check-version.d.ts +12 -0
- package/platform-management/lib/entities/index.d.ts +1 -0
- package/platform-management/lib/platform-management.module.d.ts +2 -2
- package/security-management/index.d.ts +1 -0
- package/security-management/lib/menu.keys.d.ts +5 -0
- package/fesm2022/acorex-modules-application-management-module-designer.component-uLfQYtpy.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-C-qPiQhk.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-app-chooser.component-j3JgxtBC.mjs +0 -64
- package/fesm2022/acorex-modules-auth-app-chooser.component-j3JgxtBC.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-master.layout-C9eKuJgU.mjs +0 -23
- package/fesm2022/acorex-modules-auth-master.layout-C9eKuJgU.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-3t_WqB4c.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-Cx3fK__H.mjs +0 -83
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-Cx3fK__H.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-DW0iMqAA.mjs +0 -126
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-DW0iMqAA.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-managment-employee.entity-oo5Tyyp2.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-managment-org-chart.page-fOxjGb8i.mjs +0 -297
- package/fesm2022/acorex-modules-organization-managment-org-chart.page-fOxjGb8i.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-managment-setting.provider-BtkaTjLS.mjs.map +0 -1
- package/organization-managment/lib/pages/org-chart/org-chart.page.d.ts +0 -28
- package/organization-managment/lib/pages/org-chart/org-chart.type.d.ts +0 -9
- package/platform-management/lib/entities/app-version/check-version.d.ts +0 -11
- /package/platform-management/lib/entities/app-version/{workflow → workflows}/change-log.workflow.d.ts +0 -0
package/fesm2022/acorex-modules-form-template-management-template-picker.component-DW0iMqAA.mjs
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
import * as i4 from '@acorex/components/button';
|
2
|
-
import { AXButtonModule } from '@acorex/components/button';
|
3
|
-
import * as i2 from '@acorex/components/common';
|
4
|
-
import { AXCommonModule } from '@acorex/components/common';
|
5
|
-
import * as i5 from '@acorex/components/decorators';
|
6
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
7
|
-
import { AXBasePageComponent } from '@acorex/components/page';
|
8
|
-
import * as i7 from '@acorex/components/search-box';
|
9
|
-
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
10
|
-
import * as i6 from '@acorex/components/tabs';
|
11
|
-
import { AXTabsModule } from '@acorex/components/tabs';
|
12
|
-
import { AXPSettingService, AXPSettingScope, AXPStickyDirective } from '@acorex/platform/common';
|
13
|
-
import * as i1 from '@angular/common';
|
14
|
-
import { CommonModule } from '@angular/common';
|
15
|
-
import * as i0 from '@angular/core';
|
16
|
-
import { inject, model, signal, computed, Component, ViewEncapsulation } from '@angular/core';
|
17
|
-
import * as i3 from '@angular/forms';
|
18
|
-
import { FormsModule } from '@angular/forms';
|
19
|
-
import { orderBy, uniqBy } from 'lodash-es';
|
20
|
-
|
21
|
-
class AXPTemplateWidgetPickerComponent extends AXBasePageComponent {
|
22
|
-
constructor() {
|
23
|
-
super(...arguments);
|
24
|
-
this.settingService = inject(AXPSettingService);
|
25
|
-
this.pinnedSettingKey = 'forms:templates:picker:pinned';
|
26
|
-
this.searchTerm = model('');
|
27
|
-
// Signals
|
28
|
-
this.widgets = [];
|
29
|
-
this.displayWidgets = signal([]);
|
30
|
-
// Signal to track selected widgets
|
31
|
-
this.selectedWidgets = signal([]);
|
32
|
-
// Computed for filtered and ordered widget list
|
33
|
-
this.orderedList = computed(() => {
|
34
|
-
const search = this.searchTerm().toLowerCase();
|
35
|
-
const selectedTabName = this.selectedTab().name;
|
36
|
-
return orderBy(this.displayWidgets().filter((w) => {
|
37
|
-
const matchesTab = selectedTabName === 'all' || w.group.name === selectedTabName;
|
38
|
-
const matchesSearch = !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);
|
39
|
-
return matchesTab && matchesSearch;
|
40
|
-
}), ['pinned', 'title'], ['desc', 'asc']);
|
41
|
-
});
|
42
|
-
// Pinned and regular lists
|
43
|
-
this.pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));
|
44
|
-
this.regularList = computed(() => this.orderedList().filter((c) => !c.pinned));
|
45
|
-
this.tabs = computed(() => {
|
46
|
-
const uniqueOrderedWidgets = orderBy(uniqBy([{ name: 'all', title: 'All', order: 0 }, ...this.widgets.map(c => c.group)], (c) => c.name // or another property to ensure uniqueness
|
47
|
-
), (c) => c.order);
|
48
|
-
return uniqueOrderedWidgets;
|
49
|
-
});
|
50
|
-
this.currentTabIndex = signal(0);
|
51
|
-
this.selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);
|
52
|
-
}
|
53
|
-
async ngOnInit() {
|
54
|
-
super.ngOnInit();
|
55
|
-
const pinnedWidgets = (await this.settingService.get(this.pinnedSettingKey)) || [];
|
56
|
-
this.displayWidgets.set(this.widgets.map((c) => ({ ...c, pinned: pinnedWidgets.includes(c.id), icon: c.icon ?? 'fa-solid fa-file-invoice' })));
|
57
|
-
}
|
58
|
-
handleTabChange(event) {
|
59
|
-
const indx = event.index;
|
60
|
-
if (this.currentTabIndex() != indx) {
|
61
|
-
this.currentTabIndex.set(indx);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
handleClick(event, widget) {
|
65
|
-
if (event.ctrlKey) {
|
66
|
-
const currentSelection = this.selectedWidgets();
|
67
|
-
const isAlreadySelected = currentSelection.some((w) => w === widget);
|
68
|
-
if (isAlreadySelected) {
|
69
|
-
// Deselect widget if already selected
|
70
|
-
this.selectedWidgets.set(currentSelection.filter((w) => w !== widget));
|
71
|
-
}
|
72
|
-
else {
|
73
|
-
// Add widget to selection
|
74
|
-
this.selectedWidgets.set([...currentSelection, widget]);
|
75
|
-
}
|
76
|
-
}
|
77
|
-
else {
|
78
|
-
// If CTRL is not pressed, select only the clicked widget
|
79
|
-
this.close({ widgets: [widget] });
|
80
|
-
}
|
81
|
-
}
|
82
|
-
async handlePinClick(e, widget) {
|
83
|
-
e.stopPropagation();
|
84
|
-
widget.pinned = !widget.pinned;
|
85
|
-
// Get the current list of pinned widgets from settings
|
86
|
-
let pinnedWidgets = (await this.settingService.get(this.pinnedSettingKey)) || [];
|
87
|
-
// Update the list of pinned widgets based on the pinned status
|
88
|
-
if (widget.pinned) {
|
89
|
-
if (!pinnedWidgets.includes(widget.id)) {
|
90
|
-
pinnedWidgets.push(widget.id);
|
91
|
-
}
|
92
|
-
}
|
93
|
-
else {
|
94
|
-
pinnedWidgets = pinnedWidgets.filter((name) => name !== widget.id);
|
95
|
-
}
|
96
|
-
// Save the updated list of pinned widgets
|
97
|
-
await this.settingService.scope(AXPSettingScope.User).set(this.pinnedSettingKey, pinnedWidgets);
|
98
|
-
// Trigger a re-render of the widgets
|
99
|
-
this.displayWidgets.set([...this.displayWidgets()]);
|
100
|
-
}
|
101
|
-
// Check if a widget is selected
|
102
|
-
isWidgetSelected(widget) {
|
103
|
-
return this.selectedWidgets().includes(widget);
|
104
|
-
}
|
105
|
-
handleConfirmSelection() {
|
106
|
-
this.close({ widgets: this.selectedWidgets() });
|
107
|
-
}
|
108
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPTemplateWidgetPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
109
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPTemplateWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs();track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface-lowest ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-100),var(--tw-bg-opacity, 1))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
110
|
-
}
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPTemplateWidgetPickerComponent, decorators: [{
|
112
|
-
type: Component,
|
113
|
-
args: [{ imports: [
|
114
|
-
CommonModule,
|
115
|
-
AXCommonModule,
|
116
|
-
FormsModule,
|
117
|
-
AXButtonModule,
|
118
|
-
AXDecoratorModule,
|
119
|
-
AXTabsModule,
|
120
|
-
AXSearchBoxModule,
|
121
|
-
AXPStickyDirective,
|
122
|
-
], encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs();track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface-lowest ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-100),var(--tw-bg-opacity, 1))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}\n"] }]
|
123
|
-
}] });
|
124
|
-
|
125
|
-
export { AXPTemplateWidgetPickerComponent };
|
126
|
-
//# sourceMappingURL=acorex-modules-form-template-management-template-picker.component-DW0iMqAA.mjs.map
|
package/fesm2022/acorex-modules-form-template-management-template-picker.component-DW0iMqAA.mjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-form-template-management-template-picker.component-DW0iMqAA.mjs","sources":["../../../../libs/modules/form-template-management/src/lib/components/widgets/template-picker/template-picker.component.ts","../../../../libs/modules/form-template-management/src/lib/components/widgets/template-picker/template-picker.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/components/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPSettingScope, AXPSettingService, AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPWidgetGroup } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, model, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { orderBy, uniqBy } from 'lodash-es';\nimport { AXPTemplateWidgetListItem } from './template.provider';\n\nexport interface AXPDisplayWidgetProvided extends AXPTemplateWidgetListItem {\n pinned: boolean;\n}\n\n@Component({\n imports: [\n CommonModule,\n AXCommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTabsModule,\n AXSearchBoxModule,\n AXPStickyDirective,\n ],\n templateUrl: './template-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./template-picker.component.scss']\n})\nexport class AXPTemplateWidgetPickerComponent extends AXBasePageComponent {\n private settingService = inject(AXPSettingService);\n\n private readonly pinnedSettingKey = 'forms:templates:picker:pinned';\n\n protected searchTerm = model('');\n\n // Signals\n private widgets: AXPDisplayWidgetProvided[] = [];\n private displayWidgets = signal<AXPDisplayWidgetProvided[]>([]);\n\n // Signal to track selected widgets\n protected selectedWidgets = signal<AXPDisplayWidgetProvided[]>([]);\n\n // Computed for filtered and ordered widget list\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedTabName = this.selectedTab().name;\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesTab = selectedTabName === 'all' || w.group.name === selectedTabName;\n const matchesSearch =\n !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesTab && matchesSearch;\n }),\n ['pinned', 'title'],\n ['desc', 'asc']\n );\n });\n\n // Pinned and regular lists\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n protected tabs = computed<AXPWidgetGroup[]>(() => {\n const uniqueOrderedWidgets = orderBy(\n uniqBy(\n [{ name: 'all', title: 'All', order: 0 }, ...this.widgets.map(c => c.group)],\n (c) => c.name // or another property to ensure uniqueness\n ),\n (c) => c.order\n );\n return uniqueOrderedWidgets;\n })\n protected currentTabIndex = signal(0);\n protected selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);\n\n protected override async ngOnInit() {\n super.ngOnInit();\n const pinnedWidgets = (await this.settingService.get<string[]>(this.pinnedSettingKey)) || [];\n this.displayWidgets.set(this.widgets.map((c) => ({ ...c, pinned: pinnedWidgets.includes(c.id), icon: c.icon ?? 'fa-solid fa-file-invoice' })));\n }\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const indx = event.index;\n if (this.currentTabIndex() != indx) {\n this.currentTabIndex.set(indx);\n }\n }\n\n protected handleClick(event: MouseEvent, widget: AXPDisplayWidgetProvided) {\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === widget);\n\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter((w) => w !== widget));\n } else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, widget]);\n }\n } else {\n // If CTRL is not pressed, select only the clicked widget\n this.close({ widgets: [widget] });\n }\n }\n\n protected async handlePinClick(e: MouseEvent, widget: AXPDisplayWidgetProvided) {\n e.stopPropagation();\n widget.pinned = !widget.pinned;\n // Get the current list of pinned widgets from settings\n let pinnedWidgets = (await this.settingService.get<string[]>(this.pinnedSettingKey)) || [];\n\n // Update the list of pinned widgets based on the pinned status\n if (widget.pinned) {\n if (!pinnedWidgets.includes(widget.id)) {\n pinnedWidgets.push(widget.id);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== widget.id);\n }\n\n // Save the updated list of pinned widgets\n await this.settingService.scope(AXPSettingScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n // Trigger a re-render of the widgets\n this.displayWidgets.set([...this.displayWidgets()]);\n }\n\n // Check if a widget is selected\n protected isWidgetSelected(widget: AXPDisplayWidgetProvided): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n}\n","<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs();track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface-lowest ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}"],"names":[],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-organization-managment-employee.entity-oo5Tyyp2.mjs","sources":["../../../../libs/modules/organization-managment/src/lib/entities/employee/employee.entity.ts"],"sourcesContent":["import { AXPEntity, AXPEntityCommandScope, AXPEntityQueryType } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMOrganizationManagementEmployeeEntityService } from './employee.service';\n\nexport async function factory(injector: Injector): Promise<AXPEntity | null> {\n const dataService = injector.get(AXMOrganizationManagementEmployeeEntityService);\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.employee.name,\n source: 'employees',\n title: `t(\"employee\", { scope: \"${i18n}\" })`,\n formats: {\n individual: `t(\"employee\", { scope: \"${i18n}\" })`,\n plural: `t(\"employees\", { scope: \"${i18n}\" })`,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'personal',\n title: `t(\"personalInformation\", { scope: \"${i18n}\" })`,\n },\n {\n id: 'job',\n title: `t(\"jobInformation\", { scope: \"${i18n}\" })`,\n },\n ],\n properties: [\n {\n name: 'firstname',\n title: `t(\"firstname\", { scope: \"common\" })`,\n groupId: 'personal',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'lastname',\n title: `t(\"lastname\", { scope: \"common\" })`,\n groupId: 'personal',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'email',\n title: `t(\"email\", { scope: \"common\" })`,\n groupId: 'personal',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.contact,\n options: {\n type: 'email',\n multiple: false,\n hasLabel: false,\n }\n },\n },\n validations: [\n {\n rule: 'required',\n },\n {\n rule: 'email',\n },\n ],\n },\n {\n name: 'position',\n title: `t(\"position\", { scope: \"common\" })`,\n groupId: 'job',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: 'positions',\n displayField: 'name',\n valueField: 'id',\n },\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'department',\n title: `t(\"department\", { scope: \"common\" })`,\n groupId: 'job',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: 'departments',\n displayField: 'name',\n valueField: 'id',\n },\n },\n },\n },\n ],\n columns: [\n { name: 'firstname' },\n { name: 'lastname' },\n { name: 'email' },\n { name: 'position' },\n { name: 'department' },\n ],\n commands: {\n create: {\n execute: async (data: any) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id: any) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data: any) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id: string) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e: any) => {\n return await dataService.query({ skip: e.skip, take: e.take, filter: e.filter, sort: e.sort });\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'personal',\n },\n {\n id: 'job',\n },\n ],\n properties: [\n {\n name: 'firstname',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n {\n name: 'lastname',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n {\n name: 'email',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'personal',\n },\n {\n id: 'job',\n },\n ],\n properties: [\n {\n name: 'firstname',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n {\n name: 'lastname',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n {\n name: 'email',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n },\n list: {\n actions: [\n {\n title: `t(\"create\", { scope: \"common\" })`,\n command: 'create-entity',\n priority: 'primary',\n type: 'create',\n scope: AXPEntityCommandScope.TypeLevel,\n },\n {\n title: 't(\"deleteItems\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'primary',\n type: 'delete',\n scope: AXPEntityCommandScope.Selected,\n },\n {\n title: 't(\"detail\", { scope: \"common\" })',\n command: 'open-entity',\n priority: 'secondary',\n type: 'view',\n scope: AXPEntityCommandScope.Individual,\n },\n {\n title: 't(\"delete\", { scope: \"common\" })',\n command: 'delete-entity',\n priority: 'secondary',\n type: 'delete',\n scope: AXPEntityCommandScope.Individual,\n },\n ],\n views: [\n {\n name: 'all',\n title: 't(\"allItem\", { scope: \"common\" })',\n fixed: true,\n columns: ['firstname', 'lastname', 'email', 'position', 'department'],\n conditions: [],\n sorts: [],\n },\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n"],"names":[],"mappings":"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"}
|
@@ -1,297 +0,0 @@
|
|
1
|
-
import * as i6 from '@acorex/cdk/pan-view';
|
2
|
-
import { AXPanViewModule } from '@acorex/cdk/pan-view';
|
3
|
-
import * as i3 from '@acorex/components/button';
|
4
|
-
import { AXButtonModule } from '@acorex/components/button';
|
5
|
-
import * as i5 from '@acorex/components/decorators';
|
6
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
7
|
-
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
8
|
-
import * as i2 from '@acorex/components/menu';
|
9
|
-
import { AXMenuModule } from '@acorex/components/menu';
|
10
|
-
import * as i4 from '@acorex/core/translation';
|
11
|
-
import { AXTranslationModule } from '@acorex/core/translation';
|
12
|
-
import { AXPSimplePageLayout } from '@acorex/platform/themes/default';
|
13
|
-
import { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderTemplateComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutPagePrimaryActionsComponent } from '@acorex/platform/themes/shared';
|
14
|
-
import * as i1 from '@angular/common';
|
15
|
-
import { CommonModule } from '@angular/common';
|
16
|
-
import * as i0 from '@angular/core';
|
17
|
-
import { viewChild, inject, ViewContainerRef, afterNextRender, signal, Component, ChangeDetectionStrategy } from '@angular/core';
|
18
|
-
import { RouterModule } from '@angular/router';
|
19
|
-
import * as d3 from 'd3';
|
20
|
-
|
21
|
-
const AXM_ORGANIZATION_DATA = {
|
22
|
-
id: '1',
|
23
|
-
title: 'CEO',
|
24
|
-
subtitle: 'Chief Executive Officer',
|
25
|
-
description: 'Responsible for the overall success of the',
|
26
|
-
icon: 'fa-user-tie',
|
27
|
-
children: [
|
28
|
-
{
|
29
|
-
id: '2',
|
30
|
-
title: 'CTO',
|
31
|
-
subtitle: 'Chief Technology Officer',
|
32
|
-
//description: 'Leads the technology team and innovation.',
|
33
|
-
icon: 'fa-microchip',
|
34
|
-
children: [
|
35
|
-
{
|
36
|
-
id: '3',
|
37
|
-
title: 'Engineering Director',
|
38
|
-
subtitle: 'Director of Engineering',
|
39
|
-
description: 'Oversees all engineering teams.',
|
40
|
-
icon: 'fa-cogs',
|
41
|
-
children: [
|
42
|
-
{
|
43
|
-
id: '4',
|
44
|
-
title: 'Dev Manager',
|
45
|
-
subtitle: 'Development Manager',
|
46
|
-
description: 'Manages the development team.',
|
47
|
-
icon: 'fa-code',
|
48
|
-
children: [
|
49
|
-
{
|
50
|
-
id: '5',
|
51
|
-
title: 'Frontend Team Lead',
|
52
|
-
subtitle: 'Leads frontend developers',
|
53
|
-
description: 'Manages the frontend development efforts.',
|
54
|
-
icon: 'fa-paint-brush',
|
55
|
-
},
|
56
|
-
{
|
57
|
-
id: '6',
|
58
|
-
title: 'Backend Team Lead',
|
59
|
-
subtitle: 'Leads backend developers',
|
60
|
-
description: 'Manages the backend development efforts.',
|
61
|
-
icon: 'fa-database',
|
62
|
-
},
|
63
|
-
],
|
64
|
-
},
|
65
|
-
{
|
66
|
-
id: '7',
|
67
|
-
title: 'QA Manager',
|
68
|
-
subtitle: 'Quality Assurance Manager',
|
69
|
-
description: 'Ensures product quality.',
|
70
|
-
icon: 'fa-check-circle',
|
71
|
-
children: [
|
72
|
-
{
|
73
|
-
id: '8',
|
74
|
-
title: 'QA Engineer',
|
75
|
-
subtitle: 'Quality Assurance Engineer',
|
76
|
-
description: 'Tests and ensures software quality.',
|
77
|
-
icon: 'fa-bug',
|
78
|
-
},
|
79
|
-
],
|
80
|
-
},
|
81
|
-
],
|
82
|
-
},
|
83
|
-
{
|
84
|
-
id: '9',
|
85
|
-
title: 'Security Manager',
|
86
|
-
subtitle: 'Security & Compliance',
|
87
|
-
description: 'Ensures security policies and compliance.',
|
88
|
-
icon: 'fa-shield-alt',
|
89
|
-
},
|
90
|
-
],
|
91
|
-
},
|
92
|
-
{
|
93
|
-
id: '10',
|
94
|
-
title: 'CFO',
|
95
|
-
subtitle: 'Chief Financial Officer',
|
96
|
-
description: 'Manages the financial health of the organization.',
|
97
|
-
icon: 'fa-chart-line',
|
98
|
-
children: [
|
99
|
-
{
|
100
|
-
id: '11',
|
101
|
-
title: 'Finance Manager',
|
102
|
-
subtitle: 'Oversees financial operations',
|
103
|
-
description: 'Handles budgets, financial planning, and reporting.',
|
104
|
-
icon: 'fa-money-bill-wave',
|
105
|
-
},
|
106
|
-
{
|
107
|
-
id: '12',
|
108
|
-
title: 'Accounting Manager',
|
109
|
-
subtitle: 'Manages accounting team',
|
110
|
-
description: 'Ensures financial accuracy and compliance.',
|
111
|
-
icon: 'fa-calculator',
|
112
|
-
},
|
113
|
-
],
|
114
|
-
},
|
115
|
-
{
|
116
|
-
id: '13',
|
117
|
-
title: 'COO',
|
118
|
-
subtitle: 'Chief Operating Officer',
|
119
|
-
description: 'Oversees daily business operations.',
|
120
|
-
icon: 'fa-briefcase',
|
121
|
-
children: [
|
122
|
-
{
|
123
|
-
id: '14',
|
124
|
-
title: 'HR Manager',
|
125
|
-
subtitle: 'Human Resources Manager',
|
126
|
-
description: 'Manages recruitment and employee relations.',
|
127
|
-
icon: 'fa-users',
|
128
|
-
},
|
129
|
-
{
|
130
|
-
id: '15',
|
131
|
-
title: 'Operations Manager',
|
132
|
-
subtitle: 'Leads business operations',
|
133
|
-
description: 'Oversees operational efficiency and process improvements.',
|
134
|
-
icon: 'fa-industry',
|
135
|
-
},
|
136
|
-
],
|
137
|
-
},
|
138
|
-
{
|
139
|
-
id: '16',
|
140
|
-
title: 'CMO',
|
141
|
-
subtitle: 'Chief Marketing Officer',
|
142
|
-
description: 'Leads marketing and brand strategy.',
|
143
|
-
icon: 'fa-bullhorn',
|
144
|
-
children: [
|
145
|
-
{
|
146
|
-
id: '17',
|
147
|
-
title: 'Marketing Manager',
|
148
|
-
subtitle: 'Oversees marketing team',
|
149
|
-
description: 'Handles branding, campaigns, and customer engagement.',
|
150
|
-
icon: 'fa-ad',
|
151
|
-
},
|
152
|
-
{
|
153
|
-
id: '18',
|
154
|
-
title: 'Sales Director',
|
155
|
-
subtitle: 'Leads sales initiatives',
|
156
|
-
description: 'Drives revenue and sales growth.',
|
157
|
-
icon: 'fa-handshake',
|
158
|
-
children: [
|
159
|
-
{
|
160
|
-
id: '19',
|
161
|
-
title: 'Sales Manager',
|
162
|
-
subtitle: 'Manages sales team',
|
163
|
-
description: 'Oversees sales operations and targets.',
|
164
|
-
icon: 'fa-shopping-cart',
|
165
|
-
},
|
166
|
-
],
|
167
|
-
},
|
168
|
-
],
|
169
|
-
},
|
170
|
-
],
|
171
|
-
};
|
172
|
-
|
173
|
-
class AXMOrgChartPage {
|
174
|
-
constructor() {
|
175
|
-
this.nodeTemplate = viewChild.required('nodeTemplate');
|
176
|
-
this.treeContainer = viewChild.required('chart');
|
177
|
-
this.viewContainerRef = inject(ViewContainerRef);
|
178
|
-
this.data = AXM_ORGANIZATION_DATA;
|
179
|
-
// Constants for dynamic sizing
|
180
|
-
this.CONTAINER_WIDTH = 2400;
|
181
|
-
this.CONTAINER_HEIGHT = 1200;
|
182
|
-
this.NODE_WIDTH_BASE = 240;
|
183
|
-
this.NODE_HEIGHT_BASE = 120;
|
184
|
-
this.NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';
|
185
|
-
this.LINK_STROKE_WIDTH = 1;
|
186
|
-
this.#af = afterNextRender(() => {
|
187
|
-
this.createChart(this.treeContainer().nativeElement, this.data);
|
188
|
-
});
|
189
|
-
this.panX = signal(0);
|
190
|
-
this.panY = signal(0);
|
191
|
-
this.panZoomLevel = signal(100);
|
192
|
-
}
|
193
|
-
#af;
|
194
|
-
zoomIn() {
|
195
|
-
this.panZoomLevel.update((prev) => prev + 5);
|
196
|
-
}
|
197
|
-
zoomOut() {
|
198
|
-
this.panZoomLevel.update((prev) => prev - 5);
|
199
|
-
}
|
200
|
-
zoomReset() {
|
201
|
-
this.panX.set(1);
|
202
|
-
this.panY.set(1);
|
203
|
-
this.panX.set(0);
|
204
|
-
this.panY.set(0);
|
205
|
-
this.panZoomLevel.set(100);
|
206
|
-
}
|
207
|
-
createChart(el, data) {
|
208
|
-
const svg = d3.select(el).append('svg').attr('width', this.CONTAINER_WIDTH).attr('height', this.CONTAINER_HEIGHT);
|
209
|
-
const g = svg.append('g').attr('transform', `translate(${this.NODE_HEIGHT_BASE}, ${this.NODE_HEIGHT_BASE})`);
|
210
|
-
// Create a hierarchy from the data
|
211
|
-
const root = d3.hierarchy(data);
|
212
|
-
// Create a tree layout
|
213
|
-
const treeLayout = d3.tree().size([this.CONTAINER_WIDTH - 100, this.CONTAINER_HEIGHT / 2]);
|
214
|
-
// Generate the tree nodes and links
|
215
|
-
treeLayout(root);
|
216
|
-
// Create links (lines with 90-degree angles)
|
217
|
-
const link = g
|
218
|
-
.selectAll('.link')
|
219
|
-
.data(root.links())
|
220
|
-
.enter()
|
221
|
-
.append('path')
|
222
|
-
.attr('class', 'link')
|
223
|
-
.attr('d', (d) => {
|
224
|
-
const source = d.source;
|
225
|
-
const target = d.target;
|
226
|
-
return `M${source.x},${source.y}V${(source.y + target.y) / 2}H${target.x}V${target.y}`;
|
227
|
-
})
|
228
|
-
.attr('fill', 'none')
|
229
|
-
.attr('stroke', this.NODE_STROKE_COLOR)
|
230
|
-
.attr('stroke-width', this.LINK_STROKE_WIDTH);
|
231
|
-
// Create nodes
|
232
|
-
const node = g
|
233
|
-
.selectAll('.axp-org-chart-node')
|
234
|
-
.data(root.descendants())
|
235
|
-
.enter()
|
236
|
-
.append('foreignObject')
|
237
|
-
.attr('class', 'axp-org-chart-node')
|
238
|
-
.attr('id', (d) => `node-${d.data.id}`) // Unique ID for each node
|
239
|
-
.attr('x', (d) => d.x - this.NODE_WIDTH_BASE / 2) // Use d.x (D3 node property)
|
240
|
-
.attr('y', (d) => d.y - this.NODE_HEIGHT_BASE / 2) // Use d.y (D3 node property)
|
241
|
-
.attr('width', this.NODE_WIDTH_BASE)
|
242
|
-
.attr('height', this.NODE_HEIGHT_BASE)
|
243
|
-
.each((d) => this.renderNodeTemplate(d.data, d.x, d.y)); // Pass x and y to renderNodeTemplate
|
244
|
-
}
|
245
|
-
renderNodeTemplate(data, x, y) {
|
246
|
-
const viewRef = this.viewContainerRef.createEmbeddedView(this.nodeTemplate(), {
|
247
|
-
$implicit: data, // Pass the node data to the template
|
248
|
-
});
|
249
|
-
// Select node using unique ID
|
250
|
-
const nodeElement = d3.select(this.treeContainer().nativeElement).select(`#node-${data.id}`); // Select by unique ID instead of position
|
251
|
-
const element = nodeElement.node();
|
252
|
-
if (element) {
|
253
|
-
element.appendChild(viewRef.rootNodes[0]);
|
254
|
-
}
|
255
|
-
}
|
256
|
-
handleContextMenuOnOpening(e) {
|
257
|
-
const items = [
|
258
|
-
{
|
259
|
-
text: 'Add New Departpent',
|
260
|
-
break: true,
|
261
|
-
icon: 'fa-light fa-plus'
|
262
|
-
},
|
263
|
-
{
|
264
|
-
text: "Remove",
|
265
|
-
color: 'danger',
|
266
|
-
name: 'remove',
|
267
|
-
icon: 'fa-light fa-trash-can'
|
268
|
-
}
|
269
|
-
];
|
270
|
-
e.items.push(...items);
|
271
|
-
console.log(e);
|
272
|
-
}
|
273
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
274
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMOrgChartPage, isStandalone: true, selector: "ng-component", providers: [], viewQueries: [{ propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }, { propertyName: "treeContainer", first: true, predicate: ["chart"], descendants: true, isSignal: true }], ngImport: i0, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t('org-chart',{ scope:'organization-management' }) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('settings.restore-defaults',{scope:'platform-management'}) | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-rotate'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item [text]=\"(t('export') | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-file-export'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n </axp-layout-header>\n\n <axp-layout-content>\n <div class=\"ax-h-[calc(100vh-56px)]\" #parent>\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [(zoom)]=\"panZoomLevel\" wrapperClasses=\"ax-pan-view-wrapper\"\n class=\"ax-w-[800px] ax-h-[600px]\"></div>\n <div class=\"ax-absolute ax-bottom-2 ax-right-2 ax-z-10 ax-flex ax-gap-2\">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n\n <ax-context-menu [target]=\"'.axp-org-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </axp-layout-content>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div\n class=\"ax-border ax-shadow-md ax-border-primary-500 ax-text-primary-800 ax-rounded-md ax-bg-white ax-flex ax-flex-col ax-overflow-hidden\">\n <div class=\"ax-bg-primary-400 ax-p-2 ax-h-full\" [class.ax-rounded-b-none]=\"data.description\">\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-justify-center ax-h-full\">\n <i class=\"fa-light fa-lg\" [class]=\"data.icon\"></i>\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n <div class=\"ax-text-xs ax-font-bold\">{{ data.title }}</div>\n @if (data.subtitle) {\n <div class=\"ax-text-xs\">{{ data.subtitle }}</div>\n }\n </div>\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"ax-text-xs ax-break-words ax-px-4 ax-py-2 ax-text-default dark:ax-text-on-ghost\">{{ data.description }}\n </div>\n }\n </div>\n</ng-template>", styles: [".link{stroke:#999;stroke-width:2px}.axp-org-chart-node{overflow:visible}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-layout-content, axp-layout-header-container, axp-layout-footer-container, axp-layout-side-container, axp-layout-sections, axp-layout-section-container, axp-layout-body, axp-layout-suffix, axp-layout-prefix, axp-layout-title, axp-layout-nav-button, axp-layout-description, axp-layout-toolbar, axp-layout-title-bar, axp-layout-breadcrumbs " }, { kind: "component", type: AXPThemeLayoutHeaderTemplateComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXPanViewModule }, { kind: "directive", type: i6.AXPanViewDirective, selector: "[axPanView]", inputs: ["zoomStep", "minZoom", "maxZoom", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
275
|
-
}
|
276
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPage, decorators: [{
|
277
|
-
type: Component,
|
278
|
-
args: [{ imports: [
|
279
|
-
CommonModule,
|
280
|
-
RouterModule,
|
281
|
-
AXPSimplePageLayout,
|
282
|
-
AXPThemeLayoutBlockComponent,
|
283
|
-
AXPThemeLayoutHeaderTemplateComponent,
|
284
|
-
AXPThemeLayoutActionsComponent,
|
285
|
-
AXPThemeLayoutPageSecondaryActionsComponent,
|
286
|
-
AXPThemeLayoutPagePrimaryActionsComponent,
|
287
|
-
AXMenuModule,
|
288
|
-
AXButtonModule,
|
289
|
-
AXDropdownButtonModule,
|
290
|
-
AXTranslationModule,
|
291
|
-
AXDecoratorModule,
|
292
|
-
AXPanViewModule,
|
293
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, providers: [], template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t('org-chart',{ scope:'organization-management' }) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('settings.restore-defaults',{scope:'platform-management'}) | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-rotate'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item [text]=\"(t('export') | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-file-export'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n </axp-layout-header>\n\n <axp-layout-content>\n <div class=\"ax-h-[calc(100vh-56px)]\" #parent>\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [(zoom)]=\"panZoomLevel\" wrapperClasses=\"ax-pan-view-wrapper\"\n class=\"ax-w-[800px] ax-h-[600px]\"></div>\n <div class=\"ax-absolute ax-bottom-2 ax-right-2 ax-z-10 ax-flex ax-gap-2\">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n\n <ax-context-menu [target]=\"'.axp-org-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </axp-layout-content>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div\n class=\"ax-border ax-shadow-md ax-border-primary-500 ax-text-primary-800 ax-rounded-md ax-bg-white ax-flex ax-flex-col ax-overflow-hidden\">\n <div class=\"ax-bg-primary-400 ax-p-2 ax-h-full\" [class.ax-rounded-b-none]=\"data.description\">\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-justify-center ax-h-full\">\n <i class=\"fa-light fa-lg\" [class]=\"data.icon\"></i>\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n <div class=\"ax-text-xs ax-font-bold\">{{ data.title }}</div>\n @if (data.subtitle) {\n <div class=\"ax-text-xs\">{{ data.subtitle }}</div>\n }\n </div>\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"ax-text-xs ax-break-words ax-px-4 ax-py-2 ax-text-default dark:ax-text-on-ghost\">{{ data.description }}\n </div>\n }\n </div>\n</ng-template>", styles: [".link{stroke:#999;stroke-width:2px}.axp-org-chart-node{overflow:visible}\n"] }]
|
294
|
-
}], ctorParameters: () => [] });
|
295
|
-
|
296
|
-
export { AXMOrgChartPage };
|
297
|
-
//# sourceMappingURL=acorex-modules-organization-managment-org-chart.page-fOxjGb8i.mjs.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-organization-managment-org-chart.page-fOxjGb8i.mjs","sources":["../../../../libs/modules/organization-managment/src/lib/pages/org-chart/org-chart.type.ts","../../../../libs/modules/organization-managment/src/lib/pages/org-chart/org-chart.page.ts","../../../../libs/modules/organization-managment/src/lib/pages/org-chart/org-chart.page.html"],"sourcesContent":["export interface AXMOrganizationNode {\n id: string;\n title: string;\n subtitle?: string;\n description?: string;\n icon?: string;\n children?: AXMOrganizationNode[];\n}\n\nexport const AXM_ORGANIZATION_DATA: AXMOrganizationNode = {\n id: '1',\n title: 'CEO',\n subtitle: 'Chief Executive Officer',\n description: 'Responsible for the overall success of the',\n icon: 'fa-user-tie',\n children: [\n {\n id: '2',\n title: 'CTO',\n subtitle: 'Chief Technology Officer',\n //description: 'Leads the technology team and innovation.',\n icon: 'fa-microchip',\n children: [\n {\n id: '3',\n title: 'Engineering Director',\n subtitle: 'Director of Engineering',\n description: 'Oversees all engineering teams.',\n icon: 'fa-cogs',\n children: [\n {\n id: '4',\n title: 'Dev Manager',\n subtitle: 'Development Manager',\n description: 'Manages the development team.',\n icon: 'fa-code',\n children: [\n {\n id: '5',\n title: 'Frontend Team Lead',\n subtitle: 'Leads frontend developers',\n description: 'Manages the frontend development efforts.',\n icon: 'fa-paint-brush',\n },\n {\n id: '6',\n title: 'Backend Team Lead',\n subtitle: 'Leads backend developers',\n description: 'Manages the backend development efforts.',\n icon: 'fa-database',\n },\n ],\n },\n {\n id: '7',\n title: 'QA Manager',\n subtitle: 'Quality Assurance Manager',\n description: 'Ensures product quality.',\n icon: 'fa-check-circle',\n children: [\n {\n id: '8',\n title: 'QA Engineer',\n subtitle: 'Quality Assurance Engineer',\n description: 'Tests and ensures software quality.',\n icon: 'fa-bug',\n },\n ],\n },\n ],\n },\n {\n id: '9',\n title: 'Security Manager',\n subtitle: 'Security & Compliance',\n description: 'Ensures security policies and compliance.',\n icon: 'fa-shield-alt',\n },\n ],\n },\n {\n id: '10',\n title: 'CFO',\n subtitle: 'Chief Financial Officer',\n description: 'Manages the financial health of the organization.',\n icon: 'fa-chart-line',\n children: [\n {\n id: '11',\n title: 'Finance Manager',\n subtitle: 'Oversees financial operations',\n description: 'Handles budgets, financial planning, and reporting.',\n icon: 'fa-money-bill-wave',\n },\n {\n id: '12',\n title: 'Accounting Manager',\n subtitle: 'Manages accounting team',\n description: 'Ensures financial accuracy and compliance.',\n icon: 'fa-calculator',\n },\n ],\n },\n {\n id: '13',\n title: 'COO',\n subtitle: 'Chief Operating Officer',\n description: 'Oversees daily business operations.',\n icon: 'fa-briefcase',\n children: [\n {\n id: '14',\n title: 'HR Manager',\n subtitle: 'Human Resources Manager',\n description: 'Manages recruitment and employee relations.',\n icon: 'fa-users',\n },\n {\n id: '15',\n title: 'Operations Manager',\n subtitle: 'Leads business operations',\n description: 'Oversees operational efficiency and process improvements.',\n icon: 'fa-industry',\n },\n ],\n },\n {\n id: '16',\n title: 'CMO',\n subtitle: 'Chief Marketing Officer',\n description: 'Leads marketing and brand strategy.',\n icon: 'fa-bullhorn',\n children: [\n {\n id: '17',\n title: 'Marketing Manager',\n subtitle: 'Oversees marketing team',\n description: 'Handles branding, campaigns, and customer engagement.',\n icon: 'fa-ad',\n },\n {\n id: '18',\n title: 'Sales Director',\n subtitle: 'Leads sales initiatives',\n description: 'Drives revenue and sales growth.',\n icon: 'fa-handshake',\n children: [\n {\n id: '19',\n title: 'Sales Manager',\n subtitle: 'Manages sales team',\n description: 'Oversees sales operations and targets.',\n icon: 'fa-shopping-cart',\n },\n ],\n },\n ],\n },\n ],\n};\n","import { AXPanViewModule } from '@acorex/cdk/pan-view';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXContextMenuOpeningEvent, AXMenuItem, AXMenuModule } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSimplePageLayout } from '@acorex/platform/themes/default';\nimport {\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderTemplateComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXPThemeLayoutPageSecondaryActionsComponent,\n} from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport * as d3 from 'd3';\nimport { AXM_ORGANIZATION_DATA, AXMOrganizationNode } from './org-chart.type';\n\n@Component({\n templateUrl: './org-chart.page.html',\n styleUrls: ['./org-chart.page.scss'],\n imports: [\n CommonModule,\n RouterModule,\n AXPSimplePageLayout,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderTemplateComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutPageSecondaryActionsComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXPanViewModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [],\n})\nexport class AXMOrgChartPage {\n\n private nodeTemplate = viewChild.required<TemplateRef<any>>('nodeTemplate');\n private treeContainer = viewChild.required<ElementRef<HTMLDivElement>>('chart');\n private viewContainerRef = inject(ViewContainerRef);\n private data = AXM_ORGANIZATION_DATA;\n\n // Constants for dynamic sizing\n private readonly CONTAINER_WIDTH = 2400;\n private readonly CONTAINER_HEIGHT = 1200;\n private readonly NODE_WIDTH_BASE = 240;\n private readonly NODE_HEIGHT_BASE = 120;\n private readonly NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';\n private readonly LINK_STROKE_WIDTH = 1;\n\n constructor() { }\n\n #af = afterNextRender(() => {\n this.createChart(this.treeContainer().nativeElement, this.data);\n });\n\n panX = signal(0);\n panY = signal(0);\n panZoomLevel = signal(100);\n\n zoomIn() {\n this.panZoomLevel.update((prev) => prev + 5);\n }\n zoomOut() {\n this.panZoomLevel.update((prev) => prev - 5);\n }\n zoomReset() {\n this.panX.set(1);\n this.panY.set(1);\n this.panX.set(0);\n this.panY.set(0);\n this.panZoomLevel.set(100);\n }\n\n createChart(el: Element, data: AXMOrganizationNode): void {\n const svg = d3.select(el).append('svg').attr('width', this.CONTAINER_WIDTH).attr('height', this.CONTAINER_HEIGHT);\n\n const g = svg.append('g').attr('transform', `translate(${this.NODE_HEIGHT_BASE}, ${this.NODE_HEIGHT_BASE})`);\n\n // Create a hierarchy from the data\n const root = d3.hierarchy(data);\n\n // Create a tree layout\n const treeLayout = d3.tree<AXMOrganizationNode>().size([this.CONTAINER_WIDTH - 100, this.CONTAINER_HEIGHT / 2]);\n\n // Generate the tree nodes and links\n treeLayout(root);\n\n // Create links (lines with 90-degree angles)\n const link = g\n .selectAll('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('d', (d: any) => {\n const source = d.source;\n const target = d.target;\n return `M${source.x},${source.y}V${(source.y + target.y) / 2}H${target.x}V${target.y}`;\n })\n .attr('fill', 'none')\n .attr('stroke', this.NODE_STROKE_COLOR)\n .attr('stroke-width', this.LINK_STROKE_WIDTH);\n\n // Create nodes\n const node = g\n .selectAll('.axp-org-chart-node')\n .data(root.descendants())\n .enter()\n .append('foreignObject')\n .attr('class', 'axp-org-chart-node')\n .attr('id', (d: any) => `node-${d.data.id}`) // Unique ID for each node\n .attr('x', (d: any) => d.x - this.NODE_WIDTH_BASE / 2) // Use d.x (D3 node property)\n .attr('y', (d: any) => d.y - this.NODE_HEIGHT_BASE / 2) // Use d.y (D3 node property)\n .attr('width', this.NODE_WIDTH_BASE)\n .attr('height', this.NODE_HEIGHT_BASE)\n .each((d: any) => this.renderNodeTemplate(d.data, d.x, d.y)); // Pass x and y to renderNodeTemplate\n }\n\n private renderNodeTemplate(data: AXMOrganizationNode, x: number, y: number): void {\n const viewRef = this.viewContainerRef.createEmbeddedView(this.nodeTemplate(), {\n $implicit: data, // Pass the node data to the template\n });\n\n // Select node using unique ID\n const nodeElement = d3.select(this.treeContainer().nativeElement).select(`#node-${data.id}`); // Select by unique ID instead of position\n\n const element = nodeElement.node() as HTMLElement | null;\n if (element) {\n element.appendChild(viewRef.rootNodes[0]);\n }\n }\n\n\n protected handleContextMenuOnOpening(e: AXContextMenuOpeningEvent) {\n const items: AXMenuItem[] = [\n {\n text: 'Add New Departpent',\n break: true,\n icon: 'fa-light fa-plus'\n },\n {\n text: \"Remove\",\n color: 'danger',\n name: 'remove',\n icon: 'fa-light fa-trash-can'\n }\n ];\n e.items.push(...items);\n console.log(e);\n }\n}\n","<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{t('org-chart',{ scope:'organization-management' }) | async}} </axp-layout-title>\n\n <axp-layout-description> Clear and dynamic view of your organization's structure </axp-layout-description>\n\n <axp-layout-actions>\n <axp-layout-actions-primary> </axp-layout-actions-primary>\n\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('settings.restore-defaults',{scope:'platform-management'}) | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-rotate'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item [text]=\"(t('export') | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"'fa-solid fa-file-export'\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n </axp-layout-header>\n\n <axp-layout-content>\n <div class=\"ax-h-[calc(100vh-56px)]\" #parent>\n <div #chart axPanView [(panX)]=\"panX\" [(panY)]=\"panY\" [(zoom)]=\"panZoomLevel\" wrapperClasses=\"ax-pan-view-wrapper\"\n class=\"ax-w-[800px] ax-h-[600px]\"></div>\n <div class=\"ax-absolute ax-bottom-2 ax-right-2 ax-z-10 ax-flex ax-gap-2\">\n <ax-button (onClick)=\"zoomOut()\">\n <ax-icon class=\"fa-solid fa-minus\"> </ax-icon>\n </ax-button>\n <ax-button [text]=\"panZoomLevel()\" (onClick)=\"zoomReset()\"></ax-button>\n <ax-button (onClick)=\"zoomIn()\">\n <ax-icon class=\"fa-solid fa-add\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n\n <ax-context-menu [target]=\"'.axp-org-chart-node'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\">\n </ax-context-menu>\n </axp-layout-content>\n</axp-layout-simple-page>\n\n<ng-template #nodeTemplate let-data>\n <div\n class=\"ax-border ax-shadow-md ax-border-primary-500 ax-text-primary-800 ax-rounded-md ax-bg-white ax-flex ax-flex-col ax-overflow-hidden\">\n <div class=\"ax-bg-primary-400 ax-p-2 ax-h-full\" [class.ax-rounded-b-none]=\"data.description\">\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-justify-center ax-h-full\">\n <i class=\"fa-light fa-lg\" [class]=\"data.icon\"></i>\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n <div class=\"ax-text-xs ax-font-bold\">{{ data.title }}</div>\n @if (data.subtitle) {\n <div class=\"ax-text-xs\">{{ data.subtitle }}</div>\n }\n </div>\n </div>\n </div>\n @if(data.description)\n {\n <div class=\"ax-text-xs ax-break-words ax-px-4 ax-py-2 ax-text-default dark:ax-text-on-ghost\">{{ data.description }}\n </div>\n }\n </div>\n</ng-template>"],"names":[],"mappings":"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"}
|