@acorex/modules 19.2.17-next.0 → 19.2.17
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/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +4 -0
- package/auth/lib/pages/login/password/password.component.d.ts +1 -0
- package/common/lib/entities/dashboard/dashboard.types.d.ts +2 -2
- package/common/lib/entities/index.d.ts +0 -1
- package/common/lib/features/dashboard-home/dashboard-home.d.ts +113 -0
- package/common/lib/features/dashboard-home/dashboard-home.store.d.ts +19 -0
- package/common/lib/features/dashboard-home/dashboard.type.d.ts +12 -0
- package/common/lib/features/dashboard-popups/add-dashboard-popup.d.ts +11 -0
- package/common/lib/features/dashboard-popups/dashboard-popup.service.d.ts +9 -0
- package/common/lib/features/widget-wrapper/dashboard-widget-wrapper.d.ts +9 -0
- package/document-management/lib/document-management.module.d.ts +2 -1
- package/document-management/lib/entities/document/document.types.d.ts +4 -0
- package/document-management/lib/entities/folder/folder.types.d.ts +1 -0
- package/document-management/lib/features/document-explorer/document-explorer.component.d.ts +7 -0
- package/document-management/lib/features/drive/drive.component.d.ts +4 -0
- package/document-management/lib/features/drive-choose/drive-choose.component.d.ts +200 -0
- package/document-management/lib/features/shared/components/file-viewer-popup/file-viewer-popup.component.d.ts +9 -0
- package/document-management/lib/features/shared/components/file-viewer-popup/index.d.ts +1 -0
- package/document-management/lib/features/shared/components/index.d.ts +2 -0
- package/document-management/lib/features/shared/components/tree-folder-popup/index.d.ts +1 -0
- package/document-management/lib/features/shared/components/tree-folder-popup/tree-folder-popup.component.d.ts +20 -0
- package/document-management/lib/features/shared/document-manager.service.d.ts +41 -49
- package/document-management/lib/features/shared/document-manager.types.d.ts +2 -0
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-edit.component.d.ts +113 -1
- package/fesm2022/{acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs → acorex-modules-application-management-module-designer.component-BSGSZi9T.mjs} +2 -2
- package/fesm2022/{acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs.map → acorex-modules-application-management-module-designer.component-BSGSZi9T.mjs.map} +1 -1
- package/fesm2022/acorex-modules-application-management.mjs +3 -3
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs → acorex-modules-auth-acorex-modules-auth-Xcs9ViQv.mjs} +13 -13
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-Xcs9ViQv.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs → acorex-modules-auth-app-chooser.component-0L9y_yn_.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs.map → acorex-modules-auth-app-chooser.component-0L9y_yn_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-B9P2XpfQ.mjs → acorex-modules-auth-login.module-CfO1IwH9.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-B9P2XpfQ.mjs.map → acorex-modules-auth-login.module-CfO1IwH9.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-master.layout-hLuHDgvl.mjs +23 -0
- package/fesm2022/acorex-modules-auth-master.layout-hLuHDgvl.mjs.map +1 -0
- package/fesm2022/acorex-modules-auth-password.component-BztZ3DJd.mjs +132 -0
- package/fesm2022/acorex-modules-auth-password.component-BztZ3DJd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-C7Yp-ioT.mjs → acorex-modules-auth-password.component-CTVBARbz.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-C7Yp-ioT.mjs.map → acorex-modules-auth-password.component-CTVBARbz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-Bu-xB4O6.mjs → acorex-modules-auth-routes-CJz0CRlp.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-Bu-xB4O6.mjs.map → acorex-modules-auth-routes-CJz0CRlp.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs → acorex-modules-auth-tenant-chooser.component-kVFAR9t1.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs.map → acorex-modules-auth-tenant-chooser.component-kVFAR9t1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-DrV3UBuT.mjs → acorex-modules-auth-two-factor-code.component-_VYT-h-9.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-DrV3UBuT.mjs.map → acorex-modules-auth-two-factor-code.component-_VYT-h-9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-YRh6_YcG.mjs → acorex-modules-auth-two-factor.module-BQfrnrd0.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-two-factor.module-YRh6_YcG.mjs.map → acorex-modules-auth-two-factor.module-BQfrnrd0.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-common-index-BAt02rnb.mjs +472 -0
- package/fesm2022/acorex-modules-common-index-BAt02rnb.mjs.map +1 -0
- package/fesm2022/acorex-modules-common.mjs +5 -505
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-C9ZCejjs.mjs → acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs} +415 -60
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-BnRaCq_Q.mjs → acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs} +4 -5
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs +152 -0
- package/fesm2022/acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-drive.component-B6az6-_w.mjs +164 -0
- package/fesm2022/acorex-modules-document-management-drive.component-B6az6-_w.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs +24 -0
- package/fesm2022/acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-index-9l8D5iEE.mjs +69 -0
- package/fesm2022/acorex-modules-document-management-index-9l8D5iEE.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-EBf1XqU8.mjs → acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs} +4 -4
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-EBf1XqU8.mjs.map → acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-szDh56Bk.mjs → acorex-modules-form-template-management-acorex-modules-form-template-management-Qnh16t3Q.mjs} +10 -10
- package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-szDh56Bk.mjs.map → acorex-modules-form-template-management-acorex-modules-form-template-management-Qnh16t3Q.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-category.entity-BZXqnhwK.mjs → acorex-modules-form-template-management-category.entity-BjmyIav9.mjs} +3 -3
- package/fesm2022/{acorex-modules-form-template-management-category.entity-BZXqnhwK.mjs.map → acorex-modules-form-template-management-category.entity-BjmyIav9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-setting.provider-o2_TSVfK.mjs → acorex-modules-form-template-management-setting.provider-hkwaOGfL.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-setting.provider-o2_TSVfK.mjs.map → acorex-modules-form-template-management-setting.provider-hkwaOGfL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BxOdV3y2.mjs → acorex-modules-form-template-management-template-picker.component-gdMTnjl-.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BxOdV3y2.mjs.map → acorex-modules-form-template-management-template-picker.component-gdMTnjl-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component--MGoF75g.mjs → acorex-modules-form-template-management-template-widget-edit.component-CSShokqz.mjs} +3 -3
- package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component--MGoF75g.mjs.map → acorex-modules-form-template-management-template-widget-edit.component-CSShokqz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template.entity-JvWcqjzi.mjs → acorex-modules-form-template-management-template.entity-_yMAqh35.mjs} +3 -3
- package/fesm2022/{acorex-modules-form-template-management-template.entity-JvWcqjzi.mjs.map → acorex-modules-form-template-management-template.entity-_yMAqh35.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-viewer-popup.component-Bllb70Ih.mjs → acorex-modules-form-template-management-viewer-popup.component-CbcSFEis.mjs} +3 -3
- package/fesm2022/{acorex-modules-form-template-management-viewer-popup.component-Bllb70Ih.mjs.map → acorex-modules-form-template-management-viewer-popup.component-CbcSFEis.mjs.map} +1 -1
- package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +2 -2
- package/fesm2022/{acorex-modules-organization-management-add-item.component-Y-i6xDkl.mjs → acorex-modules-organization-management-add-item.component-Bsae9u-e.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-add-item.component-Y-i6xDkl.mjs.map → acorex-modules-organization-management-add-item.component-Bsae9u-e.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-branch.entity-DhObzxhh.mjs → acorex-modules-organization-management-branch.entity-e5pFx82N.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-branch.entity-DhObzxhh.mjs.map → acorex-modules-organization-management-branch.entity-e5pFx82N.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-chart.entity-Bk4WgsYr.mjs → acorex-modules-organization-management-chart.entity-DnmNyyD2.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-chart.entity-Bk4WgsYr.mjs.map → acorex-modules-organization-management-chart.entity-DnmNyyD2.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-company.entity-d7GaCVei.mjs → acorex-modules-organization-management-company.entity-BRkEcDNt.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-company.entity-d7GaCVei.mjs.map → acorex-modules-organization-management-company.entity-BRkEcDNt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-department.entity-BxyeK3lU.mjs → acorex-modules-organization-management-department.entity-ChJXNpXn.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-department.entity-BxyeK3lU.mjs.map → acorex-modules-organization-management-department.entity-ChJXNpXn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-division.entity-Dh54R4es.mjs → acorex-modules-organization-management-division.entity-qyDyhl-q.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-division.entity-Dh54R4es.mjs.map → acorex-modules-organization-management-division.entity-qyDyhl-q.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-employee.entity-DcJCJN3R.mjs → acorex-modules-organization-management-employee.entity-Cp5TejzT.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-employee.entity-DcJCJN3R.mjs.map → acorex-modules-organization-management-employee.entity-Cp5TejzT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs → acorex-modules-organization-management-employment-type.entity-Ul10Mdwm.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs.map → acorex-modules-organization-management-employment-type.entity-Ul10Mdwm.mjs.map} +1 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-aMPR3Oyw.mjs +92 -0
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-aMPR3Oyw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-DXyAFXwE.mjs → acorex-modules-organization-management-org-chart.page-CAgSSVON.mjs} +15 -15
- package/fesm2022/acorex-modules-organization-management-org-chart.page-CAgSSVON.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-position.entity-D17Yembh.mjs → acorex-modules-organization-management-position.entity-BpQbwW-x.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-position.entity-D17Yembh.mjs.map → acorex-modules-organization-management-position.entity-BpQbwW-x.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-role.entity-Cmbyle8P.mjs → acorex-modules-organization-management-role.entity-B9N4qA_E.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-role.entity-Cmbyle8P.mjs.map → acorex-modules-organization-management-role.entity-B9N4qA_E.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team.entity-DcurAtLd.mjs → acorex-modules-organization-management-team.entity-7q6Eg74A.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team.entity-DcurAtLd.mjs.map → acorex-modules-organization-management-team.entity-7q6Eg74A.mjs.map} +1 -1
- package/fesm2022/acorex-modules-organization-management.mjs +15 -13
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-platform-management-list-version.component-CoZBz85x.mjs → acorex-modules-platform-management-list-version.component-DI1wKhRv.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-list-version.component-CoZBz85x.mjs.map → acorex-modules-platform-management-list-version.component-DI1wKhRv.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +10 -8
- package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-scheduler-job-management.mjs +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +1 -1
- package/fesm2022/acorex-modules-text-template-management.mjs +1 -1
- package/organization-management/lib/features/organization-chart/org-chart-configuration.page.d.ts +4 -0
- package/organization-management/lib/features/organization-chart/org-chart.page.d.ts +4 -0
- package/package.json +1 -1
- package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.entity.d.ts +0 -3
- package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.service.d.ts +0 -10
- package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.types.d.ts +0 -9
- package/common/lib/entities/dashboard-widget-data/index.d.ts +0 -3
- package/common/lib/features/home/dashboard-home.d.ts +0 -5
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-master.layout-BYC0FYq1.mjs +0 -23
- package/fesm2022/acorex-modules-auth-master.layout-BYC0FYq1.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs +0 -127
- package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs.map +0 -1
- package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs +0 -14
- package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-C9ZCejjs.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-BnRaCq_Q.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-drive.component-Sz198sA6.mjs +0 -165
- package/fesm2022/acorex-modules-document-management-drive.component-Sz198sA6.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-index--I8MGeDs.mjs +0 -2
- package/fesm2022/acorex-modules-document-management-index--I8MGeDs.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DO8wSZqZ.mjs +0 -92
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DO8wSZqZ.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-DXyAFXwE.mjs.map +0 -1
- /package/common/lib/features/{home → dashboard-home}/index.d.ts +0 -0
@@ -0,0 +1,472 @@
|
|
1
|
+
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
2
|
+
import * as i2 from '@acorex/components/button';
|
3
|
+
import { AXButtonModule } from '@acorex/components/button';
|
4
|
+
import * as i5 from '@acorex/components/decorators';
|
5
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
6
|
+
import * as i3 from '@acorex/components/dropdown';
|
7
|
+
import { AXDropdownModule } from '@acorex/components/dropdown';
|
8
|
+
import * as i4$1 from '@acorex/components/dropdown-button';
|
9
|
+
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
10
|
+
import * as i3$2 from '@acorex/components/grid-layout-builder';
|
11
|
+
import { AXGridLayoutBuilderModule } from '@acorex/components/grid-layout-builder';
|
12
|
+
import { AXTranslationService, AXTranslatorDirective } from '@acorex/core/translation';
|
13
|
+
import * as i1$1 from '@acorex/platform/layout/builder';
|
14
|
+
import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
|
15
|
+
import { AXPDesignerService } from '@acorex/platform/layout/designer';
|
16
|
+
import { AXPSimplePageLayout } from '@acorex/platform/themes/default';
|
17
|
+
import { AXPLayoutThemeService, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent } from '@acorex/platform/themes/shared';
|
18
|
+
import { AsyncPipe } from '@angular/common';
|
19
|
+
import * as i0 from '@angular/core';
|
20
|
+
import { output, ChangeDetectionStrategy, Component, model, afterNextRender, inject, Injectable, computed, signal } from '@angular/core';
|
21
|
+
import { ActivatedRoute } from '@angular/router';
|
22
|
+
import { RootConfig } from './acorex-modules-common.mjs';
|
23
|
+
import { AXDialogService } from '@acorex/components/dialog';
|
24
|
+
import { AXPDataGenerator } from '@acorex/platform/core';
|
25
|
+
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
26
|
+
import { AXPopupService } from '@acorex/components/popup';
|
27
|
+
import * as i4 from '@acorex/components/label';
|
28
|
+
import { AXLabelModule } from '@acorex/components/label';
|
29
|
+
import { AXBasePageComponent } from '@acorex/components/page';
|
30
|
+
import * as i3$1 from '@acorex/components/text-box';
|
31
|
+
import { AXTextBoxModule } from '@acorex/components/text-box';
|
32
|
+
import * as i1 from '@angular/forms';
|
33
|
+
import { FormsModule } from '@angular/forms';
|
34
|
+
|
35
|
+
class AXPDashboardWidgetWrapperComponent {
|
36
|
+
constructor() {
|
37
|
+
this.onDelete = output();
|
38
|
+
}
|
39
|
+
handleOnItemClick(event) {
|
40
|
+
console.log(event);
|
41
|
+
switch (event.item.data) {
|
42
|
+
case 'delete':
|
43
|
+
this.onDelete.emit();
|
44
|
+
break;
|
45
|
+
default:
|
46
|
+
break;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardWidgetWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPDashboardWidgetWrapperComponent, isStandalone: true, selector: "axm-dashboard-widget-wrapper", outputs: { onDelete: "onDelete" }, ngImport: i0, template: "<section class=\"ax-relative ax-size-full ax-flex ax-justify-center ax-items-center ax-group\">\n <div class=\"ax-p-1 ax-absolute ax-top-0 ax-left-0 ax-z-[9999] ax-invisible group-hover:ax-visible\">\n <ax-button color=\"secondary\" class=\"ax-sm\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-h\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ng-container>\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n <ax-button-item [data]=\"'delete'\" text=\"Delete\" color=\"danger\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <ng-content></ng-content>\n</section>\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
51
|
+
}
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardWidgetWrapperComponent, decorators: [{
|
53
|
+
type: Component,
|
54
|
+
args: [{ selector: 'axm-dashboard-widget-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule], standalone: true, template: "<section class=\"ax-relative ax-size-full ax-flex ax-justify-center ax-items-center ax-group\">\n <div class=\"ax-p-1 ax-absolute ax-top-0 ax-left-0 ax-z-[9999] ax-invisible group-hover:ax-visible\">\n <ax-button color=\"secondary\" class=\"ax-sm\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-h\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ng-container>\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n <ax-button-item [data]=\"'delete'\" text=\"Delete\" color=\"danger\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <ng-content></ng-content>\n</section>\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
55
|
+
}] });
|
56
|
+
|
57
|
+
class AXCAddDashboardPopup extends AXBasePageComponent {
|
58
|
+
constructor() {
|
59
|
+
super(...arguments);
|
60
|
+
this.title = model();
|
61
|
+
this.description = model();
|
62
|
+
this.#init = afterNextRender(() => {
|
63
|
+
this.title.set(this.data.title || '');
|
64
|
+
this.description.set(this.data.description || '');
|
65
|
+
});
|
66
|
+
}
|
67
|
+
#init;
|
68
|
+
async handleClose(isCanceled = false) {
|
69
|
+
this.close({
|
70
|
+
title: this.title(),
|
71
|
+
description: this.description(),
|
72
|
+
isCanceled,
|
73
|
+
});
|
74
|
+
}
|
75
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXCAddDashboardPopup, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
76
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: AXCAddDashboardPopup, isStandalone: true, selector: "ng-component", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "titleChange", description: "descriptionChange" }, usesInheritance: true, ngImport: i0, template: `
|
77
|
+
<div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
|
78
|
+
<ax-label>Title</ax-label>
|
79
|
+
<ax-text-box [(ngModel)]="title" name="title"></ax-text-box>
|
80
|
+
|
81
|
+
<ax-label>Description</ax-label>
|
82
|
+
<ax-text-box [(ngModel)]="description" name="description"></ax-text-box>
|
83
|
+
</div>
|
84
|
+
|
85
|
+
<ax-footer>
|
86
|
+
<ax-prefix></ax-prefix>
|
87
|
+
<ax-suffix>
|
88
|
+
<ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"></ax-button>
|
89
|
+
<ax-button text="Save" look="solid" color="primary" (onClick)="handleClose()">
|
90
|
+
<ax-icon class="fa-solid fa-save"></ax-icon>
|
91
|
+
</ax-button>
|
92
|
+
</ax-suffix>
|
93
|
+
</ax-footer>
|
94
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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: AXTextBoxModule }, { kind: "component", type: i3$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i4.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { 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-subtitle, ax-placeholder, ax-overlay" }] }); }
|
95
|
+
}
|
96
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXCAddDashboardPopup, decorators: [{
|
97
|
+
type: Component,
|
98
|
+
args: [{
|
99
|
+
template: `
|
100
|
+
<div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
|
101
|
+
<ax-label>Title</ax-label>
|
102
|
+
<ax-text-box [(ngModel)]="title" name="title"></ax-text-box>
|
103
|
+
|
104
|
+
<ax-label>Description</ax-label>
|
105
|
+
<ax-text-box [(ngModel)]="description" name="description"></ax-text-box>
|
106
|
+
</div>
|
107
|
+
|
108
|
+
<ax-footer>
|
109
|
+
<ax-prefix></ax-prefix>
|
110
|
+
<ax-suffix>
|
111
|
+
<ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"></ax-button>
|
112
|
+
<ax-button text="Save" look="solid" color="primary" (onClick)="handleClose()">
|
113
|
+
<ax-icon class="fa-solid fa-save"></ax-icon>
|
114
|
+
</ax-button>
|
115
|
+
</ax-suffix>
|
116
|
+
</ax-footer>
|
117
|
+
`,
|
118
|
+
imports: [FormsModule, AXButtonModule, AXTextBoxModule, AXLabelModule, AXButtonModule, AXDecoratorModule],
|
119
|
+
}]
|
120
|
+
}] });
|
121
|
+
|
122
|
+
class AXPDashboardPopupService {
|
123
|
+
constructor() {
|
124
|
+
this.popupService = inject(AXPopupService);
|
125
|
+
}
|
126
|
+
async generateDashboardLayout(data) {
|
127
|
+
const result = await this.popupService.open(AXCAddDashboardPopup, {
|
128
|
+
header: true,
|
129
|
+
size: 'fit',
|
130
|
+
draggable: true,
|
131
|
+
hasBackdrop: true,
|
132
|
+
title: 'Dashboard Layout Details',
|
133
|
+
data: { data },
|
134
|
+
});
|
135
|
+
const { isCanceled, ...rest } = result.data;
|
136
|
+
if (isCanceled) {
|
137
|
+
throw new Error('Process is Canceled by User!');
|
138
|
+
}
|
139
|
+
else {
|
140
|
+
return rest;
|
141
|
+
}
|
142
|
+
}
|
143
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardPopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
144
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardPopupService, providedIn: 'root' }); }
|
145
|
+
}
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardPopupService, decorators: [{
|
147
|
+
type: Injectable,
|
148
|
+
args: [{ providedIn: 'root' }]
|
149
|
+
}] });
|
150
|
+
|
151
|
+
// Initial state
|
152
|
+
const initialDashboards = [
|
153
|
+
{
|
154
|
+
id: 'widget1',
|
155
|
+
title: 'Home',
|
156
|
+
widget: [
|
157
|
+
{
|
158
|
+
config: {
|
159
|
+
id: '1',
|
160
|
+
height: 5,
|
161
|
+
width: 6,
|
162
|
+
},
|
163
|
+
node: {
|
164
|
+
name: 'bar-chart',
|
165
|
+
path: 'bar-chart',
|
166
|
+
type: 'bar-chart',
|
167
|
+
defaultValue: {
|
168
|
+
data: [
|
169
|
+
{ label: 'Category A', value: 30, color: 'green' },
|
170
|
+
{ label: 'Category B', value: 80 },
|
171
|
+
{ label: 'Category C', value: 45 },
|
172
|
+
],
|
173
|
+
options: { width: 600, height: 400, color: ['red', 'yellow', 'blue'] },
|
174
|
+
},
|
175
|
+
},
|
176
|
+
},
|
177
|
+
{
|
178
|
+
config: {
|
179
|
+
id: '5',
|
180
|
+
height: 5,
|
181
|
+
width: 6,
|
182
|
+
},
|
183
|
+
node: {
|
184
|
+
name: 'map',
|
185
|
+
path: 'map',
|
186
|
+
type: 'map',
|
187
|
+
options: {
|
188
|
+
hasDraw: true,
|
189
|
+
zoomLevel: 5,
|
190
|
+
latitude: 32,
|
191
|
+
longitude: 53,
|
192
|
+
fitToDraw: true,
|
193
|
+
limitDraw: [
|
194
|
+
{
|
195
|
+
points: [
|
196
|
+
{
|
197
|
+
latitude: 33.8339199536547,
|
198
|
+
longitude: 51.16056693933671,
|
199
|
+
},
|
200
|
+
{
|
201
|
+
latitude: 32.37996146435729,
|
202
|
+
longitude: 50.017223524232904,
|
203
|
+
},
|
204
|
+
{
|
205
|
+
latitude: 31.034108344903512,
|
206
|
+
longitude: 51.402428046377885,
|
207
|
+
},
|
208
|
+
{
|
209
|
+
latitude: 31.690781806136822,
|
210
|
+
longitude: 53.24936740923793,
|
211
|
+
},
|
212
|
+
{
|
213
|
+
latitude: 33.211116472416855,
|
214
|
+
longitude: 53.18340528913575,
|
215
|
+
},
|
216
|
+
],
|
217
|
+
color: 'blue',
|
218
|
+
},
|
219
|
+
],
|
220
|
+
},
|
221
|
+
},
|
222
|
+
},
|
223
|
+
],
|
224
|
+
},
|
225
|
+
{
|
226
|
+
id: 'widget2',
|
227
|
+
title: 'Work',
|
228
|
+
widget: [
|
229
|
+
{
|
230
|
+
config: {
|
231
|
+
id: '2',
|
232
|
+
height: 5,
|
233
|
+
width: 6,
|
234
|
+
},
|
235
|
+
node: {
|
236
|
+
name: 'sticky-note',
|
237
|
+
path: 'sticky-note',
|
238
|
+
type: 'sticky-note',
|
239
|
+
defaultValue: `test`,
|
240
|
+
},
|
241
|
+
},
|
242
|
+
{
|
243
|
+
config: { id: '3', height: 5, width: 6 },
|
244
|
+
node: {
|
245
|
+
name: 'donut-chart',
|
246
|
+
path: 'donut-chart',
|
247
|
+
type: 'donut-chart',
|
248
|
+
defaultValue: {
|
249
|
+
data: [
|
250
|
+
{ id: 'a', name: 'Apples', value: 40, color: '#E57373' },
|
251
|
+
{ id: 'b', name: 'Bananas', value: 30, color: '#FFF176' },
|
252
|
+
{ id: 'c', name: 'ta', value: 20, color: '#F06292' },
|
253
|
+
{ id: 'd', name: 'Dates', value: 10, color: '#9575CD' },
|
254
|
+
],
|
255
|
+
options: { width: 250, height: 250 },
|
256
|
+
},
|
257
|
+
},
|
258
|
+
},
|
259
|
+
],
|
260
|
+
},
|
261
|
+
];
|
262
|
+
// Create the SignalStore
|
263
|
+
const AXCDashboardStore = signalStore({},
|
264
|
+
// Define the state
|
265
|
+
withState({
|
266
|
+
dashboards: initialDashboards,
|
267
|
+
currentDashboardId: initialDashboards[0].id,
|
268
|
+
dashboardsOption: { float: true, cellHeight: 100, gap: 20, minRow: 7, column: 12 },
|
269
|
+
}),
|
270
|
+
// Define computed properties
|
271
|
+
withComputed((state) => ({
|
272
|
+
currentDashboard: computed(() => {
|
273
|
+
return state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null;
|
274
|
+
}),
|
275
|
+
})),
|
276
|
+
// Define methods
|
277
|
+
withMethods((state, dashboardPopup = inject(AXPDashboardPopupService), dialogService = inject(AXDialogService), translationService = inject(AXTranslationService), designerService = inject(AXPDesignerService)) => ({
|
278
|
+
// Set current dashboard
|
279
|
+
setCurrentDashboard(dashboardId) {
|
280
|
+
patchState(state, { currentDashboardId: dashboardId });
|
281
|
+
},
|
282
|
+
// Add a new dashboard
|
283
|
+
async addDashboard() {
|
284
|
+
try {
|
285
|
+
const newDashboard = await dashboardPopup.generateDashboardLayout({});
|
286
|
+
newDashboard.id = AXPDataGenerator.uuid();
|
287
|
+
newDashboard.widget = [];
|
288
|
+
// newDashboard.widget = [
|
289
|
+
// {
|
290
|
+
// config: {
|
291
|
+
// h: 1,
|
292
|
+
// w: 1,
|
293
|
+
// id: AXPDataGenerator.uuid(),
|
294
|
+
// },
|
295
|
+
// },
|
296
|
+
// ];
|
297
|
+
const updatedDashboards = [...state.dashboards(), newDashboard];
|
298
|
+
patchState(state, {
|
299
|
+
dashboards: updatedDashboards,
|
300
|
+
currentDashboardId: newDashboard.id,
|
301
|
+
});
|
302
|
+
}
|
303
|
+
catch (error) {
|
304
|
+
console.error('Error adding dashboard:', error);
|
305
|
+
}
|
306
|
+
},
|
307
|
+
// Add a widget to the current dashboard
|
308
|
+
async addWidget() {
|
309
|
+
if (!state.currentDashboardId()) {
|
310
|
+
console.warn('No current dashboard selected');
|
311
|
+
return;
|
312
|
+
}
|
313
|
+
try {
|
314
|
+
// Step 1: Show the picker and get the selected widgets
|
315
|
+
const widgets = await designerService.showPicker({
|
316
|
+
name: 'page-layout',
|
317
|
+
type: 'page-layout',
|
318
|
+
children: [],
|
319
|
+
});
|
320
|
+
// Step 2: Convert the selected widgets into AXPDashboardWidgetData format
|
321
|
+
const convertedWidgets = widgets.map((widget) => ({
|
322
|
+
config: { height: 2, width: 2, id: AXPDataGenerator.uuid() },
|
323
|
+
node: widget,
|
324
|
+
}));
|
325
|
+
// Step 3: Update the dashboards
|
326
|
+
const updatedDashboards = state.dashboards().map((dashboard) => {
|
327
|
+
if (dashboard.id === state.currentDashboardId()) {
|
328
|
+
return {
|
329
|
+
...dashboard,
|
330
|
+
widget: [...dashboard.widget, ...convertedWidgets],
|
331
|
+
};
|
332
|
+
}
|
333
|
+
return dashboard;
|
334
|
+
});
|
335
|
+
patchState(state, { dashboards: updatedDashboards });
|
336
|
+
}
|
337
|
+
catch (error) {
|
338
|
+
console.error('Error adding widget:', error);
|
339
|
+
}
|
340
|
+
},
|
341
|
+
// Remove a dashboard
|
342
|
+
async removeDashboard(id) {
|
343
|
+
if (!id) {
|
344
|
+
console.warn('No dashboard ID provided for removal');
|
345
|
+
return;
|
346
|
+
}
|
347
|
+
try {
|
348
|
+
const dialogResult = await dialogService.confirm(await translationService.translateAsync('workflow.warning'), await translationService.translateAsync('workflow.confirm-delete'), 'danger', 'horizontal');
|
349
|
+
if (dialogResult.result) {
|
350
|
+
// Remove the dashboard
|
351
|
+
const updatedDashboards = state.dashboards().filter((dashboard) => dashboard.id !== id);
|
352
|
+
// Update state
|
353
|
+
patchState(state, {
|
354
|
+
dashboards: updatedDashboards,
|
355
|
+
currentDashboardId: id === state.currentDashboardId()
|
356
|
+
? updatedDashboards.length > 0
|
357
|
+
? updatedDashboards[0].id
|
358
|
+
: null
|
359
|
+
: state.currentDashboardId(),
|
360
|
+
});
|
361
|
+
}
|
362
|
+
}
|
363
|
+
catch (error) {
|
364
|
+
console.error('Error removing dashboard:', error);
|
365
|
+
}
|
366
|
+
},
|
367
|
+
// Remove a widget from a dashboard
|
368
|
+
removeWidget(dashboardId, widgetId) {
|
369
|
+
const updatedDashboards = state.dashboards().map((dashboard) => {
|
370
|
+
if (dashboard.id === dashboardId) {
|
371
|
+
return {
|
372
|
+
...dashboard,
|
373
|
+
widget: dashboard.widget.filter((widget) => widget.config.id !== widgetId),
|
374
|
+
};
|
375
|
+
}
|
376
|
+
return dashboard;
|
377
|
+
});
|
378
|
+
patchState(state, { dashboards: updatedDashboards });
|
379
|
+
},
|
380
|
+
// Handle configuration changes
|
381
|
+
handleConfigChange(dashboard) {
|
382
|
+
const updatedDashboards = state.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));
|
383
|
+
patchState(state, {
|
384
|
+
dashboards: updatedDashboards,
|
385
|
+
currentDashboardId: dashboard.id,
|
386
|
+
});
|
387
|
+
},
|
388
|
+
// Handle grid layout changes
|
389
|
+
onGridChange(event) {
|
390
|
+
if (!state.currentDashboard()) {
|
391
|
+
console.warn('No current dashboard for grid change');
|
392
|
+
return;
|
393
|
+
}
|
394
|
+
// Extract nodes from the event and remove the `element` property
|
395
|
+
const nodes = event.nodes.map(({ element, ...rest }) => rest);
|
396
|
+
// Update the current dashboard
|
397
|
+
const currentDashboard = state.currentDashboard();
|
398
|
+
const updatedWidgets = currentDashboard.widget.map((widget) => {
|
399
|
+
const updatedNode = nodes.find((node) => node.id === widget.config.id);
|
400
|
+
if (updatedNode) {
|
401
|
+
return {
|
402
|
+
...widget,
|
403
|
+
config: updatedNode,
|
404
|
+
};
|
405
|
+
}
|
406
|
+
return widget;
|
407
|
+
});
|
408
|
+
const updatedDashboard = {
|
409
|
+
...currentDashboard,
|
410
|
+
widget: updatedWidgets,
|
411
|
+
};
|
412
|
+
// Update the dashboards
|
413
|
+
const updatedDashboards = state
|
414
|
+
.dashboards()
|
415
|
+
.map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));
|
416
|
+
patchState(state, { dashboards: updatedDashboards });
|
417
|
+
},
|
418
|
+
})));
|
419
|
+
|
420
|
+
class AXPDashboardHomeComponent {
|
421
|
+
constructor() {
|
422
|
+
this.activatedRoute = inject(ActivatedRoute);
|
423
|
+
this.layout = inject(AXPLayoutThemeService);
|
424
|
+
this.store = inject(AXCDashboardStore);
|
425
|
+
this.rootConfig = RootConfig;
|
426
|
+
this.isEdited = signal(false);
|
427
|
+
this.context = signal({});
|
428
|
+
}
|
429
|
+
toggleEdit() {
|
430
|
+
//(window as any).d = this.activatedRoute;
|
431
|
+
this.isEdited.update((i) => !i);
|
432
|
+
}
|
433
|
+
getGridBackground() {
|
434
|
+
if (!this.isEdited()) {
|
435
|
+
return null;
|
436
|
+
}
|
437
|
+
const gap = this.store.dashboardsOption().gap ?? 0; // Get the gap value, default to 0 if not provided
|
438
|
+
const columnWidth = `calc((100% - ${gap}px) / ${this.store.dashboardsOption().column ?? 12})`;
|
439
|
+
const cellHeight = this.store.dashboardsOption().cellHeight;
|
440
|
+
// Adjust the vertical lines to start at the gap value and end before the gap
|
441
|
+
const verticalLines = `linear-gradient(to right, #0000001c 1px, transparent 1px) ${gap}px 0 / ${columnWidth} 100%`;
|
442
|
+
// Adjust the horizontal lines to start at the gap value and end before the gap
|
443
|
+
const horizontalLines = `linear-gradient(to bottom, #0000001c 1px, transparent 1px) 0 ${gap}px / 100% ${cellHeight}px`;
|
444
|
+
return `${verticalLines}, ${horizontalLines}`;
|
445
|
+
}
|
446
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardHomeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
447
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPDashboardHomeComponent, isStandalone: true, selector: "ng-component", providers: [AXPDesignerService, AXCDashboardStore], ngImport: i0, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{ store.currentDashboard()?.title }} </axp-layout-title>\n\n <axp-layout-description> {{ store.currentDashboard()?.description }} </axp-layout-description>\n 1\n <axp-layout-breadcrumbs>\n <!-- <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward ax-text-xs\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item [routerLink]=\"b.url\" class=\"!ax-text-xs\"> {{ b.title}} </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs> -->\n </axp-layout-breadcrumbs>\n\n <axp-layout-actions>\n <axp-layout-actions-primary>\n <ax-button [text]=\"t('create-new', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"store.addDashboard()\"\n [text]=\" (t('dashboard.dashboard', { scope: rootConfig.config.i18n })| async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-folder-plus\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"store.addWidget()\"\n [text]=\" (t('dashboard.widget', { scope: rootConfig.config.i18n })| async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-dropdown-button [text]=\"store.currentDashboard()?.title\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (dashboard of store.dashboards(); track dashboard.id) {\n <ax-button-item\n [text]=\"dashboard.title\"\n [selected]=\"dashboard.id === store.currentDashboard()?.id\"\n (onClick)=\"store.handleConfigChange(dashboard)\"\n >\n </ax-button-item>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-screen ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Dashboards Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any dashboards yet. Create one to get started!\n </p>\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </axp-layout-actions-primary>\n <axp-layout-actions-secondary>\n <ax-button-item\n [disabled]=\"store.dashboards().length<=1\"\n [text]=\"(t('dashboard.delete-current-dashboard', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"store.removeDashboard(store.currentDashboard()?.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></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 class=\"ax-relative\">\n <ax-grid-layout-container\n [style.background]=\"getGridBackground()\"\n #grid\n [options]=\"store.dashboardsOption()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for(widget of store.currentDashboard()?.widget ; track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.config\">\n <!-- <div class=\"ax-absolute ax-top-0 ax-size-3 ax-handler ax-bg-blue-500 ax-z-[999]\"></div> -->\n <axm-dashboard-widget-wrapper (onDelete)=\"store.removeWidget(store.currentDashboard()?.id!,widget.config.id!)\">\n @if(widget.node){\n <axp-widgets-container [context]=\"context()\">\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'edit'\"> </ng-container>\n </axp-widgets-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Widget Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any Widget yet. Create one to get started!\n </p>\n </div>\n }\n </ax-grid-layout-container>\n <div class=\"ax-p-4 ax-absolute ax-bottom-0 ax-right-0\">\n <ax-button\n [color]=\"'primary'\"\n class=\"ax-xl ax-rounded-full\"\n [disabled]=\"!store.currentDashboard()?.widget?.length\"\n (onClick)=\"toggleEdit()\"\n >\n <ax-prefix> <ax-icon class=\"fa-solid fa-pen\"> </ax-icon></ax-prefix>\n </ax-button>\n </div>\n </axp-layout-content>\n</axp-layout-simple-page>\n", styles: ["::ng-deep .placeholder-content{position:absolute}\n"], dependencies: [{ kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i1$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXGridLayoutBuilderModule }, { kind: "component", type: i3$2.AXGridLayoutContainerComponent, selector: "ax-grid-layout-container", inputs: ["options", "isEmpty"], outputs: ["onAdded", "onRemoved", "onWidgetChange", "onChange", "isLayoutRendered", "isEmptyChange"] }, { kind: "component", type: i3$2.AXGridLayoutWidgetComponent, selector: "ax-grid-layout-widget", inputs: ["options"] }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " 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, axp-layout-nav-button, axp-layout-description, axp-layout-title-bar, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i4$1.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "color", "look", "text", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "component", type: AXPDashboardWidgetWrapperComponent, selector: "axm-dashboard-widget-wrapper", outputs: ["onDelete"] }, { 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-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AXTranslatorDirective, selector: "[translate]" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "ngmodule", type: AXBreadcrumbsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
448
|
+
}
|
449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardHomeComponent, decorators: [{
|
450
|
+
type: Component,
|
451
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [AXPDesignerService, AXCDashboardStore], imports: [
|
452
|
+
AXPLayoutBuilderModule,
|
453
|
+
AXButtonModule,
|
454
|
+
AXGridLayoutBuilderModule,
|
455
|
+
AXPSimplePageLayout,
|
456
|
+
AXPThemeLayoutBlockComponent,
|
457
|
+
AXPThemeLayoutHeaderComponent,
|
458
|
+
AXPThemeLayoutActionsComponent,
|
459
|
+
AXPThemeLayoutPagePrimaryActionsComponent,
|
460
|
+
AXDropdownButtonModule,
|
461
|
+
AXPDashboardWidgetWrapperComponent,
|
462
|
+
AXDecoratorModule,
|
463
|
+
AXDropdownModule,
|
464
|
+
AsyncPipe,
|
465
|
+
AXTranslatorDirective,
|
466
|
+
AXPThemeLayoutPageSecondaryActionsComponent,
|
467
|
+
AXBreadcrumbsModule,
|
468
|
+
], standalone: true, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{ store.currentDashboard()?.title }} </axp-layout-title>\n\n <axp-layout-description> {{ store.currentDashboard()?.description }} </axp-layout-description>\n 1\n <axp-layout-breadcrumbs>\n <!-- <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward ax-text-xs\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item [routerLink]=\"b.url\" class=\"!ax-text-xs\"> {{ b.title}} </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs> -->\n </axp-layout-breadcrumbs>\n\n <axp-layout-actions>\n <axp-layout-actions-primary>\n <ax-button [text]=\"t('create-new', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"store.addDashboard()\"\n [text]=\" (t('dashboard.dashboard', { scope: rootConfig.config.i18n })| async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-folder-plus\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"store.addWidget()\"\n [text]=\" (t('dashboard.widget', { scope: rootConfig.config.i18n })| async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-dropdown-button [text]=\"store.currentDashboard()?.title\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (dashboard of store.dashboards(); track dashboard.id) {\n <ax-button-item\n [text]=\"dashboard.title\"\n [selected]=\"dashboard.id === store.currentDashboard()?.id\"\n (onClick)=\"store.handleConfigChange(dashboard)\"\n >\n </ax-button-item>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-screen ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Dashboards Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any dashboards yet. Create one to get started!\n </p>\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </axp-layout-actions-primary>\n <axp-layout-actions-secondary>\n <ax-button-item\n [disabled]=\"store.dashboards().length<=1\"\n [text]=\"(t('dashboard.delete-current-dashboard', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"store.removeDashboard(store.currentDashboard()?.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></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 class=\"ax-relative\">\n <ax-grid-layout-container\n [style.background]=\"getGridBackground()\"\n #grid\n [options]=\"store.dashboardsOption()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for(widget of store.currentDashboard()?.widget ; track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.config\">\n <!-- <div class=\"ax-absolute ax-top-0 ax-size-3 ax-handler ax-bg-blue-500 ax-z-[999]\"></div> -->\n <axm-dashboard-widget-wrapper (onDelete)=\"store.removeWidget(store.currentDashboard()?.id!,widget.config.id!)\">\n @if(widget.node){\n <axp-widgets-container [context]=\"context()\">\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'edit'\"> </ng-container>\n </axp-widgets-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Widget Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any Widget yet. Create one to get started!\n </p>\n </div>\n }\n </ax-grid-layout-container>\n <div class=\"ax-p-4 ax-absolute ax-bottom-0 ax-right-0\">\n <ax-button\n [color]=\"'primary'\"\n class=\"ax-xl ax-rounded-full\"\n [disabled]=\"!store.currentDashboard()?.widget?.length\"\n (onClick)=\"toggleEdit()\"\n >\n <ax-prefix> <ax-icon class=\"fa-solid fa-pen\"> </ax-icon></ax-prefix>\n </ax-button>\n </div>\n </axp-layout-content>\n</axp-layout-simple-page>\n", styles: ["::ng-deep .placeholder-content{position:absolute}\n"] }]
|
469
|
+
}] });
|
470
|
+
|
471
|
+
export { AXPDashboardHomeComponent };
|
472
|
+
//# sourceMappingURL=acorex-modules-common-index-BAt02rnb.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"acorex-modules-common-index-BAt02rnb.mjs","sources":["../../../../libs/modules/common/src/lib/features/widget-wrapper/dashboard-widget-wrapper.ts","../../../../libs/modules/common/src/lib/features/widget-wrapper/dashboard-widget-wrapper.html","../../../../libs/modules/common/src/lib/features/dashboard-popups/add-dashboard-popup.ts","../../../../libs/modules/common/src/lib/features/dashboard-popups/dashboard-popup.service.ts","../../../../libs/modules/common/src/lib/features/dashboard-home/dashboard-home.store.ts","../../../../libs/modules/common/src/lib/features/dashboard-home/dashboard-home.ts","../../../../libs/modules/common/src/lib/features/dashboard-home/dashboard-home.html"],"sourcesContent":["import { AXButtonItemComponent, AXButtonModule } from '@acorex/components/button';\nimport { AXItemClickEvent } from '@acorex/components/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { ChangeDetectionStrategy, Component, output } from '@angular/core';\n\n@Component({\n selector: 'axm-dashboard-widget-wrapper',\n templateUrl: './dashboard-widget-wrapper.html',\n styleUrls: ['./dashboard-widget-wrapper.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule],\n standalone: true,\n})\nexport class AXPDashboardWidgetWrapperComponent {\n onDelete = output<void>();\n handleOnItemClick(event: AXItemClickEvent<AXButtonItemComponent>) {\n console.log(event);\n switch (event.item.data) {\n case 'delete':\n this.onDelete.emit();\n break;\n\n default:\n break;\n }\n }\n}\n","<section class=\"ax-relative ax-size-full ax-flex ax-justify-center ax-items-center ax-group\">\n <div class=\"ax-p-1 ax-absolute ax-top-0 ax-left-0 ax-z-[9999] ax-invisible group-hover:ax-visible\">\n <ax-button color=\"secondary\" class=\"ax-sm\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-h\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ng-container>\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n <ax-button-item [data]=\"'delete'\" text=\"Delete\" color=\"danger\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <ng-content></ng-content>\n</section>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { Component, afterNextRender, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDashboardLayout } from '../dashboard-home/dashboard.type';\n\n@Component({\n template: `\n <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Title</ax-label>\n <ax-text-box [(ngModel)]=\"title\" name=\"title\"></ax-text-box>\n\n <ax-label>Description</ax-label>\n <ax-text-box [(ngModel)]=\"description\" name=\"description\"></ax-text-box>\n </div>\n\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"></ax-button>\n <ax-button text=\"Save\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [FormsModule, AXButtonModule, AXTextBoxModule, AXLabelModule, AXButtonModule, AXDecoratorModule],\n})\nexport class AXCAddDashboardPopup extends AXBasePageComponent {\n private data: Partial<AXPDashboardLayout>;\n\n protected title = model<string>();\n protected description = model<string>();\n\n #init = afterNextRender(() => {\n this.title.set(this.data.title || '');\n this.description.set(this.data.description || '');\n });\n\n protected async handleClose(isCanceled = false) {\n this.close({\n title: this.title(),\n description: this.description(),\n isCanceled,\n });\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPDashboardLayout } from '../dashboard-home/dashboard.type';\nimport { AXCAddDashboardPopup } from './add-dashboard-popup';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDashboardPopupService {\n popupService = inject(AXPopupService);\n async generateDashboardLayout(data: Partial<AXPDashboardLayout>): Promise<AXPDashboardLayout> {\n const result = await this.popupService.open(AXCAddDashboardPopup, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Dashboard Layout Details',\n data: { data },\n });\n const { isCanceled, ...rest } = result.data;\n if (isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n return rest;\n }\n }\n}\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXGridLayoutEvent, AXGridLayoutOptions } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { AXPDesignerService } from '@acorex/platform/layout/designer';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXPDashboardPopupService } from '../dashboard-popups/dashboard-popup.service';\nimport { AXPDashboardLayout, AXPDashboardWidgetData } from './dashboard.type';\n\n// Initial state\nconst initialDashboards: AXPDashboardLayout[] = [\n {\n id: 'widget1',\n title: 'Home',\n widget: [\n {\n config: {\n id: '1',\n height: 5,\n width: 6,\n },\n node: {\n name: 'bar-chart',\n path: 'bar-chart',\n type: 'bar-chart',\n defaultValue: {\n data: [\n { label: 'Category A', value: 30, color: 'green' },\n { label: 'Category B', value: 80 },\n { label: 'Category C', value: 45 },\n ],\n options: { width: 600, height: 400, color: ['red', 'yellow', 'blue'] },\n },\n },\n },\n {\n config: {\n id: '5',\n height: 5,\n width: 6,\n },\n node: {\n name: 'map',\n path: 'map',\n type: 'map',\n options: {\n hasDraw: true,\n zoomLevel: 5,\n latitude: 32,\n longitude: 53,\n fitToDraw: true,\n limitDraw: [\n {\n points: [\n {\n latitude: 33.8339199536547,\n longitude: 51.16056693933671,\n },\n {\n latitude: 32.37996146435729,\n longitude: 50.017223524232904,\n },\n {\n latitude: 31.034108344903512,\n longitude: 51.402428046377885,\n },\n {\n latitude: 31.690781806136822,\n longitude: 53.24936740923793,\n },\n {\n latitude: 33.211116472416855,\n longitude: 53.18340528913575,\n },\n ],\n color: 'blue',\n },\n ],\n },\n },\n },\n ],\n },\n {\n id: 'widget2',\n title: 'Work',\n widget: [\n {\n config: {\n id: '2',\n height: 5,\n width: 6,\n },\n node: {\n name: 'sticky-note',\n path: 'sticky-note',\n type: 'sticky-note',\n defaultValue: `test`,\n },\n },\n {\n config: { id: '3', height: 5, width: 6 },\n node: {\n name: 'donut-chart',\n path: 'donut-chart',\n type: 'donut-chart',\n defaultValue: {\n data: [\n { id: 'a', name: 'Apples', value: 40, color: '#E57373' },\n { id: 'b', name: 'Bananas', value: 30, color: '#FFF176' },\n { id: 'c', name: 'ta', value: 20, color: '#F06292' },\n { id: 'd', name: 'Dates', value: 10, color: '#9575CD' },\n ],\n options: { width: 250, height: 250 },\n },\n },\n },\n ],\n },\n];\n\n// Define the state interface\ninterface DashboardState {\n dashboards: AXPDashboardLayout[];\n currentDashboardId: string | null;\n dashboardsOption: AXGridLayoutOptions;\n}\n\n// Create the SignalStore\nexport const AXCDashboardStore = signalStore(\n {},\n\n // Define the state\n withState<DashboardState>({\n dashboards: initialDashboards,\n currentDashboardId: initialDashboards[0].id,\n dashboardsOption: { float: true, cellHeight: 100, gap: 20, minRow: 7, column: 12 },\n }),\n\n // Define computed properties\n withComputed((state) => ({\n currentDashboard: computed(() => {\n return state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null;\n }),\n })),\n\n // Define methods\n withMethods(\n (\n state,\n dashboardPopup = inject(AXPDashboardPopupService),\n dialogService = inject(AXDialogService),\n translationService = inject(AXTranslationService),\n designerService = inject(AXPDesignerService)\n ) => ({\n // Set current dashboard\n setCurrentDashboard(dashboardId: string): void {\n patchState(state, { currentDashboardId: dashboardId });\n },\n\n // Add a new dashboard\n async addDashboard(): Promise<void> {\n try {\n const newDashboard = await dashboardPopup.generateDashboardLayout({});\n newDashboard.id = AXPDataGenerator.uuid();\n newDashboard.widget = [];\n // newDashboard.widget = [\n // {\n // config: {\n // h: 1,\n // w: 1,\n // id: AXPDataGenerator.uuid(),\n // },\n // },\n // ];\n\n const updatedDashboards = [...state.dashboards(), newDashboard];\n\n patchState(state, {\n dashboards: updatedDashboards,\n currentDashboardId: newDashboard.id,\n });\n } catch (error) {\n console.error('Error adding dashboard:', error);\n }\n },\n\n // Add a widget to the current dashboard\n async addWidget(): Promise<void> {\n if (!state.currentDashboardId()) {\n console.warn('No current dashboard selected');\n return;\n }\n\n try {\n // Step 1: Show the picker and get the selected widgets\n const widgets = await designerService.showPicker({\n name: 'page-layout',\n type: 'page-layout',\n children: [],\n });\n\n // Step 2: Convert the selected widgets into AXPDashboardWidgetData format\n const convertedWidgets: AXPDashboardWidgetData[] = widgets.map((widget) => ({\n config: { height: 2, width: 2, id: AXPDataGenerator.uuid() },\n node: widget,\n }));\n\n // Step 3: Update the dashboards\n const updatedDashboards = state.dashboards().map((dashboard) => {\n if (dashboard.id === state.currentDashboardId()) {\n return {\n ...dashboard,\n widget: [...dashboard.widget, ...convertedWidgets],\n };\n }\n return dashboard;\n });\n\n patchState(state, { dashboards: updatedDashboards });\n } catch (error) {\n console.error('Error adding widget:', error);\n }\n },\n\n // Remove a dashboard\n async removeDashboard(id: string): Promise<void> {\n if (!id) {\n console.warn('No dashboard ID provided for removal');\n return;\n }\n\n try {\n const dialogResult = await dialogService.confirm(\n await translationService.translateAsync('workflow.warning'),\n await translationService.translateAsync('workflow.confirm-delete'),\n 'danger',\n 'horizontal'\n );\n\n if (dialogResult.result) {\n // Remove the dashboard\n const updatedDashboards = state.dashboards().filter((dashboard) => dashboard.id !== id);\n\n // Update state\n patchState(state, {\n dashboards: updatedDashboards,\n currentDashboardId:\n id === state.currentDashboardId()\n ? updatedDashboards.length > 0\n ? updatedDashboards[0].id\n : null\n : state.currentDashboardId(),\n });\n }\n } catch (error) {\n console.error('Error removing dashboard:', error);\n }\n },\n\n // Remove a widget from a dashboard\n removeWidget(dashboardId: string, widgetId: string): void {\n const updatedDashboards = state.dashboards().map((dashboard) => {\n if (dashboard.id === dashboardId) {\n return {\n ...dashboard,\n widget: dashboard.widget.filter((widget) => widget.config.id !== widgetId),\n };\n }\n return dashboard;\n });\n\n patchState(state, { dashboards: updatedDashboards });\n },\n\n // Handle configuration changes\n handleConfigChange(dashboard: AXPDashboardLayout): void {\n const updatedDashboards = state.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));\n\n patchState(state, {\n dashboards: updatedDashboards,\n currentDashboardId: dashboard.id,\n });\n },\n\n // Handle grid layout changes\n onGridChange(event: AXGridLayoutEvent): void {\n if (!state.currentDashboard()) {\n console.warn('No current dashboard for grid change');\n return;\n }\n\n // Extract nodes from the event and remove the `element` property\n const nodes = event.nodes.map(({ element, ...rest }) => rest);\n\n // Update the current dashboard\n const currentDashboard = state.currentDashboard()!;\n const updatedWidgets = currentDashboard.widget.map((widget) => {\n const updatedNode = nodes.find((node) => node.id === widget.config.id);\n if (updatedNode) {\n return {\n ...widget,\n config: updatedNode,\n };\n }\n return widget;\n });\n\n const updatedDashboard = {\n ...currentDashboard,\n widget: updatedWidgets,\n };\n\n // Update the dashboards\n const updatedDashboards = state\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(state, { dashboards: updatedDashboards });\n },\n })\n )\n);\n","import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXGridLayoutBuilderModule } from '@acorex/components/grid-layout-builder';\nimport { AXTranslatorDirective } from '@acorex/core/translation';\nimport { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { AXPDesignerService } from '@acorex/platform/layout/designer';\nimport { AXPSimplePageLayout } from '@acorex/platform/themes/default';\nimport {\n AXPLayoutThemeService,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXPThemeLayoutPageSecondaryActionsComponent,\n} from '@acorex/platform/themes/shared';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXPDashboardWidgetWrapperComponent } from '../widget-wrapper/dashboard-widget-wrapper';\nimport { AXCDashboardStore } from './dashboard-home.store';\n\n@Component({\n templateUrl: './dashboard-home.html',\n styleUrls: ['./dashboard-home.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [AXPDesignerService, AXCDashboardStore],\n imports: [\n AXPLayoutBuilderModule,\n AXButtonModule,\n AXGridLayoutBuilderModule,\n AXPSimplePageLayout,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXDropdownButtonModule,\n AXPDashboardWidgetWrapperComponent,\n AXDecoratorModule,\n AXDropdownModule,\n AsyncPipe,\n AXTranslatorDirective,\n AXPThemeLayoutPageSecondaryActionsComponent,\n AXBreadcrumbsModule,\n ],\n standalone: true,\n})\nexport class AXPDashboardHomeComponent {\n protected readonly activatedRoute = inject(ActivatedRoute);\n protected readonly layout = inject(AXPLayoutThemeService);\n protected readonly store = inject(AXCDashboardStore);\n protected readonly rootConfig = RootConfig;\n\n isEdited = signal(false);\n toggleEdit() {\n //(window as any).d = this.activatedRoute;\n this.isEdited.update((i) => !i);\n }\n\n getGridBackground(): string | null {\n if (!this.isEdited()) {\n return null;\n }\n \n const gap = this.store.dashboardsOption().gap ?? 0; // Get the gap value, default to 0 if not provided\n const columnWidth = `calc((100% - ${gap}px) / ${this.store.dashboardsOption().column ?? 12})`;\n const cellHeight = this.store.dashboardsOption().cellHeight;\n \n // Adjust the vertical lines to start at the gap value and end before the gap\n const verticalLines = `linear-gradient(to right, #0000001c 1px, transparent 1px) ${gap}px 0 / ${columnWidth} 100%`;\n \n // Adjust the horizontal lines to start at the gap value and end before the gap\n const horizontalLines = `linear-gradient(to bottom, #0000001c 1px, transparent 1px) 0 ${gap}px / 100% ${cellHeight}px`;\n \n return `${verticalLines}, ${horizontalLines}`;\n }\n\n protected context = signal({});\n}\n","<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{ store.currentDashboard()?.title }} </axp-layout-title>\n\n <axp-layout-description> {{ store.currentDashboard()?.description }} </axp-layout-description>\n 1\n <axp-layout-breadcrumbs>\n <!-- <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward ax-text-xs\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item [routerLink]=\"b.url\" class=\"!ax-text-xs\"> {{ b.title}} </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs> -->\n </axp-layout-breadcrumbs>\n\n <axp-layout-actions>\n <axp-layout-actions-primary>\n <ax-button [text]=\"t('create-new', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"store.addDashboard()\"\n [text]=\" (t('dashboard.dashboard', { scope: rootConfig.config.i18n })| async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-folder-plus\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"store.addWidget()\"\n [text]=\" (t('dashboard.widget', { scope: rootConfig.config.i18n })| async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-dropdown-button [text]=\"store.currentDashboard()?.title\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (dashboard of store.dashboards(); track dashboard.id) {\n <ax-button-item\n [text]=\"dashboard.title\"\n [selected]=\"dashboard.id === store.currentDashboard()?.id\"\n (onClick)=\"store.handleConfigChange(dashboard)\"\n >\n </ax-button-item>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-screen ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Dashboards Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any dashboards yet. Create one to get started!\n </p>\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </axp-layout-actions-primary>\n <axp-layout-actions-secondary>\n <ax-button-item\n [disabled]=\"store.dashboards().length<=1\"\n [text]=\"(t('dashboard.delete-current-dashboard', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"store.removeDashboard(store.currentDashboard()?.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></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 class=\"ax-relative\">\n <ax-grid-layout-container\n [style.background]=\"getGridBackground()\"\n #grid\n [options]=\"store.dashboardsOption()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for(widget of store.currentDashboard()?.widget ; track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.config\">\n <!-- <div class=\"ax-absolute ax-top-0 ax-size-3 ax-handler ax-bg-blue-500 ax-z-[999]\"></div> -->\n <axm-dashboard-widget-wrapper (onDelete)=\"store.removeWidget(store.currentDashboard()?.id!,widget.config.id!)\">\n @if(widget.node){\n <axp-widgets-container [context]=\"context()\">\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'edit'\"> </ng-container>\n </axp-widgets-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Widget Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any Widget yet. Create one to get started!\n </p>\n </div>\n }\n </ax-grid-layout-container>\n <div class=\"ax-p-4 ax-absolute ax-bottom-0 ax-right-0\">\n <ax-button\n [color]=\"'primary'\"\n class=\"ax-xl ax-rounded-full\"\n [disabled]=\"!store.currentDashboard()?.widget?.length\"\n (onClick)=\"toggleEdit()\"\n >\n <ax-prefix> <ax-icon class=\"fa-solid fa-pen\"> </ax-icon></ax-prefix>\n </ax-button>\n </div>\n </axp-layout-content>\n</axp-layout-simple-page>\n"],"names":["i1","i3","i4"],"mappings":"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"}
|