@acorex/modules 19.2.15 → 19.2.17-next.0
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/common/README.md +3 -0
- package/common/index.d.ts +6 -0
- package/common/lib/common.module.d.ts +6 -0
- package/common/lib/const.d.ts +25 -0
- package/common/lib/entities/dashboard/dashboard.entity.d.ts +3 -0
- package/common/lib/entities/dashboard/dashboard.service.d.ts +10 -0
- package/common/lib/entities/dashboard/dashboard.types.d.ts +8 -0
- package/common/lib/entities/dashboard/index.d.ts +3 -0
- package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.entity.d.ts +3 -0
- package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.service.d.ts +10 -0
- package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.types.d.ts +9 -0
- package/common/lib/entities/dashboard-widget-data/index.d.ts +3 -0
- package/common/lib/entities/index.d.ts +2 -0
- package/common/lib/entity.provider.d.ts +10 -0
- package/common/lib/features/home/dashboard-home.d.ts +5 -0
- package/common/lib/features/home/index.d.ts +1 -0
- package/common/lib/menu.provider.d.ts +5 -0
- package/common/lib/permission.provider.d.ts +4 -0
- package/common/lib/search-command.provider.d.ts +4 -0
- package/common/lib/setting.provider.d.ts +4 -0
- package/document-management/lib/entities/document/document.service.d.ts +7 -0
- package/document-management/lib/entities/folder/folder.service.d.ts +7 -0
- package/document-management/lib/features/document-explorer/components/rename-node-dialog/rename-node-dialog.component.d.ts +14 -0
- package/document-management/lib/features/document-explorer/document-explorer.component.d.ts +12 -9
- package/document-management/lib/features/document-explorer/document-explorer.viewmodel.d.ts +2 -2
- package/document-management/lib/features/drive/drive.component.d.ts +3 -2
- package/document-management/lib/features/shared/document-manager.service.d.ts +80 -1
- package/document-management/lib/features/shared/document-manager.types.d.ts +1 -1
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-column.component.d.ts +6 -0
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-edit.component.d.ts +6 -0
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-filter.component.d.ts +6 -0
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-print.component.d.ts +6 -0
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-view.component.d.ts +6 -0
- package/document-management/lib/features/widgets/document-attachment/document-attachment-widget.config.d.ts +7 -0
- package/document-management/lib/features/widgets/document-attachment/index.d.ts +6 -0
- package/document-management/lib/features/widgets/index.d.ts +1 -0
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CZ_nTBkL.mjs → acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs} +8 -8
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CZ_nTBkL.mjs.map → acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-app-chooser.component-CGSygSjS.mjs → acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-CGSygSjS.mjs.map → acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-B1sF3B_O.mjs → acorex-modules-auth-login.module-B9P2XpfQ.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-B1sF3B_O.mjs.map → acorex-modules-auth-login.module-B9P2XpfQ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-CK4nyS8D.mjs → acorex-modules-auth-master.layout-BYC0FYq1.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-CK4nyS8D.mjs.map → acorex-modules-auth-master.layout-BYC0FYq1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-DC_zi8bV.mjs → acorex-modules-auth-password.component-C7Yp-ioT.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-DC_zi8bV.mjs.map → acorex-modules-auth-password.component-C7Yp-ioT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-DqvmIMDR.mjs → acorex-modules-auth-password.component-DzrYH4yM.mjs} +3 -3
- package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-routes-DwHgPrDP.mjs → acorex-modules-auth-routes-Bu-xB4O6.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-DwHgPrDP.mjs.map → acorex-modules-auth-routes-Bu-xB4O6.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-BatKQRdJ.mjs → acorex-modules-auth-two-factor.module-YRh6_YcG.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-BatKQRdJ.mjs.map → acorex-modules-auth-two-factor.module-YRh6_YcG.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs +14 -0
- package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs.map +1 -0
- package/fesm2022/acorex-modules-common.mjs +1095 -0
- package/fesm2022/acorex-modules-common.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-C9ZCejjs.mjs +4092 -0
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-C9ZCejjs.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-BnRaCq_Q.mjs +92 -0
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-BnRaCq_Q.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-drive.component-Sz198sA6.mjs +165 -0
- package/fesm2022/acorex-modules-document-management-drive.component-Sz198sA6.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-index--I8MGeDs.mjs +2 -0
- package/fesm2022/acorex-modules-document-management-index--I8MGeDs.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-EBf1XqU8.mjs +101 -0
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-EBf1XqU8.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management.mjs +1 -3093
- package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
- package/package.json +5 -1
- package/document-management/lib/features/drive/index.d.ts +0 -3
- package/fesm2022/acorex-modules-auth-password.component-DqvmIMDR.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-drive.component-bjnFFaLS.mjs +0 -951
- package/fesm2022/acorex-modules-document-management-drive.component-bjnFFaLS.mjs.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-document-management-drive.component-bjnFFaLS.mjs","sources":["../../../../libs/modules/document-management/src/lib/features/document-explorer/components/create-folder-dialog/create-folder-dialog.component.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/components/create-folder-dialog/create-folder-dialog.component.html","../../../../libs/modules/document-management/src/lib/features/shared/document-manager.types.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-manager.service.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/settings.keys.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.viewmodel.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.component.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.component.html","../../../../libs/modules/document-management/src/lib/features/drive/drive.component.ts","../../../../libs/modules/document-management/src/lib/features/drive/drive.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXMDocumentManagerService } from '../../../shared';\n\n@Component({\n selector: 'ax-create-folder-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n //\n AXDecoratorModule,\n AXTextBoxModule,\n AXLabelModule,\n AXButtonModule,\n AXFormModule,\n AXColorBoxModule,\n AXTranslationModule,\n AXLoadingModule,\n ],\n templateUrl: './create-folder-dialog.component.html',\n})\nexport class AXMCreateFolderDialog extends AXBasePageComponent {\n private driveService = inject(AXMDocumentManagerService);\n\n parentId?: string;\n\n protected name = model<string>('');\n protected color = model<string>('#FFFFFF');\n protected description = model<string>('');\n\n async handleSubmitButton(form: AXFormComponent) {\n this.isLoading = true;\n const validated = await form.validate();\n if (validated.result) {\n try {\n const folder = await this.driveService.createFolder({\n name: this.name(),\n color: this.color(),\n parentId: this.parentId,\n description: this.description(),\n });\n this.close({\n result: true,\n folder,\n });\n } catch (error) {\n console.error('Error creating folder:', error);\n } finally {\n this.isLoading = false;\n }\n } else {\n this.isLoading = false;\n }\n }\n\n onCancel() {\n this.close({\n result: false,\n });\n }\n}\n","<div class=\"ax-p-4\">\n <ax-form #form>\n <div class=\"ax-flex ax-flex-col ax-gap-4\">\n <ax-form-field>\n <ax-label>\n {{ 'name' | translate | async }}\n </ax-label>\n <ax-text-box [(ngModel)]=\"name\" class=\"ax-input ax-w-full\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-text-box>\n </ax-form-field>\n <ax-form-field>\n <ax-label>\n {{ 'description' | translate | async }}\n </ax-label>\n <ax-text-box [(ngModel)]=\"description\" class=\"ax-input ax-w-full\"> </ax-text-box>\n </ax-form-field>\n <ax-form-field>\n <ax-label>\n {{ 'color' | translate | async }}\n </ax-label>\n <ax-color-box [(ngModel)]=\"color\" class=\"ax-w-full\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-color-box>\n </ax-form-field>\n <div class=\"ax-flex ax-justify-end ax-gap-2\"></div>\n </div>\n </ax-form>\n</div>\n<ax-footer>\n <ax-suffix>\n <ax-button (onClick)=\"onCancel()\" [text]=\"'cancel' | translate | async\"></ax-button>\n <ax-button look=\"solid\" color=\"primary\" (onClick)=\"handleSubmitButton(form)\" [text]=\"'save' | translate | async\">\n @if(isLoading) {\n <ax-loading> </ax-loading>\n }\n </ax-button>\n </ax-suffix>\n</ax-footer>\n","import { AXMDocumentManagementDocumentEntityModel, AXMDocumentManagementFolderEntityModel } from \"../../entities\";\n\nexport type AXMDriveScopeKey = 'P' | 'T' | 'U';\nexport enum AXMDriveScope {\n Platform = 'P',\n Tenant = 'T',\n User = 'U',\n}\n\nexport interface AXMDocumentExplorerNode {\n id: string;\n name: string;\n type: 'file' | 'folder';\n parentId: string | null;\n children?: AXMDocumentExplorerNode[];\n size?: number;\n lastModified?: Date;\n}\n\nexport type AXPDocumentExplorerViewMode = 'grid' | 'list';\n\n\nexport type CreateFolderDto = Partial<Omit<AXMDocumentManagementFolderEntityModel, 'id'>>;\nexport type UpdateFolderDto = Partial<Omit<AXMDocumentManagementFolderEntityModel, 'id'>>;\n\nexport type CreateFileDto = Omit<AXMDocumentManagementDocumentEntityModel, 'id'>;\nexport type UpdateFileDto = Partial<Omit<AXMDocumentManagementDocumentEntityModel, 'id'>>;\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXMDocumentManagementDocumentEntityModel,\n AXMDocumentManagementFolderCreateDto,\n AXMDocumentManagementFolderEntityModel,\n AXMDocumentService,\n AXMFolderService,\n} from '../../entities';\nimport { AXMCreateFolderDialog } from '../document-explorer/components/create-folder-dialog/create-folder-dialog.component';\nimport {\n AXMDocumentExplorerNode,\n AXMDriveScope,\n CreateFileDto,\n UpdateFileDto,\n UpdateFolderDto,\n} from './document-manager.types';\n\n/**\n * Interface defining the contract for document drive service\n */\nexport interface AXMDocumentManagerServiceInterface {\n scope(scope: AXMDriveScope, options?: { tenantId?: string; userId?: string }): ScopedDriveService;\n getRoot(\n scope: AXMDriveScope,\n options?: { tenantId?: string; userId?: string }\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n getFolder(folderId: string): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode>;\n updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode>;\n deleteFolder(folderId: string): Promise<void>;\n getAvailableSpace(): Promise<number>;\n\n createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode>;\n updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode>;\n deleteFile(fileId: string): Promise<void>;\n\n deleteNodes(nodeIds: string[]): Promise<void>;\n\n showCreateFolderDialog(parentId?: string): Promise<AXMDocumentExplorerNode | null>;\n}\n\n/**\n * Service for handling document drive operations\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMDocumentManagerService implements AXMDocumentManagerServiceInterface {\n protected folderService = inject(AXMFolderService);\n protected sessionService = inject(AXPSessionService);\n protected documentService = inject(AXMDocumentService);\n protected popupService = inject(AXPopupService);\n private scopedDriveCache: Map<AXMDriveScope, ScopedDriveService> = new Map();\n\n scope(scope: AXMDriveScope, options?: { tenantId?: string; userId?: string }): ScopedDriveService {\n const cacheKey = this.getScopeCacheKey(scope, options);\n if (!this.scopedDriveCache.has(cacheKey)) {\n this.scopedDriveCache.set(cacheKey, new ScopedDriveService(this, scope, options));\n }\n return this.scopedDriveCache.get(cacheKey)!;\n }\n\n private getScopeCacheKey(scope: AXMDriveScope, options?: { tenantId?: string; userId?: string }): AXMDriveScope {\n // در آینده میتوان این را برای کش کردن بر اساس ترکیب scope و options گسترش داد\n return scope;\n }\n\n /**\n * Gets the platform root folder (top-level folder)\n * @returns Root folder for the platform\n */\n private async getPlatformRootFolder(): Promise<AXMDocumentManagementFolderEntityModel> {\n const result = await this.folderService.query({\n skip: 0,\n take: 1,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [\n { field: 'parentId', operator: { type: 'isNull' } },\n { field: 'tenantId', operator: { type: 'isNull' } },\n { field: 'userId', operator: { type: 'isNull' } },\n ],\n },\n });\n\n if (result.items.length === 0) {\n throw new Error('Platform root folder not found');\n }\n\n return result.items[0];\n }\n\n /**\n * Gets the tenant root folder\n * @param rootFolderId The platform root folder ID\n * @param tenantId The tenant ID\n * @returns Tenant root folder\n */\n private async getTenantRootFolder(\n rootFolderId: string,\n tenantId: string\n ): Promise<AXMDocumentManagementFolderEntityModel> {\n if (!tenantId) {\n throw new Error('Tenant ID is required');\n }\n\n const result = await this.folderService.query({\n skip: 0,\n take: 1,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [\n { field: 'parentId', operator: { type: 'equal' }, value: rootFolderId },\n { field: 'tenantId', operator: { type: 'equal' }, value: tenantId },\n { field: 'userId', operator: { type: 'isNull' } },\n ],\n },\n });\n\n if (result.items.length === 0) {\n throw new Error('Tenant root folder not found');\n }\n\n return result.items[0];\n }\n\n /**\n * Gets the user root folder\n * @param tenantFolderId The tenant folder ID\n * @param tenantId The tenant ID\n * @param userId The user ID\n * @returns User root folder\n */\n private async getUserRootFolder(\n tenantFolderId: string,\n tenantId: string,\n userId: string\n ): Promise<AXMDocumentManagementFolderEntityModel> {\n if (!tenantId || !userId) {\n throw new Error('Both Tenant ID and User ID are required');\n }\n\n const result = await this.folderService.query({\n skip: 0,\n take: 1,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [\n { field: 'parentId', operator: { type: 'equal' }, value: tenantFolderId },\n { field: 'tenantId', operator: { type: 'equal' }, value: tenantId },\n { field: 'userId', operator: { type: 'equal' }, value: userId },\n ],\n },\n });\n\n if (result.items.length === 0) {\n throw new Error('User root folder not found');\n }\n\n return result.items[0];\n }\n\n private mapFolderDtoToFolderNode(folder: AXMDocumentManagementFolderEntityModel): AXMDocumentExplorerNode {\n return {\n id: folder.id!,\n name: folder.name,\n type: 'folder',\n parentId: folder.parentId || null,\n lastModified: folder.updatedAt,\n children: [\n ...(folder.folders?.map((child) => ({\n id: child.id!,\n name: child.name,\n type: 'folder' as const,\n parentId: child.parentId || null,\n lastModified: child.updatedAt,\n size: AXPDataGenerator.number(50, 9000000),\n })) || []),\n ...(folder.documents?.map((doc) => ({\n id: doc.id!,\n name: doc.name,\n type: 'file' as const,\n parentId: doc.parentId,\n lastModified: AXPDataGenerator.date(),\n size: AXPDataGenerator.number(50, 9000000),\n })) || []),\n ],\n };\n }\n\n private async buildPath(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode[]> {\n if (node.type === 'file') {\n return (await this.documentService.getPath(node.id)).map(this.mapFolderDtoToFolderNode);\n }\n return (await this.folderService.getPath(node.id)).map(this.mapFolderDtoToFolderNode);\n }\n\n private async findNodeById(id: string): Promise<AXMDocumentExplorerNode | null> {\n const findNode = (nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode | null => {\n for (const node of nodes) {\n if (node.id === id) {\n return node;\n }\n if (node.children) {\n const found = findNode(node.children);\n if (found) return found;\n }\n }\n return null;\n };\n\n return findNode([(await this.getRoot(AXMDriveScope.Platform)).result]);\n }\n\n /**\n * Gets the root folder based on the specified scope\n * @param scope The drive scope (Platform, Tenant, User)\n * @param options Optional parameters for tenant and user IDs\n * @returns Root folder for the specified scope\n */\n async getRoot(\n scope: AXMDriveScope,\n options?: { tenantId?: string; userId?: string }\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const rootFolder = await this.getPlatformRootFolder();\n let result: AXMDocumentExplorerNode;\n\n switch (scope) {\n case AXMDriveScope.Platform:\n result = this.mapFolderDtoToFolderNode(rootFolder);\n break;\n\n case AXMDriveScope.Tenant: {\n if (!options?.tenantId) {\n throw new Error('Tenant ID is required for tenant scope');\n }\n const tenantRoot = await this.getTenantRootFolder(rootFolder.id!, options.tenantId);\n result = this.mapFolderDtoToFolderNode(tenantRoot);\n break;\n }\n\n case AXMDriveScope.User: {\n if (!options?.tenantId || !options?.userId) {\n throw new Error('Both Tenant ID and User ID are required for user scope');\n }\n const tenantFolder = await this.getTenantRootFolder(rootFolder.id!, options.tenantId);\n const userRoot = await this.getUserRootFolder(tenantFolder.id!, options.tenantId, options.userId);\n result = this.mapFolderDtoToFolderNode(userRoot);\n break;\n }\n\n default:\n throw new Error(`Invalid scope: ${scope}`);\n }\n\n const path = await this.buildPath(result);\n return { path, result };\n }\n\n /**\n * Gets a specific folder by ID\n * @param folderId The folder ID to retrieve\n * @returns The requested folder\n */\n async getFolder(folderId: string): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n if (!folderId) {\n throw new Error('Folder ID is required');\n }\n\n const folder = await this.folderService.getOne(folderId);\n if (!folder) {\n throw new Error('Folder not found');\n }\n\n const result = this.mapFolderDtoToFolderNode(folder);\n const path = await this.buildPath(result);\n return { path, result };\n }\n\n async createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode> {\n const now = new Date();\n const currentUser = this.sessionService.user;\n\n const folderToCreate: Omit<AXMDocumentManagementFolderEntityModel, 'id'> = {\n ...data,\n createdAt: now,\n updatedAt: now,\n createdBy: currentUser?.id?.toString() ?? 'system',\n updatedBy: currentUser?.id?.toString() ?? 'system',\n isSystem: false,\n isHidden: false,\n isDeleted: false,\n };\n\n const createdFolder = await this.folderService.insertOne(folderToCreate);\n const folder = await this.folderService.getOne(createdFolder);\n return this.mapFolderDtoToFolderNode(folder);\n }\n\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n const currentUser = this.sessionService.user;\n const updateData = {\n ...data,\n updatedBy: currentUser?.id?.toString() ?? 'system',\n updatedAt: new Date(),\n };\n await this.folderService.updateOne(folderId, updateData);\n const updatedFolder = await this.folderService.getOne(folderId);\n return this.mapFolderDtoToFolderNode(updatedFolder);\n }\n\n async deleteFolder(folderId: string): Promise<void> {\n await this.folderService.deleteOne(folderId);\n }\n\n async getAvailableSpace(): Promise<number> {\n // For now, return a fixed value of 100GB (56 * 1024 * 1024 * 1024 bytes)\n // This should be replaced with actual storage quota logic when implemented\n return 56 * 1024 * 1024 * 1024;\n }\n\n private mapFileToNode(file: AXMDocumentManagementDocumentEntityModel): AXMDocumentExplorerNode {\n return {\n id: file.id!,\n name: file.name,\n type: 'file',\n parentId: file.parentId,\n lastModified: new Date(),\n };\n }\n\n async createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode> {\n const fileId = await this.documentService.insertOne(data);\n const file = await this.documentService.getOne(fileId);\n return this.mapFileToNode(file);\n }\n\n async updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode> {\n const updatedFile = await this.documentService.updateOne(fileId, data);\n return this.mapFileToNode(updatedFile);\n }\n\n async deleteFile(fileId: string): Promise<void> {\n await this.documentService.deleteOne(fileId);\n }\n\n async deleteNodes(nodeIds: string[]): Promise<void> {\n for (const nodeId of nodeIds) {\n try {\n await this.deleteFolder(nodeId);\n } catch {\n try {\n await this.deleteFile(nodeId);\n } catch (error) {\n console.error(`Failed to delete node with id ${nodeId}:`, error);\n }\n }\n }\n }\n\n async showCreateFolderDialog(parentId?: string): Promise<AXMDocumentExplorerNode | null> {\n const popup = await this.popupService.open(AXMCreateFolderDialog, {\n title: 't(\"actions.create-folder\")',\n data: {\n parentId,\n },\n });\n return popup.data?.folder as AXMDocumentExplorerNode;\n }\n\n async rename(node: AXMDocumentExplorerNode) {}\n}\n\nclass ScopedDriveService {\n constructor(\n private parent: AXMDocumentManagerService,\n private scope: AXMDriveScope,\n private options?: { tenantId?: string; userId?: string }\n ) {\n this.validateScopeOptions();\n }\n\n private validateScopeOptions(): void {\n switch (this.scope) {\n case AXMDriveScope.Tenant:\n if (!this.options?.tenantId) {\n throw new Error('Tenant ID is required for tenant scope');\n }\n break;\n case AXMDriveScope.User:\n if (!this.options?.tenantId || !this.options?.userId) {\n throw new Error('Both Tenant ID and User ID are required for user scope');\n }\n break;\n }\n }\n\n async getRoot(): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getRoot(this.scope, this.options);\n }\n\n async getFolder(folderId: string): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getFolder(folderId);\n }\n\n async createFolder(\n data: Omit<AXMDocumentManagementFolderCreateDto, 'tenantId' | 'userId'>\n ): Promise<AXMDocumentExplorerNode> {\n const folderData: AXMDocumentManagementFolderCreateDto = {\n ...data,\n tenantId: this.options?.tenantId,\n userId: this.options?.userId,\n };\n return this.parent.createFolder(folderData);\n }\n\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n return this.parent.updateFolder(folderId, data);\n }\n\n async deleteFolder(folderId: string): Promise<void> {\n return this.parent.deleteFolder(folderId);\n }\n\n async getAvailableSpace(): Promise<number> {\n return this.parent.getAvailableSpace();\n }\n}\n","export enum AXPDocumentExplorerSettings {\n ViewMode = 'document-explorer:layout:view-mode',\n SortField = 'document-explorer:layout:sort-field',\n SortDirection = 'document-explorer:layout:sort-direction'\n}\n\n","import { signalStore, withState, withMethods, withComputed, withHooks } from \"@ngrx/signals\";\nimport { AXMDocumentManagerService, AXMDocumentExplorerNode, AXMDriveScope, AXPDocumentExplorerViewMode } from \"../drive\";\nimport { AXPDocumentExplorerSettings } from \"./settings.keys\";\nimport { computed, inject } from \"@angular/core\";\nimport { patchState } from \"@ngrx/signals\";\nimport { AXPSettingService, AXPSettingScope, AXPFileTypeProviderService, AXPFileType } from \"@acorex/platform/common\";\nimport { filter } from \"rxjs\";\n\nexport const AXPDocumentExplorerViewModel = signalStore(\n { providedIn: 'root' },\n\n withState(() => ({\n // View State\n viewMode: 'grid' as AXPDocumentExplorerViewMode,\n isLoading: false,\n\n // Navigation State\n currentPath: [] as AXMDocumentExplorerNode[],\n currentNode: null as AXMDocumentExplorerNode | null,\n loadingFolderId: null as string | null,\n navigatingFolderId: null as string | null,\n\n // Sort State\n sortField: 'name',\n sortDirection: 'asc',\n\n // Content State\n folders: [] as AXMDocumentExplorerNode[],\n files: [] as AXMDocumentExplorerNode[],\n itemsCount: 0,\n availableSpace: 0,\n\n // Drive State\n currentDrive: null as AXMDriveScope | null,\n\n // File Type State\n fileTypes: [] as AXPFileType[],\n })),\n\n withComputed((store) => ({\n isRoot: computed(() => {\n const node = store.currentNode();\n return node?.id === 'root' || !node?.parentId;\n }),\n\n breadcrumb: computed(() => store.currentPath()),\n\n currentFolder: computed(() => store.currentNode()),\n\n currentFolderContents: computed(() => ({\n folders: store.folders(),\n files: store.files(),\n })),\n\n parentFolder: computed(() => {\n const currentNode = store.currentNode();\n return currentNode?.parentId ? store.folders().find(folder => folder.id === currentNode.parentId) : null;\n }),\n\n isGridView: computed(() => store.viewMode() === 'grid'),\n isListView: computed(() => store.viewMode() === 'list'),\n })),\n\n withMethods((store, fileTypeService = inject(AXPFileTypeProviderService), driveService = inject(AXMDocumentManagerService), settingService = inject(AXPSettingService)) => ({\n async initialize(path: string = 'root') {\n // Load file types\n const fileTypes = await fileTypeService.items();\n patchState(store, { fileTypes });\n\n // Load initial settings\n const viewMode = await settingService.get(AXPDocumentExplorerSettings.ViewMode);\n const sortField = await settingService.get(AXPDocumentExplorerSettings.SortField);\n const sortDirection = await settingService.get(AXPDocumentExplorerSettings.SortDirection);\n\n patchState(store, {\n viewMode: viewMode || 'grid',\n sortField: sortField || 'name',\n sortDirection: sortDirection || 'asc'\n });\n },\n\n\n _load: async (folderId: string) => {\n patchState(store, { loadingFolderId: folderId, isLoading: true });\n\n await new Promise(resolve => setTimeout(resolve, 100));\n\n\n try {\n const node = await driveService.getFolder(folderId);\n\n patchState(store, {\n currentNode: node.result,\n currentPath: node.path,\n folders: node.result.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'folder') || [],\n files: node.result.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') || [],\n itemsCount: node.result.children?.length || 0,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null\n });\n } catch (error) {\n patchState(store, {\n loadingFolderId: null,\n isLoading: false\n });\n throw error;\n }\n },\n\n navigateToFolder(folderId: string) {\n patchState(store, { navigatingFolderId: folderId });\n },\n\n async loadFolderContents(folderId: string) {\n await this._load(folderId)\n },\n\n\n setViewMode(mode: AXPDocumentExplorerViewMode) {\n patchState(store, { viewMode: mode });\n settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.ViewMode, mode);\n },\n\n setSortField(field: string) {\n patchState(store, { sortField: field });\n settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortField, field);\n },\n\n setSortDirection(direction: string) {\n patchState(store, { sortDirection: direction });\n settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortDirection, direction);\n },\n\n setDrive(scope: AXMDriveScope) {\n patchState(store, { currentDrive: scope });\n },\n\n isLoadingFolder(folderId: string): boolean {\n return store.loadingFolderId() === folderId;\n },\n\n getFileInfo(fileName: string): { icon: string, type: string } {\n const fileTypes = store.fileTypes();\n const extension = fileName.split('.').pop()?.toLowerCase() || '';\n const extensions = fileTypes.flatMap(type => type.extensions);\n const fileType = extensions.find(e => e.name === extension);\n\n return {\n icon: fileType?.icon || 'fa-light fa-file',\n type: fileType?.name || 'Unknown'\n };\n },\n\n sortItems(items: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n const field = store.sortField();\n const direction = store.sortDirection();\n\n return [...items].sort((a, b) => {\n let comparison = 0;\n\n switch (field) {\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'modified':\n const aDate = a.lastModified ? new Date(a.lastModified) : new Date(0);\n const bDate = b.lastModified ? new Date(b.lastModified) : new Date(0);\n comparison = aDate.getTime() - bDate.getTime();\n break;\n case 'size':\n comparison = (a.size || 0) - (b.size || 0);\n break;\n }\n\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n\n async refresh() {\n const currentFolder = store.currentNode();\n if (currentFolder) {\n await this._load(currentFolder.id)\n }\n }\n })),\n\n);\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { CommonModule } from '@angular/common';\nimport { Component, OnInit, effect, inject, viewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AXMDocumentManagerService, AXMDocumentExplorerNode } from '../drive';\nimport { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent, AXMenuModule, AXContextMenuComponent } from '@acorex/components/menu';\nimport { get } from 'lodash-es';\nimport { AXPElementDataDirective } from '@acorex/platform/core';\nimport { AXPDocumentExplorerViewModel } from './document-explorer.viewmodel';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig } from '../../const';\n\n@Component({\n selector: 'axp-document-explorer',\n templateUrl: './document-explorer.component.html',\n styleUrls: ['./document-explorer.component.scss'],\n standalone: true,\n imports: [CommonModule, RouterModule, AXDecoratorModule, AXLoadingModule, AXFormatModule, AXDateTimeModule, AXMenuModule, AXPElementDataDirective],\n})\nexport class AXMDocumentExplorerComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected contextMenu = viewChild<AXContextMenuComponent>('itemsContextMenu');\n protected rootContextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n protected driveService = inject(AXMDocumentManagerService);\n protected translateService = inject(AXTranslationService);\n\n #effect = effect(() => {\n const navigatingFolderId = this.vm.loadingFolderId();\n if (!navigatingFolderId) {\n setTimeout(() => {\n this.contextMenu()?.refresh();\n this.rootContextMenu()?.refresh();\n }, 100);\n }\n });\n\n protected handleNavigateToFolder(folderId: string) {\n this.vm.navigateToFolder(folderId);\n }\n\n // Context Menu Handlers\n protected async handleContextMenuOnOpening(e: AXContextMenuOpeningEvent) {\n const node = get(e.targetElement, '__data__') as any as AXMDocumentExplorerNode;\n if (!node) {\n return;\n }\n\n const allowedAddItems = node.type === 'folder';\n const allowDelete = true;\n const isPasteAvailable = true;\n const allowPaste = false;\n\n\n const open = node.type == 'file' ? [\n {\n name: 'open-file',\n text: 'Open',\n icon: this.vm.getFileInfo(node.name).icon,\n data: node,\n },\n {\n name: 'download',\n text: 'Download',\n icon: 'fa-light fa-download',\n data: node,\n },\n ] : [\n {\n name: 'open-folder',\n text: 'Open',\n icon: 'fa-light fa-folder-open',\n data: node,\n },\n {\n name: 'upload-file',\n text: 'Upload File',\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n data: this.vm.currentFolder(),\n },\n ];\n\n const info =\n {\n name: node.type == 'file' ? 'file-info' : 'folder-info',\n text: 'Information',\n icon: 'fa-light fa-circle-info',\n items: [\n {\n name: 'rename',\n text: 'Rename',\n icon: 'fa-light fa-pencil',\n data: node,\n },\n {\n name: 'properties',\n text: 'Properties',\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n {\n name: 'lock ',\n text: 'Lock',\n icon: 'fa-light fa-lock',\n data: node,\n }\n ],\n break: true,\n };\n\n\n e.items = [\n ...open,\n\n {\n name: 'share',\n text: 'Share',\n icon: 'fa-light fa-share-nodes',\n items: [\n {\n name: 'share',\n text: 'Share',\n icon: 'fa-light fa-users',\n },\n {\n name: 'share-with-email',\n text: 'Share with email',\n icon: 'fa-light fa-envelope',\n },\n {\n name: 'link',\n text: 'Link',\n icon: 'fa-light fa-link',\n }\n ],\n break: true,\n },\n info,\n {\n name: 'copy',\n text: 'Make a copy',\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: 'Copy to',\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: 'Move to',\n icon: 'fa-light fa-arrow-right-arrow-left',\n break: true,\n data: node,\n },\n {\n name: 'delete',\n text: 'Delete',\n color: 'danger',\n icon: 'fa-light fa-trash',\n data: node,\n }\n ];\n }\n\n protected handleContextMenuRootOnOpening(e: AXContextMenuOpeningEvent) {\n //TODO: check async translate method in acorex\n const scope = RootConfig.config.i18n;\n e.items = [\n {\n name: 'new-folder',\n text: this.translateService.translateSync('actions.create-folder', { scope }),\n icon: 'fa-light fa-folder-plus',\n },\n {\n name: 'upload-file',\n text: this.translateService.translateSync('actions.upload-file', { scope }),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n },\n {\n name: 'refresh',\n text: 'Refresh',\n icon: 'fa-light fa-rotate-right',\n break: true,\n },\n {\n name: 'delete',\n text: 'Delete',\n color: 'danger',\n icon: 'fa-light fa-trash',\n },\n ];\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n const node = e.item.data as AXMDocumentExplorerNode;\n switch (e.item.name) {\n case 'open-folder':\n this.handleNavigateToFolder(node.id);\n break;\n case 'new-folder':\n await this.createFolder(node);\n // Handle new folder creation\n break;\n case 'upload-file':\n await this.uploadFile(node);\n break;\n case 'paste':\n // Handle paste operation\n break;\n case 'delete':\n // Handle delete operation\n break;\n case 'refresh':\n this.vm.refresh();\n break;\n }\n }\n\n public async createFolder(node?: AXMDocumentExplorerNode) {\n const folderId = node?.id ?? this.vm.currentFolder()?.id;\n if (folderId) {\n const result = await this.driveService.showCreateFolderDialog(this.vm.currentFolder()?.id);\n if (result) {\n await this.vm.refresh();\n }\n }\n }\n\n public async uploadFile(node?: AXMDocumentExplorerNode) {\n const folderId = node?.id ?? this.vm.currentFolder()?.id;\n if (folderId) {\n // const result = await this.driveService.showCreateFolderDialog(this.vm.currentFolder()?.id);\n // if (result) {\n // await this.vm.refresh();\n // }\n }\n }\n}\n","<!-- 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-items-center ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 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-light fa-folder-closed\" class=\"ax-text-3xl\"></ax-icon>\n }\n </div>\n <span class=\"ax-text-sm ax-truncate ax-w-full ax-text-center\">{{ folder.name }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\">\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-p-4 ax-rounded-lg ax-border ax-border-gray-200 group-hover:ax-bg-gray-50\"\n >\n <div class=\"file-icon\">\n @let fileInfo = vm.getFileInfo(file.name);\n <i class=\"fa-fw {{ fileInfo.icon }}\"></i>\n <span>{{ fileInfo.type }}</span>\n </div>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-1 ax-mt-2\">\n <span class=\"ax-text-xs\">{{ file.size | format : 'filesize' | async }} </span>\n <span class=\"ax-text-xs\">{{ file.lastModified | format : 'datetime' : { format: 'datetime' } | 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\">\n <i class=\"fa-fw {{ fileInfo.icon }}\"></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]=\"'axp-document-explorer'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n>\n</ax-context-menu>\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSimplePageLayout } from '@acorex/platform/themes/default';\n\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport {\n AXPLayoutThemeService,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderTemplateComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXPThemeLayoutPageSecondaryActionsComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterModule, Router, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentManagerService } from '../shared';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../document-explorer';\nimport { AXMDriveScope } from '../shared/document-manager.types';\nimport { AXPSessionService } from '@acorex/platform/auth';\n\n@Component({\n selector: 'axp-document-drive',\n templateUrl: './drive.component.html',\n styleUrls: ['./drive.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXFormatModule,\n AXFileModule,\n AXPSimplePageLayout,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderTemplateComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXPThemeLayoutPageSecondaryActionsComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutFooterComponent,\n AXDateTimeModule,\n AXMDocumentExplorerComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [AXPDocumentExplorerViewModel],\n})\nexport class AXMDocumentDriveComponent implements OnInit {\n\n protected readonly layout = inject(AXPLayoutThemeService);\n protected readonly rootConfig = RootConfig;\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n protected readonly router = inject(Router);\n protected readonly activatedRoute = inject(ActivatedRoute);\n protected readonly sessionService = inject(AXPSessionService);\n\n protected readonly filterItems = signal<Array<{ key: string; textKey: string; icon: string }>>([]);\n public selectedFilter = signal<string>('all');\n\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n\n\n protected documentExplorer = viewChild(AXMDocumentExplorerComponent)\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) || items[0];\n });\n\n #navigateEffect = effect(() => {\n const navigatingFolderId = this.vm.navigatingFolderId();\n if (navigatingFolderId) {\n this.handleNavigateToFolder(navigatingFolderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layout.setNavigationLoading(isLoading);\n });\n });\n\n async ngOnInit() {\n await this.loadFilterItems();\n await this.vm.initialize();\n // Subscribe to route changes\n this.activatedRoute.paramMap.subscribe(async params => {\n this.loadDrive();\n });\n }\n\n private async loadDrive() {\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n if (folderId) {\n await this.vm.loadFolderContents(folderId);\n } else {\n const root = await this.driveService.getRoot(AXMDriveScope.Platform);\n if (root.result) {\n await this.router.navigate(\n [`${this.sessionService.application?.name}/drive/my/${root.result.id}`],\n { replaceUrl: true }\n );\n }\n }\n }\n\n async loadFilterItems() {\n const types = await this.fileTypeService.items();\n const items = [\n { key: 'all', textKey: 'file-types.all', icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({\n key: type.name,\n textKey: `file-types.${type.name}`,\n icon: type.icon || 'fa-light fa-file',\n })),\n ];\n this.filterItems.set(items);\n }\n\n protected setFilter(key: string): void {\n this.selectedFilter.set(key);\n }\n\n protected getFilterIcon(): string {\n if (this.selectedFilter() === 'all') {\n return 'fa-light fa-folder-closed';\n }\n const item = this.filterItems().find((item) => item.key === this.selectedFilter());\n return item?.icon || 'fa-light fa-file';\n }\n\n protected getFilterText(): string {\n if (this.selectedFilter() === 'all') {\n return 'file-types.all';\n }\n const item = this.filterItems().find((item) => item.key === this.selectedFilter());\n return item?.textKey || 'file-types.all';\n }\n\n protected handleNavigateToFolder(folderId: string) {\n this.router.navigate([`${this.sessionService.application?.name}/drive/my/${folderId}`]);\n }\n}\n","<!-- 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 <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 class=\"ax-w-72\" [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 <axp-document-explorer></axp-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"],"names":["i3","i5","i6","i2","i4","i7","i8"],"mappings":"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"}
|