@acorex/modules 19.2.16 → 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/components/rename-node-dialog/rename-node-dialog.component.d.ts +1 -1
- package/document-management/lib/features/document-explorer/document-explorer.component.d.ts +15 -7
- package/document-management/lib/features/document-explorer/document-explorer.viewmodel.d.ts +2 -2
- 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 +3 -1
- 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-DagdBc6i.mjs → acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs} +562 -357
- 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-fNeqoZfY.mjs → acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-fNeqoZfY.mjs.map → acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs.map} +1 -1
- 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-C-eCtqLa.mjs → acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs} +4 -4
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs.map +1 -0
- 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/document-management/lib/features/drive/index.d.ts +0 -3
- 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-DagdBc6i.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-C-eCtqLa.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
@@ -1,12 +1,12 @@
|
|
1
1
|
import { AXPSessionService, AXPAuthGuard, AXP_PERMISSION_PROVIDER } from '@acorex/platform/auth';
|
2
|
-
import { AXPSearchCommandProvider,
|
2
|
+
import { AXPSearchCommandProvider, createAllQueryView, AXPEntityCommandScope, AXPEntityQueryType, AXPFileTypeProviderService, AXP_FILE_TYPE_INFO_PROVIDER, AXPFileStorageService, AXPSettingScope, AXPSettingService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
|
3
3
|
import { AXPEntityService, AXMEntityCrudServiceImpl, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
|
4
4
|
import * as i0 from '@angular/core';
|
5
|
-
import { inject, Injector, Injectable, NgModule,
|
5
|
+
import { inject, Injector, Injectable, NgModule, ChangeDetectionStrategy, Component, signal, computed, viewChild, effect } from '@angular/core';
|
6
6
|
import { firstValueFrom, Subject } from 'rxjs';
|
7
7
|
import * as i6 from '@acorex/platform/layout/builder';
|
8
8
|
import { AXPWidgetsCatalog, AXPWidgetComponent, AXPLayoutBuilderModule, AXP_WIDGETS_ADVANCE_GROUP, AXP_WIDGETS_EDITOR_GROUP } from '@acorex/platform/layout/builder';
|
9
|
-
import {
|
9
|
+
import { RouterModule, ROUTES } from '@angular/router';
|
10
10
|
import { AXDataSource } from '@acorex/components/common';
|
11
11
|
import { AXMMetaDataDefinitionService } from '@acorex/modules/platform-management';
|
12
12
|
import * as i1$1 from '@angular/common';
|
@@ -26,33 +26,27 @@ import { FormsModule } from '@angular/forms';
|
|
26
26
|
import get from 'lodash-es/get';
|
27
27
|
import set from 'lodash-es/set';
|
28
28
|
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY } from '@acorex/platform/widgets';
|
29
|
+
import * as i2$1 from '@acorex/components/button';
|
30
|
+
import { AXButtonComponent, AXButtonModule } from '@acorex/components/button';
|
31
|
+
import { AXButtonGroupModule } from '@acorex/components/button-group';
|
32
|
+
import * as i3$1 from '@acorex/components/dropdown';
|
33
|
+
import { AXDropdownModule } from '@acorex/components/dropdown';
|
34
|
+
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
35
|
+
import * as i4$1 from '@acorex/core/translation';
|
36
|
+
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
29
37
|
import { AXLoadingModule } from '@acorex/components/loading';
|
30
|
-
import * as i4
|
38
|
+
import * as i4 from '@acorex/components/menu';
|
31
39
|
import { AXMenuModule } from '@acorex/components/menu';
|
32
40
|
import { AXDateTimeModule } from '@acorex/core/date-time';
|
33
|
-
import * as
|
41
|
+
import * as i3 from '@acorex/core/format';
|
34
42
|
import { AXFormatModule } from '@acorex/core/format';
|
35
|
-
import
|
36
|
-
import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
|
37
|
-
import { AXPDataGenerator, AXPElementDataDirective } from '@acorex/platform/core';
|
43
|
+
import { AXPElementDataDirective } from '@acorex/platform/core';
|
38
44
|
import { get as get$1 } from 'lodash-es';
|
39
|
-
import { AXBadgeModule } from '@acorex/components/badge';
|
40
|
-
import * as i6$1 from '@acorex/components/breadcrumbs';
|
41
|
-
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
42
|
-
import * as i2$1 from '@acorex/components/button';
|
43
|
-
import { AXButtonModule } from '@acorex/components/button';
|
44
|
-
import { AXButtonGroupModule } from '@acorex/components/button-group';
|
45
|
-
import * as i3 from '@acorex/components/dropdown';
|
46
|
-
import { AXDropdownModule } from '@acorex/components/dropdown';
|
47
|
-
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
48
|
-
import { AXPSimplePageLayout } from '@acorex/platform/themes/default';
|
49
|
-
import * as i7$2 from '@acorex/components/search-box';
|
50
|
-
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
51
|
-
import { AXFileModule } from '@acorex/core/file';
|
52
|
-
import { AXPLayoutThemeService, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderTemplateComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutToolbarComponent, AXPThemeLayoutFooterComponent } from '@acorex/platform/themes/shared';
|
53
|
-
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
54
45
|
import { AXDialogService } from '@acorex/components/dialog';
|
55
46
|
import { AXPopupService } from '@acorex/components/popup';
|
47
|
+
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
48
|
+
import * as i3$2 from '@acorex/components/media-viewer';
|
49
|
+
import { AXMediaViewerModule } from '@acorex/components/media-viewer';
|
56
50
|
|
57
51
|
const config = {
|
58
52
|
i18n: 'document-management',
|
@@ -829,7 +823,7 @@ async function documentTypeFactory(injector) {
|
|
829
823
|
schema: {
|
830
824
|
dataType: 'object',
|
831
825
|
interface: {
|
832
|
-
type: AXPWidgetsCatalog.
|
826
|
+
type: AXPWidgetsCatalog.documentAttachment,
|
833
827
|
options: {},
|
834
828
|
},
|
835
829
|
},
|
@@ -3011,154 +3005,6 @@ var documentAttachmentWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
3011
3005
|
AXMDocumentAttachmentWidgetColumnComponent: AXMDocumentAttachmentWidgetColumnComponent
|
3012
3006
|
});
|
3013
3007
|
|
3014
|
-
var AXPDocumentExplorerSettings;
|
3015
|
-
(function (AXPDocumentExplorerSettings) {
|
3016
|
-
AXPDocumentExplorerSettings["ViewMode"] = "document-explorer:layout:view-mode";
|
3017
|
-
AXPDocumentExplorerSettings["SortField"] = "document-explorer:layout:sort-field";
|
3018
|
-
AXPDocumentExplorerSettings["SortDirection"] = "document-explorer:layout:sort-direction";
|
3019
|
-
})(AXPDocumentExplorerSettings || (AXPDocumentExplorerSettings = {}));
|
3020
|
-
|
3021
|
-
const AXPDocumentExplorerViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
|
3022
|
-
// View State
|
3023
|
-
viewMode: 'grid',
|
3024
|
-
isLoading: false,
|
3025
|
-
// Navigation State
|
3026
|
-
currentPath: [],
|
3027
|
-
currentNode: null,
|
3028
|
-
loadingFolderId: null,
|
3029
|
-
navigatingFolderId: null,
|
3030
|
-
// Sort State
|
3031
|
-
sortField: 'name',
|
3032
|
-
sortDirection: 'asc',
|
3033
|
-
// Content State
|
3034
|
-
folders: [],
|
3035
|
-
files: [],
|
3036
|
-
itemsCount: 0,
|
3037
|
-
availableSpace: 0,
|
3038
|
-
// Drive State
|
3039
|
-
currentDrive: null,
|
3040
|
-
// File Type State
|
3041
|
-
fileTypes: [],
|
3042
|
-
})), withComputed((store) => ({
|
3043
|
-
isRoot: computed(() => {
|
3044
|
-
const node = store.currentNode();
|
3045
|
-
return node?.id === 'root' || !node?.parentId;
|
3046
|
-
}),
|
3047
|
-
breadcrumb: computed(() => store.currentPath()),
|
3048
|
-
currentFolder: computed(() => store.currentNode()),
|
3049
|
-
currentFolderContents: computed(() => ({
|
3050
|
-
folders: store.folders(),
|
3051
|
-
files: store.files(),
|
3052
|
-
})),
|
3053
|
-
parentFolder: computed(() => {
|
3054
|
-
const currentNode = store.currentNode();
|
3055
|
-
return currentNode?.parentId ? store.folders().find(folder => folder.id === currentNode.parentId) : null;
|
3056
|
-
}),
|
3057
|
-
isGridView: computed(() => store.viewMode() === 'grid'),
|
3058
|
-
isListView: computed(() => store.viewMode() === 'list'),
|
3059
|
-
})), withMethods((store, fileTypeService = inject(AXPFileTypeProviderService), driveService = inject(AXMDocumentManagerService), settingService = inject(AXPSettingService)) => ({
|
3060
|
-
async initialize(path = 'root') {
|
3061
|
-
// Load file types
|
3062
|
-
const fileTypes = await fileTypeService.items();
|
3063
|
-
patchState(store, { fileTypes });
|
3064
|
-
// Load initial settings
|
3065
|
-
const viewMode = await settingService.get(AXPDocumentExplorerSettings.ViewMode);
|
3066
|
-
const sortField = await settingService.get(AXPDocumentExplorerSettings.SortField);
|
3067
|
-
const sortDirection = await settingService.get(AXPDocumentExplorerSettings.SortDirection);
|
3068
|
-
patchState(store, {
|
3069
|
-
viewMode: viewMode || 'grid',
|
3070
|
-
sortField: sortField || 'name',
|
3071
|
-
sortDirection: sortDirection || 'asc'
|
3072
|
-
});
|
3073
|
-
},
|
3074
|
-
_load: async (folderId) => {
|
3075
|
-
patchState(store, { loadingFolderId: folderId, isLoading: true });
|
3076
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
3077
|
-
try {
|
3078
|
-
const node = await driveService.getFolder(folderId);
|
3079
|
-
patchState(store, {
|
3080
|
-
currentNode: node.result,
|
3081
|
-
currentPath: node.path,
|
3082
|
-
folders: node.result.children?.filter((item) => item.type === 'folder') || [],
|
3083
|
-
files: node.result.children?.filter((item) => item.type === 'file') || [],
|
3084
|
-
itemsCount: node.result.children?.length || 0,
|
3085
|
-
availableSpace: await driveService.getAvailableSpace(),
|
3086
|
-
loadingFolderId: null,
|
3087
|
-
isLoading: false,
|
3088
|
-
navigatingFolderId: null
|
3089
|
-
});
|
3090
|
-
}
|
3091
|
-
catch (error) {
|
3092
|
-
patchState(store, {
|
3093
|
-
loadingFolderId: null,
|
3094
|
-
isLoading: false
|
3095
|
-
});
|
3096
|
-
throw error;
|
3097
|
-
}
|
3098
|
-
},
|
3099
|
-
navigateToFolder(folderId) {
|
3100
|
-
patchState(store, { navigatingFolderId: folderId });
|
3101
|
-
},
|
3102
|
-
async loadFolderContents(folderId) {
|
3103
|
-
await this._load(folderId);
|
3104
|
-
},
|
3105
|
-
setViewMode(mode) {
|
3106
|
-
patchState(store, { viewMode: mode });
|
3107
|
-
settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.ViewMode, mode);
|
3108
|
-
},
|
3109
|
-
setSortField(field) {
|
3110
|
-
patchState(store, { sortField: field });
|
3111
|
-
settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortField, field);
|
3112
|
-
},
|
3113
|
-
setSortDirection(direction) {
|
3114
|
-
patchState(store, { sortDirection: direction });
|
3115
|
-
settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortDirection, direction);
|
3116
|
-
},
|
3117
|
-
setDrive(scope) {
|
3118
|
-
patchState(store, { currentDrive: scope });
|
3119
|
-
},
|
3120
|
-
isLoadingFolder(folderId) {
|
3121
|
-
return store.loadingFolderId() === folderId;
|
3122
|
-
},
|
3123
|
-
getFileInfo(fileName) {
|
3124
|
-
const fileTypes = store.fileTypes();
|
3125
|
-
const extension = fileName.split('.').pop()?.toLowerCase() || '';
|
3126
|
-
const extensions = fileTypes.flatMap(type => type.extensions);
|
3127
|
-
const fileType = extensions.find(e => e.name === extension);
|
3128
|
-
return {
|
3129
|
-
icon: fileType?.icon || 'fa-light fa-file',
|
3130
|
-
type: fileType?.name || 'Unknown'
|
3131
|
-
};
|
3132
|
-
},
|
3133
|
-
sortItems(items) {
|
3134
|
-
const field = store.sortField();
|
3135
|
-
const direction = store.sortDirection();
|
3136
|
-
return [...items].sort((a, b) => {
|
3137
|
-
let comparison = 0;
|
3138
|
-
switch (field) {
|
3139
|
-
case 'name':
|
3140
|
-
comparison = a.name.localeCompare(b.name);
|
3141
|
-
break;
|
3142
|
-
case 'modified':
|
3143
|
-
const aDate = a.lastModified ? new Date(a.lastModified) : new Date(0);
|
3144
|
-
const bDate = b.lastModified ? new Date(b.lastModified) : new Date(0);
|
3145
|
-
comparison = aDate.getTime() - bDate.getTime();
|
3146
|
-
break;
|
3147
|
-
case 'size':
|
3148
|
-
comparison = (a.size || 0) - (b.size || 0);
|
3149
|
-
break;
|
3150
|
-
}
|
3151
|
-
return direction === 'asc' ? comparison : -comparison;
|
3152
|
-
});
|
3153
|
-
},
|
3154
|
-
async refresh() {
|
3155
|
-
const currentFolder = store.currentNode();
|
3156
|
-
if (currentFolder) {
|
3157
|
-
await this._load(currentFolder.id);
|
3158
|
-
}
|
3159
|
-
}
|
3160
|
-
})));
|
3161
|
-
|
3162
3008
|
var AXMDriveScope;
|
3163
3009
|
(function (AXMDriveScope) {
|
3164
3010
|
AXMDriveScope["Platform"] = "P";
|
@@ -3176,6 +3022,7 @@ class AXMDocumentManagerService {
|
|
3176
3022
|
this.documentService = inject(AXMDocumentService);
|
3177
3023
|
this.popupService = inject(AXPopupService);
|
3178
3024
|
this.dialogService = inject(AXDialogService);
|
3025
|
+
this.fileService = inject(AXPFileStorageService);
|
3179
3026
|
this.scopedDriveCache = new Map();
|
3180
3027
|
}
|
3181
3028
|
scope(scope, options) {
|
@@ -3186,7 +3033,6 @@ class AXMDocumentManagerService {
|
|
3186
3033
|
return this.scopedDriveCache.get(cacheKey);
|
3187
3034
|
}
|
3188
3035
|
getScopeCacheKey(scope, options) {
|
3189
|
-
// در آینده میتوان این را برای کش کردن بر اساس ترکیب scope و options گسترش داد
|
3190
3036
|
return scope;
|
3191
3037
|
}
|
3192
3038
|
/**
|
@@ -3276,6 +3122,7 @@ class AXMDocumentManagerService {
|
|
3276
3122
|
type: 'folder',
|
3277
3123
|
parentId: folder.parentId || null,
|
3278
3124
|
lastModified: folder.updatedAt,
|
3125
|
+
childrenCount: folder.nodeCount,
|
3279
3126
|
children: [
|
3280
3127
|
...(folder.folders?.map((child) => ({
|
3281
3128
|
id: child.id,
|
@@ -3283,15 +3130,15 @@ class AXMDocumentManagerService {
|
|
3283
3130
|
type: 'folder',
|
3284
3131
|
parentId: child.parentId || null,
|
3285
3132
|
lastModified: child.updatedAt,
|
3286
|
-
|
3133
|
+
childrenCount: child.nodeCount,
|
3287
3134
|
})) || []),
|
3288
3135
|
...(folder.documents?.map((doc) => ({
|
3289
3136
|
id: doc.id,
|
3290
3137
|
name: doc.name,
|
3291
3138
|
type: 'file',
|
3292
3139
|
parentId: doc.parentId,
|
3293
|
-
lastModified:
|
3294
|
-
size:
|
3140
|
+
lastModified: doc.meta?.['uploadedAt'],
|
3141
|
+
size: doc.meta?.['size'],
|
3295
3142
|
})) || []),
|
3296
3143
|
],
|
3297
3144
|
};
|
@@ -3414,6 +3261,8 @@ class AXMDocumentManagerService {
|
|
3414
3261
|
type: 'file',
|
3415
3262
|
parentId: file.parentId,
|
3416
3263
|
lastModified: new Date(),
|
3264
|
+
size: file.meta?.['size'],
|
3265
|
+
fileId: file.fileId,
|
3417
3266
|
};
|
3418
3267
|
}
|
3419
3268
|
async createFile(data) {
|
@@ -3447,7 +3296,8 @@ class AXMDocumentManagerService {
|
|
3447
3296
|
}
|
3448
3297
|
}
|
3449
3298
|
async showCreateFolderDialog(parentId) {
|
3450
|
-
const comp = (await import('./acorex-modules-document-management-create-folder-dialog.component-
|
3299
|
+
const comp = (await import('./acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs'))
|
3300
|
+
.AXMCreateFolderDialog;
|
3451
3301
|
const popup = await this.popupService.open(comp, {
|
3452
3302
|
title: 't("actions.create-folder")',
|
3453
3303
|
data: {
|
@@ -3456,8 +3306,139 @@ class AXMDocumentManagerService {
|
|
3456
3306
|
});
|
3457
3307
|
return popup.data?.folder;
|
3458
3308
|
}
|
3309
|
+
//Todo beacuse id is String here return type is string and need dynamic type and wrong process
|
3310
|
+
async showTreeFolderPopup() {
|
3311
|
+
const comp = (await import('./acorex-modules-document-management-index-9l8D5iEE.mjs')).AXMTreeFolderPopupComponent;
|
3312
|
+
const popup = await this.popupService.open(comp, {
|
3313
|
+
title: 't("actions.create-folder")',
|
3314
|
+
data: {
|
3315
|
+
// parentId,
|
3316
|
+
},
|
3317
|
+
});
|
3318
|
+
return popup.data?.selectedNodeId;
|
3319
|
+
}
|
3320
|
+
async showFileViewerPopup(node) {
|
3321
|
+
const parentFolder = await this.folderService.getOne(node.parentId);
|
3322
|
+
const parentFolderName = parentFolder.name;
|
3323
|
+
const nodes = await Promise.all(parentFolder.documents?.map(async (doc) => {
|
3324
|
+
const fileInfo = await this.fileService.getInfo(doc.fileId);
|
3325
|
+
// Convert mimeType to supported type
|
3326
|
+
let fileType = 'image';
|
3327
|
+
if (fileInfo.mimeType.startsWith('image/')) {
|
3328
|
+
fileType = 'image';
|
3329
|
+
}
|
3330
|
+
else if (fileInfo.mimeType.startsWith('audio/')) {
|
3331
|
+
fileType = 'audio';
|
3332
|
+
}
|
3333
|
+
else if (fileInfo.mimeType.startsWith('video/')) {
|
3334
|
+
fileType = 'video';
|
3335
|
+
}
|
3336
|
+
else if (fileInfo.mimeType === 'application/pdf') {
|
3337
|
+
fileType = 'pdf';
|
3338
|
+
}
|
3339
|
+
return {
|
3340
|
+
id: doc.id || '',
|
3341
|
+
name: doc.name,
|
3342
|
+
type: fileType,
|
3343
|
+
url: fileInfo.url || '',
|
3344
|
+
size: String(fileInfo.size),
|
3345
|
+
thumbnail: fileInfo.url || '',
|
3346
|
+
};
|
3347
|
+
}) || []);
|
3348
|
+
console.log(nodes);
|
3349
|
+
const comp = (await import('./acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs'))
|
3350
|
+
.AXMFileViewerPopupComponent;
|
3351
|
+
await this.popupService.open(comp, {
|
3352
|
+
title: `t("gallery" , ${RootConfig.module.name})` + ' - ' + parentFolderName,
|
3353
|
+
data: {
|
3354
|
+
nodes,
|
3355
|
+
},
|
3356
|
+
});
|
3357
|
+
}
|
3358
|
+
async openFile(node) {
|
3359
|
+
const file = await this.documentService.getOne(node.id);
|
3360
|
+
if (file && file.fileId) {
|
3361
|
+
const fileInfo = await this.fileService.getInfo(file.fileId);
|
3362
|
+
if (fileInfo.url) {
|
3363
|
+
try {
|
3364
|
+
// Check if the URL looks like base64 - only attempt decoding if it matches base64 pattern
|
3365
|
+
const isBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(fileInfo.url);
|
3366
|
+
let url = fileInfo.url;
|
3367
|
+
if (isBase64) {
|
3368
|
+
try {
|
3369
|
+
url = atob(fileInfo.url);
|
3370
|
+
console.log('Successfully decoded base64 URL:', url);
|
3371
|
+
}
|
3372
|
+
catch (e) {
|
3373
|
+
console.warn('Failed to decode as base64, using original URL:', e);
|
3374
|
+
}
|
3375
|
+
}
|
3376
|
+
// Make sure URL has a protocol, add https if missing
|
3377
|
+
let finalUrl = url.startsWith('http') ? url : `https://${url}`;
|
3378
|
+
console.log('Attempting to open URL:', finalUrl);
|
3379
|
+
// Try to open in a new window with a friendly message to copy URL if it fails
|
3380
|
+
this.showUrlDialog(finalUrl, file.name);
|
3381
|
+
}
|
3382
|
+
catch (error) {
|
3383
|
+
console.error('Error processing URL:', error);
|
3384
|
+
this.showUrlDialog(fileInfo.url, file.name, true);
|
3385
|
+
}
|
3386
|
+
}
|
3387
|
+
else {
|
3388
|
+
console.warn('No URL found for file:', file);
|
3389
|
+
this.dialogService.alert('No URL Available', 'No URL found for this file.', 'warning');
|
3390
|
+
}
|
3391
|
+
}
|
3392
|
+
else {
|
3393
|
+
console.warn('File not found or has no fileId:', node.id);
|
3394
|
+
this.dialogService.alert('File Not Found', 'File information could not be retrieved.', 'warning');
|
3395
|
+
}
|
3396
|
+
}
|
3397
|
+
/**
|
3398
|
+
* Shows a dialog with URL options including a copy button
|
3399
|
+
*/
|
3400
|
+
async showUrlDialog(url, fileName, isError = false) {
|
3401
|
+
const title = `Open "${fileName}"`;
|
3402
|
+
const message = isError
|
3403
|
+
? 'There was an issue processing the URL. You can try opening it manually:\n' + url
|
3404
|
+
: 'Click the button below to open the URL, or copy it to open manually:\n' + url;
|
3405
|
+
const result = await this.dialogService.confirm(title, message, 'primary');
|
3406
|
+
if (result) {
|
3407
|
+
try {
|
3408
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
3409
|
+
}
|
3410
|
+
catch (e) {
|
3411
|
+
console.error('Error opening URL from dialog:', e);
|
3412
|
+
this.dialogService.alert('Error', 'Could not open URL in browser', 'danger');
|
3413
|
+
}
|
3414
|
+
}
|
3415
|
+
else {
|
3416
|
+
// If user cancels, offer to copy the URL
|
3417
|
+
const copyResult = await this.dialogService.confirm('Copy URL', 'Would you like to copy the URL to clipboard?', 'primary');
|
3418
|
+
if (copyResult) {
|
3419
|
+
try {
|
3420
|
+
navigator.clipboard.writeText(url);
|
3421
|
+
this.dialogService.alert('Success', 'URL copied to clipboard', 'success');
|
3422
|
+
}
|
3423
|
+
catch (e) {
|
3424
|
+
console.error('Error copying URL to clipboard:', e);
|
3425
|
+
// Fallback for clipboard API not available
|
3426
|
+
const textArea = document.createElement('textarea');
|
3427
|
+
textArea.value = url;
|
3428
|
+
document.body.appendChild(textArea);
|
3429
|
+
textArea.focus();
|
3430
|
+
textArea.select();
|
3431
|
+
document.execCommand('copy');
|
3432
|
+
document.body.removeChild(textArea);
|
3433
|
+
this.dialogService.alert('Success', 'URL copied to clipboard', 'success');
|
3434
|
+
}
|
3435
|
+
}
|
3436
|
+
}
|
3437
|
+
return result;
|
3438
|
+
}
|
3459
3439
|
async rename(node) {
|
3460
|
-
const comp = (await import('./acorex-modules-document-management-rename-node-dialog.component-
|
3440
|
+
const comp = (await import('./acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs'))
|
3441
|
+
.AXMRenameNodeDialog;
|
3461
3442
|
const popup = await this.popupService.open(comp, {
|
3462
3443
|
title: 't("actions.rename")',
|
3463
3444
|
data: {
|
@@ -3501,34 +3482,16 @@ class AXMDocumentManagerService {
|
|
3501
3482
|
],
|
3502
3483
|
});
|
3503
3484
|
}
|
3504
|
-
/**
|
3505
|
-
* جستجوی فولدرها با نام مشخص شده در اسکوپ
|
3506
|
-
* @param searchTerm عبارت جستجو
|
3507
|
-
* @param scope اسکوپ جستجو
|
3508
|
-
* @param options گزینههای اضافی مانند tenantId و userId
|
3509
|
-
*/
|
3510
3485
|
async searchFolders(searchTerm, scope, options) {
|
3511
3486
|
const { result: rootNode } = await this.getRoot(scope, options);
|
3512
3487
|
const folders = await this.folderService.searchFolders(searchTerm, rootNode.id);
|
3513
3488
|
return folders.map((folder) => this.mapFolderDtoToFolderNode(folder));
|
3514
3489
|
}
|
3515
|
-
/**
|
3516
|
-
* جستجوی فایلها با نام مشخص شده در اسکوپ
|
3517
|
-
* @param searchTerm عبارت جستجو
|
3518
|
-
* @param scope اسکوپ جستجو
|
3519
|
-
* @param options گزینههای اضافی مانند tenantId و userId
|
3520
|
-
*/
|
3521
3490
|
async searchFiles(searchTerm, scope, options) {
|
3522
3491
|
const { result: rootNode } = await this.getRoot(scope, options);
|
3523
3492
|
const files = await this.documentService.searchFiles(searchTerm, rootNode.id);
|
3524
3493
|
return files.map((file) => this.mapFileToNode(file));
|
3525
3494
|
}
|
3526
|
-
/**
|
3527
|
-
* جستجوی تمام نودها (فولدرها و فایلها) با نام مشخص شده در اسکوپ
|
3528
|
-
* @param searchTerm عبارت جستجو
|
3529
|
-
* @param scope اسکوپ جستجو
|
3530
|
-
* @param options گزینههای اضافی مانند tenantId و userId
|
3531
|
-
*/
|
3532
3495
|
async searchNodes(searchTerm, scope, options) {
|
3533
3496
|
const [folders, files] = await Promise.all([
|
3534
3497
|
this.searchFolders(searchTerm, scope, options),
|
@@ -3536,6 +3499,99 @@ class AXMDocumentManagerService {
|
|
3536
3499
|
]);
|
3537
3500
|
return [...folders, ...files];
|
3538
3501
|
}
|
3502
|
+
async getAllFolders() {
|
3503
|
+
//TODO filter by scope
|
3504
|
+
return (await this.folderService.query()).items.map(this.mapFolderDtoToFolderNode);
|
3505
|
+
}
|
3506
|
+
async getAllFiles() {
|
3507
|
+
//TODO filter by scope
|
3508
|
+
return (await this.documentService.query()).items.map(this.mapFileToNode);
|
3509
|
+
}
|
3510
|
+
async getAllNodes() {
|
3511
|
+
return [...(await this.getAllFolders()), ...(await this.getAllFiles())];
|
3512
|
+
}
|
3513
|
+
async showChooseFileDialog() {
|
3514
|
+
const comp = (await import('./acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs')).AXMDocumentDriveChooseComponent;
|
3515
|
+
await this.popupService.open(comp);
|
3516
|
+
}
|
3517
|
+
async downloadFile(node) {
|
3518
|
+
const file = await this.documentService.getOne(node.id);
|
3519
|
+
if (file && file.fileId) {
|
3520
|
+
const fileInfo = await this.fileService.getInfo(file.fileId);
|
3521
|
+
const link = document.createElement('a');
|
3522
|
+
link.href = fileInfo.url ?? '';
|
3523
|
+
link.download = file.name; // Set the desired file name
|
3524
|
+
document.body.appendChild(link);
|
3525
|
+
link.click();
|
3526
|
+
document.body.removeChild(link);
|
3527
|
+
}
|
3528
|
+
else {
|
3529
|
+
console.log('id is null');
|
3530
|
+
}
|
3531
|
+
}
|
3532
|
+
/**
|
3533
|
+
* Creates a copy of a node (file or folder)
|
3534
|
+
* @param node The node to copy
|
3535
|
+
* @returns The newly created copied node
|
3536
|
+
*/
|
3537
|
+
async copy(node) {
|
3538
|
+
if (!node) {
|
3539
|
+
throw new Error('Node to copy cannot be null or undefined');
|
3540
|
+
}
|
3541
|
+
// Create a name with " copy" before the extension
|
3542
|
+
const newName = this.createCopyName(node.name);
|
3543
|
+
if (node.type === 'file') {
|
3544
|
+
// Get the original file to copy all its data
|
3545
|
+
const originalFile = await this.documentService.getOne(node.id);
|
3546
|
+
if (!originalFile) {
|
3547
|
+
throw new Error(`File with ID ${node.id} not found`);
|
3548
|
+
}
|
3549
|
+
// Create a document model from the original with the new name
|
3550
|
+
// Extract needed properties without id
|
3551
|
+
const { id, ...fileDataWithoutId } = originalFile;
|
3552
|
+
const fileData = {
|
3553
|
+
...fileDataWithoutId,
|
3554
|
+
name: newName,
|
3555
|
+
title: newName,
|
3556
|
+
};
|
3557
|
+
// Create the new file
|
3558
|
+
return await this.createFile(fileData);
|
3559
|
+
}
|
3560
|
+
else if (node.type === 'folder') {
|
3561
|
+
// Get the original folder to copy all its data
|
3562
|
+
const originalFolder = await this.folderService.getOne(node.id);
|
3563
|
+
if (!originalFolder) {
|
3564
|
+
throw new Error(`Folder with ID ${node.id} not found`);
|
3565
|
+
}
|
3566
|
+
// Create a folder model from the original with the new name
|
3567
|
+
// Extract needed properties without id
|
3568
|
+
const { id, ...folderDataWithoutId } = originalFolder;
|
3569
|
+
const folderData = {
|
3570
|
+
...folderDataWithoutId,
|
3571
|
+
name: newName,
|
3572
|
+
};
|
3573
|
+
// Create the new folder
|
3574
|
+
return await this.createFolder(folderData);
|
3575
|
+
}
|
3576
|
+
else {
|
3577
|
+
throw new Error(`Unsupported node type: ${node.type}`);
|
3578
|
+
}
|
3579
|
+
}
|
3580
|
+
/**
|
3581
|
+
* Creates a copy name by adding " copy" before the extension
|
3582
|
+
* @param originalName The original filename
|
3583
|
+
* @returns The new filename with " copy" added before the extension
|
3584
|
+
*/
|
3585
|
+
createCopyName(originalName) {
|
3586
|
+
const lastDotIndex = originalName.lastIndexOf('.');
|
3587
|
+
if (lastDotIndex === -1) {
|
3588
|
+
// No extension
|
3589
|
+
return `${originalName} copy`;
|
3590
|
+
}
|
3591
|
+
const nameWithoutExt = originalName.substring(0, lastDotIndex);
|
3592
|
+
const extension = originalName.substring(lastDotIndex);
|
3593
|
+
return `${nameWithoutExt} copy${extension}`;
|
3594
|
+
}
|
3539
3595
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
3540
3596
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagerService, providedIn: 'root' }); }
|
3541
3597
|
}
|
@@ -3589,166 +3645,176 @@ class ScopedDriveService {
|
|
3589
3645
|
async getAvailableSpace() {
|
3590
3646
|
return this.parent.getAvailableSpace();
|
3591
3647
|
}
|
3592
|
-
/**
|
3593
|
-
* جستجوی فولدرها با نام مشخص شده در اسکوپ فعلی
|
3594
|
-
* @param searchTerm عبارت جستجو
|
3595
|
-
*/
|
3596
3648
|
async searchFolders(searchTerm) {
|
3597
3649
|
this.validateScopeOptions();
|
3598
3650
|
return this.parent.searchFolders(searchTerm, this.scope, this.options);
|
3599
3651
|
}
|
3600
|
-
/**
|
3601
|
-
* جستجوی فایلها با نام مشخص شده در اسکوپ فعلی
|
3602
|
-
* @param searchTerm عبارت جستجو
|
3603
|
-
*/
|
3604
3652
|
async searchFiles(searchTerm) {
|
3605
3653
|
this.validateScopeOptions();
|
3606
3654
|
return this.parent.searchFiles(searchTerm, this.scope, this.options);
|
3607
3655
|
}
|
3608
|
-
/**
|
3609
|
-
* جستجوی تمام نودها (فولدرها و فایلها) با نام مشخص شده در اسکوپ فعلی
|
3610
|
-
* @param searchTerm عبارت جستجو
|
3611
|
-
*/
|
3612
3656
|
async searchNodes(searchTerm) {
|
3613
3657
|
this.validateScopeOptions();
|
3614
3658
|
return this.parent.searchNodes(searchTerm, this.scope, this.options);
|
3615
3659
|
}
|
3660
|
+
/**
|
3661
|
+
* Creates a copy of a node (file or folder)
|
3662
|
+
* @param node The node to copy
|
3663
|
+
* @returns The newly created copied node
|
3664
|
+
*/
|
3665
|
+
async copy(node) {
|
3666
|
+
this.validateScopeOptions();
|
3667
|
+
return this.parent.copy(node);
|
3668
|
+
}
|
3616
3669
|
}
|
3617
3670
|
|
3618
|
-
|
3619
|
-
|
3620
|
-
|
3621
|
-
|
3622
|
-
|
3623
|
-
|
3624
|
-
|
3625
|
-
|
3626
|
-
|
3627
|
-
|
3628
|
-
|
3629
|
-
|
3630
|
-
|
3631
|
-
|
3632
|
-
|
3633
|
-
|
3634
|
-
|
3635
|
-
|
3636
|
-
|
3637
|
-
|
3638
|
-
|
3639
|
-
|
3640
|
-
|
3641
|
-
|
3642
|
-
|
3643
|
-
|
3644
|
-
|
3671
|
+
var AXPDocumentExplorerSettings;
|
3672
|
+
(function (AXPDocumentExplorerSettings) {
|
3673
|
+
AXPDocumentExplorerSettings["ViewMode"] = "document-explorer:layout:view-mode";
|
3674
|
+
AXPDocumentExplorerSettings["SortField"] = "document-explorer:layout:sort-field";
|
3675
|
+
AXPDocumentExplorerSettings["SortDirection"] = "document-explorer:layout:sort-direction";
|
3676
|
+
})(AXPDocumentExplorerSettings || (AXPDocumentExplorerSettings = {}));
|
3677
|
+
|
3678
|
+
const AXPDocumentExplorerViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
|
3679
|
+
// View State
|
3680
|
+
viewMode: 'grid',
|
3681
|
+
isLoading: false,
|
3682
|
+
// Navigation State
|
3683
|
+
currentPath: [],
|
3684
|
+
currentNode: null,
|
3685
|
+
loadingFolderId: null,
|
3686
|
+
navigatingFolderId: null,
|
3687
|
+
// Sort State
|
3688
|
+
sortField: 'name',
|
3689
|
+
sortDirection: 'asc',
|
3690
|
+
// Content State
|
3691
|
+
folders: [],
|
3692
|
+
files: [],
|
3693
|
+
itemsCount: 0,
|
3694
|
+
availableSpace: 0,
|
3695
|
+
// Drive State
|
3696
|
+
currentDrive: null,
|
3697
|
+
// File Type State
|
3698
|
+
fileTypes: [],
|
3699
|
+
})), withComputed((store) => ({
|
3700
|
+
isRoot: computed(() => {
|
3701
|
+
const node = store.currentNode();
|
3702
|
+
return node?.id === 'root' || !node?.parentId;
|
3703
|
+
}),
|
3704
|
+
breadcrumb: computed(() => store.currentPath()),
|
3705
|
+
currentFolder: computed(() => store.currentNode()),
|
3706
|
+
currentFolderContents: computed(() => ({
|
3707
|
+
folders: store.folders(),
|
3708
|
+
files: store.files(),
|
3709
|
+
})),
|
3710
|
+
parentFolder: computed(() => {
|
3711
|
+
const currentNode = store.currentNode();
|
3712
|
+
return currentNode?.parentId ? store.folders().find((folder) => folder.id === currentNode.parentId) : null;
|
3713
|
+
}),
|
3714
|
+
isGridView: computed(() => store.viewMode() === 'grid'),
|
3715
|
+
isListView: computed(() => store.viewMode() === 'list'),
|
3716
|
+
})), withMethods((store, fileTypeService = inject(AXPFileTypeProviderService), driveService = inject(AXMDocumentManagerService), settingService = inject(AXPSettingService)) => ({
|
3717
|
+
async initialize(path = 'root') {
|
3718
|
+
// Load file types
|
3719
|
+
const fileTypes = await fileTypeService.items();
|
3720
|
+
patchState(store, { fileTypes });
|
3721
|
+
// Load initial settings
|
3722
|
+
const viewMode = await settingService.get(AXPDocumentExplorerSettings.ViewMode);
|
3723
|
+
const sortField = await settingService.get(AXPDocumentExplorerSettings.SortField);
|
3724
|
+
const sortDirection = await settingService.get(AXPDocumentExplorerSettings.SortDirection);
|
3725
|
+
patchState(store, {
|
3726
|
+
viewMode: viewMode || 'grid',
|
3727
|
+
sortField: sortField || 'name',
|
3728
|
+
sortDirection: sortDirection || 'asc',
|
3645
3729
|
});
|
3646
|
-
|
3647
|
-
|
3648
|
-
|
3649
|
-
|
3730
|
+
},
|
3731
|
+
_load: async (folderId) => {
|
3732
|
+
patchState(store, { loadingFolderId: folderId, isLoading: true });
|
3733
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
3734
|
+
try {
|
3735
|
+
const node = await driveService.getFolder(folderId);
|
3736
|
+
patchState(store, {
|
3737
|
+
currentNode: node.result,
|
3738
|
+
currentPath: node.path,
|
3739
|
+
folders: node.result.children?.filter((item) => item.type === 'folder') || [],
|
3740
|
+
files: node.result.children?.filter((item) => item.type === 'file') || [],
|
3741
|
+
itemsCount: node.result.children?.length || 0,
|
3742
|
+
availableSpace: await driveService.getAvailableSpace(),
|
3743
|
+
loadingFolderId: null,
|
3744
|
+
isLoading: false,
|
3745
|
+
navigatingFolderId: null,
|
3650
3746
|
});
|
3651
|
-
});
|
3652
|
-
}
|
3653
|
-
#navigateEffect;
|
3654
|
-
#loadingEffect;
|
3655
|
-
async handleSearchChange(event) {
|
3656
|
-
console.log(event);
|
3657
|
-
const result = await this.driveService.searchNodes(event.value, AXMDriveScope.Platform);
|
3658
|
-
console.log(result);
|
3659
|
-
}
|
3660
|
-
async ngOnInit() {
|
3661
|
-
await this.loadFilterItems();
|
3662
|
-
await this.vm.initialize();
|
3663
|
-
// Subscribe to route changes
|
3664
|
-
this.activatedRoute.paramMap.subscribe(async (params) => {
|
3665
|
-
this.loadDrive();
|
3666
|
-
});
|
3667
|
-
}
|
3668
|
-
async loadDrive() {
|
3669
|
-
const folderId = this.activatedRoute.snapshot.paramMap.get('id');
|
3670
|
-
if (folderId) {
|
3671
|
-
await this.vm.loadFolderContents(folderId);
|
3672
|
-
}
|
3673
|
-
else {
|
3674
|
-
const root = await this.driveService.getRoot(AXMDriveScope.Platform);
|
3675
|
-
if (root.result) {
|
3676
|
-
await this.router.navigate([`${this.sessionService.application?.name}/drive/my/${root.result.id}`], {
|
3677
|
-
replaceUrl: true,
|
3678
|
-
});
|
3679
|
-
}
|
3680
3747
|
}
|
3681
|
-
|
3682
|
-
|
3683
|
-
|
3684
|
-
|
3685
|
-
|
3686
|
-
|
3687
|
-
key: type.name,
|
3688
|
-
textKey: `file-types.${type.name}`,
|
3689
|
-
icon: type.icon || 'fa-light fa-file',
|
3690
|
-
})),
|
3691
|
-
];
|
3692
|
-
this.filterItems.set(items);
|
3693
|
-
}
|
3694
|
-
setFilter(key) {
|
3695
|
-
this.selectedFilter.set(key);
|
3696
|
-
}
|
3697
|
-
getFilterIcon() {
|
3698
|
-
if (this.selectedFilter() === 'all') {
|
3699
|
-
return 'fa-light fa-folder-closed';
|
3748
|
+
catch (error) {
|
3749
|
+
patchState(store, {
|
3750
|
+
loadingFolderId: null,
|
3751
|
+
isLoading: false,
|
3752
|
+
});
|
3753
|
+
throw error;
|
3700
3754
|
}
|
3701
|
-
|
3702
|
-
|
3703
|
-
|
3704
|
-
|
3705
|
-
|
3706
|
-
|
3755
|
+
},
|
3756
|
+
navigateToFolder(folderId) {
|
3757
|
+
patchState(store, { navigatingFolderId: folderId });
|
3758
|
+
},
|
3759
|
+
async loadFolderContents(folderId) {
|
3760
|
+
await this._load(folderId);
|
3761
|
+
},
|
3762
|
+
setViewMode(mode) {
|
3763
|
+
patchState(store, { viewMode: mode });
|
3764
|
+
settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.ViewMode, mode);
|
3765
|
+
},
|
3766
|
+
setSortField(field) {
|
3767
|
+
patchState(store, { sortField: field });
|
3768
|
+
settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortField, field);
|
3769
|
+
},
|
3770
|
+
setSortDirection(direction) {
|
3771
|
+
patchState(store, { sortDirection: direction });
|
3772
|
+
settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortDirection, direction);
|
3773
|
+
},
|
3774
|
+
setDrive(scope) {
|
3775
|
+
patchState(store, { currentDrive: scope });
|
3776
|
+
},
|
3777
|
+
isLoadingFolder(folderId) {
|
3778
|
+
return store.loadingFolderId() === folderId;
|
3779
|
+
},
|
3780
|
+
getFileInfo(fileName) {
|
3781
|
+
const fileTypes = store.fileTypes();
|
3782
|
+
const extension = fileName.split('.').pop()?.toLowerCase() || '';
|
3783
|
+
const extensions = fileTypes.flatMap((type) => type.extensions);
|
3784
|
+
const fileType = extensions.find((e) => e.name === extension);
|
3785
|
+
return {
|
3786
|
+
icon: fileType?.icon || 'fa-light fa-file',
|
3787
|
+
type: fileType?.name || 'Unknown',
|
3788
|
+
};
|
3789
|
+
},
|
3790
|
+
sortItems(items) {
|
3791
|
+
const field = store.sortField();
|
3792
|
+
const direction = store.sortDirection();
|
3793
|
+
return [...items].sort((a, b) => {
|
3794
|
+
let comparison = 0;
|
3795
|
+
switch (field) {
|
3796
|
+
case 'name':
|
3797
|
+
comparison = a.name.localeCompare(b.name);
|
3798
|
+
break;
|
3799
|
+
case 'modified':
|
3800
|
+
const aDate = a.lastModified ? new Date(a.lastModified) : new Date(0);
|
3801
|
+
const bDate = b.lastModified ? new Date(b.lastModified) : new Date(0);
|
3802
|
+
comparison = aDate.getTime() - bDate.getTime();
|
3803
|
+
break;
|
3804
|
+
case 'size':
|
3805
|
+
comparison = (a.size || 0) - (b.size || 0);
|
3806
|
+
break;
|
3807
|
+
}
|
3808
|
+
return direction === 'asc' ? comparison : -comparison;
|
3809
|
+
});
|
3810
|
+
},
|
3811
|
+
async refresh() {
|
3812
|
+
const currentFolder = store.currentNode();
|
3813
|
+
if (currentFolder) {
|
3814
|
+
await this._load(currentFolder.id);
|
3707
3815
|
}
|
3708
|
-
|
3709
|
-
|
3710
|
-
}
|
3711
|
-
handleNavigateToFolder(folderId) {
|
3712
|
-
this.router.navigate([`${this.sessionService.application?.name}/drive/my/${folderId}`]);
|
3713
|
-
}
|
3714
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentDriveComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
3715
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMDocumentDriveComponent, isStandalone: true, selector: "axp-document-drive", providers: [AXPDocumentExplorerViewModel], viewQueries: [{ propertyName: "documentExplorer", first: true, predicate: AXMDocumentExplorerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Main Layout -->\n<axp-layout-simple-page *translate=\"let t\">\n <!-- Header Section -->\n <axp-layout-header>\n <!-- Title Section -->\n <axp-layout-title>\n @if(vm.isRoot()) {\n {{ t('my-drive.title', { scope: rootConfig.config.i18n }) | async }}\n }@else {\n {{ vm.currentFolder()?.name }}\n }\n </axp-layout-title>\n\n <!-- Description Section -->\n <axp-layout-description>\n {{\n t('my-drive.description', {\n scope: rootConfig.config.i18n,\n params: {\n count: vm.itemsCount(),\n size: vm.availableSpace() | format : 'filesize' | async\n }\n }) | async\n }}\n </axp-layout-description>\n\n <!-- Actions Section -->\n <axp-layout-actions>\n <!-- Primary Actions -->\n <axp-layout-actions-primary>\n <!-- Upload Dropdown -->\n <ax-button [text]=\"t('actions.add-item', { 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)=\"documentExplorer()?.createFolder()\"\n [text]=\"(t('actions.create-folder', { 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)=\"documentExplorer()?.uploadFile()\"\n [text]=\"(t('actions.upload-file', { 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 </axp-layout-actions-primary>\n\n <!-- Secondary Actions -->\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('actions.fa-share', { scope: rootConfig.config.i18n }) | async)!\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-share-nodes\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <!-- Breadcrumbs Section -->\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{ t('home') | async }} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> {{ t('profile.title', { scope: 'auth' }) | async }} </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n\n <!-- Toolbar Section -->\n <axp-layout-toolbar>\n <!-- Left Side Toolbar -->\n <axp-layout-prefix>\n <!-- Filter Dropdown -->\n <ax-button [text]=\"t(getFilterText(), { scope: rootConfig.config.i18n }) | async\">\n <ax-prefix>\n <ax-icon [icon]=\"getFilterIcon()\"></ax-icon>\n </ax-prefix>\n\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @for(item of filterItems(); track item.key) {\n <ax-button-item\n (onClick)=\"setFilter(item.key)\"\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- Search Box -->\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n class=\"ax-w-72\"\n [placeholder]=\"t('actions.search', { scope: rootConfig.config.i18n }) | async\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n <axp-layout-suffix>\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for(item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n @if(vm.isGridView()) {\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n }\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"(t('actions.grid-view', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isGridView()\"\n (onClick)=\"vm.setViewMode('grid')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.list-view', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setViewMode('list')\"\n [selected]=\"vm.isListView()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-layout-toolbar>\n </axp-layout-header>\n\n <!-- Content Section -->\n <axp-layout-content class=\"ax-overflow-hidden ax-flex ax-flex-col ax-flex-1\">\n <axm-document-explorer></axm-document-explorer>\n </axp-layout-content>\n\n <!-- Footer Section -->\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"breadcrumb ax-xs\">\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"handleNavigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"fa-regular fa-chevron-right fa-fw fa-xs\"></i>\n } }\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n", styles: [".breadcrumb{display:flex;flex-direction:row;align-items:center;gap:.25rem}.breadcrumb .ax-state-disabled button,.breadcrumb .ax-state-loading button{cursor:default!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { 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: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i5$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i6$1.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i6$1.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7$2.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i8.AXFormatPipe, name: "format" }, { kind: "ngmodule", type: AXFileModule }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-layout-content, axp-layout-header-container, axp-layout-side-container, axp-layout-sections, axp-layout-section-container, axp-layout-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: AXPThemeLayoutHeaderTemplateComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer" }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "component", type: AXMDocumentExplorerComponent, selector: "axm-document-explorer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
3716
|
-
}
|
3717
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentDriveComponent, decorators: [{
|
3718
|
-
type: Component,
|
3719
|
-
args: [{ selector: 'axp-document-drive', standalone: true, imports: [
|
3720
|
-
CommonModule,
|
3721
|
-
RouterModule,
|
3722
|
-
AXMenuModule,
|
3723
|
-
AXButtonModule,
|
3724
|
-
AXButtonGroupModule,
|
3725
|
-
AXDropdownButtonModule,
|
3726
|
-
AXDropdownModule,
|
3727
|
-
AXTranslationModule,
|
3728
|
-
AXDecoratorModule,
|
3729
|
-
AXLoadingModule,
|
3730
|
-
AXBreadcrumbsModule,
|
3731
|
-
AXBadgeModule,
|
3732
|
-
AXSearchBoxModule,
|
3733
|
-
AXFormatModule,
|
3734
|
-
AXFileModule,
|
3735
|
-
AXPSimplePageLayout,
|
3736
|
-
AXPThemeLayoutBlockComponent,
|
3737
|
-
AXPThemeLayoutHeaderTemplateComponent,
|
3738
|
-
AXPThemeLayoutActionsComponent,
|
3739
|
-
AXPThemeLayoutPagePrimaryActionsComponent,
|
3740
|
-
AXPThemeLayoutPageSecondaryActionsComponent,
|
3741
|
-
AXPThemeLayoutToolbarComponent,
|
3742
|
-
AXPThemeLayoutFooterComponent,
|
3743
|
-
AXDateTimeModule,
|
3744
|
-
AXMDocumentExplorerComponent,
|
3745
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXPDocumentExplorerViewModel], template: "<!-- Main Layout -->\n<axp-layout-simple-page *translate=\"let t\">\n <!-- Header Section -->\n <axp-layout-header>\n <!-- Title Section -->\n <axp-layout-title>\n @if(vm.isRoot()) {\n {{ t('my-drive.title', { scope: rootConfig.config.i18n }) | async }}\n }@else {\n {{ vm.currentFolder()?.name }}\n }\n </axp-layout-title>\n\n <!-- Description Section -->\n <axp-layout-description>\n {{\n t('my-drive.description', {\n scope: rootConfig.config.i18n,\n params: {\n count: vm.itemsCount(),\n size: vm.availableSpace() | format : 'filesize' | async\n }\n }) | async\n }}\n </axp-layout-description>\n\n <!-- Actions Section -->\n <axp-layout-actions>\n <!-- Primary Actions -->\n <axp-layout-actions-primary>\n <!-- Upload Dropdown -->\n <ax-button [text]=\"t('actions.add-item', { 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)=\"documentExplorer()?.createFolder()\"\n [text]=\"(t('actions.create-folder', { 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)=\"documentExplorer()?.uploadFile()\"\n [text]=\"(t('actions.upload-file', { 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 </axp-layout-actions-primary>\n\n <!-- Secondary Actions -->\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('actions.fa-share', { scope: rootConfig.config.i18n }) | async)!\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-share-nodes\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <!-- Breadcrumbs Section -->\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{ t('home') | async }} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> {{ t('profile.title', { scope: 'auth' }) | async }} </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n\n <!-- Toolbar Section -->\n <axp-layout-toolbar>\n <!-- Left Side Toolbar -->\n <axp-layout-prefix>\n <!-- Filter Dropdown -->\n <ax-button [text]=\"t(getFilterText(), { scope: rootConfig.config.i18n }) | async\">\n <ax-prefix>\n <ax-icon [icon]=\"getFilterIcon()\"></ax-icon>\n </ax-prefix>\n\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @for(item of filterItems(); track item.key) {\n <ax-button-item\n (onClick)=\"setFilter(item.key)\"\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- Search Box -->\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n class=\"ax-w-72\"\n [placeholder]=\"t('actions.search', { scope: rootConfig.config.i18n }) | async\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n <axp-layout-suffix>\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for(item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n @if(vm.isGridView()) {\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n }\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"(t('actions.grid-view', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isGridView()\"\n (onClick)=\"vm.setViewMode('grid')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.list-view', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setViewMode('list')\"\n [selected]=\"vm.isListView()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-layout-toolbar>\n </axp-layout-header>\n\n <!-- Content Section -->\n <axp-layout-content class=\"ax-overflow-hidden ax-flex ax-flex-col ax-flex-1\">\n <axm-document-explorer></axm-document-explorer>\n </axp-layout-content>\n\n <!-- Footer Section -->\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"breadcrumb ax-xs\">\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"handleNavigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"fa-regular fa-chevron-right fa-fw fa-xs\"></i>\n } }\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n", styles: [".breadcrumb{display:flex;flex-direction:row;align-items:center;gap:.25rem}.breadcrumb .ax-state-disabled button,.breadcrumb .ax-state-loading button{cursor:default!important}\n"] }]
|
3746
|
-
}] });
|
3747
|
-
|
3748
|
-
var drive_component = /*#__PURE__*/Object.freeze({
|
3749
|
-
__proto__: null,
|
3750
|
-
AXMDocumentDriveComponent: AXMDocumentDriveComponent
|
3751
|
-
});
|
3816
|
+
},
|
3817
|
+
})));
|
3752
3818
|
|
3753
3819
|
class AXMDocumentExplorerComponent {
|
3754
3820
|
constructor() {
|
@@ -3770,6 +3836,7 @@ class AXMDocumentExplorerComponent {
|
|
3770
3836
|
#effect;
|
3771
3837
|
handleNavigateToFolder(folderId) {
|
3772
3838
|
this.vm.navigateToFolder(folderId);
|
3839
|
+
console.log(this.vm.currentFolder());
|
3773
3840
|
}
|
3774
3841
|
// Context Menu Handlers
|
3775
3842
|
async handleContextMenuOnOpening(e) {
|
@@ -3838,6 +3905,20 @@ class AXMDocumentExplorerComponent {
|
|
3838
3905
|
],
|
3839
3906
|
break: true,
|
3840
3907
|
};
|
3908
|
+
const openWith = {
|
3909
|
+
name: 'open-with',
|
3910
|
+
text: 'Open with',
|
3911
|
+
icon: 'fa-light fa-circle-info',
|
3912
|
+
items: [
|
3913
|
+
{
|
3914
|
+
name: 'open-gallery',
|
3915
|
+
text: 'Gallery',
|
3916
|
+
icon: 'fa-light fa-images',
|
3917
|
+
data: node,
|
3918
|
+
},
|
3919
|
+
],
|
3920
|
+
break: true,
|
3921
|
+
};
|
3841
3922
|
e.items = [
|
3842
3923
|
...open,
|
3843
3924
|
{
|
@@ -3891,6 +3972,9 @@ class AXMDocumentExplorerComponent {
|
|
3891
3972
|
data: node,
|
3892
3973
|
},
|
3893
3974
|
];
|
3975
|
+
if (node.type == 'file') {
|
3976
|
+
e.items.splice(e.items.length - 1, 0, openWith);
|
3977
|
+
}
|
3894
3978
|
}
|
3895
3979
|
handleContextMenuRootOnOpening(e) {
|
3896
3980
|
//TODO: check async translate method in acorex
|
@@ -3927,6 +4011,15 @@ class AXMDocumentExplorerComponent {
|
|
3927
4011
|
case 'open-folder':
|
3928
4012
|
this.handleNavigateToFolder(node.id);
|
3929
4013
|
break;
|
4014
|
+
case 'open-file':
|
4015
|
+
this.openFile(node);
|
4016
|
+
break;
|
4017
|
+
case 'open-gallery':
|
4018
|
+
this.openGallery(node);
|
4019
|
+
break;
|
4020
|
+
case 'download':
|
4021
|
+
this.handleDownloadFile(node);
|
4022
|
+
break;
|
3930
4023
|
case 'new-folder':
|
3931
4024
|
await this.createFolder(node);
|
3932
4025
|
// Handle new folder creation
|
@@ -3937,6 +4030,12 @@ class AXMDocumentExplorerComponent {
|
|
3937
4030
|
case 'paste':
|
3938
4031
|
// Handle paste operation
|
3939
4032
|
break;
|
4033
|
+
case 'move-to':
|
4034
|
+
this.moveNode(node);
|
4035
|
+
break;
|
4036
|
+
case 'copy-to':
|
4037
|
+
this.copyNodeToNewPath(node);
|
4038
|
+
break;
|
3940
4039
|
case 'rename':
|
3941
4040
|
this.renameNode(node);
|
3942
4041
|
break;
|
@@ -3946,12 +4045,24 @@ class AXMDocumentExplorerComponent {
|
|
3946
4045
|
case 'refresh':
|
3947
4046
|
this.vm.refresh();
|
3948
4047
|
break;
|
4048
|
+
case 'copy':
|
4049
|
+
this.makeCopy(node);
|
4050
|
+
break;
|
3949
4051
|
}
|
3950
4052
|
}
|
4053
|
+
async openGallery(node) {
|
4054
|
+
await this.driveService.showFileViewerPopup(node);
|
4055
|
+
}
|
4056
|
+
async openFile(node) {
|
4057
|
+
await this.driveService.openFile(node);
|
4058
|
+
}
|
4059
|
+
handleDownloadFile(node) {
|
4060
|
+
this.driveService.downloadFile(node);
|
4061
|
+
}
|
3951
4062
|
async createFolder(node) {
|
3952
|
-
const
|
3953
|
-
if (
|
3954
|
-
const result = await this.driveService.showCreateFolderDialog(
|
4063
|
+
const parentId = node?.id ?? this.vm.currentFolder()?.id;
|
4064
|
+
if (parentId) {
|
4065
|
+
const result = await this.driveService.showCreateFolderDialog(parentId);
|
3955
4066
|
if (result) {
|
3956
4067
|
await this.vm.refresh();
|
3957
4068
|
}
|
@@ -3980,8 +4091,61 @@ class AXMDocumentExplorerComponent {
|
|
3980
4091
|
// }
|
3981
4092
|
}
|
3982
4093
|
}
|
4094
|
+
async chooseFile() {
|
4095
|
+
await this.driveService.showChooseFileDialog();
|
4096
|
+
await this.vm.refresh();
|
4097
|
+
}
|
4098
|
+
async makeCopy(node) {
|
4099
|
+
if (node) {
|
4100
|
+
try {
|
4101
|
+
const copiedNode = await this.driveService.copy(node);
|
4102
|
+
await this.vm.refresh();
|
4103
|
+
}
|
4104
|
+
catch (error) {
|
4105
|
+
console.error('Error copying node:', error);
|
4106
|
+
}
|
4107
|
+
}
|
4108
|
+
}
|
4109
|
+
async moveNode(node) {
|
4110
|
+
if (node) {
|
4111
|
+
const result = await this.driveService.showTreeFolderPopup();
|
4112
|
+
if (result) {
|
4113
|
+
if (node.type === 'folder') {
|
4114
|
+
await this.driveService.updateFolder(node.id, { parentId: result });
|
4115
|
+
}
|
4116
|
+
else {
|
4117
|
+
await this.driveService.updateFile(node.id, { parentId: result });
|
4118
|
+
}
|
4119
|
+
await this.vm.refresh();
|
4120
|
+
}
|
4121
|
+
}
|
4122
|
+
}
|
4123
|
+
async copyNodeToNewPath(node) {
|
4124
|
+
if (node) {
|
4125
|
+
const result = await this.driveService.showTreeFolderPopup();
|
4126
|
+
if (result) {
|
4127
|
+
if (node.type === 'folder') {
|
4128
|
+
await this.driveService.createFolder({
|
4129
|
+
name: node.name,
|
4130
|
+
parentId: result,
|
4131
|
+
color: '#ffffff',
|
4132
|
+
});
|
4133
|
+
}
|
4134
|
+
else {
|
4135
|
+
await this.driveService.createFile({
|
4136
|
+
title: node.name,
|
4137
|
+
name: node.name,
|
4138
|
+
parentId: result,
|
4139
|
+
//TODO upload file to file storage
|
4140
|
+
fileId: '',
|
4141
|
+
});
|
4142
|
+
}
|
4143
|
+
await this.vm.refresh();
|
4144
|
+
}
|
4145
|
+
}
|
4146
|
+
}
|
3983
4147
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
3984
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMDocumentExplorerComponent, isStandalone: true, selector: "axm-document-explorer", viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["itemsContextMenu"], descendants: true, isSignal: true }, { propertyName: "rootContextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">15 items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.lastModified | format : 'datetime' : { format: 'datetime' } |\n async }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\"\n (dblclick)=\"handleNavigateToFolder(file.id)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.lastModified | format : 'datetime' : { format: 'datetime' } |\n async }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu #itemsContextMenu [target]=\"'.axp-explorer-item'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n</ax-context-menu>\n\n<ax-context-menu #rootContextMenu [target]=\"'axm-document-explorer'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuRootOnOpening($event)\">\n</ax-context-menu>", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i8.AXFormatPipe, name: "format" }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i4$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "directive", type: AXPElementDataDirective, selector: "[axp-data]", inputs: ["axp-data", "axp-data-path"] }] }); }
|
4148
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMDocumentExplorerComponent, isStandalone: true, selector: "axm-document-explorer", viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["itemsContextMenu"], descendants: true, isSignal: true }, { propertyName: "rootContextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div\n class=\"ax-group ax-cursor-pointer axp-explorer-item\"\n [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\"\n >\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.childrenCount }} items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n folder.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\" (dblclick)=\"openFile(file)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n file.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu\n #itemsContextMenu\n [target]=\"'.axp-explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n>\n</ax-context-menu>\n\n<ax-context-menu\n #rootContextMenu\n [target]=\"'axm-document-explorer'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n>\n</ax-context-menu>\n", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.animation-duration-2s{--fa-animation-duration: 2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i3.AXFormatPipe, name: "format" }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i4.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "directive", type: AXPElementDataDirective, selector: "[axp-data]", inputs: ["axp-data", "axp-data-path"] }] }); }
|
3985
4149
|
}
|
3986
4150
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentExplorerComponent, decorators: [{
|
3987
4151
|
type: Component,
|
@@ -3994,22 +4158,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
3994
4158
|
AXDateTimeModule,
|
3995
4159
|
AXMenuModule,
|
3996
4160
|
AXPElementDataDirective,
|
3997
|
-
], template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div
|
4161
|
+
], template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div\n class=\"ax-group ax-cursor-pointer axp-explorer-item\"\n [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\"\n >\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.childrenCount }} items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n folder.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\" (dblclick)=\"openFile(file)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n file.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu\n #itemsContextMenu\n [target]=\"'.axp-explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n>\n</ax-context-menu>\n\n<ax-context-menu\n #rootContextMenu\n [target]=\"'axm-document-explorer'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n>\n</ax-context-menu>\n", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.animation-duration-2s{--fa-animation-duration: 2s}\n"] }]
|
3998
4162
|
}] });
|
3999
4163
|
|
4000
4164
|
class AXMDocumentAttachmentWidgetEditComponent extends AXPWidgetComponent {
|
4165
|
+
constructor() {
|
4166
|
+
super(...arguments);
|
4167
|
+
this.driveService = inject(AXMDocumentManagerService);
|
4168
|
+
this.vm = inject(AXPDocumentExplorerViewModel);
|
4169
|
+
this.rootConfig = RootConfig;
|
4170
|
+
this.documentExplorer = viewChild(AXMDocumentExplorerComponent);
|
4171
|
+
this.#navigateEffect = effect(() => {
|
4172
|
+
const navigatingFolderId = this.vm.navigatingFolderId();
|
4173
|
+
if (navigatingFolderId) {
|
4174
|
+
this.loadDrive(navigatingFolderId);
|
4175
|
+
}
|
4176
|
+
});
|
4177
|
+
}
|
4178
|
+
#navigateEffect;
|
4179
|
+
ngOnInit() {
|
4180
|
+
super.ngOnInit();
|
4181
|
+
this.vm.initialize();
|
4182
|
+
this.loadDrive();
|
4183
|
+
}
|
4184
|
+
async loadDrive(folderId) {
|
4185
|
+
if (folderId) {
|
4186
|
+
await this.vm.loadFolderContents(folderId);
|
4187
|
+
}
|
4188
|
+
else {
|
4189
|
+
const root = await this.driveService.getRoot(AXMDriveScope.Platform);
|
4190
|
+
if (root.result) {
|
4191
|
+
await this.vm.loadFolderContents(root.result.id);
|
4192
|
+
}
|
4193
|
+
}
|
4194
|
+
}
|
4195
|
+
handleNavigateToFolder(folderId) {
|
4196
|
+
this.vm.navigateToFolder(folderId);
|
4197
|
+
}
|
4001
4198
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentAttachmentWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
4002
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
4199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: AXMDocumentAttachmentWidgetEditComponent, isStandalone: true, selector: "axm-document-attachment-edit-widget", providers: [AXPDocumentExplorerViewModel], viewQueries: [{ propertyName: "documentExplorer", first: true, predicate: AXMDocumentExplorerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-gap-3\" *translate=\"let t\">\n <!-- Header Section -->\n <div class=\"ax-flex ax-flex-row ax-justify-between\">\n <ax-button\n (onClick)=\"handleNavigateToFolder(vm.currentFolder()?.parentId!)\"\n [ngClass]=\"{ 'ax-invisible': !vm.currentFolder()?.parentId }\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- Primary Actions -->\n <ax-button [text]=\"t('actions.add-item', { 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 <!-- Upload Dropdown -->\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"documentExplorer()?.chooseFile()\"\n [text]=\"(t('drive-types.platform-drive', { 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 </div>\n <axm-document-explorer></axm-document-explorer>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: AXMDocumentExplorerComponent, selector: "axm-document-explorer" }, { kind: "component", type: 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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3$1.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXButtonGroupModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
4003
4200
|
}
|
4004
4201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentAttachmentWidgetEditComponent, decorators: [{
|
4005
4202
|
type: Component,
|
4006
|
-
args: [{
|
4007
|
-
|
4008
|
-
|
4009
|
-
|
4010
|
-
|
4011
|
-
|
4012
|
-
|
4203
|
+
args: [{ selector: 'axm-document-attachment-edit-widget', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
4204
|
+
CommonModule,
|
4205
|
+
AXMDocumentExplorerComponent,
|
4206
|
+
AXButtonComponent,
|
4207
|
+
AXDropdownButtonModule,
|
4208
|
+
AXDropdownModule,
|
4209
|
+
AXDecoratorModule,
|
4210
|
+
AXTranslationModule,
|
4211
|
+
AXButtonModule,
|
4212
|
+
AXButtonGroupModule,
|
4213
|
+
], inputs: [], providers: [AXPDocumentExplorerViewModel], template: "<div class=\"ax-flex ax-flex-col ax-gap-3\" *translate=\"let t\">\n <!-- Header Section -->\n <div class=\"ax-flex ax-flex-row ax-justify-between\">\n <ax-button\n (onClick)=\"handleNavigateToFolder(vm.currentFolder()?.parentId!)\"\n [ngClass]=\"{ 'ax-invisible': !vm.currentFolder()?.parentId }\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- Primary Actions -->\n <ax-button [text]=\"t('actions.add-item', { 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 <!-- Upload Dropdown -->\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"documentExplorer()?.chooseFile()\"\n [text]=\"(t('drive-types.platform-drive', { 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 </div>\n <axm-document-explorer></axm-document-explorer>\n</div>\n" }]
|
4013
4214
|
}] });
|
4014
4215
|
|
4015
4216
|
var documentAttachmentWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
@@ -4111,17 +4312,19 @@ function routesFacory() {
|
|
4111
4312
|
const routes = [
|
4112
4313
|
{
|
4113
4314
|
path: ':app/drive/:scope',
|
4114
|
-
|
4315
|
+
loadComponent: () => {
|
4316
|
+
return config.viewers.root();
|
4317
|
+
},
|
4115
4318
|
canActivate: [AXPAuthGuard],
|
4116
4319
|
data: { reuse: true },
|
4117
4320
|
children: [
|
4118
4321
|
{
|
4119
4322
|
path: '',
|
4120
|
-
loadComponent: () =>
|
4323
|
+
loadComponent: () => import('./acorex-modules-document-management-drive.component-B6az6-_w.mjs').then((c) => c.AXMDocumentDriveComponent),
|
4121
4324
|
},
|
4122
4325
|
{
|
4123
4326
|
path: ':id',
|
4124
|
-
loadComponent: () =>
|
4327
|
+
loadComponent: () => import('./acorex-modules-document-management-drive.component-B6az6-_w.mjs').then((c) => c.AXMDocumentDriveComponent),
|
4125
4328
|
},
|
4126
4329
|
],
|
4127
4330
|
},
|
@@ -4134,7 +4337,7 @@ class AXMDocumentManagementModule {
|
|
4134
4337
|
AXMDocumentManagementDocumentTypeMetaValueEntityModule,
|
4135
4338
|
AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule,
|
4136
4339
|
AXMDocumentManagementDocumentTypeEntityModule,
|
4137
|
-
AXMDocumentManagementDocumentEntityModule, i6.AXPLayoutBuilderModule, AXMFileTypeModule] }); }
|
4340
|
+
AXMDocumentManagementDocumentEntityModule, i6.AXPLayoutBuilderModule, AXMFileTypeModule, i3$2.AXMediaViewerModule] }); }
|
4138
4341
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagementModule, providers: [
|
4139
4342
|
{
|
4140
4343
|
provide: AXMFolderService,
|
@@ -4178,7 +4381,8 @@ class AXMDocumentManagementModule {
|
|
4178
4381
|
AXPLayoutBuilderModule.forChild({
|
4179
4382
|
widgets: [AXmFileTypeExtensionWidget, AXMDocumentAttachmentWidget],
|
4180
4383
|
}),
|
4181
|
-
AXMFileTypeModule
|
4384
|
+
AXMFileTypeModule,
|
4385
|
+
AXMediaViewerModule.forRoot()] }); }
|
4182
4386
|
}
|
4183
4387
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagementModule, decorators: [{
|
4184
4388
|
type: NgModule,
|
@@ -4193,6 +4397,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
4193
4397
|
widgets: [AXmFileTypeExtensionWidget, AXMDocumentAttachmentWidget],
|
4194
4398
|
}),
|
4195
4399
|
AXMFileTypeModule,
|
4400
|
+
AXMediaViewerModule.forRoot(),
|
4196
4401
|
],
|
4197
4402
|
exports: [],
|
4198
4403
|
providers: [
|
@@ -4238,5 +4443,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
4238
4443
|
* Generated bundle index. Do not edit.
|
4239
4444
|
*/
|
4240
4445
|
|
4241
|
-
export { AXMDocumentManagerService as A,
|
4242
|
-
//# sourceMappingURL=acorex-modules-document-management-acorex-modules-document-management-
|
4446
|
+
export { AXMDocumentManagerService as A, AXMFolderServiceImpl as B, AXMEntityProvider as C, AXMMenuProvider as D, AXMSearchCommandProvider as E, AXMSettingProvider as F, RootConfig as R, AXPDocumentExplorerViewModel as a, AXMDocumentExplorerComponent as b, AXMDriveScope as c, AXMDocumentManagementModule as d, documentFactory as e, AXMDocumentManagementDocumentEntityModule as f, AXMDocumentService as g, AXMDocumentServiceImpl as h, documentTypeFactory as i, AXMDocumentManagementDocumentTypeEntityModule as j, AXMDocumentManagementDocumentTypeEntityService as k, AXMDocumentManagementDocumentTypeEntityServiceImpl as l, documentTypeMetaDefinitionfactory as m, AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule as n, AXMDocumentManagementDocumentTypeMetaDefinitionEntityService as o, AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl as p, documentTypeMetaValueFactory as q, AXMDocumentManagementDocumentTypeMetaValueEntityModule as r, AXMDocumentManagementDocumentTypeMetaValueEntityService as s, AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl as t, documentTypeStatusDefinitionFactory as u, AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule as v, AXMDocumentManagementDocumentTypeStatusDefinitionEntityService as w, AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl as x, folderFactory as y, AXMFolderService as z };
|
4447
|
+
//# sourceMappingURL=acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs.map
|