@yuuvis/app-drive 2.1.0 → 2.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-app-drive.mjs","sources":["../../../../../libs/apps/drive/src/lib/drive.icons.ts","../../../../../libs/apps/drive/src/lib/drive.schema.ts","../../../../../libs/apps/drive/src/lib/services/tokens/breadcrumb-max-depth.token.ts","../../../../../libs/apps/drive/src/lib/services/drive/drive.interface.ts","../../../../../libs/apps/drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.ts","../../../../../libs/apps/drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.html","../../../../../libs/apps/drive/src/lib/services/drive/versions/versions.mapping.ts","../../../../../libs/apps/drive/src/lib/services/drive/drive.service.ts","../../../../../libs/apps/drive/src/lib/services/providers/drive.providers.ts","../../../../../libs/apps/drive/src/lib/actions/paste/paste.action.ts","../../../../../libs/apps/drive/src/lib/actions/rename/rename.validator.ts","../../../../../libs/apps/drive/src/lib/components/object-name/object-name.component.ts","../../../../../libs/apps/drive/src/lib/components/object-name/object-name.component.html","../../../../../libs/apps/drive/src/lib/actions/rename/rename.component.ts","../../../../../libs/apps/drive/src/lib/actions/rename/rename.component.html","../../../../../libs/apps/drive/src/lib/actions/rename/rename.action.ts","../../../../../libs/apps/drive/src/lib/actions/copy-link/copy-link.action.ts","../../../../../libs/apps/drive/src/lib/actions/updateContent/update.content.action.ts","../../../../../libs/apps/drive/src/lib/components/overlay/create-folder/create-folder.component.ts","../../../../../libs/apps/drive/src/lib/components/overlay/create-folder/create-folder.component.html","../../../../../libs/apps/drive/src/lib/components/add-button/add-button.component.ts","../../../../../libs/apps/drive/src/lib/components/add-button/add-button.component.html","../../../../../libs/apps/drive/src/lib/components/sort/sort.component.ts","../../../../../libs/apps/drive/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../../../libs/apps/drive/src/lib/components/breadcrumb/breadcrumb.component.html","../../../../../libs/apps/drive/src/lib/services/stored-query/stored-query.data.ts","../../../../../libs/apps/drive/src/lib/components/folder-tree/folder-tree.component.ts","../../../../../libs/apps/drive/src/lib/components/folder-tree/folder-tree.component.html","../../../../../libs/apps/drive/src/lib/components/versions-list/tile/tile.component.ts","../../../../../libs/apps/drive/src/lib/components/versions-list/versions-list.component.ts","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.ts","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.html","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search.component.ts","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search.component.html","../../../../../libs/apps/drive/src/lib/actions/manage-versions/component/manage-versions.component.ts","../../../../../libs/apps/drive/src/lib/actions/manage-versions/component/manage-versions.component.html","../../../../../libs/apps/drive/src/lib/actions/manage-versions/manage-versions.action.ts","../../../../../libs/apps/drive/src/lib/container/drive/drive.component.ts","../../../../../libs/apps/drive/src/lib/container/drive/drive.component.html","../../../../../libs/apps/drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.ts","../../../../../libs/apps/drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.html","../../../../../libs/apps/drive/src/lib/components/ribbon/ribbon.component.ts","../../../../../libs/apps/drive/src/lib/components/ribbon/ribbon.component.html","../../../../../libs/apps/drive/src/lib/components/search-filter/search-filter.component.ts","../../../../../libs/apps/drive/src/lib/components/search-filter/search-filter.component.html","../../../../../libs/apps/drive/src/lib/services/stored-query/stored-query.service.ts","../../../../../libs/apps/drive/src/lib/pages/files/files.component.ts","../../../../../libs/apps/drive/src/lib/pages/files/files.component.html","../../../../../libs/apps/drive/src/lib/pages/object/object.component.ts","../../../../../libs/apps/drive/src/lib/pages/object/object.component.html","../../../../../libs/apps/drive/src/lib/services/resolver/files.resolver.ts","../../../../../libs/apps/drive/src/lib/services/resolver/versions.route.resolver.ts","../../../../../libs/apps/drive/src/lib/lib.routes.ts","../../../../../libs/apps/drive/src/yuuvis-app-drive.ts"],"sourcesContent":["export const APP_DRIVE_ICONS = {\n file: 'draft',\n folder: 'folder_open',\n folderx: 'folder',\n favorite: 'star',\n settings: 'settings',\n sort: 'swap_vert',\n home: 'home',\n toggleLeft: 'dock_to_right',\n toggleRight: 'dock_to_left',\n clipboard: 'inventory',\n add: 'add',\n createFolder: 'create_new_folder',\n createFile: 'note_add',\n unchecked: 'check_box_outline_blank',\n checked: 'check_box',\n extendedSearch: 'tune'\n};\n\n// export const APP_DRIVE_ICONS = {\n// file: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\"/></svg>',\n// folder:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h240l80 80h320q33 0 56.5 23.5T880-640H447l-80-80H160v480l96-320h684L837-217q-8 26-29.5 41.5T760-160H160Zm84-80h516l72-240H316l-72 240Zm0 0 72-240-72 240Zm-84-400v-80 80Z\"/></svg>',\n// folderx:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h240l80 80h320q33 0 56.5 23.5T880-640v400q0 33-23.5 56.5T800-160H160Zm0-80h640v-400H447l-80-80H160v480Zm0 0v-480 480Z\"/></svg>',\n// favorite:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143ZM233-120l65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Zm247-350Z\"/></svg>',\n// settings:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M447-288h64l14-56.31q14-4.69 26.5-11.19Q564-362 575-372l55 16 32-55-41-38.52q2-13.48 3-29.98t-2-29.5l40-38-32-55-54 15q-11-10-24-17t-27-12l-13-56h-65l-12 56q-14 5-27 12t-24 17l-54-16-32 56 41 38q-3 14-3 29.5t3 29.5l-41 39 32 56 55-17q11 9 23.5 16t26.5 12l12 56Zm32.79-120Q450-408 429-429.21t-21-51Q408-510 429.21-531t51-21Q510-552 531-530.79t21 51Q552-450 530.79-429t-51 21ZM216-144q-29.7 0-50.85-21.15Q144-186.3 144-216v-528q0-29.7 21.15-50.85Q186.3-816 216-816h528q29.7 0 50.85 21.15Q816-773.7 816-744v528q0 29.7-21.15 50.85Q773.7-144 744-144H216Zm0-72h528v-528H216v528Zm0-528v528-528Z\"/></svg>',\n// sort: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#5f6368\" viewBox=\"0 -960 960 960\"><path d=\"M320-440v-287L217-624l-57-56 200-200 200 200-57 56-103-103v287h-80ZM600-80 400-280l57-56 103 103v-287h80v287l103-103 57 56L600-80Z\"/></svg>',\n// home: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#e8eaed\" viewBox=\"0 -960 960 960\"><path d=\"M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z\"/></svg>',\n// toggleLeft:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M211-144q-27.64 0-47.32-19.68T144-211v-538q0-27.64 19.68-47.32T211-816h538q27.64 0 47.32 19.68T816-749v538q0 27.64-19.68 47.32T749-144H211Zm125-72v-528H216v528h120Zm72 0h336v-528H408v528Zm-72 0H216h120Z\"/></svg>',\n// toggleRight:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M211-144q-27.64 0-47.32-19.68T144-211v-538q0-27.64 19.68-47.32T211-816h538q27.64 0 47.32 19.68T816-749v538q0 27.64-19.68 47.32T749-144H211Zm413-72h120v-528H624v528Zm-72 0v-528H216v528h336Zm72 0h120-120Z\"/></svg>',\n//\n// clipboard:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M620-163 450-333l56-56 114 114 226-226 56 56-282 282Zm220-397h-80v-200h-80v120H280v-120h-80v560h240v80H200q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v200ZM480-760q17 0 28.5-11.5T520-800q0-17-11.5-28.5T480-840q-17 0-28.5 11.5T440-800q0 17 11.5 28.5T480-760Z\"/></svg>',\n// addCircle:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M444-288h72v-156h156v-72H516v-156h-72v156H288v72h156v156Zm36.28 192Q401-96 331-126t-122.5-82.5Q156-261 126-330.96t-30-149.5Q96-560 126-629.5q30-69.5 82.5-122T330.96-834q69.96-30 149.5-30t149.04 30q69.5 30 122 82.5T834-629.28q30 69.73 30 149Q864-401 834-331t-82.5 122.5Q699-156 629.28-126q-69.73 30-149 30Zm-.28-72q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Zm0-312Z\"/></svg>',\n// createFolder:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M576-324h72v-72h72v-72h-72v-72h-72v72h-72v72h72v72ZM168-192q-29 0-50.5-21.5T96-264v-432q0-29.7 21.5-50.85Q139-768 168-768h216l96 96h312q29.7 0 50.85 21.15Q864-629.7 864-600v336q0 29-21.15 50.5T792-192H168Zm0-72h624v-336H450l-96-96H168v432Zm0 0v-432 432Z\"/></svg>',\n// createFile:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M444-240h72v-108h108v-72H516v-108h-72v108H336v72h108v108ZM263.72-96Q234-96 213-117.15T192-168v-624q0-29.7 21.15-50.85Q234.3-864 264-864h312l192 192v504q0 29.7-21.16 50.85Q725.68-96 695.96-96H263.72ZM528-624v-168H264v624h432v-456H528ZM264-792v189-189 624-624Z\"/></svg>',\n//\n// unchecked:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Z\"/></svg>',\n// checked:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"m424-312 282-282-56-56-226 226-114-114-56 56 170 170ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\"/></svg>',\n// extendedSearch:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M440-120v-240h80v80h320v80H520v80h-80Zm-320-80v-80h240v80H120Zm160-160v-80H120v-80h160v-80h80v240h-80Zm160-80v-80h400v80H440Zm160-160v-240h80v80h160v80H680v80h-80Zm-480-80v-80h400v80H120Z\"/></svg>'\n// };\n","// Mapping schema for this apps backend schema\n\nimport { SystemType, VirtualObjectType } from '@yuuvis/client-core';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ActionContext } from '@yuuvis/client-framework/actions';\nimport { APP_DRIVE_ICONS } from './drive.icons';\n\n// use marker to extract the labels for the app schema types\n// make sure to provide a marker for each type/flavor ID\nmarker('io.yuuvis.app.drive.folder');\nmarker('io.yuuvis.app.drive.file');\n\nexport const FS_PROPERTIES = {\n name: 'appOsdrive:fileName'\n};\nexport const FS_SOTS = {\n object: 'appOsdrive:file'\n};\n\nexport const APP_PREFIX = 'appDrive:';\nexport const APP_ID = 'io.yuuvis.app.drive';\n\nexport const APP_TYPES: Record<string, VirtualObjectType> = {\n folder: {\n id: `${APP_ID}.folder`,\n icon: APP_DRIVE_ICONS.folder,\n objectType: SystemType.FOLDER,\n sots: [FS_SOTS.object]\n },\n file: {\n id: `${APP_ID}.file`,\n icon: APP_DRIVE_ICONS.file,\n objectType: SystemType.DOCUMENT,\n sots: [FS_SOTS.object]\n }\n};\n\nexport const APP_ACTIONS = {\n rename: 'app.drive.action.rename',\n paste: 'app.drive.action.paste',\n copyLink: 'app.drive.action.copy.link',\n contentUpdate: 'app.drive.action.content.update',\n manageVersions: 'app.drive.action.manage-versions'\n};\n\nexport const ACTION_CONTEXT: ActionContext = {\n subjectProperty: FS_PROPERTIES.name,\n appId: APP_ID\n};\n","import { InjectionToken } from '@angular/core';\n\nexport const DRIVE_APP_BREADCRUMB_MAX_DEPTH = new InjectionToken<number>('Max depth of the folder strukture in the Breadcrumb', { factory: () => 3 });\n","import { DmsObject, SearchQuery } from '@yuuvis/client-core';\nimport { Action } from '@yuuvis/client-framework/actions';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\n\nexport interface BreadCrumb {\n name: string;\n id: string;\n}\nexport interface DriveState {\n currentFolder: string | null;\n query: SearchQuery | null;\n queryTitle: string | null;\n extendedQuery: boolean;\n selection: DmsObject[];\n actions: Action[];\n busy: boolean;\n sort: {\n property: string;\n order: 'asc' | 'desc';\n } | null;\n breadcrumb: {\n loading: boolean;\n partial: boolean;\n items: BreadCrumb[];\n folder: { folderId: string | null; entry: BreadCrumb[]; loading: boolean } | null;\n };\n versions: {\n versionsList: TileData[];\n selectedVersion: DmsObject[] | null;\n };\n selectedDmsObject: DmsObject | null;\n}\n\nexport interface DriveValidatePayload {\n app: string;\n fileNames: string[];\n targetFolderId?: string;\n}\nexport interface DriveValidateResponse {\n errors: [{ message: string[] }];\n existingFileNames: string[];\n invalidFileNames: string[];\n valid: boolean;\n}\n\n// ID representing the root folder\nexport const DRIVE_ROOT_FOLDER_ID = 'root';\n// ID representing a custom view like 'recently edited documents'\nexport const DRIVE_QUERY_FOLDER_ID = 'query';\n\nexport type DriveFolderId = typeof DRIVE_ROOT_FOLDER_ID | typeof DRIVE_QUERY_FOLDER_ID;\n\nexport enum DRIVE_EVENT {\n refresh = 'refresh'\n}\n\nexport enum DRIVE_ACTION_MODE {\n CUT = 'cut',\n COPY = 'copy'\n}\n\nexport interface CreateResult {\n id?: string;\n error?: CreateError;\n}\nexport type CreateError = 'default' | 'nameExists';\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ClipboardService, DmsObject, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { tap } from 'rxjs';\nimport { FS_PROPERTIES } from '../../../drive.schema';\nimport { DRIVE_EVENT } from '../drive.interface';\nimport { DriveService } from '../drive.service';\nimport { ResolveNameConflictsPayload } from './resolve-name-conflicts.interface';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n/**\n * Component to resolve name conflicts. Based on its mode, it\n * will handle files or objects that are about to be uploaded,\n * copied or moved.\n */\n@Component({\n selector: 'ymd-resolve-name-conflicts',\n standalone: true,\n imports: [CommonModule, TranslateModule, DialogComponent, YmtButtonDirective],\n templateUrl: './resolve-name-conflicts.component.html',\n styleUrl: './resolve-name-conflicts.component.scss'\n})\nexport class ResolveNameConflictsComponent implements OnInit {\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<ResolveNameConflictsComponent>);\n #drive = inject(DriveService);\n #clipboard = inject(ClipboardService);\n translate = inject(TranslateService);\n\n payload: ResolveNameConflictsPayload = this.#dialogData;\n validItems: { name: string; item: DmsObject | File }[] = [];\n existingFileNames: string[] = this.payload?.existingFileNames || [];\n invalidFileNames: string[] = this.payload?.invalidFileNames || [];\n\n content = {\n headline: '',\n message: '',\n messageValid: '',\n proceed: ''\n };\n\n proceed() {\n if (!this.payload) return;\n\n switch (this.payload.mode) {\n case 'upload': {\n this.#upload(this.validItems.map((i) => i.item) as File[]);\n break;\n }\n case 'copy': {\n this.#copy(this.validItems.map((i) => i.item) as DmsObject[]);\n break;\n }\n case 'move': {\n this.#move(this.validItems.map((i) => i.item) as DmsObject[]);\n break;\n }\n }\n }\n\n #upload(files: File[]) {\n this.#drive.upload(files, this.payload?.data).subscribe();\n // upload errors and progress are handled by the upload progress component\n this.#dialogRef.close();\n }\n\n #copy(objects: DmsObject[]) {\n this.#drive.setBusy(true);\n this.#dialogRef.close();\n this.#drive\n .copyToCurrentFolder(objects, false)\n .pipe(\n tap((res) => {\n res && this.#drive.emitEvent(DRIVE_EVENT.refresh);\n this.#clipboard.clear();\n })\n )\n .subscribe({\n complete: () => {\n this.#drive.setBusy(false);\n }\n });\n }\n\n #move(objects: DmsObject[]) {\n this.#drive.setBusy(true);\n this.#dialogRef.close();\n this.#drive\n .moveToCurrentFolder(objects)\n .pipe(\n tap((res) => {\n res && this.#drive.emitEvent(DRIVE_EVENT.refresh);\n this.#clipboard.clear();\n })\n )\n .subscribe({\n complete: () => {\n this.#drive.setBusy(false);\n }\n });\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n\n #setupValidItems() {\n if (!this.payload) return;\n if (this.payload?.mode === 'upload') {\n this.validItems = (this.payload.items as File[])\n .filter((f) => !this.existingFileNames.includes(f.name))\n .map((item) => ({\n name: item.name,\n item\n }));\n } else {\n this.validItems = (this.payload.items as DmsObject[])\n .filter((o) => !this.existingFileNames.includes(o.data[FS_PROPERTIES.name] as string))\n .map((item) => ({\n name: item.data[FS_PROPERTIES.name] as string,\n item\n }));\n }\n }\n\n #setupContent() {\n if (!this.payload) return;\n\n switch (this.payload.mode) {\n case 'upload': {\n this.content = {\n headline: this.translate.instant('yuv.app.drive.name.conflict.upload.headline'),\n message: this.translate.instant('yuv.app.drive.name.conflict.upload.message'),\n messageValid: this.translate.instant('yuv.app.drive.name.conflict.upload.messageValid'),\n proceed: this.translate.instant('yuv.app.drive.name.conflict.upload.proceed')\n };\n break;\n }\n case 'copy': {\n this.content = {\n headline: this.translate.instant('yuv.app.drive.name.conflict.copy.headline'),\n message: this.translate.instant('yuv.app.drive.name.conflict.copy.message'),\n messageValid: this.translate.instant('yuv.app.drive.name.conflict.copy.messageValid'),\n proceed: this.translate.instant('yuv.app.drive.name.conflict.copy.proceed')\n };\n break;\n }\n case 'move': {\n this.content = {\n headline: this.translate.instant('yuv.app.drive.name.conflict.move.headline'),\n message: this.translate.instant('yuv.app.drive.name.conflict.move.message'),\n messageValid: this.translate.instant('yuv.app.drive.name.conflict.move.messageValid'),\n proceed: this.translate.instant('yuv.app.drive.name.conflict.move.proceed')\n };\n break;\n }\n }\n }\n\n ngOnInit(): void {\n this.#setupValidItems();\n this.#setupContent();\n }\n}\n","<yuv-dialog [headertitel]=\"content.headline\">\n <main>\n <p>{{ content.message }}</p>\n\n <ul>\n @for (ef of existingFileNames; track $index) {\n <li>{{ ef }}</li>\n }\n </ul>\n\n @if (validItems.length) {\n <p>{{ content.messageValid }}</p>\n <ul>\n @for (f of validItems; track $index) {\n <li>{{ f.name }}</li>\n }\n </ul>\n }\n </main>\n <footer>\n @if (validItems.length) {\n <button ymtButton=\"primary\" (click)=\"proceed()\">{{ content.proceed }}</button>\n }\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.app.drive.name.conflict.cancel' | translate }}</button>\n </footer>\n</yuv-dialog>\n","import { BaseObjectTypeField, DmsObject, ResolvedObjectConfigItem } from '@yuuvis/client-core';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\nimport { FS_PROPERTIES } from '../../../drive.schema';\n\nconst getResolvedObjectConfigItem = (propertyName: string, instanceData: Record<string, unknown>): ResolvedObjectConfigItem => {\n const item: ResolvedObjectConfigItem = {\n propertyName: propertyName,\n value: instanceData[propertyName]\n };\n // Meta data are considered properties that start with the property name followed by an underscore.\n // Organization fields for example have an additional property 'xyz_title' that contains the resolved\n // name of a user while the value itself is the users ID.\n const metaData = Object.keys(instanceData)\n .filter((key) => key.startsWith(propertyName + '_'))\n .map((key) => ({ [key.substring(key.indexOf('_') + 1)]: instanceData[key] }));\n\n // If there are meta data properties, they'll be merged into a Record where the\n // key is the property name without the underscore and the actual properties name.\n // So { 'xyz_title': 'John Doe' } will be merged into { title: 'John Doe' }\n if (metaData.length) {\n const meta = metaData.reduce((acc, cur) => ({ ...acc, ...cur }), {});\n item.meta = meta;\n }\n\n return item;\n};\n\nconst mapToTileData = (objects: DmsObject[]): TileData[] => {\n return objects.map((dmsObject) => {\n const sots = dmsObject.sots || [];\n\n const tli: TileData = {\n objectTypeId: dmsObject.objectTypeId,\n id: dmsObject.id,\n actions: undefined,\n badges: undefined,\n instanceData: dmsObject.data,\n dmsObject,\n title: { rendererType: 'text', propertyName: BaseObjectTypeField.PARENT_OBJECT_TYPE_ID, value: dmsObject.data[FS_PROPERTIES.name] }\n };\n\n tli.icon = { rendererType: 'icon', propertyName: BaseObjectTypeField.OBJECT_TYPE_ID, value: BaseObjectTypeField.OBJECT_TYPE_ID };\n\n return tli;\n });\n};\n\nexport const mapSearchResult = (res: any): TileData[] => {\n return mapToTileData(res);\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NavigationStart, Router } from '@angular/router';\nimport { patchState, signalState } from '@ngrx/signals';\nimport {\n BackendService,\n BaseObjectTypeField,\n ClipboardService,\n ContentStreamField,\n DmsObject,\n DmsService,\n EventService,\n SearchQuery,\n SearchService,\n SystemType,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { Action, ActionsService, BASE_ACTION } from '@yuuvis/client-framework/actions';\nimport { Observable, Subject, catchError, filter, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { ACTION_CONTEXT, APP_ID, APP_TYPES, FS_PROPERTIES, FS_SOTS } from '../../drive.schema';\nimport { DRIVE_APP_BREADCRUMB_MAX_DEPTH } from '../tokens';\nimport {\n BreadCrumb,\n CreateError,\n CreateResult,\n DRIVE_ACTION_MODE,\n DRIVE_EVENT,\n DRIVE_ROOT_FOLDER_ID,\n DriveState,\n DriveValidatePayload,\n DriveValidateResponse\n} from './drive.interface';\nimport { ResolveNameConflictsComponent } from './resolve-name-conflicts/resolve-name-conflicts.component';\nimport { ResolveNameConflictsPayload } from './resolve-name-conflicts/resolve-name-conflicts.interface';\nimport { mapSearchResult } from './versions/versions.mapping';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriveService {\n readonly #actionsService = inject(ActionsService);\n readonly #eventService = inject(EventService);\n readonly #router = inject(Router);\n readonly #dmsService = inject(DmsService);\n readonly #searchService = inject(SearchService);\n readonly #dialog = inject(MatDialog);\n readonly #backend = inject(BackendService);\n readonly #clipboardService = inject(ClipboardService);\n\n private readonly MAX_DEPTH: number = inject(DRIVE_APP_BREADCRUMB_MAX_DEPTH);\n private breadcrumbCache = new Map<string, { name: string; id: string; parentId: string | null }>();\n\n #eventSource = new Subject<string>();\n readonly events$: Observable<string> = this.#eventSource.asObservable();\n\n readonly #defaultSort: {\n property: string;\n order: 'asc' | 'desc';\n } = {\n property: FS_PROPERTIES.name,\n order: 'asc'\n };\n\n readonly initialState: DriveState = {\n currentFolder: null,\n query: null,\n queryTitle: null,\n extendedQuery: false,\n selection: [],\n actions: [],\n busy: false,\n sort: this.#defaultSort,\n breadcrumb: {\n loading: false,\n partial: false,\n items: [],\n folder: null\n },\n versions: {\n versionsList: [],\n selectedVersion: null\n },\n selectedDmsObject: null\n };\n\n readonly state$ = signalState<DriveState>(this.initialState);\n readonly breadcrumbFolderPreview = this.state$.breadcrumb.folder;\n private _busyTaskCount = 0;\n private _defaultRibbonActions: Action[] = [];\n lastRouteURL?: string;\n\n constructor() {\n this.#router.events\n .pipe(\n takeUntilDestroyed(),\n filter((e) => this.state$.selection().length > 0 && e instanceof NavigationStart)\n )\n // clear selection on route chnages\n .subscribe({ next: () => this.setSelection([]) });\n\n this.#eventService.on(YuvEventType.DMS_OBJECT_UPDATED).subscribe((e: YuvEvent) => {\n // check if current selection contains the updated object\n const dmsObject = e.data as DmsObject;\n const selection = this.state$.selection();\n const matchIdx = selection.findIndex((o) => o.id === dmsObject.id);\n if (matchIdx !== -1) {\n // update the object in the selection\n selection[matchIdx] = dmsObject;\n patchState(this.state$, { selection: [...selection] });\n }\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_DELETED, YuvEventType.DMS_OBJECT_CREATED, YuvEventType.DMS_OBJECTS_MOVED)\n .subscribe(() => this.emitEvent(DRIVE_EVENT.refresh));\n }\n\n #mapedCurrentFolder() {\n return this.state$.currentFolder() === DRIVE_ROOT_FOLDER_ID ? null : this.state$.currentFolder();\n }\n\n emitEvent(evt: string) {\n this.#eventSource.next(evt);\n }\n\n setBusy(busy: boolean) {\n if (busy) this._busyTaskCount++;\n else if (this._busyTaskCount > 0) this._busyTaskCount--;\n patchState(this.state$, { busy: this._busyTaskCount !== 0 });\n }\n\n setSelection(o: DmsObject[]) {\n patchState(this.state$, { selection: o });\n this._getActions();\n }\n\n updateQuery(query: SearchQuery, queryTitle: string | null = null, extendedQuery = false) {\n patchState(this.state$, {\n query: this.applyFolderListSearchConditions(query),\n queryTitle: queryTitle,\n extendedQuery: extendedQuery\n });\n }\n\n setSort(property: string, order: 'asc' | 'desc') {\n const stateQuery = this.state$.query();\n if (stateQuery) {\n const clonedQueryState = structuredClone(stateQuery);\n\n // TODO: remove if folders should stay on top\n clonedQueryState.sort = [];\n\n const sort = property ? { property, order } : { ...this.#defaultSort, order };\n\n patchState(this.state$, { query: clonedQueryState, sort });\n this.applyFolderListSearchConditions(clonedQueryState, !property);\n }\n }\n\n updateCurrentFolder(currentFolderID: string | null | undefined) {\n patchState(this.state$, {\n currentFolder: currentFolderID || null,\n extendedQuery: false\n });\n }\n\n #copyToFolder(objects: DmsObject[], folderId: string | null, options: { waitForSearchConsistency: boolean }, validateNames = true): Observable<any> {\n return validateNames\n ? this.validateNames(\n objects.filter((o) => o.sots.includes(FS_SOTS.object)).map((f) => f.data[FS_PROPERTIES.name] as string),\n folderId\n ).pipe(\n switchMap((res: DriveValidateResponse) => {\n if (res.existingFileNames?.length || res.invalidFileNames?.length) {\n this.#resolveNameConflicts({\n existingFileNames: res.existingFileNames,\n invalidFileNames: res.invalidFileNames,\n mode: 'copy',\n items: objects\n });\n return of([]);\n } else return this.#dmsService.copyDmsObjects(folderId, objects, options);\n })\n )\n : this.#dmsService.copyDmsObjects(folderId, objects, options);\n }\n\n #moveToFolder(objects: DmsObject[], folderId: string | null, options: { waitForSearchConsistency: boolean }, validateNames = true): Observable<any> {\n return validateNames\n ? this.validateNames(\n objects.filter((o) => o.sots.includes(FS_SOTS.object)).map((f) => f.data[FS_PROPERTIES.name] as string),\n folderId\n ).pipe(\n switchMap((res: DriveValidateResponse) => {\n if (res.existingFileNames?.length || res.invalidFileNames?.length) {\n //console.log('VALIDATION: ', { res });\n this.#resolveNameConflicts({\n existingFileNames: res.existingFileNames,\n invalidFileNames: res.invalidFileNames,\n mode: 'move',\n items: objects\n });\n return of([]);\n } else return this.#dmsService.moveDmsObjects(folderId, objects, options);\n })\n )\n : this.#dmsService.moveDmsObjects(folderId, objects, options);\n }\n\n copyToCurrentFolder(objects: DmsObject[], validateNames = true): Observable<any> {\n const options = { waitForSearchConsistency: true };\n return this.#copyToFolder(objects, this.#mapedCurrentFolder(), options, validateNames);\n }\n\n moveToCurrentFolder(objects: DmsObject[], validateNames = true): Observable<any> {\n const options = { waitForSearchConsistency: true };\n return this.#moveToFolder(objects, this.#mapedCurrentFolder(), options, validateNames);\n }\n\n #resolveNameConflicts(payload: ResolveNameConflictsPayload) {\n this.#dialog.open(ResolveNameConflictsComponent, {\n data: payload,\n maxWidth: '400px'\n });\n }\n\n pasteFromClipboard(destinationObject?: DmsObject): Observable<any> {\n const cd = this.#clipboardService.getClipboardData(APP_ID);\n const destination = destinationObject?.isFolder ? destinationObject.id : this.#mapedCurrentFolder();\n return (\n cd && cd.objects && cd.objects.length > 0\n ? cd?.mode === DRIVE_ACTION_MODE.CUT\n ? this.#moveToFolder(cd.objects || [], destination, { waitForSearchConsistency: true }, true)\n : cd?.mode === DRIVE_ACTION_MODE.COPY\n ? this.#copyToFolder(cd.objects || [], destination, { waitForSearchConsistency: true }, true)\n : of(null)\n : of(null)\n ).pipe(\n tap((res) => {\n res && this.emitEvent(DRIVE_EVENT.refresh);\n this.#clipboardService.clear();\n })\n );\n }\n\n checkNamesAndUpload(files: File[], data?: Record<string, unknown>): Observable<CreateResult[]> {\n return this.validateNames(\n files.map((f) => f.name),\n this.#mapedCurrentFolder()\n ).pipe(\n switchMap((res: DriveValidateResponse) => {\n if (res.existingFileNames?.length || res.invalidFileNames?.length) {\n const resPayload: ResolveNameConflictsPayload = {\n existingFileNames: res.existingFileNames,\n invalidFileNames: res.invalidFileNames,\n mode: 'upload',\n items: files,\n data\n };\n this.#dialog.open(ResolveNameConflictsComponent, { data: resPayload });\n return of([]);\n } else return this.upload(files, data);\n })\n );\n }\n\n uploadContent(objectId: string, file: File): Observable<CreateResult[]> {\n return this.#dmsService.uploadContent(objectId, file);\n }\n\n /**\n * Uploads files to the current folder\n * @param files files to be uploaded\n * @param data additional data to be applied to the object\n */\n upload(files: File[], data?: Record<string, unknown>): Observable<CreateResult[]> {\n return forkJoin(\n files.map((file: File) => {\n const uploadData: Record<string, any> = data || {};\n // apply filesystem SOT\n const sots = uploadData[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] || [];\n uploadData[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] = [...sots, FS_SOTS.object];\n // setup the name to be the filename\n uploadData[FS_PROPERTIES.name] = file.name;\n const cf = this.#mapedCurrentFolder();\n if (cf && cf !== DRIVE_ROOT_FOLDER_ID) uploadData[BaseObjectTypeField.PARENT_ID] = cf;\n return this.#dmsService.createDmsObject(SystemType.DOCUMENT, uploadData, [file], file.name).pipe(\n map((res) => ({ id: res[0] })),\n catchError((e: HttpErrorResponse) => of({ error: this.#mapCreateError(e) }))\n );\n })\n );\n }\n\n createFolder(name: string): Observable<CreateResult> {\n const parentID = this.#mapedCurrentFolder();\n const data: Record<string, any> = {};\n data[FS_PROPERTIES.name] = name;\n // apply filesystem SOT\n data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] = [FS_SOTS.object];\n if (parentID && parentID !== DRIVE_ROOT_FOLDER_ID) data[BaseObjectTypeField.PARENT_ID] = parentID;\n return this.#dmsService.createDmsObject(APP_TYPES['folder'].objectType || '', data, []).pipe(\n map((res) => ({ id: res[0] })),\n catchError((e: HttpErrorResponse) => of({ error: this.#mapCreateError(e) }))\n );\n }\n\n #mapCreateError(e: HttpErrorResponse): CreateError {\n let error: CreateError = 'default';\n const ec = e.error.serviceErrorCode;\n if (ec === 99999) {\n const iec = e.error.innerError?.serviceErrorCode;\n if (iec === 11000) error = 'nameExists';\n }\n return error;\n }\n\n /**\n * Checks for existing names and invalid characters\n * @param name The name to be checked\n * @param parentId The parent folder (will be 'root' if not provided)\n * @returns already existing names\n */\n validateNames(names: string[], parentId?: string | null): Observable<DriveValidateResponse> {\n //console.log({ names, parentId });\n\n if (parentId === DRIVE_ROOT_FOLDER_ID) parentId = undefined;\n const dvp: DriveValidatePayload = {\n app: 'osdrive',\n fileNames: names,\n targetFolderId: parentId || undefined\n };\n return this.#backend.post('/dms/objects/validate', dvp).pipe(catchError((res: HttpErrorResponse) => of(res.error)));\n }\n\n getDefaultRibbonActions() {\n if (!this._defaultRibbonActions.length) {\n //[BASE_ACTION.download, BASE_ACTION.delete, 'app.drive.action.rename', BASE_ACTION.copy, BASE_ACTION.cut]\n Object.values({ ...BASE_ACTION, rename: 'app.drive.action.rename' }).forEach((id) => {\n const a = this.#actionsService.getActionById(id, ACTION_CONTEXT);\n if (a) this._defaultRibbonActions.push(a);\n });\n }\n return this._defaultRibbonActions;\n }\n\n private _getActions() {\n this.setBusy(true);\n this.#actionsService\n .getActions(this.state$.selection(), {\n context: ACTION_CONTEXT\n })\n .subscribe((actions: Action[]) => {\n patchState(this.state$, { actions });\n })\n .add(() => this.setBusy(false));\n }\n\n /**\n * Apply search conditions regarding folder listings\n * @param q\n */\n applyFolderListSearchConditions(q: SearchQuery, addBaseTypeId = true): SearchQuery {\n // folders first\n if (!q.sort) q.sort = [];\n addBaseTypeId &&\n q.sort.push({\n field: BaseObjectTypeField.BASE_TYPE_ID,\n order: 'desc'\n });\n q = this.applyBasicSearchConditions(q);\n\n return q;\n }\n\n applyBasicSearchConditions(q: SearchQuery): SearchQuery {\n q.fields = [\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.MODIFICATION_DATE,\n BaseObjectTypeField.MODIFIED_BY,\n ContentStreamField.FILENAME,\n ContentStreamField.MIME_TYPE,\n ContentStreamField.ID,\n ContentStreamField.LENGTH\n ];\n if (!q.types || !q.types.includes(FS_SOTS.object)) q.types = [...(q.types || []), FS_SOTS.object];\n // q.sortOptions.push(new SortOption(BaseObjectTypeField.BASE_TYPE_ID, 'desc'));\n const sort = this.state$.sort() || this.#defaultSort;\n if (!q.sort) q.sort = [];\n q.sort.push({\n field: sort.property,\n order: sort.order\n });\n q.includePermissions = true;\n // new SortOption(sort.property, sort.order));\n return q;\n }\n\n resolveFilesState(id: string) {\n return this.getFolderHierarchy(id);\n }\n\n getFolderHierarchy(folderId: string): Observable<BreadCrumb[]> {\n patchState(this.state$, {\n breadcrumb: {\n ...this.initialState.breadcrumb,\n loading: true\n }\n });\n\n return folderId === DRIVE_ROOT_FOLDER_ID\n ? of([])\n : this.#fetchFolder(folderId, 0, this.MAX_DEPTH).pipe(\n tap((res: { partial: boolean; items: BreadCrumb[] }) => {\n let items: BreadCrumb[] = [];\n if (res.items.length > 0) {\n items = [...items, ...res.items];\n }\n\n patchState(this.state$, {\n breadcrumb: {\n ...this.initialState.breadcrumb,\n partial: res.partial,\n loading: false,\n items\n }\n });\n }),\n map((res) => res.items)\n );\n }\n\n #fetchFolder(\n folderId: string,\n depth: number,\n maxDepth: number\n ): Observable<{\n partial: boolean;\n items: BreadCrumb[];\n }> {\n if (depth >= maxDepth) return of({ partial: true, items: [] });\n const cachedFolder = this.breadcrumbCache.get(folderId);\n if (cachedFolder) {\n return cachedFolder.parentId\n ? this.#fetchFolder(cachedFolder.parentId, depth + 1, maxDepth).pipe(\n map((parentFolders) => ({\n partial: parentFolders.partial,\n items: [...parentFolders.items, { name: cachedFolder.name, id: cachedFolder.id }]\n }))\n )\n : of({\n partial: false,\n items: [{ name: cachedFolder.name, id: cachedFolder.id }]\n });\n }\n return this.#dmsService.getDmsObject(folderId).pipe(\n map((folder) => {\n const currentFolder = {\n name: folder.data[FS_PROPERTIES.name] as string,\n id: folder.data[BaseObjectTypeField.OBJECT_ID] as string,\n parentId: folder.parentId\n };\n // this.breadcrumbCache.set(folder.id, currentFolder);\n return currentFolder;\n }),\n switchMap((folder) => {\n if (!folder.parentId) {\n return of({\n partial: false,\n items: [{ name: folder.name, id: folder.id }]\n });\n }\n\n return this.#fetchFolder(folder.parentId, depth + 1, maxDepth).pipe(\n map((parentFolders) => ({\n partial: parentFolders.partial,\n items: [...parentFolders.items, { name: folder.name, id: folder.id }]\n }))\n );\n })\n );\n }\n\n getVersions(id: string): Observable<DmsObject[]> {\n patchState(this.state$, { busy: true });\n return this.#dmsService.getDmsObjectVersions(id).pipe(\n tap((versions) => {\n patchState(this.state$, {\n busy: false,\n versions: {\n versionsList: mapSearchResult(versions),\n selectedVersion: this.state$.versions().selectedVersion\n }\n });\n })\n );\n }\n\n getSelectedDmsObject(id: string): Observable<DmsObject> {\n return this.#dmsService.getDmsObject(id).pipe(\n tap((dmsObject) =>\n patchState(this.state$, {\n selectedDmsObject: dmsObject,\n versions: {\n versionsList: this.state$.versions.versionsList(),\n selectedVersion: [dmsObject]\n }\n })\n )\n );\n }\n\n setSelectedVersion(version: any) {\n this.setBusy(true);\n return this.#dmsService.getDmsObjectVersion(version.dmsObject.id, version.dmsObject.version).pipe(\n tap((res) =>\n patchState(this.state$, {\n versions: {\n versionsList: this.state$.versions.versionsList(),\n selectedVersion: [res]\n }\n })\n ),\n tap(() => this.setBusy(false))\n );\n }\n\n setNewVersion(version?: number): Observable<DmsObject[] | null> {\n patchState(this.state$, { busy: true });\n const selectedVersion = this.state$.versions.selectedVersion();\n if (selectedVersion) {\n const versionNumber: number = version ?? selectedVersion[0].version;\n return this.#dmsService.restoreDmsObject(selectedVersion[0].id, versionNumber).pipe(switchMap((object: DmsObject) => this.getVersions(object.id)));\n }\n return of(null);\n }\n\n clearVersions() {\n patchState(this.state$, { versions: this.initialState.versions });\n }\n}\n","import { Provider } from '@angular/core';\nimport { DRIVE_APP_BREADCRUMB_MAX_DEPTH } from '../tokens';\n\n/**\n *\n * @param breadkrumbMaxDepth default 3\n * @returns\n */\nexport const provideDrive = (breadkrumbMaxDepth = 3): Provider => {\n return { provide: DRIVE_APP_BREADCRUMB_MAX_DEPTH, useValue: breadkrumbMaxDepth };\n};\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { finalize, Observable, of } from 'rxjs';\nimport { DriveService } from '../../services';\nimport { ActivatedRoute } from '@angular/router';\nimport { APP_ID } from '../../drive.schema';\n\nexport class PasteAction extends AbstractContextAction implements Action {\n readonly translate = inject(TranslateService);\n readonly #clipboardService = inject(ClipboardService);\n readonly #drive = inject(DriveService);\n readonly #route = inject(ActivatedRoute);\n\n id = 'app.drive.action.paste';\n label = this.translate.instant('yuv.app.drive.action.paste.label');\n description = this.translate.instant('yuv.app.drive.action.paste.description');\n priority = 2;\n icon = 'content_paste';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(items: DmsObject[]) {\n const canWrite = !!items[0]?.permissions?.writeIndexData;\n const cd = this.#clipboardService.getClipboardData(APP_ID);\n return of(canWrite && !!cd?.objects && cd.objects.length > 0);\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#drive.setBusy(true);\n this.#drive\n .pasteFromClipboard(items[0])\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n return of(true);\n }\n}\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';\nimport { Observable, of, timer } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { DriveValidateResponse } from '../../services/drive/drive.interface';\n\nexport class RenameValidator {\n static createValidator(driveService: DriveService): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n return timer(500).pipe(\n switchMap(() => {\n return control.value['name'] !== control.value['_initialName']\n ? driveService.validateNames([control.value['name']], driveService.state$.currentFolder()).pipe(\n map((result: DriveValidateResponse) => {\n let res: any = null;\n if (result.existingFileNames.length) {\n res = { nameAlreadyExists: true };\n } else if (result.invalidFileNames?.length) {\n res = { invalidFileNames: true };\n }\n return res;\n })\n )\n : of(null);\n })\n );\n };\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { RenameValidator } from '../../actions/rename/rename.validator';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { DriveService } from '../../services';\n\n@Component({\n selector: 'ymd-object-name',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, StringComponent, TranslateModule],\n templateUrl: './object-name.component.html',\n styleUrl: './object-name.component.scss'\n})\nexport class ObjectNameComponent {\n #fb = inject(FormBuilder);\n #drive = inject(DriveService);\n\n item = input<any>();\n disabled = input<boolean>(false);\n\n #disabledEffect = effect(() => {\n const d = this.disabled();\n d ? this.nameForm.get('name')?.disable() : this.nameForm.get('name')?.enable();\n });\n\n #itemFormEffect = effect(() => this.item() && this.#setupForm(this.item()?.data));\n\n nameForm: FormGroup = this.#fb.group(\n {\n _initialName: [''],\n name: ['', Validators.required]\n },\n {\n asyncValidators: [RenameValidator.createValidator(this.#drive)]\n }\n );\n\n #setupForm(data?: any) {\n this.nameForm.patchValue(\n {\n _initialName: data ? data[FS_PROPERTIES.name] || '' : '',\n name: data ? data[FS_PROPERTIES.name] || '' : ''\n },\n {\n emitEvent: false\n }\n );\n }\n}\n","<div [formGroup]=\"nameForm\">\n <mat-form-field>\n <mat-label>{{ 'yuv.app.drive.property.name' | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n\n @if (nameForm.hasError('nameAlreadyExists')) {\n <mat-error class=\"error\">{{ 'yuv.app.drive.create.error.name.exist' | translate }}</mat-error>\n }\n @if (nameForm.hasError('invalidFileNames')) {\n <mat-error class=\"error\">{{ 'yuv.app.drive.create.error.name.invalid' | translate }}</mat-error>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, inject, linkedSignal, signal, viewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError } from '@angular/material/form-field';\nimport { DmsObject, DmsService, TranslateModule } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { ObjectNameComponent } from '../../components/object-name/object-name.component';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { DRIVE_EVENT } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\nconst MATERIAL = [MatError, MatProgressBar];\n\n@Component({\n selector: 'ymd-rename',\n standalone: true,\n imports: [CommonModule, ObjectNameComponent, ReactiveFormsModule, TranslateModule, DialogComponent, ...MATERIAL, YmtButtonDirective],\n templateUrl: './rename.component.html',\n styleUrl: './rename.component.scss',\n host: {\n '[class.busy]': 'busy()'\n }\n})\nexport class RenameComponent implements AfterViewInit {\n readonly #drive = inject(DriveService);\n readonly #dmsService = inject(DmsService);\n #dialogData = inject<DmsObject>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<RenameComponent>);\n\n formComp = viewChild.required(ObjectNameComponent);\n changedValue = signal<string | undefined>(undefined);\n disabledSubmit = linkedSignal({\n source: this.changedValue,\n computation: () => {\n const name = this.formComp().nameForm.value.name;\n\n //console.log('disabledSubmit', name, this.busy(), this.disabled(), this.formComp().nameForm.invalid);\n\n return !name || this.busy() || this.disabled() || this.formComp().nameForm.invalid;\n }\n });\n\n item = signal<any>(this.#dialogData);\n busy = signal<boolean>(false);\n error = signal<string | null>(null);\n\n disabled = signal(false);\n\n ngAfterViewInit() {\n this.formComp().nameForm.valueChanges.subscribe((value) => {\n this.changedValue.set(value.name);\n });\n }\n\n rename() {\n this.busy.set(true);\n const data: Record<string, any> = {};\n data[FS_PROPERTIES.name] = this.formComp().nameForm.value.name;\n\n this.#dmsService.updateDmsObject(this.item().id, data).subscribe({\n next: () => {\n this.close();\n this.#drive.emitEvent(DRIVE_EVENT.refresh);\n },\n error: (err) => {\n this.busy.set(false);\n this.error.set(err.message);\n },\n complete: () => this.busy.set(false)\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.app.drive.action.rename.headline' | translate\">\n <main>\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n <form [formGroup]=\"formComp().nameForm\" (ngSubmit)=\"rename()\">\n <ymd-object-name [item]=\"item()\"></ymd-object-name>\n\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.app.drive.action.rename.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"rename()\" [disabled]=\"disabledSubmit()\">\n {{ 'yuv.app.drive.action.rename.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { RenameComponent } from './rename.component';\n\nexport class RenameAction implements Action {\n private translate = inject(TranslateService);\n #dialog = inject(MatDialog);\n\n id = 'app.drive.action.rename';\n label = this.translate.instant('yuv.app.drive.action.rename.label');\n description = this.translate.instant('yuv.app.drive.action.rename.description');\n priority = 2;\n icon = 'ink_marker';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]) {\n return of(selection?.length === 1 && !!selection[0].permissions?.writeIndexData);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n this.#dialog.open(RenameComponent, {\n width: '400px',\n maxWidth: '90vw',\n data: selection[0]\n });\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject, NotificationService, Utils } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { catchError, from, map, Observable, of } from 'rxjs';\nimport { APP_ID } from '../../drive.schema';\n\nexport class CopyLinkAction extends AbstractContextAction implements Action {\n translate = inject(TranslateService);\n #notification = inject(NotificationService);\n #shell = inject(ShellService);\n\n id = 'app.drive.action.copy-link';\n label = this.translate.instant('yuv.app.drive.action.copy-link');\n description = this.translate.instant('yuv.app.drive.action.copy-link.description');\n priority = 2;\n icon = 'prescriptions';\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n return from(navigator.permissions.query({ name: 'clipboard-write' } as any)).pipe(\n catchError(() => of({ state: 'denied' })),\n map((result) => (result.state === 'granted' || result.state === 'prompt') && selection.length === 1)\n );\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n const o = selection[0];\n const uri = `${window.location.origin}${Utils.getBaseHref(true)}/${this.#shell.appBaseRoutes[APP_ID]}/${o.isFolder ? 'files' : 'object'}/${selection[0].id}`;\n\n navigator.clipboard\n .writeText(uri)\n .then(() => this.#notification.success(this.translate.instant('yuv.app.drive.action.copy-link.success')))\n .catch(() => {\n //\n });\n\n return of(true);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject, RetentionService } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { finalize, Observable, of } from 'rxjs';\nimport { DriveService } from '../../services';\n\nexport class UpdateContentAction extends AbstractContextAction implements Action {\n readonly translate = inject(TranslateService);\n readonly #router = inject(Router);\n readonly #drive = inject(DriveService);\n readonly #document = inject(DOCUMENT);\n readonly #retention = inject(RetentionService);\n\n id = 'app.drive.action.new.content.version';\n label = this.translate.instant('yuv.app.drive.action.new.version');\n description = this.translate.instant('yuv.app.drive.action.new.version.description');\n priority = 2;\n icon = 'upload_file';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const selected = selection[0];\n const canWrite = !!selected?.permissions?.writeContent;\n return of(canWrite && selection.length === 1 && !selected.isFolder && !this.#retention.getRetentionState(selected).underRetention);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n if (!selection[0].isFolder) {\n const fileInput = this.#document.createElement('input');\n fileInput.type = 'file';\n fileInput.multiple = false;\n\n fileInput.onchange = (e) => {\n this.#drive.setBusy(true);\n const file = (e.target as HTMLInputElement).files?.[0];\n file &&\n this.#drive\n .uploadContent(selection[0].id, file)\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n };\n fileInput.click();\n fileInput.remove();\n }\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, inject, linkedSignal, signal, viewChild } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { CreateResult } from '../../../services/drive/drive.interface';\nimport { DriveService } from '../../../services/drive/drive.service';\nimport { ObjectNameComponent } from '../../object-name/object-name.component';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatError } from '@angular/material/form-field';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymd-create-folder',\n standalone: true,\n imports: [CommonModule, ObjectNameComponent, DialogComponent, ReactiveFormsModule, TranslateModule, MatError, MatProgressBar, YmtButtonDirective],\n templateUrl: './create-folder.component.html',\n styleUrl: './create-folder.component.scss',\n host: {\n '[class.busy]': 'busy()'\n }\n})\nexport class CreateFolderComponent implements AfterViewInit {\n private drive = inject(DriveService);\n private translate = inject(TranslateService);\n readonly #dialogRef = inject(MatDialogRef<CreateFolderComponent>);\n\n formComp = viewChild.required(ObjectNameComponent);\n\n changedValue = signal<string | undefined>(undefined);\n disabledSubmit = linkedSignal({\n source: this.changedValue,\n computation: () => {\n const name = this.formComp().nameForm.value.name;\n return !name || this.busy() || this.disabled() || this.formComp().nameForm.invalid;\n }\n });\n\n busy = signal<boolean>(false);\n error = signal<string | null>(null);\n\n disabled = signal(false);\n message = signal<string | undefined>(undefined);\n\n ngAfterViewInit() {\n this.formComp().nameForm.valueChanges.subscribe((value) => {\n this.changedValue.set(value.name);\n });\n }\n\n createFolder() {\n this.message.set(undefined);\n const name = this.formComp().nameForm.value.name;\n if (name) {\n this.busy.set(true);\n this.drive\n .createFolder(name)\n .subscribe((res: CreateResult) => {\n if (res.error) {\n switch (res.error) {\n case 'nameExists':\n this.message.set(this.translate.instant('yuv.app.drive.create.error.name.exist'));\n break;\n default:\n this.message.set(this.translate.instant('yuv.app.drive.create.error'));\n }\n } else {\n this.close();\n }\n })\n .add(() => this.busy.set(false));\n }\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.app.drive.folder.create.headline' | translate\">\n <main>\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n <form [formGroup]=\"formComp().nameForm\">\n <ymd-object-name></ymd-object-name>\n\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n @if (message()) {\n <mat-error class=\"message\">{{ message() }}</mat-error>\n }\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.app.drive.action.rename.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"createFolder()\" [disabled]=\"disabledSubmit()\">\n {{ 'yuv.app.drive.folder.create.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, HostBinding, inject, input, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseObjectTypeField, ObjectCreateFlavor, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { APP_DRIVE_ICONS } from '../../drive.icons';\nimport { CreateResult } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { CreateFolderComponent } from '../overlay/create-folder/create-folder.component';\n\n@Component({\n selector: 'ymd-add-button',\n standalone: true,\n imports: [CommonModule, TranslateModule, MatMenuModule, MatButtonModule, MatIconModule],\n templateUrl: './add-button.component.html',\n styleUrl: './add-button.component.scss',\n encapsulation: ViewEncapsulation.None\n})\nexport class AddButtonComponent {\n #drive = inject(DriveService);\n #shell = inject(ShellService);\n #dialog = inject(MatDialog);\n private translate = inject(TranslateService);\n\n fileInput = viewChild.required<ElementRef>('fileInput');\n\n @HostBinding('class.popover') popoverOpen = false;\n\n disabled = input<boolean>(false);\n\n #uploadTargetFlavor?: ObjectCreateFlavor;\n\n icons = {\n folder: APP_DRIVE_ICONS.createFolder,\n file: APP_DRIVE_ICONS.createFile\n };\n\n defaultItems = [\n { icon: this.icons.folder, label: this.translate.instant('yuv.app.drive.create.folder') },\n { icon: this.icons.file, label: this.translate.instant('yuv.app.drive.create.file') }\n ];\n\n flavorListItems: {\n label: string;\n flavor: ObjectCreateFlavor;\n }[] = this.#shell.getObjectCreateFlavors().map((flavor) => ({\n label: this.translate.instant(flavor.id),\n flavor\n }));\n\n onSelect(idx: number, isCreateFlavor = false) {\n if (isCreateFlavor) {\n this.startCreateDocument();\n this.#uploadTargetFlavor = this.flavorListItems[idx]?.flavor;\n } else if (idx === 0) {\n this.startCreateFolder();\n } else if (idx === 1) {\n this.startCreateDocument();\n }\n }\n\n startCreateDocument() {\n if (!this.#uploadTargetFlavor || this.#uploadTargetFlavor.withFileUpload) {\n this.fileInput().nativeElement.click();\n } else if (this.#uploadTargetFlavor?.applyComponent) {\n this.#dialog.open(this.#uploadTargetFlavor.applyComponent, {\n data: {\n flavor: this.#uploadTargetFlavor,\n onCancel: () => {\n // console.log('cancel');\n }\n }\n });\n this.#uploadTargetFlavor = undefined;\n }\n }\n\n startCreateFolder() {\n this.#dialog.open(CreateFolderComponent, {\n width: '400px',\n maxWidth: '90vw'\n });\n }\n\n createDocument(inputEl: HTMLInputElement) {\n const files: File[] | undefined = inputEl.files ? Array.from(inputEl.files) : undefined;\n if (files) {\n const data = this.#uploadTargetFlavor?.sot ? { [BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS]: [this.#uploadTargetFlavor.sot] } : undefined;\n this.#drive.setBusy(true);\n this.#drive\n .checkNamesAndUpload(files, data)\n .subscribe((createResult: CreateResult[]) => {\n this.fileInput().nativeElement.value = '';\n const uploadErrors = createResult.filter((r) => !!r.error);\n if (uploadErrors.length) {\n // TODO: Handle upload errors\n console.error(uploadErrors);\n }\n if (createResult.length && this.#uploadTargetFlavor?.applyComponent) {\n this.#dialog.open(this.#uploadTargetFlavor.applyComponent, {\n data: {\n createdObjectIDs: createResult.filter((r) => r.id).map((r) => r.id),\n flavor: this.#uploadTargetFlavor\n }\n });\n }\n this.#uploadTargetFlavor = undefined;\n })\n .add(() => this.#drive.setBusy(false));\n }\n }\n}\n","<button mat-mini-fab [attr.aria-label]=\"'yuv.app.drive.create.label' | translate\" class=\"toggle primary\" [disabled]=\"disabled()\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>add</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" class=\"add-button-menu\">\n @for (i of defaultItems; track $index) {\n <button mat-menu-item (click)=\"onSelect($index)\">\n <mat-icon>{{i.icon}}</mat-icon>\n {{ i.label }}\n </button>\n }\n <!-- Upload file with flavor -->\n @for (f of flavorListItems; track f.flavor.id) {\n <button mat-menu-item class=\"flavor\" (click)=\"onSelect($index, true)\">\n <mat-icon>{{f.flavor.icon}}</mat-icon>\n {{ f.label }}\n </button>\n }\n</mat-menu>\n\n<input style=\"display: none\" multiple=\"true\" #fileInput type=\"file\" (change)=\"createDocument(fileInput)\" />\n","import { ChangeDetectionStrategy, Component, computed, inject, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseObjectTypeField, ContentStreamField, SystemService, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { DriveService } from '../../services';\nimport { MatDivider } from '@angular/material/divider';\n\ninterface SortOption {\n label: string;\n value: string;\n type: 'sort' | 'order';\n}\n@Component({\n selector: 'ymd-sort',\n standalone: true,\n imports: [MatIconModule, MatMenuModule, MatButtonModule, ReactiveFormsModule, TranslateModule, MatDivider],\n template: `\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider></mat-divider>\n }\n }\n </mat-menu>\n `,\n styleUrls: [`./sort.component.scss`],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SortComponent {\n readonly #drive = inject(DriveService);\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n sortOptions = signal(this.#initSortOptions());\n orderOptions = signal<SortOption[]>([\n { label: 'Ascending', value: 'asc', type: 'order' },\n { label: 'Descending', value: 'desc', type: 'order' }\n ]);\n sortFields = computed(() => [...this.sortOptions(), ...this.orderOptions()]);\n\n sortForm = new FormGroup({\n sort: new FormControl<string>(''),\n order: new FormControl<'asc' | 'desc'>('asc', { nonNullable: true })\n });\n\n sortChanged = output<{ sort: string; order: string }>();\n\n constructor() {\n // listen for language changes to update labels\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.sortOptions.set(this.#initSortOptions());\n });\n }\n\n selectSortByIndex(idx: number) {\n this.selectSort(this.sortFields()[idx].type, this.sortFields()[idx].value);\n }\n\n selectSort(type: string, value: string) {\n const sortCtrl = this.sortForm.get('sort');\n sortCtrl?.value === value ? sortCtrl?.setValue(null) : this.sortForm.get(type)?.setValue(value);\n this.onSelectionChange();\n }\n\n // Emit the form values when changes occur\n onSelectionChange() {\n const { sort, order } = this.sortForm.value;\n this.#drive.setSort(sort as string, order as 'asc' | 'desc');\n this.sortChanged.emit({ sort: sort as string, order: order as string });\n }\n\n #initSortOptions() {\n const baseData: SortOption[] = [];\n const fields = [FS_PROPERTIES.name, BaseObjectTypeField.CREATION_DATE, BaseObjectTypeField.MODIFICATION_DATE];\n const contentFields = [ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n\n [...fields, ...contentFields].forEach((f) => {\n baseData.push({\n label: this.#systemService.getLocalizedLabel(f) || f,\n value: f,\n type: 'sort'\n });\n });\n\n return baseData;\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ChangeDetectionStrategy, Component, effect, HostListener, inject, OnDestroy, viewChildren } from '@angular/core';\nimport { MatIconAnchor, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { YuvCommonModule } from '@yuuvis/client-framework/common';\nimport { ListItemDirective, YuvListModule } from '@yuuvis/client-framework/list';\nimport { APP_DRIVE_ICONS } from '../../drive.icons';\nimport { DRIVE_ROOT_FOLDER_ID, DriveService } from '../../services';\n\n@Component({\n selector: 'ymd-breadcrumb',\n standalone: true,\n imports: [TranslateModule, YuvListModule, MatIcon, MatIconAnchor, MatIconButton, YuvCommonModule],\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'breadcrumb'\n }\n})\nexport class BreadcrumbComponent implements OnDestroy {\n readonly #drive = inject(DriveService);\n readonly #router = inject(Router);\n readonly #dir = inject(Directionality);\n private route = inject(ActivatedRoute);\n\n @HostListener('blur')\n onBlur() {\n this.#keyManager.setActiveItem(-1);\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent) {\n if (event.code === 'Space' || event.code === 'Enter') {\n const aii: number = this.#keyManager.activeItemIndex !== null ? this.#keyManager.activeItemIndex : -1;\n if (aii >= 0) {\n this.navigation(aii === 0 ? DRIVE_ROOT_FOLDER_ID : this.breadcrumb().items[aii - 1].id);\n }\n } else this.#keyManager?.onKeydown(event);\n }\n\n #keyManager!: ActiveDescendantKeyManager<ListItemDirective>;\n homeIcon = APP_DRIVE_ICONS.home;\n\n breadcrumb = this.#drive.state$.breadcrumb;\n items = viewChildren(ListItemDirective);\n #itemsEffect = effect(() => {\n const i = this.items();\n if (this.#keyManager) this.#keyManager.destroy();\n this.#keyManager = new ActiveDescendantKeyManager(i).withWrap().withHorizontalOrientation(this.#dir.value);\n });\n\n navigation(id: string, event?: MouseEvent | Event) {\n event && event.preventDefault();\n const nav = ['..'];\n this.#keyManager.setActiveItem(-1);\n this.#router.navigate([...nav, id], { relativeTo: this.route });\n }\n\n ngOnDestroy(): void {\n this.#keyManager?.destroy();\n }\n}\n","@let bread = breadcrumb();\n\n<nav class=\"breadcrumb\" aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb__list\">\n @if (bread.items.length) {\n <li class=\"breadcrumb__list-item breadcrumb__list-item--root\">\n <a class=\"breadcrumb__list-item-anchor breadcrumb__list-item-anchor--root\" mat-icon-button disableRipple tabindex=\"-1\" yuvListItem draggable=\"false\" href=\"\" (click)=\"navigation('root', $event)\">\n <mat-icon [attr.aria-label]=\"'yuv.app.drive.folder-tree.mydrive' | translate\">{{ homeIcon }}</mat-icon>\n </a>\n </li>\n\n\n\n <li class=\"breadcrumb__list-item breadcrumb__list-item--last\" yuvDragScroll>\n @if (bread.partial) {\n <div class=\"partial\" aria-hidden=\"true\"></div>\n }\n\n <ol class=\"breadcrumb__list\">\n @for (crumb of bread.items; track $index) {\n @if (!$last) {\n <li class=\"breadcrumb__list-item\">\n <a class=\"breadcrumb__list-item-anchor\" tabindex=\"-1\" yuvListItem draggable=\"false\" href=\"\" (click)=\"navigation(crumb.id, $event)\">\n {{ crumb.name }}\n </a>\n </li>\n } @else {\n <li class=\"breadcrumb__list-item breadcrumb__list-item--current\" aria-current=\"location\">{{ crumb.name }}</li>\n }\n }\n </ol>\n </li>\n } @else {\n <li class=\"breadcrumb__list-item breadcrumb__list-item--current breadcrumb__list-item--root\" aria-current=\"location\">\n <button mat-icon-button disabled class=\"breadcrumb__list-item-anchor breadcrumb__list-item-anchor--root\">\n <mat-icon>{{ homeIcon }}</mat-icon>\n </button>\n </li>\n }\n </ol>\n</nav>\n","import { marker } from '@colsen1991/ngx-translate-extract-marker';\n\n// prefix for stored query ids (every stored query id should start with this prefix)\nexport const STORED_QUERY_ID_PREFIX = 'ymsq';\n\n// add a tranlation marker for the key the stored query is stored under\n// this is used to display the stored query title in the UI\nmarker('ymsq.ymd.recent.modified.by.me');\nmarker('ymsq.ymd.recent.added.by.me');\n// marker('ymsq.ymd.recent.modified');\n// marker('ymsq.ymd.recent.added');\n\n// default stored queries\nexport const STORED_QUERIES: Record<\n string,\n {\n label?: string;\n query: string;\n }\n> = {\n // 'ymsq.ymd.recent.modified': {\n // query: '{\"filters\":[{\"f\":\"system:lastModifiedBy\",\"o\":\"eq\",\"v1\":\"##me##\"}],\"sort\":[{\"field\":\"system:lastModificationDate\",\"order\":\"desc\"}]}'\n // },\n 'ymsq.ymd.recent.modified.by.me': {\n query: '{\"filters\":[{\"f\":\"system:baseTypeId\",\"o\":\"eq\",\"v1\":\"system:document\"}, { \"f\": \"system:secondaryObjectTypeIds\", \"o\": \"in\", \"v1\": [\"appOsdrive:file\"] }, {\"f\":\"system:lastModifiedBy\",\"o\":\"eq\",\"v1\":\"##me##\"}],\"sort\":[{\"field\":\"system:lastModificationDate\",\"order\":\"desc\"}]}'\n },\n // 'ymsq.ymd.recent.added': {\n // query: '{\"sort\":[{\"field\":\"system:creationDate\",\"order\":\"desc\"}]}'\n // },\n 'ymsq.ymd.recent.added.by.me': {\n query: '{\"filters\":[{\"f\":\"system:baseTypeId\",\"o\":\"eq\",\"v1\":\"system:document\"}, { \"f\": \"system:secondaryObjectTypeIds\", \"o\": \"in\", \"v1\": [\"appOsdrive:file\"] }, {\"f\":\"system:createdBy\",\"o\":\"eq\",\"v1\":\"##me##\"}],\"sort\":[{\"field\":\"system:creationDate\",\"order\":\"desc\"}]}'\n }\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, inject, viewChild } from '@angular/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\n\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { APP_ID } from '../../drive.schema';\nimport { DRIVE_QUERY_FOLDER_ID, DRIVE_ROOT_FOLDER_ID } from '../../services';\nimport { STORED_QUERY_ID_PREFIX } from '../../services/stored-query/stored-query.data';\n\ninterface FolderTreeNode {\n name: string;\n id: string;\n icon?: string;\n children?: FolderTreeNode[];\n}\n\n@Component({\n selector: 'ymd-folder-tree',\n standalone: true,\n imports: [CommonModule, RouterModule, TranslateModule, MatTreeModule, MatIcon, YmtIconButtonDirective],\n templateUrl: './folder-tree.component.html',\n styleUrl: './folder-tree.component.scss'\n})\nexport class FolderTreeComponent implements AfterViewInit {\n #translate = inject(TranslateService);\n #router = inject(Router);\n #route = inject(ActivatedRoute);\n #shell = inject(ShellService);\n\n tree = viewChild<MatTree<FolderTreeNode, FolderTreeNode>>('tree');\n treeNodePaddingIndent = 40;\n\n #app = this.#shell.getApp(APP_ID);\n\n dataSource: FolderTreeNode[] = [\n {\n id: 'mydrive',\n name: this.#translate.instant('yuv.app.drive.folder-tree.mydrive'),\n icon: this.#app?.iconName,\n children: [\n // {\n // id: 'ymsq.ymd.recent.added',\n // name: this.translate.instant('ymsq.ymd.recent.added')\n // },\n {\n id: 'ymsq.ymd.recent.added.by.me',\n name: this.#translate.instant('ymsq.ymd.recent.added.by.me')\n },\n // {\n // id: 'ymsq.ymd.recent.modified',\n // name: this.translate.instant('ymsq.ymd.recent.modified')\n // },\n {\n id: 'ymsq.ymd.recent.modified.by.me',\n name: this.#translate.instant('ymsq.ymd.recent.modified.by.me')\n }\n ]\n }\n ];\n\n currentPage: FolderTreeNode['id'] = this.dataSource[0].id;\n\n ngAfterViewInit(): void {\n const nodeToExpand = this.dataSource.find(({ id }) => id === 'mydrive');\n nodeToExpand && this.tree()?.expandDescendants(nodeToExpand);\n }\n\n childrenAccessor = (node: FolderTreeNode) => node.children ?? [];\n hasChild = (_: number, node: FolderTreeNode) => !!node.children && node.children.length > 0;\n\n routeChange(node: FolderTreeNode) {\n /*\n * Note: This implementation listens only to click/keydown events on the items in the tree itself. If you trigger route change\n * from anywhere else to one of the routes used here, trigger tree collapsing and setting aria-current:page on route change event\n * */\n\n if (node.id.startsWith(STORED_QUERY_ID_PREFIX)) {\n // stored query\n this.#router\n .navigate(['..', DRIVE_QUERY_FOLDER_ID], {\n queryParams: {\n q: node.id\n },\n relativeTo: this.#route\n })\n .then(() => (this.currentPage = node.id))\n .catch((e) => {\n throw new Error(e);\n });\n } else {\n switch (node.id) {\n case 'mydrive': {\n this.#router\n .navigate(['..', DRIVE_ROOT_FOLDER_ID], {\n relativeTo: this.#route\n })\n .then(() => (this.currentPage = node.id))\n .catch((e) => {\n throw new Error(e);\n });\n break;\n }\n default: {\n this.#router\n .navigate(['..', node.id], {\n relativeTo: this.#route\n })\n .then(() => (this.currentPage = node.id))\n .catch((e) => {\n throw new Error(e);\n });\n }\n }\n }\n }\n}\n","<nav aria-label=\"Navigation\">\n <mat-tree class=\"folder-tree\" #tree [dataSource]=\"dataSource\" [childrenAccessor]=\"childrenAccessor\">\n <mat-tree-node\n class=\"folder-tree__node\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [matTreeNodePaddingIndent]=\"treeNodePaddingIndent\"\n [isExpandable]=\"false\"\n [attr.aria-current]=\"currentPage === node.id ? 'page' : null\"\n [attr.aria-label]=\"'Go to page: ' + node.name\"\n (click)=\"routeChange(node)\"\n (keydown.enter)=\"routeChange(node)\"\n (keydown.space)=\"routeChange(node)\"\n >\n <div class=\"folder-tree__item-icon\" *ngIf=\"node.icon\">\n <mat-icon class=\"ymt-icon--size-s\">{{ node.icon }}</mat-icon>\n </div>\n <span class=\"folder-tree__item\">{{ node.name }}</span>\n </mat-tree-node>\n\n <mat-tree-node\n class=\"folder-tree__node\"\n *matTreeNodeDef=\"let node; when: hasChild\"\n matTreeNodeToggle\n matTreeNodePadding\n [matTreeNodePaddingIndent]=\"treeNodePaddingIndent\"\n [isExpandable]=\"true\"\n [isExpanded]=\"tree.isExpanded(node)\"\n [attr.aria-current]=\"currentPage === node.id ? 'page' : null\"\n [attr.aria-label]=\"'Toggle and Go to page: ' + node.name\"\n (activation)=\"routeChange($event)\"\n >\n <button ymt-icon-button icon-button-size=\"small\" tabindex=\"-1\">\n <mat-icon class=\"ymt-icon--size-s\">\n {{ tree.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <div class=\"folder-tree__item-icon\" *ngIf=\"node.icon\">\n <mat-icon class=\"ymt-icon--size-s\">{{ node.icon }}</mat-icon>\n </div>\n <a class=\"folder-tree__item\" tabindex=\"-1\" (click)=\"routeChange(node); $event.stopPropagation()\">{{ node.name }}</a>\n </mat-tree-node>\n </mat-tree>\n</nav>\n","import { DatePipe } from '@angular/common';\nimport { Component, computed, input, output } from '@angular/core';\nimport { BaseObjectTypeField, TranslateModule } from '@yuuvis/client-core';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\n\n@Component({\n selector: 'ymd-version-tile',\n standalone: true,\n imports: [DatePipe, TranslateModule],\n template: `\n <div\n class=\"slots\"\n title=\"{{\n 'yuv.app.drive.versions.desctiption.label'\n | translate: { version: rendererInputs().version, modifieer: rendererInputs().modified, date: rendererInputs().date | date: 'medium' }\n }}\"\n >\n <div data-slot=\"version\" class=\"version\">\n <span>{{ 'yuv.app.drive.versions.label' | translate }}: {{ rendererInputs().version }}</span>\n </div>\n <div data-slot=\"date\" class=\"date\" title=\"{{ rendererInputs().date | date: 'medium' }}\">\n {{ rendererInputs().date | date: 'shortDate' }}\n </div>\n <div data-slot=\"modified\" class=\"modified\" title=\"{{ rendererInputs().modified }}\">\n {{ rendererInputs().modified }}\n </div>\n </div>\n `,\n styleUrl: './tile.component.scss'\n})\nexport class VersionTileComponent {\n tile = input.required<TileData>();\n\n rendererInputs = computed(() => ({\n icon: this.tile().icon,\n version: this.tile().instanceData?.[BaseObjectTypeField.VERSION_NUMBER],\n date: this.tile().instanceData?.[BaseObjectTypeField.MODIFICATION_DATE] as Date,\n modified: this.tile().instanceData?.[BaseObjectTypeField.MODIFIED_BY + '_title']\n }));\n\n selectedVersion = output<any>();\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, viewChildren } from '@angular/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { ClickDoubleDirective } from '@yuuvis/client-framework/common';\nimport { ListItemDirective } from '@yuuvis/client-framework/list';\nimport { finalize } from 'rxjs/operators';\nimport { DriveService } from '../../services';\nimport { VersionTileComponent } from './tile/tile.component';\n\n@Component({\n selector: 'ymd-versions-list',\n standalone: true,\n imports: [CommonModule, VersionTileComponent, ListItemDirective, ClickDoubleDirective],\n template: ` @let versions = versionsList();\n @if (versions) {\n @for (version of versions; track $index) {\n <ymd-version-tile\n yuvListItem\n [tile]=\"version\"\n [attr.aria-selected]=\"selection().includes(version.dmsObject.version)\"\n [selected]=\"selection().includes(version.dmsObject.version)\"\n (click.single)=\"setSelectedVersion(version)\"\n (selectedVersion)=\"selectedVersionAction($event)\"\n ></ymd-version-tile>\n }\n }`,\n styleUrl: './versions-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n tabindex: '0',\n role: 'listbox'\n }\n})\nexport class VersionsListComponent {\n #drive = inject(DriveService);\n\n versionsList = this.#drive.state$.versions.versionsList;\n selectedVersion = this.#drive.state$.versions.selectedVersion;\n selection = computed(() => (this.selectedVersion() || []).map((v: DmsObject) => v.version));\n\n @HostListener('blur')\n onBlur() {\n this.#keyManager.setActiveItem(-1);\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent) {\n event.preventDefault();\n event.code === 'Escape' && this.#keyManager.setActiveItem(-1);\n event.target instanceof HTMLButtonElement && this.#keyManager.setActiveItem(-1);\n\n if (event.code === 'Space' || event.code === 'Enter') {\n const aii: number = this.#keyManager.activeItemIndex !== null ? this.#keyManager.activeItemIndex : -1;\n aii >= 0 && this.selectedVersionByIndex(aii);\n } else this.#keyManager?.onKeydown(event);\n }\n\n #keyManager!: ActiveDescendantKeyManager<ListItemDirective>;\n\n listItems = viewChildren(ListItemDirective);\n #itemsEffect = effect(() => {\n const items = this.listItems();\n if (this.#keyManager) this.#keyManager.destroy();\n this.#keyManager = new ActiveDescendantKeyManager(items).withWrap();\n });\n\n selectedVersionAction(event: any) {\n this.#drive.setBusy(true);\n this.#drive\n .setNewVersion(event.version)\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n }\n\n selectedVersionByIndex(index: number) {\n this.setSelectedVersion(this.versionsList()[index]);\n }\n\n setSelectedVersion(version: any) {\n this.#drive.setSelectedVersion(version).subscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, signal, viewChildren } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatPseudoCheckbox } from '@angular/material/core';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport {\n BaseObjectTypeField,\n ContentStreamField,\n Operator,\n RangeValue,\n SearchFilter,\n SearchQuery,\n SearchService,\n SearchUtils,\n Situation,\n SystemService\n} from '@yuuvis/client-core';\nimport { RangeSelectDateComponent, RangeSelectDateValue, RangeSelectFilesizeComponent, RangeSelectFilesizeValue } from '@yuuvis/client-framework/forms';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { FormStatusChangedEvent, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { DriveService } from '../../../services/drive/drive.service';\n\ninterface SearchToken {\n fromControlName: string;\n label: string;\n}\n\n@Component({\n selector: 'ymd-drive-search-overlay',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ObjectFormComponent,\n YuvSplitViewModule,\n ReactiveFormsModule,\n YuvListModule,\n RangeSelectDateComponent,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatFormFieldModule,\n MatDialogContent,\n MatDialogActions,\n MatDialogTitle,\n MatDialogClose,\n MatInput,\n MatPseudoCheckbox,\n YmtButtonDirective,\n RangeSelectFilesizeComponent\n ],\n templateUrl: './drive-search-overlay.component.html',\n styleUrl: './drive-search-overlay.component.scss'\n})\nexport class DriveSearchOverlayComponent {\n readonly translate = inject(TranslateService);\n #fb = inject(FormBuilder);\n\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DriveSearchOverlayComponent>);\n\n #shell = inject(ShellService);\n #system = inject(SystemService);\n #drive = inject(DriveService);\n #search = inject(SearchService);\n\n objectForms = viewChildren<ObjectFormComponent>(ObjectFormComponent);\n\n ANY_OPTION = 'any';\n\n #query = this.#drive.state$.query;\n #queryEffect = effect(() => {\n const q = this.#query();\n if (q) this.filterForm.patchValue(this.#queryToForm(q));\n });\n\n #initialFormData: Record<string, unknown> = {};\n\n selectedFlavorsRec: Record<string, ObjectFlavor> = {};\n combinedFormState?: FormStatusChangedEvent;\n formStates: Record<string, FormStatusChangedEvent> = {};\n\n flavorFormOptions = signal<Record<string, ObjectFormOptions>>({});\n flavorForms = computed<\n {\n id: string;\n icon?: string;\n svgIcon?: boolean;\n label: string;\n formOptions: ObjectFormOptions;\n }[]\n >(() => {\n const ffo = this.flavorFormOptions() || {};\n return Object.keys(ffo).map((k) => ({\n id: k,\n icon: this.selectedFlavorsRec[k]?.icon,\n svgIcon: this.selectedFlavorsRec[k]?.svgIcon,\n label: this.#shell.getFlavorLabel(k),\n formOptions: ffo[k]\n }));\n });\n\n scopeOptions = signal<{ label: string; value: unknown }[]>([]);\n\n filterForm = this.#fb.nonNullable.group({\n term: [this.#dialogData.term || ''],\n scope: [this.ANY_OPTION],\n modified: [],\n created: [],\n contentlength: []\n });\n\n searchTokens: SearchToken[] = [];\n flavors: (ObjectFlavor & { label: string })[] = this.#shell.getObjectFlavors().map((f) => ({\n ...f,\n label: this.#shell.getFlavorLabel(f.id)\n }));\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n typeSelected(idx: number[]) {\n this.#toggleType(this.flavors[idx[0]]);\n }\n\n #toggleType(t: ObjectFlavor) {\n if (this.selectedFlavorsRec[t.id]) {\n delete this.selectedFlavorsRec[t.id];\n\n const ffo: Record<string, ObjectFormOptions> = this.flavorFormOptions() || {};\n delete ffo[t.id];\n this.flavorFormOptions.set({ ...ffo });\n\n delete this.formStates[t.id];\n this.#getCombinedFormState();\n } else {\n this.selectedFlavorsRec[t.id] = t;\n this.#system.getObjectTypeForm(t.sot, Situation.SEARCH).subscribe((formModel: any) => {\n this.flavorFormOptions.set({\n ...this.flavorFormOptions(),\n [t.id]: {\n formModel,\n data: {}\n }\n });\n });\n }\n }\n\n // initial setup of types/flavors\n #setTypes(sots: string[]) {\n const sotQA: Record<string, string> = {};\n this.flavors\n .filter((f) => sots.includes(f.sot))\n .forEach((f) => {\n this.selectedFlavorsRec[f.id] = f;\n sotQA[f.sot] = f.id;\n });\n\n this.#system\n .getObjectTypeForms(sots, Situation.SEARCH)\n // .pipe(finalize(() => (this.#initialFormData = {}))) // TODO: check if this is needed\n .subscribe({\n next: (forms: Record<string, any>) => {\n const ffo: Record<string, ObjectFormOptions> = {};\n const data = this.#initialFormData;\n Object.keys(forms).forEach((sot) => {\n ffo[sotQA[sot]] = {\n formModel: forms[sot],\n data\n };\n });\n this.flavorFormOptions.set(ffo);\n }\n });\n }\n\n onFormStatusChanged(formId: string, evt: FormStatusChangedEvent) {\n this.formStates[formId] = evt;\n this.#getCombinedFormState();\n }\n\n #onFormValueChange(v: any) {\n this.searchTokens = [];\n\n if (this.filterForm.value.term) {\n this.searchTokens.push({\n fromControlName: 'term',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.term', { value: this.filterForm.value.term })\n });\n }\n const created: RangeSelectDateValue | undefined = this.filterForm.value.created as RangeSelectDateValue | undefined;\n if (created) {\n this.searchTokens.push({\n fromControlName: 'created',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.created', { value: created.label })\n });\n }\n\n const modified: RangeSelectDateValue | undefined = this.filterForm.value.modified as RangeSelectDateValue | undefined;\n if (modified) {\n this.searchTokens.push({\n fromControlName: 'modified',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.modified', { value: modified.label })\n });\n }\n\n const contentlength: RangeSelectFilesizeValue | undefined = this.filterForm.value.contentlength as RangeSelectFilesizeValue | undefined;\n if (contentlength) {\n this.searchTokens.push({\n fromControlName: 'contentlength',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.contentlength', { value: contentlength.label })\n });\n }\n\n if (this.filterForm.value.scope !== this.ANY_OPTION && this.filterForm.value.term) {\n const o = this.scopeOptions().find((o) => o.value === this.filterForm.value.scope);\n if (o)\n this.searchTokens.push({\n fromControlName: 'scope',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.where', { value: o.label })\n });\n }\n }\n\n removeSearchToken(t: SearchToken) {\n this.filterForm.patchValue({\n [t.fromControlName]: t.fromControlName === 'term' ? '' : this.ANY_OPTION\n });\n }\n\n #getCombinedFormState(): FormStatusChangedEvent {\n const combinedFormState = {\n dirty: false,\n indexdataChanged: false,\n invalid: false,\n data: {}\n };\n Object.values(this.formStates).forEach((s) => {\n if (s.dirty) {\n combinedFormState.dirty = s.dirty;\n }\n if (s.indexdataChanged) {\n combinedFormState.indexdataChanged = s.indexdataChanged;\n }\n if (s.invalid) {\n combinedFormState.invalid = s.invalid;\n }\n combinedFormState.data = { ...combinedFormState.data, ...s.data };\n });\n this.combinedFormState = combinedFormState;\n return this.combinedFormState;\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n\n submit() {\n this.#dialogRef.close(this.#formToQuery());\n }\n\n //Converts the form values to a search query\n #formToQuery(): SearchQuery {\n const filters: SearchFilter[] = this.#search.formDataToSearchFilter(this.#getCombinedFormState().data);\n // types\n const sots = Object.values(this.selectedFlavorsRec).map((f) => f.sot);\n if (sots.length) {\n filters.push({\n f: BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,\n o: Operator.IN,\n v1: sots\n });\n }\n // created\n if (this.filterForm.value.created) {\n const df = this.#search.rangeValueToSearchFilter(\n (this.filterForm.value.created as RangeSelectDateValue).rangeValue as RangeValue,\n BaseObjectTypeField.CREATION_DATE\n );\n df && filters.push(df);\n }\n // modified\n if (this.filterForm.value.modified) {\n const df = this.#search.rangeValueToSearchFilter(\n (this.filterForm.value.modified as RangeSelectDateValue).rangeValue as RangeValue,\n BaseObjectTypeField.MODIFICATION_DATE\n );\n df && filters.push(df);\n }\n // content length\n if (this.filterForm.value.contentlength) {\n const df = this.#search.rangeValueToSearchFilter(\n (this.filterForm.value.contentlength as RangeSelectDateValue).rangeValue as RangeValue,\n ContentStreamField.LENGTH\n );\n df && filters.push(df);\n }\n\n const searchQuery: SearchQuery = {\n term: this.filterForm.value.term,\n filters\n };\n // search scope\n if (this.filterForm.value.scope !== this.ANY_OPTION) searchQuery.scope = this.filterForm.value.scope as 'metadata' | 'content';\n return searchQuery;\n }\n\n /**\n * Converts the form values to a search query\n * @param q The search query\n */\n #queryToForm(q: SearchQuery): Record<string, unknown> {\n const patch: Record<string, unknown> = {};\n if (q?.term) patch['term'] = q.term;\n if (q?.scope) patch['scope'] = q.scope;\n q?.filters?.forEach((f) => {\n switch (f.f) {\n case BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS: {\n const sots = f.v1 as string[];\n // filter by available flavors\n const flavorSots = this.flavors.map((f) => f.sot);\n this.#setTypes(sots.filter((sot) => flavorSots.includes(sot)));\n break;\n }\n case BaseObjectTypeField.CREATION_DATE: {\n const fv = typeof f.v1 === 'string' ? new Date(f.v1) : f.v1;\n const sv = typeof f.v2 === 'string' ? new Date(f.v2) : f.v2;\n const rangeValue: RangeValue = {\n operator: f.o,\n firstValue: fv,\n secondValue: sv\n };\n\n const rsv: RangeSelectDateValue = {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${SearchUtils.getMatchingDateRange(rangeValue)}`)\n };\n\n patch['created'] = rsv;\n break;\n }\n case BaseObjectTypeField.MODIFICATION_DATE: {\n const fv = typeof f.v1 === 'string' ? new Date(f.v1) : f.v1;\n const sv = typeof f.v2 === 'string' ? new Date(f.v2) : f.v2;\n const rangeValue: RangeValue = {\n operator: f.o,\n firstValue: fv,\n secondValue: sv\n };\n\n const rsv: RangeSelectDateValue = {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${SearchUtils.getMatchingDateRange(rangeValue)}`)\n };\n\n patch['modified'] = rsv;\n break;\n }\n case ContentStreamField.LENGTH: {\n const rangeValue: RangeValue = {\n operator: f.o,\n firstValue: f.v1,\n secondValue: f.v2\n };\n\n const rsv: RangeSelectFilesizeValue = {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${SearchUtils.getMatchingFilesizeRange(rangeValue)}`)\n };\n\n patch['contentlength'] = rsv;\n break;\n }\n default: {\n // check for values to inject into flavor forms\n const otField = this.#system.getObjectTypeField(f.f);\n let payload = null;\n if (otField && otField.propertyType === 'datetime') {\n if (!isNaN(Date.parse(f.v1 as string)) || !isNaN(Date.parse(f.v2 as string))) {\n payload = {\n operator: f.o,\n firstValue: f.v1 ? f.v1 : undefined,\n secondValue: f.v2 ? f.v2 : undefined\n };\n }\n } else if (otField && ['integer', 'decimal'].includes(otField.propertyType)) {\n if (!isNaN(Number(f.v1)) || !isNaN(Number(f.v2))) {\n payload = {\n operator: f.o,\n firstValue: f.v1 ? Number(f.v1) : undefined,\n secondValue: f.v2 ? Number(f.v2) : undefined\n };\n }\n } else {\n payload = f.v1;\n }\n this.#initialFormData[f.f] = payload;\n }\n }\n });\n return patch;\n }\n\n #setupOptions() {\n this.#setupScopeOptions();\n }\n\n #setupScopeOptions() {\n this.scopeOptions.set([\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.where.any'),\n value: this.ANY_OPTION\n },\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.where.content'),\n value: 'content'\n },\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.where.metadata'),\n value: 'metadata'\n }\n ]);\n }\n}\n","<h2 matDialogTitle class=\"yuv-dialog-title\">{{ 'yuv.app.drive.search.extended.dialog.title' | translate }}</h2>\n<mat-dialog-content class=\"yuv-dialog-content\">\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.app.drive.search.meta.splitview'\">\n <!-- search options -->\n <ng-template yuvSplitArea [size]=\"40\">\n <form class=\"options\" role=\"search\" [formGroup]=\"filterForm\">\n <!-- term and scope -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.term' | translate }}</mat-label>\n <input matInput class=\"term\" type=\"search\" formControlName=\"term\" />\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.where' | translate }}</mat-label>\n <mat-select formControlName=\"scope\" [disabled]=\"!filterForm.value.term\">\n @for (food of scopeOptions(); track food) {\n <mat-option [value]=\"food.value\">{{ food.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- types -->\n <div class=\"options-type-list\">\n <h2>{{ 'yuv.app.drive.search.meta.options.type' | translate }}</h2>\n <yuv-list (itemSelect)=\"typeSelected($event)\" [selfHandleSelection]=\"true\">\n @for (t of flavors; track t.id) {\n <div class=\"type\" yuvListItem [ngClass]=\"{ selected: !!selectedFlavorsRec[t.id] }\">\n <mat-pseudo-checkbox [state]=\"!!selectedFlavorsRec[t.id] ? 'checked' : 'unchecked'\"></mat-pseudo-checkbox>\n {{ t.label }}\n </div>\n }\n </yuv-list>\n </div>\n\n <!-- created -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.created' | translate }}</mat-label>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n </mat-form-field>\n\n <!-- modified -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.modified' | translate }}</mat-label>\n <yuv-range-select-date formControlName=\"modified\"></yuv-range-select-date>\n </mat-form-field>\n\n <!-- content length -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.contentlength' | translate }}</mat-label>\n <yuv-range-select-filesize formControlName=\"contentlength\"></yuv-range-select-filesize>\n </mat-form-field>\n </form>\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"60\">\n <div class=\"query\">\n <h1>{{ 'yuv.app.drive.search.meta.headline.query' | translate }}</h1>\n\n <div class=\"tokens\">\n @if (flavorForms().length === 0 && !filterForm.value.term) {\n <p>{{ 'yuv.app.drive.search.meta.query.for-everything' | translate }}</p>\n }\n @for (o of flavorForms(); track o.id) {\n <details class=\"token\">\n <summary [ngClass]=\"{ dirty: formStates[o.id]?.dirty }\">\n @if (o.icon && o.svgIcon) {\n <mat-icon [svgIcon]=\"o.icon\"></mat-icon>\n } @else {\n <mat-icon>{{ o.icon }}</mat-icon>\n }\n {{ o.label }}\n <mat-icon class=\"arr\">arrow_drop_down</mat-icon>\n </summary>\n <yuv-object-form [formOptions]=\"o.formOptions\" (statusChanged)=\"onFormStatusChanged(o.id, $event)\"></yuv-object-form>\n </details>\n }\n @for (t of searchTokens; track $index) {\n <div class=\"searchToken token\">\n {{ t.label }}\n <button mat-icon-button class=\"ymt-icon-button--size-s\" (click)=\"removeSearchToken(t)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </yuv-split-view>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\" class=\"yuv-dialog-actions\">\n <button ymtButton=\"secondary\" mat-dialog-close type=\"button\" (click)=\"cancel()\">{{ 'yuv.app.drive.search.meta.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" mat-dialog-close type=\"submit\" (click)=\"submit()\">{{ 'yuv.app.drive.search.meta.button.search' | translate }}</button>\n</mat-dialog-actions>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { SearchQuery } from '@yuuvis/client-core';\nimport { SimpleSearchComponent } from '@yuuvis/client-framework/simple-search';\nimport { DRIVE_ROOT_FOLDER_ID } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { DriveSearchOverlayComponent } from './drive-search-overlay/drive-search-overlay.component';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { tap } from 'rxjs';\n\n@Component({\n selector: 'ymd-drive-search',\n standalone: true,\n imports: [CommonModule, TranslateModule, SimpleSearchComponent, ReactiveFormsModule, MatTooltipModule, MatIconButton, MatIcon],\n templateUrl: './drive-search.component.html',\n styleUrl: './drive-search.component.scss',\n host: {\n '[class.active]': 'extendedQuery()'\n }\n})\nexport class DriveSearchComponent {\n readonly translate = inject(TranslateService);\n #overlay = inject(MatDialog);\n #router = inject(Router);\n #route = inject(ActivatedRoute);\n #drive = inject(DriveService);\n\n #oRef: MatDialogRef<any> | undefined;\n\n query = this.#drive.state$.query;\n extendedQuery = this.#drive.state$.extendedQuery;\n currentFolder = this.#drive.state$.currentFolder;\n term = '';\n\n openModal(event: MouseEvent | KeyboardEvent) {\n event.stopPropagation();\n this.#oRef = this.#overlay.open(DriveSearchOverlayComponent, {\n minWidth: '90vw',\n minHeight: '90vh',\n data: {\n term: this.term\n }\n });\n this.#oRef.afterClosed().subscribe((q: SearchQuery) => q && this.onQuerySubmit(q, !!q.filters?.length || !!q.scope));\n }\n\n clear() {\n this.#router.navigate(['..', this.currentFolder() || DRIVE_ROOT_FOLDER_ID], {\n relativeTo: this.#route\n });\n }\n\n onQueryChange(q: SearchQuery) {\n this.term = q.term || '';\n }\n\n onQuerySubmit(q: SearchQuery, ext = false) {\n // in order to keep the query in the url as short as\n // possible we'll get rid of the fields because they could be\n // re-applied later on\n q.fields = undefined;\n\n this.#router.navigate(['..', 'query'], {\n queryParams: {\n q: encodeURIComponent(JSON.stringify(q)),\n ext\n },\n relativeTo: this.#route\n });\n }\n}\n","<button mat-icon-button class=\"icon\" (click)=\"openModal($event)\" [matTooltip]=\"'yuv.app.drive.search.tooltip.extended-search' | translate\">\n <mat-icon>tune</mat-icon>\n</button>\n\n<yuv-simple-search\n [query]=\"query()\"\n (queryChange)=\"onQueryChange($event)\"\n (querySubmit)=\"onQuerySubmit($event)\"\n (clearInput)=\"clear()\"></yuv-simple-search>\n","import { ChangeDetectionStrategy, Component, computed, inject, OnDestroy, OnInit } from '@angular/core';\nimport { BaseObjectTypeField, DmsObject, EventService, FlavoredDmsObject, TranslateModule, YuvEventType } from '@yuuvis/client-core';\nimport { ObjectPreviewComponent, ObjectPreviewService } from '@yuuvis/client-framework/object-preview';\nimport { ObjectSummaryDataComponent } from '@yuuvis/client-framework/object-summary';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { finalize, forkJoin } from 'rxjs';\nimport { VersionsListComponent } from '../../../components';\nimport { APP_TYPES, FS_PROPERTIES, FS_SOTS } from '../../../drive.schema';\nimport { DriveService } from '../../../services';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\nconst COMPONENTS = [VersionsListComponent, ObjectSummaryDataComponent, ObjectPreviewComponent, DialogComponent];\nconst MODULES = [YuvSplitViewModule, TranslateModule];\nconst MATERIAL = [MatIconModule, MatButtonModule, MatTabsModule, YmtButtonDirective];\n\n@Component({\n selector: 'ymd-manage-versions',\n standalone: true,\n imports: [...MODULES, ...COMPONENTS, ...MATERIAL, MatProgressBar],\n templateUrl: `./manage-versions.component.html`,\n styleUrls: [`./manage-versions.component.scss`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ObjectPreviewService]\n})\nexport class ManageVersionsComponent implements OnInit, OnDestroy {\n readonly #drive = inject(DriveService);\n readonly #shell = inject(ShellService);\n readonly #eventService = inject(EventService);\n\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<ManageVersionsComponent>);\n\n versionsList = this.#drive.state$.versions.versionsList;\n selectedVersion = this.#drive.state$.versions.selectedVersion;\n selectedDmsObject = this.#drive.state$.selectedDmsObject;\n\n isLoading = this.#drive.state$.busy;\n\n item: DmsObject = this.#dialogData;\n layoutSettingIdBase = 'app.drive.versions.';\n\n dmsObject = computed<{ id: string | null; name: string }>(() => {\n const dmsObject = this.selectedDmsObject();\n return dmsObject\n ? { id: dmsObject.data[BaseObjectTypeField.OBJECT_ID] as string, name: dmsObject.data[FS_PROPERTIES.name] as string }\n : { id: null, name: '' };\n });\n\n id = computed<string | null>(() => {\n const version = this.selectedVersion();\n return version ? version[0].id : null;\n });\n\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>(() => {\n const o = this.selectedVersion();\n return o\n ? {\n object: o[0],\n flavors: [\n {\n id: APP_TYPES['file']['id'],\n icon: APP_TYPES['file']['icon'],\n sot: FS_SOTS.object\n },\n ...this.#shell.getAppliedObjectFlavors(o[0]).applied\n ]\n }\n : undefined;\n });\n\n disabledRestore = computed<boolean>(() => {\n const selectedVersion = this.selectedVersion();\n const list = this.versionsList();\n return !(selectedVersion && selectedVersion[0].version !== list.length);\n });\n\n #loadList() {\n this.#drive.setBusy(true);\n return forkJoin([this.#drive.getVersions(this.item.id), this.#drive.getSelectedDmsObject(this.item.id)]).pipe(finalize(() => this.#drive.setBusy(false)));\n }\n\n close() {\n this.#dialogRef.close();\n }\n\n reloadList() {\n this.#loadList().subscribe();\n }\n\n setNewVersion() {\n this.#drive.setBusy(true);\n this.#drive.setNewVersion().subscribe({\n next: () => {\n this.#drive.setBusy(false);\n this.#eventService.trigger(YuvEventType.DMS_OBJECT_UPDATED);\n },\n error: (err) => this.#drive.setBusy(false)\n });\n }\n\n ngOnInit(): void {\n this.#loadList().subscribe();\n }\n\n ngOnDestroy(): void {\n this.#drive.clearVersions();\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.app.drive.versions.header.label' | translate\">\n <main>\n <div class=\"progress-bar-container\">\n @if (isLoading()) {\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n }\n </div>\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"layoutSettingIdBase + 'split'\">\n <!-- Versions -->\n <ng-template yuvSplitArea [size]=\"60\">\n <div class=\"version-details\">\n <header>\n <span>{{ dmsObject().name }}</span>\n </header>\n <div class=\"details\">\n @let selected = selectedVersion();\n @if (selected && selected.length === 1) {\n <mat-tab-group class=\"version-tabs\">\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.content.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-preview [dmsObject]=\"selected[0]\" [version]=\"selected[0].version\"></yuv-object-preview>\n </ng-template>\n </mat-tab>\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-summary-data [dmsObject]=\"selected[0]\"></yuv-object-summary-data>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n }\n </div>\n </div>\n </ng-template>\n <!-- Details -->\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"versions\">\n <header>\n <h2>{{ 'yuv.app.drive.versions.header.label.short' | translate }}</h2>\n <div class=\"actions\">\n <button mat-icon-button class=\"refresh\" (click)=\"reloadList()\"><mat-icon>refresh</mat-icon></button>\n </div>\n </header>\n <ymd-versions-list\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"isLoading()\"\n [attr.role]=\"'listbox'\"\n [id]=\"id()\"\n >\n </ymd-versions-list>\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" class=\"close\" (click)=\"close()\">{{ 'yuv.app.drive.action.set.new.versions.cancel' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"disabledRestore()\" (click)=\"setNewVersion()\">\n {{ 'yuv.app.drive.action.set.new.versions.label' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { inject } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { ManageVersionsComponent } from './component/manage-versions.component';\n\nexport class ManageVersionsAction extends AbstractContextAction implements Action {\n readonly translate = inject(TranslateService);\n #overlay = inject(MatDialog);\n #overlayService = inject(Overlay);\n\n id = 'app.drive.action.manage-versions';\n label = this.translate.instant('yuv.app.drive.action.manage-versions.label');\n description = this.translate.instant('yuv.app.drive.action.manage-versions.description');\n priority = 2;\n icon = 'manage_history';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]) {\n return of(selection && selection[0] && selection[0].version > 1 && !selection[0].isFolder);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n let config = new MatDialogConfig();\n\n config = { ...config, width: '60vw', maxWidth: '80vw', height: '80vh', data: selection[0], scrollStrategy: this.#overlayService.scrollStrategies.block() };\n\n this.#overlay.open(ManageVersionsComponent, config);\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, OnDestroy, OnInit, Signal, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { SearchQuery, TranslateModule, UploadResult } from '@yuuvis/client-core';\nimport { ActionsService } from '@yuuvis/client-framework/actions';\nimport { UploadProgressComponent } from '@yuuvis/client-framework/upload-progress';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\n\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { filter } from 'rxjs/operators';\nimport { ManageVersionsAction } from '../../actions';\nimport { CopyLinkAction } from '../../actions/copy-link/copy-link.action';\nimport { PasteAction } from '../../actions/paste/paste.action';\nimport { RenameAction } from '../../actions/rename/rename.action';\nimport { UpdateContentAction } from '../../actions/updateContent/update.content.action';\nimport { APP_ACTIONS, APP_ID } from '../../drive.schema';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { DriveSearchComponent } from '../../components';\nimport { ShellService } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'ymd-drive',\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n OverflowMenuComponent,\n YuvClientShellModule,\n ReactiveFormsModule,\n TranslateModule,\n UploadProgressComponent,\n DriveSearchComponent\n ],\n templateUrl: './drive.component.html',\n styleUrl: './drive.component.scss'\n})\nexport class DriveFrameComponent implements OnInit, OnDestroy {\n #router = inject(Router);\n #route = inject(ActivatedRoute);\n #drive = inject(DriveService);\n #shell = inject(ShellService);\n #actionsService = inject(ActionsService);\n #destroyRef = inject(DestroyRef);\n\n query: Signal<SearchQuery | null> = this.#drive.state$.query;\n currentFolder: Signal<string | null> = this.#drive.state$.currentFolder;\n busy = this.#drive.state$.busy;\n\n #app = this.#shell.getApp(APP_ID);\n appName = this.#app?.title as string;\n appIcon = this.#app?.iconName;\n\n headerNavItems: OverflowMenuItem[] = [\n // TODO: enable again once favorite feature is implemented\n // {\n // id: 'favorites',\n // disabled: true,\n // label: this.translate.instant('yuv.app.drive.nav.favorites'),\n // icon: this.icons.favorite,\n // callback: () => {\n // this.router.navigate(['favorites'], {relativeTo: this.route})\n // }\n // }\n ];\n\n #actions = [\n { id: APP_ACTIONS.rename, action: RenameAction },\n { id: APP_ACTIONS.paste, action: PasteAction },\n { id: APP_ACTIONS.contentUpdate, action: UpdateContentAction },\n { id: APP_ACTIONS.copyLink, action: CopyLinkAction },\n { id: APP_ACTIONS.manageVersions, action: ManageVersionsAction }\n ];\n\n constructor() {\n this.#registerActions();\n // TODO: make use of global shortcuts\n // this.shellService.globalShortcuts$.pipe(takeUntilDestroyed()).subscribe((s: GlobalShortcut) => {\n // if (s === GlobalShortcut.search) this.router.navigate([{ outlets: { modal: ['find'] } }], { relativeTo: this.route });\n // });\n }\n\n #trackRouteChanges() {\n // listen to navigation/route changes in order to restore it later on\n this.#router.events\n .pipe(\n takeUntilDestroyed(this.#destroyRef),\n filter((e) => e instanceof NavigationEnd)\n )\n .subscribe((e) => {\n this.#drive.lastRouteURL = (e as NavigationEnd).urlAfterRedirects;\n });\n }\n\n onUploadProgressResultItemClick(uploadRes: UploadResult) {\n if (uploadRes && uploadRes.objectId) {\n this.#router.navigate(['object', uploadRes.objectId], { relativeTo: this.#route });\n }\n }\n\n #registerActions() {\n this.#actionsService.registerActions(this.#actions);\n }\n\n ngOnInit(): void {\n if (this.#drive.lastRouteURL) this.#router.navigateByUrl(this.#drive.lastRouteURL).then(() => this.#trackRouteChanges());\n else this.#trackRouteChanges();\n }\n\n ngOnDestroy(): void {\n this.#actions.forEach((a) => this.#actionsService.concealActions([a.id]));\n }\n}\n","<yuv-upload-progress (resultItemClick)=\"onUploadProgressResultItemClick($event)\"></yuv-upload-progress>\n\n<ng-template yuvAppHeaderSlot=\"search\"><ymd-drive-search></ymd-drive-search></ng-template>\n<ng-template yuvAppHeaderSlot=\"actions\"> <yuv-overflow-menu [menuItems]=\"headerNavItems\"></yuv-overflow-menu></ng-template>\n\n\n\n<section class=\"drive-main__content\" [attr.aria-label]=\"'yuv.app.drive.content.aria.label' | translate\">\n <router-outlet></router-outlet>\n</section>\n\n<router-outlet name=\"modal\"></router-outlet>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, FlavoredDmsObject, TranslateModule } from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { ObjectMetadataComponent } from '@yuuvis/client-framework/object-details';\nimport { FormStatusChangedEvent } from '@yuuvis/client-framework/object-form';\n\n@Component({\n selector: 'ymd-folder-details-dialog',\n imports: [CommonModule, DialogComponent, TranslateModule, ObjectMetadataComponent, BusyOverlayDirective, YmtButtonDirective],\n templateUrl: './folder-details-dialog.component.html',\n styleUrl: './folder-details-dialog.component.scss'\n})\nexport class FolderDetailsDialogComponent {\n #shell = inject(ShellService);\n #folder: DmsObject = inject<DmsObject>(MAT_DIALOG_DATA);\n\n readonly #dialogRef = inject(MatDialogRef<FolderDetailsDialogComponent>);\n\n folderName: string = this.#folder.data[FS_PROPERTIES.name] as string;\n formState = signal<FormStatusChangedEvent | undefined>(undefined);\n\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>(() =>\n this.#folder\n ? {\n object: this.#folder,\n flavors: [...this.#shell.getAppliedObjectFlavors(this.#folder).applied]\n }\n : undefined\n );\n\n onMetadataStatusChanged(formState: FormStatusChangedEvent) {\n this.formState.set(formState);\n }\n\n onIndexdataSaved(updatedObject: DmsObject) {\n this.close();\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitel]=\"folderName\">\n <main [yuvBusyOverlay]=\"metadata.busy()\">\n <yuv-object-metadata\n [flavoredDmsObject]=\"flavoredDmsObject()\"\n #metadata\n [disableControls]=\"true\"\n (statusChanged)=\"onMetadataStatusChanged($event)\"\n (indexDataSaved)=\"onIndexdataSaved($event)\"\n >\n </yuv-object-metadata>\n </main>\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"metadata.busy()\">\n {{ 'yuv.app.drive.action.rename.cancel' | translate }}\n </button>\n <button ymtButton=\"secondary\" (click)=\"metadata.resetForm()\" [hidden]=\"!formState()?.dirty\" [disabled]=\"!formState()?.dirty\">\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n class=\"primary\"\n [ngClass]=\"{ spinning: metadata.busy() }\"\n (click)=\"metadata.save()\"\n [disabled]=\"!formState()?.dirty || formState()?.invalid\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChild, effect, inject, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ClipboardService, DmsObject } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\nimport { ClipboardComponent } from '@yuuvis/client-framework/clipboard';\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { finalize } from 'rxjs';\nimport { ACTION_CONTEXT, APP_ID } from '../../drive.schema';\nimport { DriveService } from '../../services';\nimport { MatProgressBar } from '@angular/material/progress-bar';\n\n@Component({\n selector: 'ymd-ribbon',\n standalone: true,\n imports: [CommonModule, ClipboardComponent, OverflowMenuComponent, MatProgressBar],\n templateUrl: './ribbon.component.html',\n styleUrl: './ribbon.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ymd-ribbon'\n }\n})\nexport class RibbonComponent {\n primarySlot = contentChild<TemplateRef<any>>('primaryActions');\n secondarySlot = contentChild<TemplateRef<any>>('secondaryActions');\n\n #drive = inject(DriveService);\n #clipboard = inject(ClipboardService);\n #actionsService = inject(ActionsService);\n\n private _defaultMenuItems: OverflowMenuItem[] = this.#drive.getDefaultRibbonActions().map((a) => ({\n id: a.id,\n icon: a.icon,\n label: a.label,\n disabled: true,\n group: 'default',\n callback: () => this.executeAction(a)\n }));\n clipboardBucket = APP_ID;\n busy = input<boolean>(false);\n enableClipboard = input<boolean>(false);\n menuItems: OverflowMenuItem[] = this._defaultMenuItems;\n\n objects = input<DmsObject[]>();\n #objectsEffect = effect(() => {\n this.menuItems = this._defaultMenuItems;\n this.#getActionsAndSetupItems(this.objects() || []);\n });\n\n excludeActions = input<string[]>();\n\n constructor() {\n this.#clipboard\n .clipboard$(this.clipboardBucket)\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: () => this.#getActionsAndSetupItems(this.objects() || [])\n });\n }\n\n #getActionsAndSetupItems(objects: DmsObject[]) {\n this.#actionsService\n .getActions(objects, {\n context: ACTION_CONTEXT,\n exclude: this.excludeActions()\n })\n .subscribe({ next: (res) => this._setupMenuItems(res) });\n }\n\n executeAction(a: Action) {\n const o = this.objects();\n if (o && this._isAction(a)) (a as Action).run(o);\n }\n\n onClipboardPaste() {\n this.#drive.setBusy(true);\n this.#drive\n .pasteFromClipboard()\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe({\n next: () => this.#clipboard.clear(this.clipboardBucket)\n });\n }\n\n private _isAction(a: any) {\n return !!a['run'];\n }\n\n private _setupMenuItems(actions: Action[]) {\n // en-/disable default actions\n this._defaultMenuItems.forEach((mi) => {\n mi.disabled = !actions.find((a) => a.id === mi.id);\n });\n\n const defaultActionIds = this._defaultMenuItems.map((mi) => mi.id);\n this.menuItems = [\n ...this._defaultMenuItems,\n ...actions\n .filter((a) => !defaultActionIds.includes(a.id))\n .map((a) => ({\n id: a.id,\n icon: a.icon,\n label: a.label,\n group: 'aside',\n callback: () => this.executeAction(a)\n }))\n ];\n }\n}\n","@let primary = primarySlot();\n@let secondary = secondarySlot();\n\n@if (primary) {\n <div class=\"primary-actions\">\n <ng-container [ngTemplateOutlet]=\"primary\"></ng-container>\n </div>\n}\n\n<div class=\"object-actions\">\n @if (enableClipboard()) {\n <yuv-clipboard class=\"dark\" [bucket]=\"clipboardBucket\" [enablePaste]=\"true\" (paste)=\"onClipboardPaste()\"></yuv-clipboard>\n }\n <yuv-overflow-menu [menuItems]=\"menuItems\"></yuv-overflow-menu>\n</div>\n\n@if (secondary) {\n <div class=\"secondary-actions\">\n <ng-container [ngTemplateOutlet]=\"secondary\"></ng-container>\n </div>\n}\n\n@if (busy()) {\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { BaseObjectTypeField, ContentStreamField, Operator, SearchFilter, SearchQuery, SearchService } from '@yuuvis/client-core';\nimport { DragScrollDirective } from '@yuuvis/client-framework/common';\nimport { RangeSelectDateComponent, RangeSelectDateValue, RangeSelectFilesizeComponent, RangeSelectFilesizeValue } from '@yuuvis/client-framework/forms';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymd-search-filter',\n standalone: true,\n imports: [\n CommonModule,\n MatSelectModule,\n TranslateModule,\n RangeSelectFilesizeComponent,\n RangeSelectDateComponent,\n ReactiveFormsModule,\n DragScrollDirective,\n YmtButtonDirective\n ],\n templateUrl: './search-filter.component.html',\n styleUrl: './search-filter.component.scss'\n})\nexport class SearchFilterComponent {\n #shell = inject(ShellService);\n #fb = inject(FormBuilder);\n #search = inject(SearchService);\n\n private translate = inject(TranslateService);\n\n ANY_OPTION = 'any';\n #flavors = this.#shell.getObjectFlavors();\n\n typeOptions = signal<{ label: string; value: unknown }[]>([]);\n\n query = input<SearchQuery | null>(null);\n queryChange = output<SearchQuery>();\n filtersActive = signal<boolean>(false);\n\n filterForm = this.#fb.nonNullable.group({\n type: [this.ANY_OPTION],\n size: [this.ANY_OPTION],\n created: [this.ANY_OPTION]\n });\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n reset() {\n const q = this.query();\n if (q) {\n this.queryChange.emit(q);\n this.filterForm.reset();\n }\n }\n\n #onFormValueChange(v: any) {\n const updatedQuery: SearchQuery = this.#applyFilters(v);\n this.queryChange.emit(updatedQuery);\n this.filtersActive.set(!!updatedQuery.filters && updatedQuery.filters.length > 0);\n }\n\n #applyFilters(v: any): SearchQuery {\n const updatedQuery: SearchQuery = {\n ...(this.query() || {}),\n filters: []\n };\n updatedQuery.filters = [];\n\n // file size filter\n const typeFilter = this.#toTypeFilter(v.type);\n if (typeFilter) updatedQuery.filters.push(typeFilter);\n\n // file size filter\n const sizeFilter = v.size !== this.ANY_OPTION ? this.#toSizeFilter(v.size) : undefined;\n if (sizeFilter) updatedQuery.filters.push(sizeFilter);\n\n // creation date filter\n const dateFilter = v.created !== this.ANY_OPTION ? this.#toDateFilter(v.created) : undefined;\n if (dateFilter) updatedQuery.filters.push(dateFilter);\n\n return updatedQuery;\n }\n\n #setupOptions() {\n this.#setupTypeOptions();\n }\n\n #setupTypeOptions() {\n this.typeOptions.set([\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.any'),\n value: this.ANY_OPTION\n },\n ...this.#flavors.map((f: ObjectFlavor) => ({\n label: this.translate.instant(f.id),\n value: f.sot\n }))\n ]);\n }\n\n #toDateFilter(value: RangeSelectDateValue): SearchFilter | undefined {\n return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, BaseObjectTypeField.CREATION_DATE) : undefined;\n }\n\n #toSizeFilter(value: RangeSelectFilesizeValue): SearchFilter | undefined {\n return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, ContentStreamField.LENGTH) : undefined;\n }\n\n #toTypeFilter(value: string): SearchFilter | undefined {\n return value === this.ANY_OPTION\n ? undefined\n : {\n f: BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,\n o: Operator.IN,\n v1: [value]\n };\n }\n}\n","<form [formGroup]=\"filterForm\" yuvDragScroll>\n <mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" formControlName=\"type\">\n @for (o of typeOptions(); track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n <yuv-range-select-filesize formControlName=\"size\"></yuv-range-select-filesize>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n @if (filtersActive()) {\n <button ymtButton=\"secondary\" button-size=\"small\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n","import { Injectable, inject } from '@angular/core';\nimport { TranslateService, UserService } from '@yuuvis/client-core';\nimport { STORED_QUERIES } from './stored-query.data';\nimport { StoredQuery } from './stored-query.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoredQueryService {\n private userService = inject(UserService);\n private translate = inject(TranslateService);\n\n \n\n getStoredQuery(id: string): StoredQuery | undefined {\n const q = STORED_QUERIES[id];\n\n if (!q) return undefined;\n\n try {\n // if query has no label try to resolve from language resources\n return {\n label: q.label || this.translate.instant(id),\n query: JSON.parse(this._replaceVars(q.query))\n };\n } catch (e) {\n return undefined;\n }\n }\n\n private _replaceVars(str: string): string {\n const vars = [{ placeholder: '##me##', replace: this.userService.getCurrentUser().id }];\n vars.forEach((v) => {\n str = str.replaceAll(v.placeholder, v.replace);\n });\n return str;\n }\n}\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, computed, effect, inject, input, OnDestroy, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, ParamMap, Router, RouterModule } from '@angular/router';\nimport {\n AppCacheService,\n BaseObjectTypeField,\n ClipboardService,\n ConfigTypeOption,\n DeviceScreen,\n DeviceService,\n DmsObject,\n DmsService,\n EventService,\n ObjectConfigService,\n Operator,\n ResolvedObjectConfig,\n RetentionService,\n SearchQuery,\n SystemType,\n TranslateModule,\n TranslateService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport {\n ActionsService,\n BASE_ACTION,\n ContextmenuComponent,\n ContextMenuItemSelectEvent,\n YuvContextMenuTriggerDirective\n} from '@yuuvis/client-framework/actions';\nimport { FileDropZoneDirective } from '@yuuvis/client-framework/common';\nimport { MultiObjectSummaryComponent, ObjectSummaryComponent } from '@yuuvis/client-framework/object-summary';\nimport { OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { SplitViewComponent, YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { TileConfigTriggerComponent, TileData, TileListComponent, TileListConfigOptions, TileListHighlight } from '@yuuvis/client-framework/tile-list';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { finalize, map, Observable, tap } from 'rxjs';\nimport { BreadcrumbComponent, FolderTreeComponent, SortComponent } from '../../components';\nimport { AddButtonComponent } from '../../components/add-button/add-button.component';\nimport { FolderDetailsDialogComponent } from '../../components/folder-details-dialog/folder-details-dialog.component';\nimport { RibbonComponent } from '../../components/ribbon/ribbon.component';\nimport { SearchFilterComponent } from '../../components/search-filter/search-filter.component';\nimport { ACTION_CONTEXT, APP_ID, APP_TYPES } from '../../drive.schema';\nimport { DRIVE_EVENT, DRIVE_QUERY_FOLDER_ID, DRIVE_ROOT_FOLDER_ID, DriveFolderId } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { STORED_QUERY_ID_PREFIX } from '../../services/stored-query/stored-query.data';\nimport { StoredQuery } from '../../services/stored-query/stored-query.interface';\nimport { StoredQueryService } from '../../services/stored-query/stored-query.service';\n\nconst components = [\n TileListComponent,\n BreadcrumbComponent,\n FolderTreeComponent,\n ObjectSummaryComponent,\n TileConfigTriggerComponent,\n RibbonComponent,\n AddButtonComponent,\n MultiObjectSummaryComponent,\n SortComponent,\n SearchFilterComponent,\n MatTooltipModule,\n MatIconButton,\n MatIcon\n];\n\nconst module = [TranslateModule, RouterModule, YuvSplitViewModule, YuvClientShellModule];\n\n@Component({\n selector: 'ymd-files',\n standalone: true,\n imports: [NgClass, AsyncPipe, ...module, ...components, FileDropZoneDirective, ContextmenuComponent, YuvContextMenuTriggerDirective],\n templateUrl: './files.component.html',\n styleUrl: './files.component.scss',\n host: {\n '[class.smallScreen]': 'smallScreenLayout()'\n }\n})\nexport class FilesPageComponent implements OnDestroy {\n tileList = viewChild<TileListComponent>('tileList');\n\n #LAYOUT_SETTINGS_STORAGE_KEY = 'yuv.app.drive.files.layout';\n\n private shellService = inject(ShellService);\n private dmsService = inject(DmsService);\n private drive = inject(DriveService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private translate = inject(TranslateService);\n private storedQueryService = inject(StoredQueryService);\n private clipboard = inject(ClipboardService);\n private actionsService = inject(ActionsService);\n readonly #objectConfigService = inject(ObjectConfigService);\n readonly #device = inject(DeviceService);\n readonly #retention = inject(RetentionService);\n readonly #shell = inject(ShellService);\n readonly #dialog = inject(MatDialog);\n\n readonly #eventService = inject(EventService);\n\n readonly ERROR_CODE = {\n NOT_FOUND: '404',\n // pattern: {HTTP_STATUS_CODE}-{SERVICE_ERROR_CODE}\n INVALID_ID: '422-2912'\n };\n\n #appCache = inject(AppCacheService);\n\n objectConfigBucket: string = APP_ID;\n\n splitViewCmp = viewChild.required(SplitViewComponent);\n selected = signal<DmsObject | undefined>(undefined);\n\n #editAction: OverflowMenuItem = {\n id: 'edit',\n icon: 'edit_note',\n label: this.translate.instant('yuv.object-summary.action.edit'),\n callback: () => {\n const o = this.selected();\n if (o) {\n if (o.isFolder) {\n // open metadata edit dialog^\n this.#dialog.open(FolderDetailsDialogComponent, {\n maxHeight: '90vh',\n maxWidth: '90vw',\n data: o\n });\n } else {\n this.#navigateTo(o.id);\n }\n }\n }\n };\n\n summaryActions = computed<OverflowMenuItem[]>(() => {\n const e = this.selected();\n if (!e) return [];\n const res = this.#shell.getAppliedObjectFlavors(e);\n return !e.isFolder || res.applied.length ? [this.#editAction] : [];\n });\n\n fileDropSummaryDisabled = computed(() => {\n const e = this.selected();\n return !e || !e.permissions?.writeContent || this.#retention.getRetentionState(e).underRetention;\n });\n disableCreate = false;\n\n actions = this.drive.state$.actions;\n selection = this.drive.state$.selection;\n extendedQuery = this.drive.state$.extendedQuery;\n hasActions = computed(() => !!this.actions().length);\n\n busy = this.drive.state$.busy;\n flavorChips: ObjectFlavor[] = this.shellService.getObjectFlavors();\n appliedFlavor?: ObjectFlavor;\n\n selectionActions = computed(() => ({ selection: this.selection(), actions: this.actions() }));\n\n emptyMode = signal<DriveFolderId | null>(null);\n // error code when loading the object failed. This will be used\n // to determine a proper error message to display\n error = signal<string | undefined>(undefined);\n\n configTypeOptions: Record<string, ConfigTypeOption> = {\n folder: { bucket: APP_ID, type: APP_TYPES['folder'] },\n file: { bucket: APP_ID, type: APP_TYPES['file'] }\n };\n\n currentFolderID?: string;\n currentFolder?: DmsObject;\n enableDetails = signal<boolean>(true);\n enableTree = signal<boolean>(true);\n tileConfigBucketLabel = this.translate.instant('yuv.app.drive.tile-config.bucket');\n\n smallScreenLayout = signal(false);\n sortOptionsAvailable = signal(true);\n extendedSearch = signal(false);\n\n id = input<string | null>(null);\n\n highlightStyles$: Observable<TileListHighlight[]> = this.clipboard.clipboard$(APP_ID).pipe(\n takeUntilDestroyed(),\n map((c) => {\n return c && c.mode && c.objects?.length\n ? [\n {\n cssStyles: this.#highlightStyles[c?.mode],\n ids: c.objects.map((o) => o.id)\n }\n ]\n : [];\n })\n );\n\n readonly #highlightStyles: Record<string, Record<string, unknown>> = {\n cut: { opacity: 0.5 }\n };\n\n #routeIdEffect = effect(() => {\n const param = this.id() || undefined;\n\n untracked(async () => {\n if (param === DRIVE_QUERY_FOLDER_ID) {\n this.emptyMode.set(DRIVE_QUERY_FOLDER_ID);\n return;\n }\n\n this.emptyMode.set(param === DRIVE_ROOT_FOLDER_ID ? DRIVE_ROOT_FOLDER_ID : null);\n this.error.set(undefined);\n this.disableCreate = false;\n this.currentFolderID = param;\n this.drive.updateCurrentFolder(this.currentFolderID);\n this.selected.set(undefined);\n this.currentFolder = undefined;\n if (this.currentFolderID === DRIVE_ROOT_FOLDER_ID) this.currentFolderID = undefined;\n\n if (this.currentFolderID) {\n this.dmsService.getDmsObject(this.currentFolderID).subscribe({\n next: (o: DmsObject) => {\n this.currentFolder = o;\n this._setFolderQuery(this.#getTitle(o));\n },\n error: (e) => {\n console.error('Error getting folder', e);\n this.#processLoadError(e);\n }\n });\n } else this._setFolderQuery(this.translate.instant('yuv.app.drive.folder-tree.mydrive'));\n });\n });\n\n tileListOptions: TileListConfigOptions = {\n actionContext: ACTION_CONTEXT,\n configTypes: Object.values(APP_TYPES),\n configFlavors: [\n ]\n };\n\n query = this.drive.state$.query;\n queryTitle = this.drive.state$.queryTitle;\n\n constructor() {\n this.drive.events$.pipe(takeUntilDestroyed()).subscribe({\n next: (e) => {\n if (e === DRIVE_EVENT.refresh) {\n this.refresh();\n }\n }\n });\n\n this.#device.screenChange$.pipe(takeUntilDestroyed()).subscribe({\n next: (s: DeviceScreen) => {\n this.smallScreenLayout.set(s.size === 's' && s.orientation === 'portrait');\n this.enableDetails.set(!this.smallScreenLayout());\n }\n });\n\n toObservable(this.drive.state$.selection)\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (sel: DmsObject[]) => {\n if (sel?.length === 0) {\n this.tileList()?.clearSelection(true);\n this.selected.set(undefined);\n }\n }\n });\n\n this.route.queryParamMap.pipe(takeUntilDestroyed()).subscribe({\n next: (p: ParamMap) => {\n this.sortOptionsAvailable.set(true);\n if (this.route.snapshot.params['id'] === DRIVE_QUERY_FOLDER_ID) {\n const q = p.get('q');\n this.disableCreate = true;\n if (q?.startsWith(STORED_QUERY_ID_PREFIX)) {\n // stored query\n const sq: StoredQuery | undefined = this.storedQueryService.getStoredQuery(q);\n if (sq) {\n this.drive.updateQuery(sq.query, sq.label);\n this.sortOptionsAvailable.set(false);\n return;\n }\n } else if (q) {\n // search query\n this.sortOptionsAvailable.set(true);\n try {\n const sq: SearchQuery = JSON.parse(decodeURIComponent(q));\n sq.filters = (sq.filters || []).filter((f) => f.f !== BaseObjectTypeField.PARENT_ID);\n this.drive.updateQuery(sq, this.translate.instant('yuv.app.drive.files.search.result.title'), p.get('ext') === 'true');\n return;\n } catch (e) {\n console.error('Error parsing query', e);\n }\n }\n }\n }\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(\n takeUntilDestroyed(),\n tap((e) => {\n this.tileList()?.updateTileList([e.data]);\n e.data.id === this.selected()?.id && this.selected.set(e.data);\n })\n )\n .subscribe();\n }\n\n onFilterQueryChange(q: SearchQuery) {\n this.drive.updateQuery(q, this.translate.instant('yuv.app.drive.files.search.result.title'));\n this.drive.setSelection([]);\n }\n\n #processLoadError(e: HttpErrorResponse) {\n if (`${e.status}` !== this.ERROR_CODE.NOT_FOUND) {\n this.error.set(`${e.status}-${e.error?.serviceErrorCode || ''}`);\n } else this.error.set(this.ERROR_CODE.NOT_FOUND);\n }\n\n #getTitle(o: DmsObject): string {\n const cfgType: ConfigTypeOption = o.isFolder ? this.configTypeOptions['folder'] : this.configTypeOptions['file'];\n const oc: ResolvedObjectConfig = this.#objectConfigService.getResolvedObjectConfig(o.data, cfgType.type, cfgType.bucket, true);\n return oc.title.value;\n }\n\n onDelete() {\n const deleteAction = this.actions().find((a) => a.id === BASE_ACTION.delete);\n if (deleteAction) deleteAction.run(this.drive.state$.selection());\n }\n\n private _setFolderQuery(queryTitle?: string) {\n this.drive.updateQuery(\n {\n filters: [{ f: BaseObjectTypeField.PARENT_ID, o: Operator.EQUAL, v1: this.currentFolderID || null }]\n },\n queryTitle\n );\n }\n\n onContextmenuAction(data: ContextMenuItemSelectEvent) {\n data.action.run(this.selection());\n }\n\n onFileDrop(files: File[]) {\n this.drive.setBusy(true);\n this.drive.checkNamesAndUpload(files).subscribe({ complete: () => this.drive.setBusy(false) });\n }\n\n onFileUpdateDrop(file: File[]) {\n const dmsObject = this.selected();\n if (dmsObject) {\n this.drive.setBusy(true);\n this.drive\n .uploadContent(dmsObject.id, file[0])\n .pipe(finalize(() => this.drive.setBusy(false)))\n .subscribe();\n }\n }\n\n itemFocused(tile: TileData) {\n // console.log(tile);\n }\n\n itemClicked(tile: TileData) {\n if (this.smallScreenLayout()) this.itemDoubleClicked(tile);\n }\n\n onCopy(tiles: TileData[]) {\n this.clipboard.addObjects(\n tiles.map((t) => t.dmsObject),\n 'copy',\n APP_ID\n );\n }\n\n onCut(tiles: TileData[]) {\n this.clipboard.addObjects(\n tiles.map((t) => t.dmsObject),\n 'cut',\n APP_ID\n );\n }\n\n selectionChanged(tiles: TileData[]) {\n if (tiles.length === 1) this.loadDetails(tiles[0].id);\n else {\n this.selected.set(undefined);\n if (tiles.length === 0) {\n this.drive.setSelection([]);\n } else {\n this.drive.setBusy(true);\n this.dmsService.getDmsObjects(tiles.map((i) => i.id)).subscribe({\n next: (o: DmsObject[]) => {\n this.drive.setBusy(false);\n this.drive.setSelection(o);\n }\n });\n }\n }\n }\n\n itemDoubleClicked(tile: TileData) {\n if (tile.instanceData) {\n this.#navigateTo(\n tile.instanceData[BaseObjectTypeField.OBJECT_ID] as string,\n (tile.instanceData[BaseObjectTypeField.BASE_TYPE_ID] as string) === SystemType.FOLDER\n );\n }\n }\n\n #navigateTo(id: string, isFolder = false) {\n this.drive.setBusy(true);\n const nav = isFolder ? ['..'] : ['../..', 'object'];\n this.router.navigate([...nav, id], { relativeTo: this.route }).then(() => this.drive.setBusy(false));\n }\n\n loadDetails(id: string) {\n this.shellService.addBusy();\n // load the dms object\n this.dmsService.getDmsObject(id).subscribe({\n next: (o: DmsObject) => {\n this.selected.set(o);\n this.shellService.removeBusy();\n this.drive.setSelection([o]);\n }\n });\n }\n\n clearSelection() {\n this.drive.setSelection([]);\n }\n\n openParent() {\n if (this.currentFolder) {\n this.drive.setBusy(true);\n this.router\n .navigate(['..', this.currentFolder.data[BaseObjectTypeField.PARENT_ID] || DRIVE_ROOT_FOLDER_ID], {\n relativeTo: this.route,\n replaceUrl: true\n })\n .then(() => this.drive.setBusy(false));\n }\n }\n\n setBusy(busy: boolean) {\n this.drive.setBusy(busy);\n }\n\n refresh() {\n this.tileList()?.refresh();\n this.drive.setSelection([]);\n }\n\n onLayoutSettingsChange(e: any) {\n this.#appCache.setItem(this.#LAYOUT_SETTINGS_STORAGE_KEY, e).subscribe();\n }\n\n // #applyLayoutSettings(settings: SplitViewLayoutSettings) {\n // // this.splitViewCmp().applyLayoutSettings(settings);\n // }\n\n // ngAfterViewInit(): void {\n // // this.#appCache.getItem(this.#LAYOUT_SETTINGS_STORAGE_KEY).subscribe({\n // // next: (ls: SplitViewLayoutSettings) => {\n // // if (ls) {\n // // this.enableDetails.set(ls.areas[2]?.visible);\n // // this.enableTree.set(ls.areas[0]?.visible);\n // // this.#applyLayoutSettings(ls);\n // // }\n // // }\n // // });\n // }\n\n ngOnDestroy(): void {\n this.clipboard.clear(APP_ID);\n }\n}\n","<header>\n <!-- navigation bar -->\n <nav [attr.aria-label]=\"'yuv.app.drive.files.naviagtion.aria.label' | translate\">\n <div class=\"nav\">\n <button mat-icon-button [disabled]=\"!currentFolder\" [matTooltip]=\"'yuv.app.drive.files.nav.back.tooltip' | translate\" (click)=\"openParent()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <button mat-icon-button [matTooltip]=\"'yuv.app.drive.files.nav.refresh.tooltip' | translate\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n\n @if (!query()?.term) {\n <ymd-breadcrumb></ymd-breadcrumb>\n } @else {\n <div class=\"breadcrumb\"></div>\n }\n </nav>\n\n <!-- ribbon with actions and options -->\n <ymd-ribbon [objects]=\"selection()\" [busy]=\"busy()\" [enableClipboard]=\"true\" class=\"files__surface\">\n <ng-template #primaryActions>\n <ymd-add-button [disabled]=\"disableCreate\"></ymd-add-button>\n </ng-template>\n\n <ng-template #secondaryActions>\n <div class=\"options\">\n @if (!smallScreenLayout()) {\n <button\n mat-icon-button\n class=\"toggle-tree toggle\"\n [ngClass]=\"{ enabled: enableTree() }\"\n [matTooltip]=\"'yuv.app.drive.files.toggletree.tooltip' | translate\"\n (click)=\"enableTree.set(!enableTree())\"\n >\n <mat-icon>dock_to_right</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toggle-details toggle\"\n [ngClass]=\"{ enabled: enableDetails() }\"\n [matTooltip]=\"'yuv.app.drive.files.toggledetails.tooltip' | translate\"\n (click)=\"enableDetails.set(!enableDetails())\"\n >\n <mat-icon>dock_to_left</mat-icon>\n </button>\n }\n <yuv-tile-config-trigger [bucket]=\"objectConfigBucket\" [bucketLabel]=\"tileConfigBucketLabel\" [options]=\"tileListOptions\"></yuv-tile-config-trigger>\n </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yuv-split-view [gutterSize]=\"1\" (layoutSettingsChange)=\"onLayoutSettingsChange($event)\" class=\"files__surface\">\n <!-- folder tree -->\n <ng-template yuvSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <ymd-folder-tree></ymd-folder-tree>\n </ng-template>\n\n <!-- files -->\n <ng-template yuvSplitArea [size]=\"60\">\n @let err = error();\n @if (err) {\n <div class=\"error\">\n <p>\n <mat-icon>warning</mat-icon>\n @switch (err) {\n @case (ERROR_CODE.NOT_FOUND) {\n {{ 'yuv.app.drive.files.error.load.not-found' | translate }}\n }\n @case (ERROR_CODE.INVALID_ID) {\n {{ 'yuv.app.drive.files.error.load.invalid-id' | translate }}\n }\n @default {\n {{ 'yuv.app.drive.files.error.load' | translate }}\n }\n }\n </p>\n </div>\n } @else {\n <div class=\"files\" [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.label' | translate }\" (fileDrop)=\"onFileDrop($event)\">\n <header class=\"files-header\">\n <h1>{{ queryTitle() }}</h1>\n @if (sortOptionsAvailable()) {\n <ymd-sort />\n }\n <!-- <div class=\"flavors\">\n TODO: enable again once flavors/aspects are supported -->\n <!-- @for (f of flavorChips; track f.id) {\n <yuv-flavor-chip [ngClass]=\"{ active: f.id === appliedFlavor?.id }\" [flavor]=\"f\" (click)=\"appliedFlavor = f\"></yuv-flavor-chip>\n }\n </div>-->\n @if (query()?.term && !extendedQuery()) {\n <ymd-search-filter [query]=\"query()\" (queryChange)=\"onFilterQueryChange($event)\"></ymd-search-filter>\n }\n </header>\n <yuv-tile-list\n #tileList\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"busy()\"\n [attr.role]=\"'listbox'\"\n (keydown.backspace)=\"openParent()\"\n (keydown.delete)=\"onDelete()\"\n [bucket]=\"objectConfigBucket\"\n [multiselect]=\"true\"\n [query]=\"query()\"\n [flavor]=\"appliedFlavor\"\n [options]=\"tileListOptions\"\n (itemDblClick)=\"itemDoubleClicked($event)\"\n (itemSelect)=\"itemClicked($event)\"\n (selectionChange)=\"selectionChanged($event)\"\n (tileCopy)=\"onCopy($event)\"\n (tileCut)=\"onCut($event)\"\n (busy)=\"setBusy($event)\"\n [highlights]=\"highlightStyles$ | async\"\n [yuvContextMenuTrigger]=\"context_menu\"\n [yuvContextMenuTriggerWhen]=\"hasActions()\"\n >\n <div #empty>\n @if (emptyMode() === 'root') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.root.list' | translate }}</p>\n } @else if (emptyMode() === 'query') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.query.list' | translate }}</p>\n } @else {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.list' | translate }}</p>\n }\n </div>\n\n <ng-template #context_menu>\n <yuv-contextmenu [actions]=\"actions()\" (itemSelect)=\"onContextmenuAction($event)\"></yuv-contextmenu>\n </ng-template>\n </yuv-tile-list>\n </div>\n }\n </ng-template>\n\n <!-- details -->\n <ng-template yuvSplitArea [size]=\"20\" [visible]=\"enableDetails()\">\n @let selectedItem = selected();\n @if (enableDetails() && selectedItem) {\n @if (selectedItem?.isFolder) {\n <yuv-object-summary [actions]=\"summaryActions()\" [configType]=\"configTypeOptions['folder']\" [dmsObject]=\"selectedItem\"></yuv-object-summary>\n } @else {\n <yuv-object-summary\n [actions]=\"summaryActions()\"\n [configType]=\"configTypeOptions['file']\"\n [dmsObject]=\"selectedItem\"\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropSummaryDisabled()\"\n (fileDrop)=\"onFileUpdateDrop($event)\"\n ></yuv-object-summary>\n }\n } @else {\n @let sel = selection();\n @if (sel && sel.length > 0) {\n <yuv-multi-object-summary [headline]=\"'yuv.app.drive.multiselected.details' | translate: { count: selection().length }\"></yuv-multi-object-summary>\n } @else if (tileList()?.items?.length === 0) {\n <!-- TODO: CHOULD HAVE A DIFFERENT MESSAGE FOR EMPTY RESULTS EMPTY FOR NOW -->\n <div class=\"message\">{{ 'yuv.app.drive.empty.results.details.message' | translate }}</div>\n } @else {\n <div class=\"message\">{{ 'yuv.app.drive.unselected.details' | translate }}</div>\n }\n }\n </ng-template>\n</yuv-split-view>\n","import { CommonModule } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, computed, effect, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport {\n DeviceScreen,\n DeviceService,\n DmsObject,\n DmsService,\n EventService,\n FlavoredDmsObject,\n ObjectConfigService,\n RetentionService,\n RetentionState,\n TranslateModule,\n TranslateService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BASE_ACTION } from '@yuuvis/client-framework/actions';\nimport { ContainerSizeDirective, FileDropZoneDirective } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS, YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { ObjectAuditComponent, ObjectMetadataComponent, RetentionBadgeComponent } from '@yuuvis/client-framework/object-details';\nimport { ObjectFlavorComponent } from '@yuuvis/client-framework/object-flavor';\nimport { ObjectPreviewComponent, ObjectPreviewService } from '@yuuvis/client-framework/object-preview';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { finalize } from 'rxjs';\nimport { RibbonComponent } from '../../components/ribbon/ribbon.component';\nimport { APP_ACTIONS, APP_ID, APP_TYPES } from '../../drive.schema';\nimport { DRIVE_ROOT_FOLDER_ID, DriveService } from '../../services';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n@Component({\n selector: 'ymd-object',\n standalone: true,\n imports: [\n CommonModule,\n ObjectMetadataComponent,\n ObjectAuditComponent,\n ObjectFlavorComponent,\n YuvIconComponent,\n YuvSplitViewModule,\n RendererDirective,\n ContainerSizeDirective,\n TranslateModule,\n RibbonComponent,\n RetentionBadgeComponent,\n ObjectPreviewComponent,\n FileDropZoneDirective,\n MatTabsModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n MatProgressSpinner\n ],\n templateUrl: './object.component.html',\n styleUrl: './object.component.scss',\n host: {\n ['class.smallScreenLayout']: 'smallScreenLayout()'\n },\n providers: [ObjectPreviewService]\n})\nexport class ObjectPageComponent {\n #dmsService = inject(DmsService);\n #eventService = inject(EventService);\n #shellService = inject(ShellService);\n #route = inject(ActivatedRoute);\n #router = inject(Router);\n #objectConfig = inject(ObjectConfigService);\n translate = inject(TranslateService);\n #drive = inject(DriveService);\n #device = inject(DeviceService);\n #retention = inject(RetentionService);\n\n busy = this.#drive.state$.busy;\n smallScreenLayout = signal(false);\n errorMessage?: string;\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n retentionState = signal<RetentionState | undefined>(undefined);\n #dmsObjectEffect = effect(() => this.#setHeaderData());\n fileDropReplaceDisabled = computed(() => {\n const e = this.dmsObject();\n return !e || !e.permissions?.writeContent || this.#retention.getRetentionState(e).underRetention;\n });\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>(() => {\n const o = this.dmsObject();\n return o\n ? {\n object: o,\n flavors: [...this.#shellService.getAppliedObjectFlavors(o).applied]\n }\n : undefined;\n });\n\n icons = {\n back: YUV_ICONS.back,\n error: YUV_ICONS.attention,\n refresh: YUV_ICONS.refresh\n };\n\n layoutSettingIdBase = 'app.drive.object.';\n\n headerData?: {\n title: RendererDirectiveInput;\n description?: RendererDirectiveInput;\n icon: string;\n };\n\n excludeActions = [APP_ACTIONS.paste, APP_ACTIONS.contentUpdate, BASE_ACTION.copy, BASE_ACTION.cut];\n\n constructor() {\n this.#route.paramMap.pipe(takeUntilDestroyed()).subscribe((p: ParamMap) => {\n this._loadDetails(p.get('id'));\n });\n\n this.#device.screenChange$.pipe(takeUntilDestroyed()).subscribe({\n next: (s: DeviceScreen) => {\n const ssl = s.size === 's' && s.orientation === 'portrait';\n this.smallScreenLayout.set(ssl);\n }\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e) => {\n if (e.data.id === this.dmsObject()?.id) this.dmsObject.set(e.data);\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_DELETED)\n .pipe(takeUntilDestroyed())\n .subscribe((e) => {\n if (e.data.id === this.dmsObject()?.id)\n if (e.data.id === this.dmsObject()?.id)\n // navigate to parent folder\n this.openParent();\n });\n }\n\n refresh() {\n const o = this.dmsObject();\n if (o)\n this.#dmsService.getDmsObject(o.id).subscribe((o) => {\n this.dmsObject.set(o);\n });\n if (o)\n this.#dmsService.getDmsObject(o.id).subscribe((o) => {\n this.dmsObject.set(o);\n });\n }\n\n openParent() {\n const pid = this.dmsObject()?.parentId || DRIVE_ROOT_FOLDER_ID;\n this.#router.navigate(['../..', 'files', pid], {\n relativeTo: this.#route\n });\n }\n\n onIndexdataSaved(updatedObject: DmsObject) {\n this.dmsObject.set(updatedObject);\n }\n\n #setHeaderData() {\n const o = this.dmsObject();\n if (!o) {\n this.headerData = undefined;\n } else {\n const roc = this.#objectConfig.getResolvedObjectConfig(o.data, APP_TYPES['file'], APP_ID);\n this.headerData = {\n title: roc.title,\n description: roc.description,\n icon: roc.icon?.value\n };\n this.retentionState.set(this.#retention.getRetentionState(o));\n }\n }\n\n onFileDrop(file: File[]) {\n this.#drive.setBusy(true);\n const dmsObject = this.dmsObject();\n\n dmsObject &&\n this.#drive\n .uploadContent(dmsObject.id, file[0])\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n }\n\n versionSelected(version: number) {\n const dmsObject = this.dmsObject();\n dmsObject && this.#router.navigate(['../..', 'versions', dmsObject.id], { queryParams: { version }, relativeTo: this.#route });\n }\n\n private _loadDetails(id: string | null) {\n if (!id) {\n this.dmsObject.set(undefined);\n this.headerData = undefined;\n } else {\n this.#shellService.addBusy();\n // load the dms object\n this.#dmsService.getDmsObject(id).subscribe({\n next: (o: DmsObject) => {\n this.dmsObject.set(o);\n },\n error: (e: HttpErrorResponse) => {\n this.dmsObject.set(undefined);\n switch (e.status) {\n case 404:\n this.errorMessage = this.translate.instant('yuv.app.drive.page.object.error.404');\n break;\n default:\n this.errorMessage = this.translate.instant('yuv.app.drive.page.object.error.default');\n }\n },\n complete: () => this.#shellService.removeBusy()\n });\n }\n }\n}\n","@let object = dmsObject();\n@if (object) {\n <div\n class=\"object\"\n yuvContainerSize\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropReplaceDisabled()\"\n (fileDrop)=\"onFileDrop($event)\"\n >\n <ymd-ribbon [objects]=\"[object]\" [excludeActions]=\"excludeActions\" class=\"object__surface\">\n <ng-template #primaryActions>\n <div class=\"nav\">\n <button mat-icon-button class=\"back\" (click)=\"openParent()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <button mat-icon-button class=\"refresh\" [matTooltip]=\"'yuv.app.drive.page.object.refresh.tooltip' | translate\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n </ng-template>\n <!-- <ng-template #secondaryActions></ng-template> -->\n </ymd-ribbon>\n\n @let ssl = smallScreenLayout();\n @if (ssl) {\n <mat-tab-group class=\"object__surface\" mat-stretch-tabs=\"true\">\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.content.title' | translate\">\n <ng-template matTabContent>\n @if (object && object?.content) {\n <yuv-object-preview [dmsObject]=\"object\"></yuv-object-preview>\n }\n </ng-template>\n </mat-tab>\n\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-metadata [flavoredDmsObject]=\"flavoredDmsObject()\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </ng-template>\n </mat-tab>\n\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.history.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-audit [dmsObject]=\"object\"></yuv-object-audit>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n } @else {\n <yuv-split-view [layoutSettingsID]=\"layoutSettingIdBase + 'splitview'\" [gutterSize]=\"1\" class=\"object__surface\">\n <ng-template yuvSplitArea [size]=\"40\">\n <section class=\"meta\">\n <header>\n <yuv-object-flavor disableSelection=\"true\" [dmsObject]=\"object\"></yuv-object-flavor>\n\n @if (headerData) {\n\n <div class=\"object-icon\"><mat-icon >{{headerData.icon}}</mat-icon></div>\n <h1><ng-container *yuvRenderer=\"headerData.title\"></ng-container></h1>\n <div class=\"description\"><ng-container *yuvRenderer=\"headerData.description\"></ng-container></div>\n <div class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"object\"></yuv-retention-badge>\n </div>\n }\n </header>\n\n <mat-tab-group>\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\" >\n <yuv-object-metadata [flavoredDmsObject]=\"flavoredDmsObject()\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </mat-tab>\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.history.title' | translate\">\n <yuv-object-audit [dmsObject]=\"object\"></yuv-object-audit\n ></mat-tab>\n </mat-tab-group>\n </section>\n </ng-template>\n <ng-template yuvSplitArea [size]=\"60\">\n @if (object && object?.content) {\n <yuv-object-preview [dmsObject]=\"object\"></yuv-object-preview>\n }\n </ng-template>\n </yuv-split-view>\n }\n </div>\n} @else if (errorMessage) {\n <!-- object could not be loaded -->\n <div class=\"error state\">\n <yuv-icon [svg]=\"icons.error\"></yuv-icon>\n <p>{{ errorMessage }}</p>\n </div>\n} @else {\n <!-- object is loading -->\n <div class=\"loading state\">\n <mat-progress-spinner mode=\"indeterminate\" class=\"ymt-progress-spinner--giant\"></mat-progress-spinner>\n </div>\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';\nimport { of } from 'rxjs';\nimport { DriveService } from '../drive/drive.service';\nimport { DRIVE_QUERY_FOLDER_ID } from '../drive/drive.interface';\n\nexport const filesResolver: ResolveFn<boolean> = (route: ActivatedRouteSnapshot) => {\n const id = route.params['id'];\n const driveStore = inject(DriveService);\n if (id !== DRIVE_QUERY_FOLDER_ID) driveStore.resolveFilesState(id).subscribe();\n\n return of(true);\n};\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';\nimport { of, forkJoin } from 'rxjs';\nimport { DriveService } from '../drive/drive.service';\n\nexport const versionsResolver: ResolveFn<boolean> = (route: ActivatedRouteSnapshot) => {\n const id = route.params['id'];\n const driveStore = inject(DriveService);\n\n forkJoin([driveStore.getVersions(id), driveStore.getSelectedDmsObject(id)]).subscribe();\n\n return of(true);\n};\n","import { Route } from '@angular/router';\nimport { DriveFrameComponent } from './container/drive/drive.component';\nimport { FilesPageComponent } from './pages/files/files.component';\nimport { ObjectPageComponent } from './pages/object/object.component';\nimport { filesResolver } from './services/resolver';\n\nexport const YuuvisDriveRoutes: Route[] = [\n {\n path: '',\n component: DriveFrameComponent,\n children: [\n { path: 'files', redirectTo: 'files/root' },\n { path: 'files/:id', component: FilesPageComponent, resolve: { filesResolver } },\n { path: 'object/:id', component: ObjectPageComponent },\n { path: '', redirectTo: 'files/root', pathMatch: 'full' }\n ]\n }\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","switchMap","map","i2","i3","MATERIAL","TranslateService","i4","finalize","TranslateModule","i6","i9","i5","filter"],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-app-drive.mjs","sources":["../../../../../libs/apps/drive/src/lib/drive.icons.ts","../../../../../libs/apps/drive/src/lib/drive.schema.ts","../../../../../libs/apps/drive/src/lib/services/tokens/breadcrumb-max-depth.token.ts","../../../../../libs/apps/drive/src/lib/services/drive/drive.interface.ts","../../../../../libs/apps/drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.ts","../../../../../libs/apps/drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.html","../../../../../libs/apps/drive/src/lib/services/drive/versions/versions.mapping.ts","../../../../../libs/apps/drive/src/lib/services/drive/drive.service.ts","../../../../../libs/apps/drive/src/lib/services/providers/drive.providers.ts","../../../../../libs/apps/drive/src/lib/actions/paste/paste.action.ts","../../../../../libs/apps/drive/src/lib/actions/rename/rename.validator.ts","../../../../../libs/apps/drive/src/lib/components/object-name/object-name.component.ts","../../../../../libs/apps/drive/src/lib/components/object-name/object-name.component.html","../../../../../libs/apps/drive/src/lib/actions/rename/rename.component.ts","../../../../../libs/apps/drive/src/lib/actions/rename/rename.component.html","../../../../../libs/apps/drive/src/lib/actions/rename/rename.action.ts","../../../../../libs/apps/drive/src/lib/actions/copy-link/copy-link.action.ts","../../../../../libs/apps/drive/src/lib/actions/updateContent/update.content.action.ts","../../../../../libs/apps/drive/src/lib/components/overlay/create-folder/create-folder.component.ts","../../../../../libs/apps/drive/src/lib/components/overlay/create-folder/create-folder.component.html","../../../../../libs/apps/drive/src/lib/components/add-button/add-button.component.ts","../../../../../libs/apps/drive/src/lib/components/add-button/add-button.component.html","../../../../../libs/apps/drive/src/lib/components/sort/sort.component.ts","../../../../../libs/apps/drive/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../../../libs/apps/drive/src/lib/components/breadcrumb/breadcrumb.component.html","../../../../../libs/apps/drive/src/lib/services/stored-query/stored-query.data.ts","../../../../../libs/apps/drive/src/lib/components/folder-tree/folder-tree.component.ts","../../../../../libs/apps/drive/src/lib/components/folder-tree/folder-tree.component.html","../../../../../libs/apps/drive/src/lib/components/versions-list/tile/tile.component.ts","../../../../../libs/apps/drive/src/lib/components/versions-list/versions-list.component.ts","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.ts","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.html","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search.component.ts","../../../../../libs/apps/drive/src/lib/components/drive-search/drive-search.component.html","../../../../../libs/apps/drive/src/lib/actions/manage-versions/component/manage-versions.component.ts","../../../../../libs/apps/drive/src/lib/actions/manage-versions/component/manage-versions.component.html","../../../../../libs/apps/drive/src/lib/actions/manage-versions/manage-versions.action.ts","../../../../../libs/apps/drive/src/lib/container/drive/drive.component.ts","../../../../../libs/apps/drive/src/lib/container/drive/drive.component.html","../../../../../libs/apps/drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.ts","../../../../../libs/apps/drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.html","../../../../../libs/apps/drive/src/lib/components/ribbon/ribbon.component.ts","../../../../../libs/apps/drive/src/lib/components/ribbon/ribbon.component.html","../../../../../libs/apps/drive/src/lib/components/search-filter/search-filter.component.ts","../../../../../libs/apps/drive/src/lib/components/search-filter/search-filter.component.html","../../../../../libs/apps/drive/src/lib/services/stored-query/stored-query.service.ts","../../../../../libs/apps/drive/src/lib/pages/files/files.component.ts","../../../../../libs/apps/drive/src/lib/pages/files/files.component.html","../../../../../libs/apps/drive/src/lib/pages/object/object.component.ts","../../../../../libs/apps/drive/src/lib/pages/object/object.component.html","../../../../../libs/apps/drive/src/lib/services/resolver/files.resolver.ts","../../../../../libs/apps/drive/src/lib/services/resolver/versions.route.resolver.ts","../../../../../libs/apps/drive/src/lib/lib.routes.ts","../../../../../libs/apps/drive/src/yuuvis-app-drive.ts"],"sourcesContent":["export const APP_DRIVE_ICONS = {\n file: 'draft',\n folder: 'folder_open',\n folderx: 'folder',\n favorite: 'star',\n settings: 'settings',\n sort: 'swap_vert',\n home: 'home',\n toggleLeft: 'dock_to_right',\n toggleRight: 'dock_to_left',\n clipboard: 'inventory',\n add: 'add',\n createFolder: 'create_new_folder',\n createFile: 'note_add',\n unchecked: 'check_box_outline_blank',\n checked: 'check_box',\n extendedSearch: 'tune'\n};\n\n// export const APP_DRIVE_ICONS = {\n// file: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\"/></svg>',\n// folder:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h240l80 80h320q33 0 56.5 23.5T880-640H447l-80-80H160v480l96-320h684L837-217q-8 26-29.5 41.5T760-160H160Zm84-80h516l72-240H316l-72 240Zm0 0 72-240-72 240Zm-84-400v-80 80Z\"/></svg>',\n// folderx:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h240l80 80h320q33 0 56.5 23.5T880-640v400q0 33-23.5 56.5T800-160H160Zm0-80h640v-400H447l-80-80H160v480Zm0 0v-480 480Z\"/></svg>',\n// favorite:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143ZM233-120l65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Zm247-350Z\"/></svg>',\n// settings:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M447-288h64l14-56.31q14-4.69 26.5-11.19Q564-362 575-372l55 16 32-55-41-38.52q2-13.48 3-29.98t-2-29.5l40-38-32-55-54 15q-11-10-24-17t-27-12l-13-56h-65l-12 56q-14 5-27 12t-24 17l-54-16-32 56 41 38q-3 14-3 29.5t3 29.5l-41 39 32 56 55-17q11 9 23.5 16t26.5 12l12 56Zm32.79-120Q450-408 429-429.21t-21-51Q408-510 429.21-531t51-21Q510-552 531-530.79t21 51Q552-450 530.79-429t-51 21ZM216-144q-29.7 0-50.85-21.15Q144-186.3 144-216v-528q0-29.7 21.15-50.85Q186.3-816 216-816h528q29.7 0 50.85 21.15Q816-773.7 816-744v528q0 29.7-21.15 50.85Q773.7-144 744-144H216Zm0-72h528v-528H216v528Zm0-528v528-528Z\"/></svg>',\n// sort: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#5f6368\" viewBox=\"0 -960 960 960\"><path d=\"M320-440v-287L217-624l-57-56 200-200 200 200-57 56-103-103v287h-80ZM600-80 400-280l57-56 103 103v-287h80v287l103-103 57 56L600-80Z\"/></svg>',\n// home: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#e8eaed\" viewBox=\"0 -960 960 960\"><path d=\"M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z\"/></svg>',\n// toggleLeft:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M211-144q-27.64 0-47.32-19.68T144-211v-538q0-27.64 19.68-47.32T211-816h538q27.64 0 47.32 19.68T816-749v538q0 27.64-19.68 47.32T749-144H211Zm125-72v-528H216v528h120Zm72 0h336v-528H408v528Zm-72 0H216h120Z\"/></svg>',\n// toggleRight:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M211-144q-27.64 0-47.32-19.68T144-211v-538q0-27.64 19.68-47.32T211-816h538q27.64 0 47.32 19.68T816-749v538q0 27.64-19.68 47.32T749-144H211Zm413-72h120v-528H624v528Zm-72 0v-528H216v528h336Zm72 0h120-120Z\"/></svg>',\n//\n// clipboard:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M620-163 450-333l56-56 114 114 226-226 56 56-282 282Zm220-397h-80v-200h-80v120H280v-120h-80v560h240v80H200q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v200ZM480-760q17 0 28.5-11.5T520-800q0-17-11.5-28.5T480-840q-17 0-28.5 11.5T440-800q0 17 11.5 28.5T480-760Z\"/></svg>',\n// addCircle:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M444-288h72v-156h156v-72H516v-156h-72v156H288v72h156v156Zm36.28 192Q401-96 331-126t-122.5-82.5Q156-261 126-330.96t-30-149.5Q96-560 126-629.5q30-69.5 82.5-122T330.96-834q69.96-30 149.5-30t149.04 30q69.5 30 122 82.5T834-629.28q30 69.73 30 149Q864-401 834-331t-82.5 122.5Q699-156 629.28-126q-69.73 30-149 30Zm-.28-72q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Zm0-312Z\"/></svg>',\n// createFolder:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M576-324h72v-72h72v-72h-72v-72h-72v72h-72v72h72v72ZM168-192q-29 0-50.5-21.5T96-264v-432q0-29.7 21.5-50.85Q139-768 168-768h216l96 96h312q29.7 0 50.85 21.15Q864-629.7 864-600v336q0 29-21.15 50.5T792-192H168Zm0-72h624v-336H450l-96-96H168v432Zm0 0v-432 432Z\"/></svg>',\n// createFile:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 -960 960 960\" width=\"20px\" fill=\"#e8eaed\"><path d=\"M444-240h72v-108h108v-72H516v-108h-72v108H336v72h108v108ZM263.72-96Q234-96 213-117.15T192-168v-624q0-29.7 21.15-50.85Q234.3-864 264-864h312l192 192v504q0 29.7-21.16 50.85Q725.68-96 695.96-96H263.72ZM528-624v-168H264v624h432v-456H528ZM264-792v189-189 624-624Z\"/></svg>',\n//\n// unchecked:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Z\"/></svg>',\n// checked:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"m424-312 282-282-56-56-226 226-114-114-56 56 170 170ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\"/></svg>',\n// extendedSearch:\n// '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M440-120v-240h80v80h320v80H520v80h-80Zm-320-80v-80h240v80H120Zm160-160v-80H120v-80h160v-80h80v240h-80Zm160-80v-80h400v80H440Zm160-160v-240h80v80h160v80H680v80h-80Zm-480-80v-80h400v80H120Z\"/></svg>'\n// };\n","// Mapping schema for this apps backend schema\n\nimport { SystemType, VirtualObjectType } from '@yuuvis/client-core';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ActionContext } from '@yuuvis/client-framework/actions';\nimport { APP_DRIVE_ICONS } from './drive.icons';\n\n// use marker to extract the labels for the app schema types\n// make sure to provide a marker for each type/flavor ID\nmarker('io.yuuvis.app.drive.folder');\nmarker('io.yuuvis.app.drive.file');\n\nexport const FS_PROPERTIES = {\n name: 'appOsdrive:fileName'\n};\nexport const FS_SOTS = {\n object: 'appOsdrive:file'\n};\n\nexport const APP_PREFIX = 'appDrive:';\nexport const APP_ID = 'io.yuuvis.app.drive';\n\nexport const APP_TYPES: Record<string, VirtualObjectType> = {\n folder: {\n id: `${APP_ID}.folder`,\n icon: APP_DRIVE_ICONS.folder,\n objectType: SystemType.FOLDER,\n sots: [FS_SOTS.object]\n },\n file: {\n id: `${APP_ID}.file`,\n icon: APP_DRIVE_ICONS.file,\n objectType: SystemType.DOCUMENT,\n sots: [FS_SOTS.object]\n }\n};\n\nexport const APP_ACTIONS = {\n rename: 'app.drive.action.rename',\n paste: 'app.drive.action.paste',\n copyLink: 'app.drive.action.copy.link',\n contentUpdate: 'app.drive.action.content.update',\n manageVersions: 'app.drive.action.manage-versions'\n};\n\nexport const ACTION_CONTEXT: ActionContext = {\n subjectProperty: FS_PROPERTIES.name,\n appId: APP_ID\n};\n","import { InjectionToken } from '@angular/core';\n\nexport const DRIVE_APP_BREADCRUMB_MAX_DEPTH = new InjectionToken<number>('Max depth of the folder strukture in the Breadcrumb', { factory: () => 3 });\n","import { DmsObject, SearchQuery } from '@yuuvis/client-core';\nimport { Action } from '@yuuvis/client-framework/actions';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\n\nexport interface BreadCrumb {\n name: string;\n id: string;\n}\nexport interface DriveState {\n currentFolder: string | null;\n query: SearchQuery | null;\n queryTitle: string | null;\n extendedQuery: boolean;\n selection: DmsObject[];\n actions: Action[];\n busy: boolean;\n sort: {\n property: string;\n order: 'asc' | 'desc';\n } | null;\n breadcrumb: {\n loading: boolean;\n partial: boolean;\n items: BreadCrumb[];\n folder: { folderId: string | null; entry: BreadCrumb[]; loading: boolean } | null;\n };\n versions: {\n versionsList: TileData[];\n selectedVersion: DmsObject[] | null;\n };\n selectedDmsObject: DmsObject | null;\n}\n\nexport interface DriveValidatePayload {\n app: string;\n fileNames: string[];\n targetFolderId?: string;\n}\nexport interface DriveValidateResponse {\n errors: [{ message: string[] }];\n existingFileNames: string[];\n invalidFileNames: string[];\n valid: boolean;\n}\n\n// ID representing the root folder\nexport const DRIVE_ROOT_FOLDER_ID = 'root';\n// ID representing a custom view like 'recently edited documents'\nexport const DRIVE_QUERY_FOLDER_ID = 'query';\n\nexport type DriveFolderId = typeof DRIVE_ROOT_FOLDER_ID | typeof DRIVE_QUERY_FOLDER_ID;\n\nexport enum DRIVE_EVENT {\n refresh = 'refresh'\n}\n\nexport enum DRIVE_ACTION_MODE {\n CUT = 'cut',\n COPY = 'copy'\n}\n\nexport interface CreateResult {\n id?: string;\n error?: CreateError;\n}\nexport type CreateError = 'default' | 'nameExists';\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ClipboardService, DmsObject, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { tap } from 'rxjs';\nimport { FS_PROPERTIES } from '../../../drive.schema';\nimport { DRIVE_EVENT } from '../drive.interface';\nimport { DriveService } from '../drive.service';\nimport { ResolveNameConflictsPayload } from './resolve-name-conflicts.interface';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n/**\n * Component to resolve name conflicts. Based on its mode, it\n * will handle files or objects that are about to be uploaded,\n * copied or moved.\n */\n@Component({\n selector: 'ymd-resolve-name-conflicts',\n standalone: true,\n imports: [CommonModule, TranslateModule, DialogComponent, YmtButtonDirective],\n templateUrl: './resolve-name-conflicts.component.html',\n styleUrl: './resolve-name-conflicts.component.scss'\n})\nexport class ResolveNameConflictsComponent implements OnInit {\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<ResolveNameConflictsComponent>);\n #drive = inject(DriveService);\n #clipboard = inject(ClipboardService);\n translate = inject(TranslateService);\n\n payload: ResolveNameConflictsPayload = this.#dialogData;\n validItems: { name: string; item: DmsObject | File }[] = [];\n existingFileNames: string[] = this.payload?.existingFileNames || [];\n invalidFileNames: string[] = this.payload?.invalidFileNames || [];\n\n content = {\n headline: '',\n message: '',\n messageValid: '',\n proceed: ''\n };\n\n proceed() {\n if (!this.payload) return;\n\n switch (this.payload.mode) {\n case 'upload': {\n this.#upload(this.validItems.map((i) => i.item) as File[]);\n break;\n }\n case 'copy': {\n this.#copy(this.validItems.map((i) => i.item) as DmsObject[]);\n break;\n }\n case 'move': {\n this.#move(this.validItems.map((i) => i.item) as DmsObject[]);\n break;\n }\n }\n }\n\n #upload(files: File[]) {\n this.#drive.upload(files, this.payload?.data).subscribe();\n // upload errors and progress are handled by the upload progress component\n this.#dialogRef.close();\n }\n\n #copy(objects: DmsObject[]) {\n this.#drive.setBusy(true);\n this.#dialogRef.close();\n this.#drive\n .copyToCurrentFolder(objects, false)\n .pipe(\n tap((res) => {\n res && this.#drive.emitEvent(DRIVE_EVENT.refresh);\n this.#clipboard.clear();\n })\n )\n .subscribe({\n complete: () => {\n this.#drive.setBusy(false);\n }\n });\n }\n\n #move(objects: DmsObject[]) {\n this.#drive.setBusy(true);\n this.#dialogRef.close();\n this.#drive\n .moveToCurrentFolder(objects)\n .pipe(\n tap((res) => {\n res && this.#drive.emitEvent(DRIVE_EVENT.refresh);\n this.#clipboard.clear();\n })\n )\n .subscribe({\n complete: () => {\n this.#drive.setBusy(false);\n }\n });\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n\n #setupValidItems() {\n if (!this.payload) return;\n if (this.payload?.mode === 'upload') {\n this.validItems = (this.payload.items as File[])\n .filter((f) => !this.existingFileNames.includes(f.name))\n .map((item) => ({\n name: item.name,\n item\n }));\n } else {\n this.validItems = (this.payload.items as DmsObject[])\n .filter((o) => !this.existingFileNames.includes(o.data[FS_PROPERTIES.name] as string))\n .map((item) => ({\n name: item.data[FS_PROPERTIES.name] as string,\n item\n }));\n }\n }\n\n #setupContent() {\n if (!this.payload) return;\n\n switch (this.payload.mode) {\n case 'upload': {\n this.content = {\n headline: this.translate.instant('yuv.app.drive.name.conflict.upload.headline'),\n message: this.translate.instant('yuv.app.drive.name.conflict.upload.message'),\n messageValid: this.translate.instant('yuv.app.drive.name.conflict.upload.messageValid'),\n proceed: this.translate.instant('yuv.app.drive.name.conflict.upload.proceed')\n };\n break;\n }\n case 'copy': {\n this.content = {\n headline: this.translate.instant('yuv.app.drive.name.conflict.copy.headline'),\n message: this.translate.instant('yuv.app.drive.name.conflict.copy.message'),\n messageValid: this.translate.instant('yuv.app.drive.name.conflict.copy.messageValid'),\n proceed: this.translate.instant('yuv.app.drive.name.conflict.copy.proceed')\n };\n break;\n }\n case 'move': {\n this.content = {\n headline: this.translate.instant('yuv.app.drive.name.conflict.move.headline'),\n message: this.translate.instant('yuv.app.drive.name.conflict.move.message'),\n messageValid: this.translate.instant('yuv.app.drive.name.conflict.move.messageValid'),\n proceed: this.translate.instant('yuv.app.drive.name.conflict.move.proceed')\n };\n break;\n }\n }\n }\n\n ngOnInit(): void {\n this.#setupValidItems();\n this.#setupContent();\n }\n}\n","<yuv-dialog [headertitel]=\"content.headline\">\n <main>\n <p>{{ content.message }}</p>\n\n <ul>\n @for (ef of existingFileNames; track $index) {\n <li>{{ ef }}</li>\n }\n </ul>\n\n @if (validItems.length) {\n <p>{{ content.messageValid }}</p>\n <ul>\n @for (f of validItems; track $index) {\n <li>{{ f.name }}</li>\n }\n </ul>\n }\n </main>\n <footer>\n @if (validItems.length) {\n <button ymtButton=\"primary\" (click)=\"proceed()\">{{ content.proceed }}</button>\n }\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.app.drive.name.conflict.cancel' | translate }}</button>\n </footer>\n</yuv-dialog>\n","import { BaseObjectTypeField, DmsObject, ResolvedObjectConfigItem } from '@yuuvis/client-core';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\nimport { FS_PROPERTIES } from '../../../drive.schema';\n\nconst getResolvedObjectConfigItem = (propertyName: string, instanceData: Record<string, unknown>): ResolvedObjectConfigItem => {\n const item: ResolvedObjectConfigItem = {\n propertyName: propertyName,\n value: instanceData[propertyName]\n };\n // Meta data are considered properties that start with the property name followed by an underscore.\n // Organization fields for example have an additional property 'xyz_title' that contains the resolved\n // name of a user while the value itself is the users ID.\n const metaData = Object.keys(instanceData)\n .filter((key) => key.startsWith(propertyName + '_'))\n .map((key) => ({ [key.substring(key.indexOf('_') + 1)]: instanceData[key] }));\n\n // If there are meta data properties, they'll be merged into a Record where the\n // key is the property name without the underscore and the actual properties name.\n // So { 'xyz_title': 'John Doe' } will be merged into { title: 'John Doe' }\n if (metaData.length) {\n const meta = metaData.reduce((acc, cur) => ({ ...acc, ...cur }), {});\n item.meta = meta;\n }\n\n return item;\n};\n\nconst mapToTileData = (objects: DmsObject[]): TileData[] => {\n return objects.map((dmsObject) => {\n const sots = dmsObject.sots || [];\n\n const tli: TileData = {\n objectTypeId: dmsObject.objectTypeId,\n id: dmsObject.id,\n actions: undefined,\n badges: undefined,\n instanceData: dmsObject.data,\n dmsObject,\n title: { rendererType: 'text', propertyName: BaseObjectTypeField.PARENT_OBJECT_TYPE_ID, value: dmsObject.data[FS_PROPERTIES.name] }\n };\n\n tli.icon = { rendererType: 'icon', propertyName: BaseObjectTypeField.OBJECT_TYPE_ID, value: BaseObjectTypeField.OBJECT_TYPE_ID };\n\n return tli;\n });\n};\n\nexport const mapSearchResult = (res: any): TileData[] => {\n return mapToTileData(res);\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NavigationStart, Router } from '@angular/router';\nimport { patchState, signalState } from '@ngrx/signals';\nimport {\n BackendService,\n BaseObjectTypeField,\n ClipboardService,\n ContentStreamField,\n DmsObject,\n DmsService,\n EventService,\n SearchQuery,\n SearchService,\n SystemType,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { Action, ActionsService, BASE_ACTION } from '@yuuvis/client-framework/actions';\nimport { Observable, Subject, catchError, filter, forkJoin, map, of, switchMap, tap } from 'rxjs';\nimport { ACTION_CONTEXT, APP_ID, APP_TYPES, FS_PROPERTIES, FS_SOTS } from '../../drive.schema';\nimport { DRIVE_APP_BREADCRUMB_MAX_DEPTH } from '../tokens';\nimport {\n BreadCrumb,\n CreateError,\n CreateResult,\n DRIVE_ACTION_MODE,\n DRIVE_EVENT,\n DRIVE_ROOT_FOLDER_ID,\n DriveState,\n DriveValidatePayload,\n DriveValidateResponse\n} from './drive.interface';\nimport { ResolveNameConflictsComponent } from './resolve-name-conflicts/resolve-name-conflicts.component';\nimport { ResolveNameConflictsPayload } from './resolve-name-conflicts/resolve-name-conflicts.interface';\nimport { mapSearchResult } from './versions/versions.mapping';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriveService {\n readonly #actionsService = inject(ActionsService);\n readonly #eventService = inject(EventService);\n readonly #router = inject(Router);\n readonly #dmsService = inject(DmsService);\n readonly #searchService = inject(SearchService);\n readonly #dialog = inject(MatDialog);\n readonly #backend = inject(BackendService);\n readonly #clipboardService = inject(ClipboardService);\n\n private readonly MAX_DEPTH: number = inject(DRIVE_APP_BREADCRUMB_MAX_DEPTH);\n private breadcrumbCache = new Map<string, { name: string; id: string; parentId: string | null }>();\n\n #eventSource = new Subject<string>();\n readonly events$: Observable<string> = this.#eventSource.asObservable();\n\n readonly #defaultSort: {\n property: string;\n order: 'asc' | 'desc';\n } = {\n property: FS_PROPERTIES.name,\n order: 'asc'\n };\n\n readonly initialState: DriveState = {\n currentFolder: null,\n query: null,\n queryTitle: null,\n extendedQuery: false,\n selection: [],\n actions: [],\n busy: false,\n sort: this.#defaultSort,\n breadcrumb: {\n loading: false,\n partial: false,\n items: [],\n folder: null\n },\n versions: {\n versionsList: [],\n selectedVersion: null\n },\n selectedDmsObject: null\n };\n\n readonly state$ = signalState<DriveState>(this.initialState);\n readonly breadcrumbFolderPreview = this.state$.breadcrumb.folder;\n private _busyTaskCount = 0;\n private _defaultRibbonActions: Action[] = [];\n lastRouteURL?: string;\n\n constructor() {\n this.#router.events\n .pipe(\n takeUntilDestroyed(),\n filter((e) => this.state$.selection().length > 0 && e instanceof NavigationStart)\n )\n // clear selection on route chnages\n .subscribe({ next: () => this.setSelection([]) });\n\n this.#eventService.on(YuvEventType.DMS_OBJECT_UPDATED).subscribe((e: YuvEvent) => {\n // check if current selection contains the updated object\n const dmsObject = e.data as DmsObject;\n const selection = this.state$.selection();\n const matchIdx = selection.findIndex((o) => o.id === dmsObject.id);\n if (matchIdx !== -1) {\n // update the object in the selection\n selection[matchIdx] = dmsObject;\n patchState(this.state$, { selection: [...selection] });\n }\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_DELETED, YuvEventType.DMS_OBJECT_CREATED, YuvEventType.DMS_OBJECTS_MOVED)\n .subscribe(() => this.emitEvent(DRIVE_EVENT.refresh));\n }\n\n #mapedCurrentFolder() {\n return this.state$.currentFolder() === DRIVE_ROOT_FOLDER_ID ? null : this.state$.currentFolder();\n }\n\n emitEvent(evt: string) {\n this.#eventSource.next(evt);\n }\n\n setBusy(busy: boolean) {\n if (busy) this._busyTaskCount++;\n else if (this._busyTaskCount > 0) this._busyTaskCount--;\n patchState(this.state$, { busy: this._busyTaskCount !== 0 });\n }\n\n setSelection(o: DmsObject[]) {\n patchState(this.state$, { selection: o });\n this._getActions();\n }\n\n updateQuery(query: SearchQuery, queryTitle: string | null = null, extendedQuery = false) {\n patchState(this.state$, {\n query: this.applyFolderListSearchConditions(query),\n queryTitle: queryTitle,\n extendedQuery: extendedQuery\n });\n }\n\n setSort(property: string, order: 'asc' | 'desc') {\n const stateQuery = this.state$.query();\n if (stateQuery) {\n const clonedQueryState = structuredClone(stateQuery);\n\n // TODO: remove if folders should stay on top\n clonedQueryState.sort = [];\n\n const sort = property ? { property, order } : { ...this.#defaultSort, order };\n\n patchState(this.state$, { query: clonedQueryState, sort });\n this.applyFolderListSearchConditions(clonedQueryState, !property);\n }\n }\n\n updateCurrentFolder(currentFolderID: string | null | undefined) {\n patchState(this.state$, {\n currentFolder: currentFolderID || null,\n extendedQuery: false\n });\n }\n\n #copyToFolder(objects: DmsObject[], folderId: string | null, options: { waitForSearchConsistency: boolean }, validateNames = true): Observable<any> {\n return validateNames\n ? this.validateNames(\n objects.filter((o) => o.sots.includes(FS_SOTS.object)).map((f) => f.data[FS_PROPERTIES.name] as string),\n folderId\n ).pipe(\n switchMap((res: DriveValidateResponse) => {\n if (res.existingFileNames?.length || res.invalidFileNames?.length) {\n this.#resolveNameConflicts({\n existingFileNames: res.existingFileNames,\n invalidFileNames: res.invalidFileNames,\n mode: 'copy',\n items: objects\n });\n return of([]);\n } else return this.#dmsService.copyDmsObjects(folderId, objects, options);\n })\n )\n : this.#dmsService.copyDmsObjects(folderId, objects, options);\n }\n\n #moveToFolder(objects: DmsObject[], folderId: string | null, options: { waitForSearchConsistency: boolean }, validateNames = true): Observable<any> {\n return validateNames\n ? this.validateNames(\n objects.filter((o) => o.sots.includes(FS_SOTS.object)).map((f) => f.data[FS_PROPERTIES.name] as string),\n folderId\n ).pipe(\n switchMap((res: DriveValidateResponse) => {\n if (res.existingFileNames?.length || res.invalidFileNames?.length) {\n //console.log('VALIDATION: ', { res });\n this.#resolveNameConflicts({\n existingFileNames: res.existingFileNames,\n invalidFileNames: res.invalidFileNames,\n mode: 'move',\n items: objects\n });\n return of([]);\n } else return this.#dmsService.moveDmsObjects(folderId, objects, options);\n })\n )\n : this.#dmsService.moveDmsObjects(folderId, objects, options);\n }\n\n copyToCurrentFolder(objects: DmsObject[], validateNames = true): Observable<any> {\n const options = { waitForSearchConsistency: true };\n return this.#copyToFolder(objects, this.#mapedCurrentFolder(), options, validateNames);\n }\n\n moveToCurrentFolder(objects: DmsObject[], validateNames = true): Observable<any> {\n const options = { waitForSearchConsistency: true };\n return this.#moveToFolder(objects, this.#mapedCurrentFolder(), options, validateNames);\n }\n\n #resolveNameConflicts(payload: ResolveNameConflictsPayload) {\n this.#dialog.open(ResolveNameConflictsComponent, {\n data: payload,\n maxWidth: '400px'\n });\n }\n\n pasteFromClipboard(destinationObject?: DmsObject): Observable<any> {\n const cd = this.#clipboardService.getClipboardData(APP_ID);\n const destination = destinationObject?.isFolder ? destinationObject.id : this.#mapedCurrentFolder();\n return (\n cd && cd.objects && cd.objects.length > 0\n ? cd?.mode === DRIVE_ACTION_MODE.CUT\n ? this.#moveToFolder(cd.objects || [], destination, { waitForSearchConsistency: true }, true)\n : cd?.mode === DRIVE_ACTION_MODE.COPY\n ? this.#copyToFolder(cd.objects || [], destination, { waitForSearchConsistency: true }, true)\n : of(null)\n : of(null)\n ).pipe(\n tap((res) => {\n res && this.emitEvent(DRIVE_EVENT.refresh);\n this.#clipboardService.clear();\n })\n );\n }\n\n checkNamesAndUpload(files: File[], data?: Record<string, unknown>): Observable<CreateResult[]> {\n return this.validateNames(\n files.map((f) => f.name),\n this.#mapedCurrentFolder()\n ).pipe(\n switchMap((res: DriveValidateResponse) => {\n if (res.existingFileNames?.length || res.invalidFileNames?.length) {\n const resPayload: ResolveNameConflictsPayload = {\n existingFileNames: res.existingFileNames,\n invalidFileNames: res.invalidFileNames,\n mode: 'upload',\n items: files,\n data\n };\n this.#dialog.open(ResolveNameConflictsComponent, { data: resPayload });\n return of([]);\n } else return this.upload(files, data);\n })\n );\n }\n\n uploadContent(objectId: string, file: File): Observable<CreateResult[]> {\n return this.#dmsService.uploadContent(objectId, file);\n }\n\n /**\n * Uploads files to the current folder\n * @param files files to be uploaded\n * @param data additional data to be applied to the object\n */\n upload(files: File[], data?: Record<string, unknown>): Observable<CreateResult[]> {\n return forkJoin(\n files.map((file: File) => {\n const uploadData: Record<string, any> = data || {};\n // apply filesystem SOT\n const sots = uploadData[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] || [];\n uploadData[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] = [...sots, FS_SOTS.object];\n // setup the name to be the filename\n uploadData[FS_PROPERTIES.name] = file.name;\n const cf = this.#mapedCurrentFolder();\n if (cf && cf !== DRIVE_ROOT_FOLDER_ID) uploadData[BaseObjectTypeField.PARENT_ID] = cf;\n return this.#dmsService.createDmsObject(SystemType.DOCUMENT, uploadData, [file], file.name).pipe(\n map((res) => ({ id: res[0] })),\n catchError((e: HttpErrorResponse) => of({ error: this.#mapCreateError(e) }))\n );\n })\n );\n }\n\n createFolder(name: string): Observable<CreateResult> {\n const parentID = this.#mapedCurrentFolder();\n const data: Record<string, any> = {};\n data[FS_PROPERTIES.name] = name;\n // apply filesystem SOT\n data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] = [FS_SOTS.object];\n if (parentID && parentID !== DRIVE_ROOT_FOLDER_ID) data[BaseObjectTypeField.PARENT_ID] = parentID;\n return this.#dmsService.createDmsObject(APP_TYPES['folder'].objectType || '', data, []).pipe(\n map((res) => ({ id: res[0] })),\n catchError((e: HttpErrorResponse) => of({ error: this.#mapCreateError(e) }))\n );\n }\n\n #mapCreateError(e: HttpErrorResponse): CreateError {\n let error: CreateError = 'default';\n const ec = e.error.serviceErrorCode;\n if (ec === 99999) {\n const iec = e.error.innerError?.serviceErrorCode;\n if (iec === 11000) error = 'nameExists';\n }\n return error;\n }\n\n /**\n * Checks for existing names and invalid characters\n * @param name The name to be checked\n * @param parentId The parent folder (will be 'root' if not provided)\n * @returns already existing names\n */\n validateNames(names: string[], parentId?: string | null): Observable<DriveValidateResponse> {\n //console.log({ names, parentId });\n\n if (parentId === DRIVE_ROOT_FOLDER_ID) parentId = undefined;\n const dvp: DriveValidatePayload = {\n app: 'osdrive',\n fileNames: names,\n targetFolderId: parentId || undefined\n };\n return this.#backend.post('/dms/objects/validate', dvp).pipe(catchError((res: HttpErrorResponse) => of(res.error)));\n }\n\n getDefaultRibbonActions() {\n if (!this._defaultRibbonActions.length) {\n //[BASE_ACTION.download, BASE_ACTION.delete, 'app.drive.action.rename', BASE_ACTION.copy, BASE_ACTION.cut]\n Object.values({ ...BASE_ACTION, rename: 'app.drive.action.rename' }).forEach((id) => {\n const a = this.#actionsService.getActionById(id, ACTION_CONTEXT);\n if (a) this._defaultRibbonActions.push(a);\n });\n }\n return this._defaultRibbonActions;\n }\n\n private _getActions() {\n this.setBusy(true);\n this.#actionsService\n .getActions(this.state$.selection(), {\n context: ACTION_CONTEXT\n })\n .subscribe((actions: Action[]) => {\n patchState(this.state$, { actions });\n })\n .add(() => this.setBusy(false));\n }\n\n /**\n * Apply search conditions regarding folder listings\n * @param q\n */\n applyFolderListSearchConditions(q: SearchQuery, addBaseTypeId = true): SearchQuery {\n // folders first\n if (!q.sort) q.sort = [];\n addBaseTypeId &&\n q.sort.push({\n field: BaseObjectTypeField.BASE_TYPE_ID,\n order: 'desc'\n });\n q = this.applyBasicSearchConditions(q);\n\n return q;\n }\n\n applyBasicSearchConditions(q: SearchQuery): SearchQuery {\n q.fields = [\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.MODIFICATION_DATE,\n BaseObjectTypeField.MODIFIED_BY,\n ContentStreamField.FILENAME,\n ContentStreamField.MIME_TYPE,\n ContentStreamField.ID,\n ContentStreamField.LENGTH\n ];\n if (!q.types || !q.types.includes(FS_SOTS.object)) q.types = [...(q.types || []), FS_SOTS.object];\n // q.sortOptions.push(new SortOption(BaseObjectTypeField.BASE_TYPE_ID, 'desc'));\n const sort = this.state$.sort() || this.#defaultSort;\n if (!q.sort) q.sort = [];\n q.sort.push({\n field: sort.property,\n order: sort.order\n });\n q.includePermissions = true;\n // new SortOption(sort.property, sort.order));\n return q;\n }\n\n resolveFilesState(id: string) {\n return this.getFolderHierarchy(id);\n }\n\n getFolderHierarchy(folderId: string): Observable<BreadCrumb[]> {\n patchState(this.state$, {\n breadcrumb: {\n ...this.initialState.breadcrumb,\n loading: true\n }\n });\n\n return folderId === DRIVE_ROOT_FOLDER_ID\n ? of([])\n : this.#fetchFolder(folderId, 0, this.MAX_DEPTH).pipe(\n tap((res: { partial: boolean; items: BreadCrumb[] }) => {\n let items: BreadCrumb[] = [];\n if (res.items.length > 0) {\n items = [...items, ...res.items];\n }\n\n patchState(this.state$, {\n breadcrumb: {\n ...this.initialState.breadcrumb,\n partial: res.partial,\n loading: false,\n items\n }\n });\n }),\n map((res) => res.items)\n );\n }\n\n #fetchFolder(\n folderId: string,\n depth: number,\n maxDepth: number\n ): Observable<{\n partial: boolean;\n items: BreadCrumb[];\n }> {\n if (depth >= maxDepth) return of({ partial: true, items: [] });\n const cachedFolder = this.breadcrumbCache.get(folderId);\n if (cachedFolder) {\n return cachedFolder.parentId\n ? this.#fetchFolder(cachedFolder.parentId, depth + 1, maxDepth).pipe(\n map((parentFolders) => ({\n partial: parentFolders.partial,\n items: [...parentFolders.items, { name: cachedFolder.name, id: cachedFolder.id }]\n }))\n )\n : of({\n partial: false,\n items: [{ name: cachedFolder.name, id: cachedFolder.id }]\n });\n }\n return this.#dmsService.getDmsObject(folderId).pipe(\n map((folder) => {\n const currentFolder = {\n name: folder.data[FS_PROPERTIES.name] as string,\n id: folder.data[BaseObjectTypeField.OBJECT_ID] as string,\n parentId: folder.parentId\n };\n // this.breadcrumbCache.set(folder.id, currentFolder);\n return currentFolder;\n }),\n switchMap((folder) => {\n if (!folder.parentId) {\n return of({\n partial: false,\n items: [{ name: folder.name, id: folder.id }]\n });\n }\n\n return this.#fetchFolder(folder.parentId, depth + 1, maxDepth).pipe(\n map((parentFolders) => ({\n partial: parentFolders.partial,\n items: [...parentFolders.items, { name: folder.name, id: folder.id }]\n }))\n );\n })\n );\n }\n\n getVersions(id: string): Observable<DmsObject[]> {\n patchState(this.state$, { busy: true });\n return this.#dmsService.getDmsObjectVersions(id).pipe(\n tap((versions) => {\n patchState(this.state$, {\n busy: false,\n versions: {\n versionsList: mapSearchResult(versions),\n selectedVersion: this.state$.versions().selectedVersion\n }\n });\n })\n );\n }\n\n getSelectedDmsObject(id: string): Observable<DmsObject> {\n return this.#dmsService.getDmsObject(id).pipe(\n tap((dmsObject) =>\n patchState(this.state$, {\n selectedDmsObject: dmsObject,\n versions: {\n versionsList: this.state$.versions.versionsList(),\n selectedVersion: [dmsObject]\n }\n })\n )\n );\n }\n\n setSelectedVersion(version: any) {\n this.setBusy(true);\n return this.#dmsService.getDmsObjectVersion(version.dmsObject.id, version.dmsObject.version).pipe(\n tap((res) =>\n patchState(this.state$, {\n versions: {\n versionsList: this.state$.versions.versionsList(),\n selectedVersion: [res]\n }\n })\n ),\n tap(() => this.setBusy(false))\n );\n }\n\n setNewVersion(version?: number): Observable<DmsObject[] | null> {\n patchState(this.state$, { busy: true });\n const selectedVersion = this.state$.versions.selectedVersion();\n if (selectedVersion) {\n const versionNumber: number = version ?? selectedVersion[0].version;\n return this.#dmsService.restoreDmsObject(selectedVersion[0].id, versionNumber).pipe(switchMap((object: DmsObject) => this.getVersions(object.id)));\n }\n return of(null);\n }\n\n clearVersions() {\n patchState(this.state$, { versions: this.initialState.versions });\n }\n}\n","import { Provider } from '@angular/core';\nimport { DRIVE_APP_BREADCRUMB_MAX_DEPTH } from '../tokens';\n\n/**\n *\n * @param breadkrumbMaxDepth default 3\n * @returns\n */\nexport const provideDrive = (breadkrumbMaxDepth = 3): Provider => {\n return { provide: DRIVE_APP_BREADCRUMB_MAX_DEPTH, useValue: breadkrumbMaxDepth };\n};\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { finalize, Observable, of } from 'rxjs';\nimport { DriveService } from '../../services';\nimport { ActivatedRoute } from '@angular/router';\nimport { APP_ID } from '../../drive.schema';\n\nexport class PasteAction extends AbstractContextAction implements Action {\n readonly translate = inject(TranslateService);\n readonly #clipboardService = inject(ClipboardService);\n readonly #drive = inject(DriveService);\n readonly #route = inject(ActivatedRoute);\n\n id = 'app.drive.action.paste';\n label = this.translate.instant('yuv.app.drive.action.paste.label');\n description = this.translate.instant('yuv.app.drive.action.paste.description');\n priority = 2;\n icon = 'content_paste';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(items: DmsObject[]) {\n const canWrite = !!items[0]?.permissions?.writeIndexData;\n const cd = this.#clipboardService.getClipboardData(APP_ID);\n return of(canWrite && !!cd?.objects && cd.objects.length > 0);\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#drive.setBusy(true);\n this.#drive\n .pasteFromClipboard(items[0])\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n return of(true);\n }\n}\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';\nimport { Observable, of, timer } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { DriveValidateResponse } from '../../services/drive/drive.interface';\n\nexport class RenameValidator {\n static createValidator(driveService: DriveService): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n return timer(500).pipe(\n switchMap(() => {\n return control.value['name'] !== control.value['_initialName']\n ? driveService.validateNames([control.value['name']], driveService.state$.currentFolder()).pipe(\n map((result: DriveValidateResponse) => {\n let res: any = null;\n if (result.existingFileNames.length) {\n res = { nameAlreadyExists: true };\n } else if (result.invalidFileNames?.length) {\n res = { invalidFileNames: true };\n }\n return res;\n })\n )\n : of(null);\n })\n );\n };\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { RenameValidator } from '../../actions/rename/rename.validator';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { DriveService } from '../../services';\n\n@Component({\n selector: 'ymd-object-name',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, StringComponent, TranslateModule],\n templateUrl: './object-name.component.html',\n styleUrl: './object-name.component.scss'\n})\nexport class ObjectNameComponent {\n #fb = inject(FormBuilder);\n #drive = inject(DriveService);\n\n item = input<any>();\n disabled = input<boolean>(false);\n\n #disabledEffect = effect(() => {\n const d = this.disabled();\n d ? this.nameForm.get('name')?.disable() : this.nameForm.get('name')?.enable();\n });\n\n #itemFormEffect = effect(() => this.item() && this.#setupForm(this.item()?.data));\n\n nameForm: FormGroup = this.#fb.group(\n {\n _initialName: [''],\n name: ['', Validators.required]\n },\n {\n asyncValidators: [RenameValidator.createValidator(this.#drive)]\n }\n );\n\n #setupForm(data?: any) {\n this.nameForm.patchValue(\n {\n _initialName: data ? data[FS_PROPERTIES.name] || '' : '',\n name: data ? data[FS_PROPERTIES.name] || '' : ''\n },\n {\n emitEvent: false\n }\n );\n }\n}\n","<div [formGroup]=\"nameForm\">\n <mat-form-field>\n <mat-label>{{ 'yuv.app.drive.property.name' | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n\n @if (nameForm.hasError('nameAlreadyExists')) {\n <mat-error class=\"error\">{{ 'yuv.app.drive.create.error.name.exist' | translate }}</mat-error>\n }\n @if (nameForm.hasError('invalidFileNames')) {\n <mat-error class=\"error\">{{ 'yuv.app.drive.create.error.name.invalid' | translate }}</mat-error>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, inject, linkedSignal, signal, viewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError } from '@angular/material/form-field';\nimport { DmsObject, DmsService, TranslateModule } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { ObjectNameComponent } from '../../components/object-name/object-name.component';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { DRIVE_EVENT } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\nconst MATERIAL = [MatError, MatProgressBar];\n\n@Component({\n selector: 'ymd-rename',\n standalone: true,\n imports: [CommonModule, ObjectNameComponent, ReactiveFormsModule, TranslateModule, DialogComponent, ...MATERIAL, YmtButtonDirective],\n templateUrl: './rename.component.html',\n styleUrl: './rename.component.scss',\n host: {\n '[class.busy]': 'busy()'\n }\n})\nexport class RenameComponent implements AfterViewInit {\n readonly #drive = inject(DriveService);\n readonly #dmsService = inject(DmsService);\n #dialogData = inject<DmsObject>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<RenameComponent>);\n\n formComp = viewChild.required(ObjectNameComponent);\n changedValue = signal<string | undefined>(undefined);\n disabledSubmit = linkedSignal({\n source: this.changedValue,\n computation: () => {\n const name = this.formComp().nameForm.value.name;\n\n //console.log('disabledSubmit', name, this.busy(), this.disabled(), this.formComp().nameForm.invalid);\n\n return !name || this.busy() || this.disabled() || this.formComp().nameForm.invalid;\n }\n });\n\n item = signal<any>(this.#dialogData);\n busy = signal<boolean>(false);\n error = signal<string | null>(null);\n\n disabled = signal(false);\n\n ngAfterViewInit() {\n this.formComp().nameForm.valueChanges.subscribe((value) => {\n this.changedValue.set(value.name);\n });\n }\n\n rename() {\n this.busy.set(true);\n const data: Record<string, any> = {};\n data[FS_PROPERTIES.name] = this.formComp().nameForm.value.name;\n\n this.#dmsService.updateDmsObject(this.item().id, data).subscribe({\n next: () => {\n this.close();\n this.#drive.emitEvent(DRIVE_EVENT.refresh);\n },\n error: (err) => {\n this.busy.set(false);\n this.error.set(err.message);\n },\n complete: () => this.busy.set(false)\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.app.drive.action.rename.headline' | translate\">\n <main>\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n <form [formGroup]=\"formComp().nameForm\" (ngSubmit)=\"rename()\">\n <ymd-object-name [item]=\"item()\"></ymd-object-name>\n\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.app.drive.action.rename.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"rename()\" [disabled]=\"disabledSubmit()\">\n {{ 'yuv.app.drive.action.rename.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { RenameComponent } from './rename.component';\n\nexport class RenameAction implements Action {\n private translate = inject(TranslateService);\n #dialog = inject(MatDialog);\n\n id = 'app.drive.action.rename';\n label = this.translate.instant('yuv.app.drive.action.rename.label');\n description = this.translate.instant('yuv.app.drive.action.rename.description');\n priority = 2;\n icon = 'ink_marker';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]) {\n return of(selection?.length === 1 && !!selection[0].permissions?.writeIndexData);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n this.#dialog.open(RenameComponent, {\n width: '400px',\n maxWidth: '90vw',\n data: selection[0]\n });\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject, NotificationService, Utils } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { catchError, from, map, Observable, of } from 'rxjs';\nimport { APP_ID } from '../../drive.schema';\n\nexport class CopyLinkAction extends AbstractContextAction implements Action {\n translate = inject(TranslateService);\n #notification = inject(NotificationService);\n #shell = inject(ShellService);\n\n id = 'app.drive.action.copy-link';\n label = this.translate.instant('yuv.app.drive.action.copy-link');\n description = this.translate.instant('yuv.app.drive.action.copy-link.description');\n priority = 2;\n icon = 'prescriptions';\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n return from(navigator.permissions.query({ name: 'clipboard-write' } as any)).pipe(\n catchError(() => of({ state: 'denied' })),\n map((result) => (result.state === 'granted' || result.state === 'prompt') && selection.length === 1)\n );\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n const o = selection[0];\n const uri = `${window.location.origin}${Utils.getBaseHref(true)}/${this.#shell.appBaseRoutes[APP_ID]}/${o.isFolder ? 'files' : 'object'}/${selection[0].id}`;\n\n navigator.clipboard\n .writeText(uri)\n .then(() => this.#notification.success(this.translate.instant('yuv.app.drive.action.copy-link.success')))\n .catch(() => {\n //\n });\n\n return of(true);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject, RetentionService } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { finalize, Observable, of } from 'rxjs';\nimport { DriveService } from '../../services';\n\nexport class UpdateContentAction extends AbstractContextAction implements Action {\n readonly translate = inject(TranslateService);\n readonly #router = inject(Router);\n readonly #drive = inject(DriveService);\n readonly #document = inject(DOCUMENT);\n readonly #retention = inject(RetentionService);\n\n id = 'app.drive.action.new.content.version';\n label = this.translate.instant('yuv.app.drive.action.new.version');\n description = this.translate.instant('yuv.app.drive.action.new.version.description');\n priority = 2;\n icon = 'upload_file';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const selected = selection[0];\n const canWrite = !!selected?.permissions?.writeContent;\n return of(canWrite && selection.length === 1 && !selected.isFolder && !this.#retention.getRetentionState(selected).underRetention);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n if (!selection[0].isFolder) {\n const fileInput = this.#document.createElement('input');\n fileInput.type = 'file';\n fileInput.multiple = false;\n\n fileInput.onchange = (e) => {\n this.#drive.setBusy(true);\n const file = (e.target as HTMLInputElement).files?.[0];\n file &&\n this.#drive\n .uploadContent(selection[0].id, file)\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n };\n fileInput.click();\n fileInput.remove();\n }\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, inject, linkedSignal, signal, viewChild } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { CreateResult } from '../../../services/drive/drive.interface';\nimport { DriveService } from '../../../services/drive/drive.service';\nimport { ObjectNameComponent } from '../../object-name/object-name.component';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatError } from '@angular/material/form-field';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymd-create-folder',\n standalone: true,\n imports: [CommonModule, ObjectNameComponent, DialogComponent, ReactiveFormsModule, TranslateModule, MatError, MatProgressBar, YmtButtonDirective],\n templateUrl: './create-folder.component.html',\n styleUrl: './create-folder.component.scss',\n host: {\n '[class.busy]': 'busy()'\n }\n})\nexport class CreateFolderComponent implements AfterViewInit {\n private drive = inject(DriveService);\n private translate = inject(TranslateService);\n readonly #dialogRef = inject(MatDialogRef<CreateFolderComponent>);\n\n formComp = viewChild.required(ObjectNameComponent);\n\n changedValue = signal<string | undefined>(undefined);\n disabledSubmit = linkedSignal({\n source: this.changedValue,\n computation: () => {\n const name = this.formComp().nameForm.value.name;\n return !name || this.busy() || this.disabled() || this.formComp().nameForm.invalid;\n }\n });\n\n busy = signal<boolean>(false);\n error = signal<string | null>(null);\n\n disabled = signal(false);\n message = signal<string | undefined>(undefined);\n\n ngAfterViewInit() {\n this.formComp().nameForm.valueChanges.subscribe((value) => {\n this.changedValue.set(value.name);\n });\n }\n\n createFolder() {\n this.message.set(undefined);\n const name = this.formComp().nameForm.value.name;\n if (name) {\n this.busy.set(true);\n this.drive\n .createFolder(name)\n .subscribe((res: CreateResult) => {\n if (res.error) {\n switch (res.error) {\n case 'nameExists':\n this.message.set(this.translate.instant('yuv.app.drive.create.error.name.exist'));\n break;\n default:\n this.message.set(this.translate.instant('yuv.app.drive.create.error'));\n }\n } else {\n this.close();\n }\n })\n .add(() => this.busy.set(false));\n }\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.app.drive.folder.create.headline' | translate\">\n <main>\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n <form [formGroup]=\"formComp().nameForm\">\n <ymd-object-name></ymd-object-name>\n\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n @if (message()) {\n <mat-error class=\"message\">{{ message() }}</mat-error>\n }\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.app.drive.action.rename.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"createFolder()\" [disabled]=\"disabledSubmit()\">\n {{ 'yuv.app.drive.folder.create.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, HostBinding, inject, input, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseObjectTypeField, ObjectCreateFlavor, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { APP_DRIVE_ICONS } from '../../drive.icons';\nimport { CreateResult } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { CreateFolderComponent } from '../overlay/create-folder/create-folder.component';\n\n@Component({\n selector: 'ymd-add-button',\n standalone: true,\n imports: [CommonModule, TranslateModule, MatMenuModule, MatButtonModule, MatIconModule],\n templateUrl: './add-button.component.html',\n styleUrl: './add-button.component.scss',\n encapsulation: ViewEncapsulation.None\n})\nexport class AddButtonComponent {\n #drive = inject(DriveService);\n #shell = inject(ShellService);\n #dialog = inject(MatDialog);\n private translate = inject(TranslateService);\n\n fileInput = viewChild.required<ElementRef>('fileInput');\n\n @HostBinding('class.popover') popoverOpen = false;\n\n disabled = input<boolean>(false);\n\n #uploadTargetFlavor?: ObjectCreateFlavor;\n\n icons = {\n folder: APP_DRIVE_ICONS.createFolder,\n file: APP_DRIVE_ICONS.createFile\n };\n\n defaultItems = [\n { icon: this.icons.folder, label: this.translate.instant('yuv.app.drive.create.folder') },\n { icon: this.icons.file, label: this.translate.instant('yuv.app.drive.create.file') }\n ];\n\n flavorListItems: {\n label: string;\n flavor: ObjectCreateFlavor;\n }[] = this.#shell.getObjectCreateFlavors().map((flavor) => ({\n label: this.translate.instant(flavor.id),\n flavor\n }));\n\n onSelect(idx: number, isCreateFlavor = false) {\n if (isCreateFlavor) {\n this.startCreateDocument();\n this.#uploadTargetFlavor = this.flavorListItems[idx]?.flavor;\n } else if (idx === 0) {\n this.startCreateFolder();\n } else if (idx === 1) {\n this.startCreateDocument();\n }\n }\n\n startCreateDocument() {\n if (!this.#uploadTargetFlavor || this.#uploadTargetFlavor.withFileUpload) {\n this.fileInput().nativeElement.click();\n } else if (this.#uploadTargetFlavor?.applyComponent) {\n this.#dialog.open(this.#uploadTargetFlavor.applyComponent, {\n data: {\n flavor: this.#uploadTargetFlavor,\n onCancel: () => {\n // console.log('cancel');\n }\n }\n });\n this.#uploadTargetFlavor = undefined;\n }\n }\n\n startCreateFolder() {\n this.#dialog.open(CreateFolderComponent, {\n width: '400px',\n maxWidth: '90vw'\n });\n }\n\n createDocument(inputEl: HTMLInputElement) {\n const files: File[] | undefined = inputEl.files ? Array.from(inputEl.files) : undefined;\n if (files) {\n const data = this.#uploadTargetFlavor?.sot ? { [BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS]: [this.#uploadTargetFlavor.sot] } : undefined;\n this.#drive.setBusy(true);\n this.#drive\n .checkNamesAndUpload(files, data)\n .subscribe((createResult: CreateResult[]) => {\n this.fileInput().nativeElement.value = '';\n const uploadErrors = createResult.filter((r) => !!r.error);\n if (uploadErrors.length) {\n // TODO: Handle upload errors\n console.error(uploadErrors);\n }\n if (createResult.length && this.#uploadTargetFlavor?.applyComponent) {\n this.#dialog.open(this.#uploadTargetFlavor.applyComponent, {\n data: {\n createdObjectIDs: createResult.filter((r) => r.id).map((r) => r.id),\n flavor: this.#uploadTargetFlavor\n }\n });\n }\n this.#uploadTargetFlavor = undefined;\n })\n .add(() => this.#drive.setBusy(false));\n }\n }\n}\n","<button mat-mini-fab [attr.aria-label]=\"'yuv.app.drive.create.label' | translate\" class=\"toggle primary\" [disabled]=\"disabled()\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>add</mat-icon>\n</button>\n\n<mat-menu #menu=\"matMenu\" class=\"add-button-menu\">\n @for (i of defaultItems; track $index) {\n <button mat-menu-item (click)=\"onSelect($index)\">\n <mat-icon>{{i.icon}}</mat-icon>\n {{ i.label }}\n </button>\n }\n <!-- Upload file with flavor -->\n @for (f of flavorListItems; track f.flavor.id) {\n <button mat-menu-item class=\"flavor\" (click)=\"onSelect($index, true)\">\n <mat-icon>{{f.flavor.icon}}</mat-icon>\n {{ f.label }}\n </button>\n }\n</mat-menu>\n\n<input style=\"display: none\" multiple=\"true\" #fileInput type=\"file\" (change)=\"createDocument(fileInput)\" />\n","import { ChangeDetectionStrategy, Component, computed, inject, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseObjectTypeField, ContentStreamField, SystemService, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { DriveService } from '../../services';\nimport { MatDivider } from '@angular/material/divider';\n\ninterface SortOption {\n label: string;\n value: string;\n type: 'sort' | 'order';\n}\n@Component({\n selector: 'ymd-sort',\n standalone: true,\n imports: [MatIconModule, MatMenuModule, MatButtonModule, ReactiveFormsModule, TranslateModule, MatDivider],\n template: `\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider></mat-divider>\n }\n }\n </mat-menu>\n `,\n styleUrls: [`./sort.component.scss`],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SortComponent {\n readonly #drive = inject(DriveService);\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n sortOptions = signal(this.#initSortOptions());\n orderOptions = signal<SortOption[]>([\n { label: 'Ascending', value: 'asc', type: 'order' },\n { label: 'Descending', value: 'desc', type: 'order' }\n ]);\n sortFields = computed(() => [...this.sortOptions(), ...this.orderOptions()]);\n\n sortForm = new FormGroup({\n sort: new FormControl<string>(''),\n order: new FormControl<'asc' | 'desc'>('asc', { nonNullable: true })\n });\n\n sortChanged = output<{ sort: string; order: string }>();\n\n constructor() {\n // listen for language changes to update labels\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.sortOptions.set(this.#initSortOptions());\n });\n }\n\n selectSortByIndex(idx: number) {\n this.selectSort(this.sortFields()[idx].type, this.sortFields()[idx].value);\n }\n\n selectSort(type: string, value: string) {\n const sortCtrl = this.sortForm.get('sort');\n sortCtrl?.value === value ? sortCtrl?.setValue(null) : this.sortForm.get(type)?.setValue(value);\n this.onSelectionChange();\n }\n\n // Emit the form values when changes occur\n onSelectionChange() {\n const { sort, order } = this.sortForm.value;\n this.#drive.setSort(sort as string, order as 'asc' | 'desc');\n this.sortChanged.emit({ sort: sort as string, order: order as string });\n }\n\n #initSortOptions() {\n const baseData: SortOption[] = [];\n const fields = [FS_PROPERTIES.name, BaseObjectTypeField.CREATION_DATE, BaseObjectTypeField.MODIFICATION_DATE];\n const contentFields = [ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n\n [...fields, ...contentFields].forEach((f) => {\n baseData.push({\n label: this.#systemService.getLocalizedLabel(f) || f,\n value: f,\n type: 'sort'\n });\n });\n\n return baseData;\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ChangeDetectionStrategy, Component, effect, HostListener, inject, OnDestroy, viewChildren } from '@angular/core';\nimport { MatIconAnchor, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { YuvCommonModule } from '@yuuvis/client-framework/common';\nimport { ListItemDirective, YuvListModule } from '@yuuvis/client-framework/list';\nimport { APP_DRIVE_ICONS } from '../../drive.icons';\nimport { DRIVE_ROOT_FOLDER_ID, DriveService } from '../../services';\n\n@Component({\n selector: 'ymd-breadcrumb',\n standalone: true,\n imports: [TranslateModule, YuvListModule, MatIcon, MatIconAnchor, MatIconButton, YuvCommonModule],\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'breadcrumb'\n }\n})\nexport class BreadcrumbComponent implements OnDestroy {\n readonly #drive = inject(DriveService);\n readonly #router = inject(Router);\n readonly #dir = inject(Directionality);\n private route = inject(ActivatedRoute);\n\n @HostListener('blur')\n onBlur() {\n this.#keyManager.setActiveItem(-1);\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent) {\n if (event.code === 'Space' || event.code === 'Enter') {\n const aii: number = this.#keyManager.activeItemIndex !== null ? this.#keyManager.activeItemIndex : -1;\n if (aii >= 0) {\n this.navigation(aii === 0 ? DRIVE_ROOT_FOLDER_ID : this.breadcrumb().items[aii - 1].id);\n }\n } else this.#keyManager?.onKeydown(event);\n }\n\n #keyManager!: ActiveDescendantKeyManager<ListItemDirective>;\n homeIcon = APP_DRIVE_ICONS.home;\n\n breadcrumb = this.#drive.state$.breadcrumb;\n items = viewChildren(ListItemDirective);\n #itemsEffect = effect(() => {\n const i = this.items();\n if (this.#keyManager) this.#keyManager.destroy();\n this.#keyManager = new ActiveDescendantKeyManager(i).withWrap().withHorizontalOrientation(this.#dir.value);\n });\n\n navigation(id: string, event?: MouseEvent | Event) {\n event && event.preventDefault();\n const nav = ['..'];\n this.#keyManager.setActiveItem(-1);\n this.#router.navigate([...nav, id], { relativeTo: this.route });\n }\n\n ngOnDestroy(): void {\n this.#keyManager?.destroy();\n }\n}\n","@let bread = breadcrumb();\n\n<nav class=\"breadcrumb\" aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb__list\">\n @if (bread.items.length) {\n <li class=\"breadcrumb__list-item breadcrumb__list-item--root\">\n <a class=\"breadcrumb__list-item-anchor breadcrumb__list-item-anchor--root\" mat-icon-button disableRipple tabindex=\"-1\" yuvListItem draggable=\"false\" href=\"\" (click)=\"navigation('root', $event)\">\n <mat-icon [attr.aria-label]=\"'yuv.app.drive.folder-tree.mydrive' | translate\">{{ homeIcon }}</mat-icon>\n </a>\n </li>\n\n\n\n <li class=\"breadcrumb__list-item breadcrumb__list-item--last\" yuvDragScroll>\n @if (bread.partial) {\n <div class=\"partial\" aria-hidden=\"true\"></div>\n }\n\n <ol class=\"breadcrumb__list\">\n @for (crumb of bread.items; track $index) {\n @if (!$last) {\n <li class=\"breadcrumb__list-item\">\n <a class=\"breadcrumb__list-item-anchor\" tabindex=\"-1\" yuvListItem draggable=\"false\" href=\"\" (click)=\"navigation(crumb.id, $event)\">\n {{ crumb.name }}\n </a>\n </li>\n } @else {\n <li class=\"breadcrumb__list-item breadcrumb__list-item--current\" aria-current=\"location\">{{ crumb.name }}</li>\n }\n }\n </ol>\n </li>\n } @else {\n <li class=\"breadcrumb__list-item breadcrumb__list-item--current breadcrumb__list-item--root\" aria-current=\"location\">\n <button mat-icon-button disabled class=\"breadcrumb__list-item-anchor breadcrumb__list-item-anchor--root\">\n <mat-icon>{{ homeIcon }}</mat-icon>\n </button>\n </li>\n }\n </ol>\n</nav>\n","import { marker } from '@colsen1991/ngx-translate-extract-marker';\n\n// prefix for stored query ids (every stored query id should start with this prefix)\nexport const STORED_QUERY_ID_PREFIX = 'ymsq';\n\n// add a tranlation marker for the key the stored query is stored under\n// this is used to display the stored query title in the UI\nmarker('ymsq.ymd.recent.modified.by.me');\nmarker('ymsq.ymd.recent.added.by.me');\n// marker('ymsq.ymd.recent.modified');\n// marker('ymsq.ymd.recent.added');\n\n// default stored queries\nexport const STORED_QUERIES: Record<\n string,\n {\n label?: string;\n query: string;\n }\n> = {\n // 'ymsq.ymd.recent.modified': {\n // query: '{\"filters\":[{\"f\":\"system:lastModifiedBy\",\"o\":\"eq\",\"v1\":\"##me##\"}],\"sort\":[{\"field\":\"system:lastModificationDate\",\"order\":\"desc\"}]}'\n // },\n 'ymsq.ymd.recent.modified.by.me': {\n query: '{\"filters\":[{\"f\":\"system:baseTypeId\",\"o\":\"eq\",\"v1\":\"system:document\"}, { \"f\": \"system:secondaryObjectTypeIds\", \"o\": \"in\", \"v1\": [\"appOsdrive:file\"] }, {\"f\":\"system:lastModifiedBy\",\"o\":\"eq\",\"v1\":\"##me##\"}],\"sort\":[{\"field\":\"system:lastModificationDate\",\"order\":\"desc\"}]}'\n },\n // 'ymsq.ymd.recent.added': {\n // query: '{\"sort\":[{\"field\":\"system:creationDate\",\"order\":\"desc\"}]}'\n // },\n 'ymsq.ymd.recent.added.by.me': {\n query: '{\"filters\":[{\"f\":\"system:baseTypeId\",\"o\":\"eq\",\"v1\":\"system:document\"}, { \"f\": \"system:secondaryObjectTypeIds\", \"o\": \"in\", \"v1\": [\"appOsdrive:file\"] }, {\"f\":\"system:createdBy\",\"o\":\"eq\",\"v1\":\"##me##\"}],\"sort\":[{\"field\":\"system:creationDate\",\"order\":\"desc\"}]}'\n }\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, inject, viewChild } from '@angular/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\n\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { APP_ID } from '../../drive.schema';\nimport { DRIVE_QUERY_FOLDER_ID, DRIVE_ROOT_FOLDER_ID } from '../../services';\nimport { STORED_QUERY_ID_PREFIX } from '../../services/stored-query/stored-query.data';\n\ninterface FolderTreeNode {\n name: string;\n id: string;\n icon?: string;\n children?: FolderTreeNode[];\n}\n\n@Component({\n selector: 'ymd-folder-tree',\n standalone: true,\n imports: [CommonModule, RouterModule, TranslateModule, MatTreeModule, MatIcon, YmtIconButtonDirective],\n templateUrl: './folder-tree.component.html',\n styleUrl: './folder-tree.component.scss'\n})\nexport class FolderTreeComponent implements AfterViewInit {\n #translate = inject(TranslateService);\n #router = inject(Router);\n #route = inject(ActivatedRoute);\n #shell = inject(ShellService);\n\n tree = viewChild<MatTree<FolderTreeNode, FolderTreeNode>>('tree');\n treeNodePaddingIndent = 40;\n\n #app = this.#shell.getApp(APP_ID);\n\n dataSource: FolderTreeNode[] = [\n {\n id: 'mydrive',\n name: this.#translate.instant('yuv.app.drive.folder-tree.mydrive'),\n icon: this.#app?.iconName,\n children: [\n // {\n // id: 'ymsq.ymd.recent.added',\n // name: this.translate.instant('ymsq.ymd.recent.added')\n // },\n {\n id: 'ymsq.ymd.recent.added.by.me',\n name: this.#translate.instant('ymsq.ymd.recent.added.by.me')\n },\n // {\n // id: 'ymsq.ymd.recent.modified',\n // name: this.translate.instant('ymsq.ymd.recent.modified')\n // },\n {\n id: 'ymsq.ymd.recent.modified.by.me',\n name: this.#translate.instant('ymsq.ymd.recent.modified.by.me')\n }\n ]\n }\n ];\n\n currentPage: FolderTreeNode['id'] = this.dataSource[0].id;\n\n ngAfterViewInit(): void {\n const nodeToExpand = this.dataSource.find(({ id }) => id === 'mydrive');\n nodeToExpand && this.tree()?.expandDescendants(nodeToExpand);\n }\n\n childrenAccessor = (node: FolderTreeNode) => node.children ?? [];\n hasChild = (_: number, node: FolderTreeNode) => !!node.children && node.children.length > 0;\n\n routeChange(node: FolderTreeNode) {\n /*\n * Note: This implementation listens only to click/keydown events on the items in the tree itself. If you trigger route change\n * from anywhere else to one of the routes used here, trigger tree collapsing and setting aria-current:page on route change event\n * */\n\n if (node.id.startsWith(STORED_QUERY_ID_PREFIX)) {\n // stored query\n this.#router\n .navigate(['..', DRIVE_QUERY_FOLDER_ID], {\n queryParams: {\n q: node.id\n },\n relativeTo: this.#route\n })\n .then(() => (this.currentPage = node.id))\n .catch((e) => {\n throw new Error(e);\n });\n } else {\n switch (node.id) {\n case 'mydrive': {\n this.#router\n .navigate(['..', DRIVE_ROOT_FOLDER_ID], {\n relativeTo: this.#route\n })\n .then(() => (this.currentPage = node.id))\n .catch((e) => {\n throw new Error(e);\n });\n break;\n }\n default: {\n this.#router\n .navigate(['..', node.id], {\n relativeTo: this.#route\n })\n .then(() => (this.currentPage = node.id))\n .catch((e) => {\n throw new Error(e);\n });\n }\n }\n }\n }\n}\n","<nav aria-label=\"Navigation\">\n <mat-tree class=\"folder-tree\" #tree [dataSource]=\"dataSource\" [childrenAccessor]=\"childrenAccessor\">\n <mat-tree-node\n class=\"folder-tree__node\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [matTreeNodePaddingIndent]=\"treeNodePaddingIndent\"\n [isExpandable]=\"false\"\n [attr.aria-current]=\"currentPage === node.id ? 'page' : null\"\n [attr.aria-label]=\"'Go to page: ' + node.name\"\n (click)=\"routeChange(node)\"\n (keydown.enter)=\"routeChange(node)\"\n (keydown.space)=\"routeChange(node)\"\n >\n <div class=\"folder-tree__item-icon\" *ngIf=\"node.icon\">\n <mat-icon class=\"ymt-icon--size-s\">{{ node.icon }}</mat-icon>\n </div>\n <span class=\"folder-tree__item\">{{ node.name }}</span>\n </mat-tree-node>\n\n <mat-tree-node\n class=\"folder-tree__node\"\n *matTreeNodeDef=\"let node; when: hasChild\"\n matTreeNodeToggle\n matTreeNodePadding\n [matTreeNodePaddingIndent]=\"treeNodePaddingIndent\"\n [isExpandable]=\"true\"\n [isExpanded]=\"tree.isExpanded(node)\"\n [attr.aria-current]=\"currentPage === node.id ? 'page' : null\"\n [attr.aria-label]=\"'Toggle and Go to page: ' + node.name\"\n (activation)=\"routeChange($event)\"\n >\n <button ymt-icon-button icon-button-size=\"small\" tabindex=\"-1\">\n <mat-icon class=\"ymt-icon--size-s\">\n {{ tree.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <div class=\"folder-tree__item-icon\" *ngIf=\"node.icon\">\n <mat-icon class=\"ymt-icon--size-s\">{{ node.icon }}</mat-icon>\n </div>\n <a class=\"folder-tree__item\" tabindex=\"-1\" (click)=\"routeChange(node); $event.stopPropagation()\">{{ node.name }}</a>\n </mat-tree-node>\n </mat-tree>\n</nav>\n","import { DatePipe } from '@angular/common';\nimport { Component, computed, input, output } from '@angular/core';\nimport { BaseObjectTypeField, TranslateModule } from '@yuuvis/client-core';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\n\n@Component({\n selector: 'ymd-version-tile',\n standalone: true,\n imports: [DatePipe, TranslateModule],\n template: `\n <div\n class=\"slots\"\n title=\"{{\n 'yuv.app.drive.versions.desctiption.label'\n | translate: { version: rendererInputs().version, modifieer: rendererInputs().modified, date: rendererInputs().date | date: 'medium' }\n }}\"\n >\n <div data-slot=\"version\" class=\"version\">\n <span>{{ 'yuv.app.drive.versions.label' | translate }}: {{ rendererInputs().version }}</span>\n </div>\n <div data-slot=\"date\" class=\"date\" title=\"{{ rendererInputs().date | date: 'medium' }}\">\n {{ rendererInputs().date | date: 'shortDate' }}\n </div>\n <div data-slot=\"modified\" class=\"modified\" title=\"{{ rendererInputs().modified }}\">\n {{ rendererInputs().modified }}\n </div>\n </div>\n `,\n styleUrl: './tile.component.scss'\n})\nexport class VersionTileComponent {\n tile = input.required<TileData>();\n\n rendererInputs = computed(() => ({\n icon: this.tile().icon,\n version: this.tile().instanceData?.[BaseObjectTypeField.VERSION_NUMBER],\n date: this.tile().instanceData?.[BaseObjectTypeField.MODIFICATION_DATE] as Date,\n modified: this.tile().instanceData?.[BaseObjectTypeField.MODIFIED_BY + '_title']\n }));\n\n selectedVersion = output<any>();\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, viewChildren } from '@angular/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { ClickDoubleDirective } from '@yuuvis/client-framework/common';\nimport { ListItemDirective } from '@yuuvis/client-framework/list';\nimport { finalize } from 'rxjs/operators';\nimport { DriveService } from '../../services';\nimport { VersionTileComponent } from './tile/tile.component';\n\n@Component({\n selector: 'ymd-versions-list',\n standalone: true,\n imports: [CommonModule, VersionTileComponent, ListItemDirective, ClickDoubleDirective],\n template: ` @let versions = versionsList();\n @if (versions) {\n @for (version of versions; track $index) {\n <ymd-version-tile\n yuvListItem\n [tile]=\"version\"\n [attr.aria-selected]=\"selection().includes(version.dmsObject.version)\"\n [selected]=\"selection().includes(version.dmsObject.version)\"\n (click.single)=\"setSelectedVersion(version)\"\n (selectedVersion)=\"selectedVersionAction($event)\"\n ></ymd-version-tile>\n }\n }`,\n styleUrl: './versions-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n tabindex: '0',\n role: 'listbox'\n }\n})\nexport class VersionsListComponent {\n #drive = inject(DriveService);\n\n versionsList = this.#drive.state$.versions.versionsList;\n selectedVersion = this.#drive.state$.versions.selectedVersion;\n selection = computed(() => (this.selectedVersion() || []).map((v: DmsObject) => v.version));\n\n @HostListener('blur')\n onBlur() {\n this.#keyManager.setActiveItem(-1);\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent) {\n event.preventDefault();\n event.code === 'Escape' && this.#keyManager.setActiveItem(-1);\n event.target instanceof HTMLButtonElement && this.#keyManager.setActiveItem(-1);\n\n if (event.code === 'Space' || event.code === 'Enter') {\n const aii: number = this.#keyManager.activeItemIndex !== null ? this.#keyManager.activeItemIndex : -1;\n aii >= 0 && this.selectedVersionByIndex(aii);\n } else this.#keyManager?.onKeydown(event);\n }\n\n #keyManager!: ActiveDescendantKeyManager<ListItemDirective>;\n\n listItems = viewChildren(ListItemDirective);\n #itemsEffect = effect(() => {\n const items = this.listItems();\n if (this.#keyManager) this.#keyManager.destroy();\n this.#keyManager = new ActiveDescendantKeyManager(items).withWrap();\n });\n\n selectedVersionAction(event: any) {\n this.#drive.setBusy(true);\n this.#drive\n .setNewVersion(event.version)\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n }\n\n selectedVersionByIndex(index: number) {\n this.setSelectedVersion(this.versionsList()[index]);\n }\n\n setSelectedVersion(version: any) {\n this.#drive.setSelectedVersion(version).subscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, signal, viewChildren } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatPseudoCheckbox } from '@angular/material/core';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport {\n BaseObjectTypeField,\n ContentStreamField,\n Operator,\n RangeValue,\n SearchFilter,\n SearchQuery,\n SearchService,\n SearchUtils,\n Situation,\n SystemService\n} from '@yuuvis/client-core';\nimport { RangeSelectDateComponent, RangeSelectDateValue, RangeSelectFilesizeComponent, RangeSelectFilesizeValue } from '@yuuvis/client-framework/forms';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { FormStatusChangedEvent, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { DriveService } from '../../../services/drive/drive.service';\n\ninterface SearchToken {\n fromControlName: string;\n label: string;\n}\n\n@Component({\n selector: 'ymd-drive-search-overlay',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ObjectFormComponent,\n YuvSplitViewModule,\n ReactiveFormsModule,\n YuvListModule,\n RangeSelectDateComponent,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatFormFieldModule,\n MatDialogContent,\n MatDialogActions,\n MatDialogTitle,\n MatDialogClose,\n MatInput,\n MatPseudoCheckbox,\n YmtButtonDirective,\n RangeSelectFilesizeComponent\n ],\n templateUrl: './drive-search-overlay.component.html',\n styleUrl: './drive-search-overlay.component.scss'\n})\nexport class DriveSearchOverlayComponent {\n readonly translate = inject(TranslateService);\n #fb = inject(FormBuilder);\n\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DriveSearchOverlayComponent>);\n\n #shell = inject(ShellService);\n #system = inject(SystemService);\n #drive = inject(DriveService);\n #search = inject(SearchService);\n\n objectForms = viewChildren<ObjectFormComponent>(ObjectFormComponent);\n\n ANY_OPTION = 'any';\n\n #query = this.#drive.state$.query;\n #queryEffect = effect(() => {\n const q = this.#query();\n if (q) this.filterForm.patchValue(this.#queryToForm(q));\n });\n\n #initialFormData: Record<string, unknown> = {};\n\n selectedFlavorsRec: Record<string, ObjectFlavor> = {};\n combinedFormState?: FormStatusChangedEvent;\n formStates: Record<string, FormStatusChangedEvent> = {};\n\n flavorFormOptions = signal<Record<string, ObjectFormOptions>>({});\n flavorForms = computed<\n {\n id: string;\n icon?: string;\n svgIcon?: boolean;\n label: string;\n formOptions: ObjectFormOptions;\n }[]\n >(() => {\n const ffo = this.flavorFormOptions() || {};\n return Object.keys(ffo).map((k) => ({\n id: k,\n icon: this.selectedFlavorsRec[k]?.icon,\n svgIcon: this.selectedFlavorsRec[k]?.svgIcon,\n label: this.#shell.getFlavorLabel(k),\n formOptions: ffo[k]\n }));\n });\n\n scopeOptions = signal<{ label: string; value: unknown }[]>([]);\n\n filterForm = this.#fb.nonNullable.group({\n term: [this.#dialogData.term || ''],\n scope: [this.ANY_OPTION],\n modified: [],\n created: [],\n contentlength: []\n });\n\n searchTokens: SearchToken[] = [];\n flavors: (ObjectFlavor & { label: string })[] = this.#shell.getObjectFlavors().map((f) => ({\n ...f,\n label: this.#shell.getFlavorLabel(f.id)\n }));\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n typeSelected(idx: number[]) {\n this.#toggleType(this.flavors[idx[0]]);\n }\n\n #toggleType(t: ObjectFlavor) {\n if (this.selectedFlavorsRec[t.id]) {\n delete this.selectedFlavorsRec[t.id];\n\n const ffo: Record<string, ObjectFormOptions> = this.flavorFormOptions() || {};\n delete ffo[t.id];\n this.flavorFormOptions.set({ ...ffo });\n\n delete this.formStates[t.id];\n this.#getCombinedFormState();\n } else {\n this.selectedFlavorsRec[t.id] = t;\n this.#system.getObjectTypeForm(t.sot, Situation.SEARCH).subscribe((formModel: any) => {\n this.flavorFormOptions.set({\n ...this.flavorFormOptions(),\n [t.id]: {\n formModel,\n data: {}\n }\n });\n });\n }\n }\n\n // initial setup of types/flavors\n #setTypes(sots: string[]) {\n const sotQA: Record<string, string> = {};\n this.flavors\n .filter((f) => sots.includes(f.sot))\n .forEach((f) => {\n this.selectedFlavorsRec[f.id] = f;\n sotQA[f.sot] = f.id;\n });\n\n this.#system\n .getObjectTypeForms(sots, Situation.SEARCH)\n // .pipe(finalize(() => (this.#initialFormData = {}))) // TODO: check if this is needed\n .subscribe({\n next: (forms: Record<string, any>) => {\n const ffo: Record<string, ObjectFormOptions> = {};\n const data = this.#initialFormData;\n Object.keys(forms).forEach((sot) => {\n ffo[sotQA[sot]] = {\n formModel: forms[sot],\n data\n };\n });\n this.flavorFormOptions.set(ffo);\n }\n });\n }\n\n onFormStatusChanged(formId: string, evt: FormStatusChangedEvent) {\n this.formStates[formId] = evt;\n this.#getCombinedFormState();\n }\n\n #onFormValueChange(v: any) {\n this.searchTokens = [];\n\n if (this.filterForm.value.term) {\n this.searchTokens.push({\n fromControlName: 'term',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.term', { value: this.filterForm.value.term })\n });\n }\n const created: RangeSelectDateValue | undefined = this.filterForm.value.created as RangeSelectDateValue | undefined;\n if (created) {\n this.searchTokens.push({\n fromControlName: 'created',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.created', { value: created.label })\n });\n }\n\n const modified: RangeSelectDateValue | undefined = this.filterForm.value.modified as RangeSelectDateValue | undefined;\n if (modified) {\n this.searchTokens.push({\n fromControlName: 'modified',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.modified', { value: modified.label })\n });\n }\n\n const contentlength: RangeSelectFilesizeValue | undefined = this.filterForm.value.contentlength as RangeSelectFilesizeValue | undefined;\n if (contentlength) {\n this.searchTokens.push({\n fromControlName: 'contentlength',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.contentlength', { value: contentlength.label })\n });\n }\n\n if (this.filterForm.value.scope !== this.ANY_OPTION && this.filterForm.value.term) {\n const o = this.scopeOptions().find((o) => o.value === this.filterForm.value.scope);\n if (o)\n this.searchTokens.push({\n fromControlName: 'scope',\n label: this.translate.instant('yuv.app.drive.search.meta.search-token.where', { value: o.label })\n });\n }\n }\n\n removeSearchToken(t: SearchToken) {\n this.filterForm.patchValue({\n [t.fromControlName]: t.fromControlName === 'term' ? '' : this.ANY_OPTION\n });\n }\n\n #getCombinedFormState(): FormStatusChangedEvent {\n const combinedFormState = {\n dirty: false,\n indexdataChanged: false,\n invalid: false,\n data: {}\n };\n Object.values(this.formStates).forEach((s) => {\n if (s.dirty) {\n combinedFormState.dirty = s.dirty;\n }\n if (s.indexdataChanged) {\n combinedFormState.indexdataChanged = s.indexdataChanged;\n }\n if (s.invalid) {\n combinedFormState.invalid = s.invalid;\n }\n combinedFormState.data = { ...combinedFormState.data, ...s.data };\n });\n this.combinedFormState = combinedFormState;\n return this.combinedFormState;\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n\n submit() {\n this.#dialogRef.close(this.#formToQuery());\n }\n\n //Converts the form values to a search query\n #formToQuery(): SearchQuery {\n const filters: SearchFilter[] = this.#search.formDataToSearchFilter(this.#getCombinedFormState().data);\n // types\n const sots = Object.values(this.selectedFlavorsRec).map((f) => f.sot);\n if (sots.length) {\n filters.push({\n f: BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,\n o: Operator.IN,\n v1: sots\n });\n }\n // created\n if (this.filterForm.value.created) {\n const df = this.#search.rangeValueToSearchFilter(\n (this.filterForm.value.created as RangeSelectDateValue).rangeValue as RangeValue,\n BaseObjectTypeField.CREATION_DATE\n );\n df && filters.push(df);\n }\n // modified\n if (this.filterForm.value.modified) {\n const df = this.#search.rangeValueToSearchFilter(\n (this.filterForm.value.modified as RangeSelectDateValue).rangeValue as RangeValue,\n BaseObjectTypeField.MODIFICATION_DATE\n );\n df && filters.push(df);\n }\n // content length\n if (this.filterForm.value.contentlength) {\n const df = this.#search.rangeValueToSearchFilter(\n (this.filterForm.value.contentlength as RangeSelectDateValue).rangeValue as RangeValue,\n ContentStreamField.LENGTH\n );\n df && filters.push(df);\n }\n\n const searchQuery: SearchQuery = {\n term: this.filterForm.value.term,\n filters\n };\n // search scope\n if (this.filterForm.value.scope !== this.ANY_OPTION) searchQuery.scope = this.filterForm.value.scope as 'metadata' | 'content';\n return searchQuery;\n }\n\n /**\n * Converts the form values to a search query\n * @param q The search query\n */\n #queryToForm(q: SearchQuery): Record<string, unknown> {\n const patch: Record<string, unknown> = {};\n if (q?.term) patch['term'] = q.term;\n if (q?.scope) patch['scope'] = q.scope;\n q?.filters?.forEach((f) => {\n switch (f.f) {\n case BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS: {\n const sots = f.v1 as string[];\n // filter by available flavors\n const flavorSots = this.flavors.map((f) => f.sot);\n this.#setTypes(sots.filter((sot) => flavorSots.includes(sot)));\n break;\n }\n case BaseObjectTypeField.CREATION_DATE: {\n const fv = typeof f.v1 === 'string' ? new Date(f.v1) : f.v1;\n const sv = typeof f.v2 === 'string' ? new Date(f.v2) : f.v2;\n const rangeValue: RangeValue = {\n operator: f.o,\n firstValue: fv,\n secondValue: sv\n };\n\n const rsv: RangeSelectDateValue = {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${SearchUtils.getMatchingDateRange(rangeValue)}`)\n };\n\n patch['created'] = rsv;\n break;\n }\n case BaseObjectTypeField.MODIFICATION_DATE: {\n const fv = typeof f.v1 === 'string' ? new Date(f.v1) : f.v1;\n const sv = typeof f.v2 === 'string' ? new Date(f.v2) : f.v2;\n const rangeValue: RangeValue = {\n operator: f.o,\n firstValue: fv,\n secondValue: sv\n };\n\n const rsv: RangeSelectDateValue = {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${SearchUtils.getMatchingDateRange(rangeValue)}`)\n };\n\n patch['modified'] = rsv;\n break;\n }\n case ContentStreamField.LENGTH: {\n const rangeValue: RangeValue = {\n operator: f.o,\n firstValue: f.v1,\n secondValue: f.v2\n };\n\n const rsv: RangeSelectFilesizeValue = {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${SearchUtils.getMatchingFilesizeRange(rangeValue)}`)\n };\n\n patch['contentlength'] = rsv;\n break;\n }\n default: {\n // check for values to inject into flavor forms\n const otField = this.#system.getObjectTypeField(f.f);\n let payload = null;\n if (otField && otField.propertyType === 'datetime') {\n if (!isNaN(Date.parse(f.v1 as string)) || !isNaN(Date.parse(f.v2 as string))) {\n payload = {\n operator: f.o,\n firstValue: f.v1 ? f.v1 : undefined,\n secondValue: f.v2 ? f.v2 : undefined\n };\n }\n } else if (otField && ['integer', 'decimal'].includes(otField.propertyType)) {\n if (!isNaN(Number(f.v1)) || !isNaN(Number(f.v2))) {\n payload = {\n operator: f.o,\n firstValue: f.v1 ? Number(f.v1) : undefined,\n secondValue: f.v2 ? Number(f.v2) : undefined\n };\n }\n } else {\n payload = f.v1;\n }\n this.#initialFormData[f.f] = payload;\n }\n }\n });\n return patch;\n }\n\n #setupOptions() {\n this.#setupScopeOptions();\n }\n\n #setupScopeOptions() {\n this.scopeOptions.set([\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.where.any'),\n value: this.ANY_OPTION\n },\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.where.content'),\n value: 'content'\n },\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.where.metadata'),\n value: 'metadata'\n }\n ]);\n }\n}\n","<h2 matDialogTitle class=\"yuv-dialog-title\">{{ 'yuv.app.drive.search.extended.dialog.title' | translate }}</h2>\n<mat-dialog-content class=\"yuv-dialog-content\">\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.app.drive.search.meta.splitview'\">\n <!-- search options -->\n <ng-template yuvSplitArea [size]=\"40\">\n <form class=\"options\" role=\"search\" [formGroup]=\"filterForm\">\n <!-- term and scope -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.term' | translate }}</mat-label>\n <input matInput class=\"term\" type=\"search\" formControlName=\"term\" />\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.where' | translate }}</mat-label>\n <mat-select formControlName=\"scope\" [disabled]=\"!filterForm.value.term\">\n @for (food of scopeOptions(); track food) {\n <mat-option [value]=\"food.value\">{{ food.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- types -->\n <div class=\"options-type-list\">\n <h2>{{ 'yuv.app.drive.search.meta.options.type' | translate }}</h2>\n <yuv-list (itemSelect)=\"typeSelected($event)\" [selfHandleSelection]=\"true\">\n @for (t of flavors; track t.id) {\n <div class=\"type\" yuvListItem [ngClass]=\"{ selected: !!selectedFlavorsRec[t.id] }\">\n <mat-pseudo-checkbox [state]=\"!!selectedFlavorsRec[t.id] ? 'checked' : 'unchecked'\"></mat-pseudo-checkbox>\n {{ t.label }}\n </div>\n }\n </yuv-list>\n </div>\n\n <!-- created -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.created' | translate }}</mat-label>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n </mat-form-field>\n\n <!-- modified -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.modified' | translate }}</mat-label>\n <yuv-range-select-date formControlName=\"modified\"></yuv-range-select-date>\n </mat-form-field>\n\n <!-- content length -->\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.drive.search.meta.options.contentlength' | translate }}</mat-label>\n <yuv-range-select-filesize formControlName=\"contentlength\"></yuv-range-select-filesize>\n </mat-form-field>\n </form>\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"60\">\n <div class=\"query\">\n <h1>{{ 'yuv.app.drive.search.meta.headline.query' | translate }}</h1>\n\n <div class=\"tokens\">\n @if (flavorForms().length === 0 && !filterForm.value.term) {\n <p>{{ 'yuv.app.drive.search.meta.query.for-everything' | translate }}</p>\n }\n @for (o of flavorForms(); track o.id) {\n <details class=\"token\">\n <summary [ngClass]=\"{ dirty: formStates[o.id]?.dirty }\">\n @if (o.icon && o.svgIcon) {\n <mat-icon [svgIcon]=\"o.icon\"></mat-icon>\n } @else {\n <mat-icon>{{ o.icon }}</mat-icon>\n }\n {{ o.label }}\n <mat-icon class=\"arr\">arrow_drop_down</mat-icon>\n </summary>\n <yuv-object-form [formOptions]=\"o.formOptions\" (statusChanged)=\"onFormStatusChanged(o.id, $event)\"></yuv-object-form>\n </details>\n }\n @for (t of searchTokens; track $index) {\n <div class=\"searchToken token\">\n {{ t.label }}\n <button mat-icon-button class=\"ymt-icon-button--size-s\" (click)=\"removeSearchToken(t)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </yuv-split-view>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\" class=\"yuv-dialog-actions\">\n <button ymtButton=\"secondary\" mat-dialog-close type=\"button\" (click)=\"cancel()\">{{ 'yuv.app.drive.search.meta.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" mat-dialog-close type=\"submit\" (click)=\"submit()\">{{ 'yuv.app.drive.search.meta.button.search' | translate }}</button>\n</mat-dialog-actions>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { SearchQuery } from '@yuuvis/client-core';\nimport { SimpleSearchComponent } from '@yuuvis/client-framework/simple-search';\nimport { DRIVE_ROOT_FOLDER_ID } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { DriveSearchOverlayComponent } from './drive-search-overlay/drive-search-overlay.component';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymd-drive-search',\n standalone: true,\n imports: [CommonModule, TranslateModule, SimpleSearchComponent, ReactiveFormsModule, MatTooltipModule, MatIconButton, MatIcon],\n templateUrl: './drive-search.component.html',\n styleUrl: './drive-search.component.scss',\n host: {\n '[class.active]': 'extendedQuery()'\n }\n})\nexport class DriveSearchComponent {\n readonly translate = inject(TranslateService);\n #overlay = inject(MatDialog);\n #router = inject(Router);\n #route = inject(ActivatedRoute);\n #drive = inject(DriveService);\n\n #oRef: MatDialogRef<any> | undefined;\n\n query = this.#drive.state$.query;\n extendedQuery = this.#drive.state$.extendedQuery;\n currentFolder = this.#drive.state$.currentFolder;\n term = '';\n\n openModal(event: MouseEvent | KeyboardEvent) {\n event.stopPropagation();\n this.#oRef = this.#overlay.open(DriveSearchOverlayComponent, {\n minWidth: '90vw',\n minHeight: '90vh',\n data: {\n term: this.term\n }\n });\n this.#oRef.afterClosed().subscribe((q: SearchQuery) => q && this.onQuerySubmit(q, !!q.filters?.length || !!q.scope));\n }\n\n clear() {\n this.#router.navigate(['..', this.currentFolder() || DRIVE_ROOT_FOLDER_ID], {\n relativeTo: this.#route\n });\n }\n\n onQueryChange(q: SearchQuery) {\n this.term = q.term || '';\n }\n\n onQuerySubmit(q: SearchQuery, ext = false) {\n // in order to keep the query in the url as short as\n // possible we'll get rid of the fields because they could be\n // re-applied later on\n q.fields = undefined;\n\n this.#router.navigate(['files', 'query'], {\n queryParams: {\n q: encodeURIComponent(JSON.stringify(q)),\n ext\n },\n relativeTo: this.#route\n });\n }\n}\n","<button mat-icon-button class=\"icon\" (click)=\"openModal($event)\" [matTooltip]=\"'yuv.app.drive.search.tooltip.extended-search' | translate\">\n <mat-icon>tune</mat-icon>\n</button>\n\n<yuv-simple-search\n [query]=\"query()\"\n (queryChange)=\"onQueryChange($event)\"\n (querySubmit)=\"onQuerySubmit($event)\"\n (clearInput)=\"clear()\"></yuv-simple-search>\n","import { ChangeDetectionStrategy, Component, computed, inject, OnDestroy, OnInit } from '@angular/core';\nimport { BaseObjectTypeField, DmsObject, EventService, FlavoredDmsObject, TranslateModule, YuvEventType } from '@yuuvis/client-core';\nimport { ObjectPreviewComponent, ObjectPreviewService } from '@yuuvis/client-framework/object-preview';\nimport { ObjectSummaryDataComponent } from '@yuuvis/client-framework/object-summary';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { finalize, forkJoin } from 'rxjs';\nimport { VersionsListComponent } from '../../../components';\nimport { APP_TYPES, FS_PROPERTIES, FS_SOTS } from '../../../drive.schema';\nimport { DriveService } from '../../../services';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\nconst COMPONENTS = [VersionsListComponent, ObjectSummaryDataComponent, ObjectPreviewComponent, DialogComponent];\nconst MODULES = [YuvSplitViewModule, TranslateModule];\nconst MATERIAL = [MatIconModule, MatButtonModule, MatTabsModule, YmtButtonDirective];\n\n@Component({\n selector: 'ymd-manage-versions',\n standalone: true,\n imports: [...MODULES, ...COMPONENTS, ...MATERIAL, MatProgressBar],\n templateUrl: `./manage-versions.component.html`,\n styleUrls: [`./manage-versions.component.scss`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ObjectPreviewService]\n})\nexport class ManageVersionsComponent implements OnInit, OnDestroy {\n readonly #drive = inject(DriveService);\n readonly #shell = inject(ShellService);\n readonly #eventService = inject(EventService);\n\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<ManageVersionsComponent>);\n\n versionsList = this.#drive.state$.versions.versionsList;\n selectedVersion = this.#drive.state$.versions.selectedVersion;\n selectedDmsObject = this.#drive.state$.selectedDmsObject;\n\n isLoading = this.#drive.state$.busy;\n\n item: DmsObject = this.#dialogData;\n layoutSettingIdBase = 'app.drive.versions.';\n\n dmsObject = computed<{ id: string | null; name: string }>(() => {\n const dmsObject = this.selectedDmsObject();\n return dmsObject\n ? { id: dmsObject.data[BaseObjectTypeField.OBJECT_ID] as string, name: dmsObject.data[FS_PROPERTIES.name] as string }\n : { id: null, name: '' };\n });\n\n id = computed<string | null>(() => {\n const version = this.selectedVersion();\n return version ? version[0].id : null;\n });\n\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>(() => {\n const o = this.selectedVersion();\n return o\n ? {\n object: o[0],\n flavors: [\n {\n id: APP_TYPES['file']['id'],\n icon: APP_TYPES['file']['icon'],\n sot: FS_SOTS.object\n },\n ...this.#shell.getAppliedObjectFlavors(o[0]).applied\n ]\n }\n : undefined;\n });\n\n disabledRestore = computed<boolean>(() => {\n const selectedVersion = this.selectedVersion();\n const list = this.versionsList();\n return !(selectedVersion && selectedVersion[0].version !== list.length);\n });\n\n #loadList() {\n this.#drive.setBusy(true);\n return forkJoin([this.#drive.getVersions(this.item.id), this.#drive.getSelectedDmsObject(this.item.id)]).pipe(finalize(() => this.#drive.setBusy(false)));\n }\n\n close() {\n this.#dialogRef.close();\n }\n\n reloadList() {\n this.#loadList().subscribe();\n }\n\n setNewVersion() {\n this.#drive.setBusy(true);\n this.#drive.setNewVersion().subscribe({\n next: () => {\n this.#drive.setBusy(false);\n this.#eventService.trigger(YuvEventType.DMS_OBJECT_UPDATED);\n },\n error: (err) => this.#drive.setBusy(false)\n });\n }\n\n ngOnInit(): void {\n this.#loadList().subscribe();\n }\n\n ngOnDestroy(): void {\n this.#drive.clearVersions();\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.app.drive.versions.header.label' | translate\">\n <main>\n <div class=\"progress-bar-container\">\n @if (isLoading()) {\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n }\n </div>\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"layoutSettingIdBase + 'split'\">\n <!-- Versions -->\n <ng-template yuvSplitArea [size]=\"60\">\n <div class=\"version-details\">\n <header>\n <span>{{ dmsObject().name }}</span>\n </header>\n <div class=\"details\">\n @let selected = selectedVersion();\n @if (selected && selected.length === 1) {\n <mat-tab-group class=\"version-tabs\">\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.content.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-preview [dmsObject]=\"selected[0]\" [version]=\"selected[0].version\"></yuv-object-preview>\n </ng-template>\n </mat-tab>\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-summary-data [dmsObject]=\"selected[0]\"></yuv-object-summary-data>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n }\n </div>\n </div>\n </ng-template>\n <!-- Details -->\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"versions\">\n <header>\n <h2>{{ 'yuv.app.drive.versions.header.label.short' | translate }}</h2>\n <div class=\"actions\">\n <button mat-icon-button class=\"refresh\" (click)=\"reloadList()\"><mat-icon>refresh</mat-icon></button>\n </div>\n </header>\n <ymd-versions-list\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"isLoading()\"\n [attr.role]=\"'listbox'\"\n [id]=\"id()\"\n >\n </ymd-versions-list>\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" class=\"close\" (click)=\"close()\">{{ 'yuv.app.drive.action.set.new.versions.cancel' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"disabledRestore()\" (click)=\"setNewVersion()\">\n {{ 'yuv.app.drive.action.set.new.versions.label' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { inject } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { ManageVersionsComponent } from './component/manage-versions.component';\n\nexport class ManageVersionsAction extends AbstractContextAction implements Action {\n readonly translate = inject(TranslateService);\n #overlay = inject(MatDialog);\n #overlayService = inject(Overlay);\n\n id = 'app.drive.action.manage-versions';\n label = this.translate.instant('yuv.app.drive.action.manage-versions.label');\n description = this.translate.instant('yuv.app.drive.action.manage-versions.description');\n priority = 2;\n icon = 'manage_history';\n\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]) {\n return of(selection && selection[0] && selection[0].version > 1 && !selection[0].isFolder);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n let config = new MatDialogConfig();\n\n config = { ...config, width: '60vw', maxWidth: '80vw', height: '80vh', data: selection[0], scrollStrategy: this.#overlayService.scrollStrategies.block() };\n\n this.#overlay.open(ManageVersionsComponent, config);\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, OnDestroy, OnInit, Signal, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { SearchQuery, TranslateModule, UploadResult } from '@yuuvis/client-core';\nimport { ActionsService } from '@yuuvis/client-framework/actions';\nimport { UploadProgressComponent } from '@yuuvis/client-framework/upload-progress';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\n\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { filter } from 'rxjs/operators';\nimport { ManageVersionsAction } from '../../actions';\nimport { CopyLinkAction } from '../../actions/copy-link/copy-link.action';\nimport { PasteAction } from '../../actions/paste/paste.action';\nimport { RenameAction } from '../../actions/rename/rename.action';\nimport { UpdateContentAction } from '../../actions/updateContent/update.content.action';\nimport { APP_ACTIONS, APP_ID } from '../../drive.schema';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { DriveSearchComponent } from '../../components';\nimport { ShellService } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'ymd-drive',\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n OverflowMenuComponent,\n YuvClientShellModule,\n ReactiveFormsModule,\n TranslateModule,\n UploadProgressComponent,\n DriveSearchComponent\n ],\n templateUrl: './drive.component.html',\n styleUrl: './drive.component.scss'\n})\nexport class DriveFrameComponent implements OnInit, OnDestroy {\n #router = inject(Router);\n #route = inject(ActivatedRoute);\n #drive = inject(DriveService);\n #shell = inject(ShellService);\n #actionsService = inject(ActionsService);\n #destroyRef = inject(DestroyRef);\n\n query: Signal<SearchQuery | null> = this.#drive.state$.query;\n currentFolder: Signal<string | null> = this.#drive.state$.currentFolder;\n busy = this.#drive.state$.busy;\n\n #app = this.#shell.getApp(APP_ID);\n appName = this.#app?.title as string;\n appIcon = this.#app?.iconName;\n\n headerNavItems: OverflowMenuItem[] = [\n // TODO: enable again once favorite feature is implemented\n // {\n // id: 'favorites',\n // disabled: true,\n // label: this.translate.instant('yuv.app.drive.nav.favorites'),\n // icon: this.icons.favorite,\n // callback: () => {\n // this.router.navigate(['favorites'], {relativeTo: this.route})\n // }\n // }\n ];\n\n #actions = [\n { id: APP_ACTIONS.rename, action: RenameAction },\n { id: APP_ACTIONS.paste, action: PasteAction },\n { id: APP_ACTIONS.contentUpdate, action: UpdateContentAction },\n { id: APP_ACTIONS.copyLink, action: CopyLinkAction },\n { id: APP_ACTIONS.manageVersions, action: ManageVersionsAction }\n ];\n\n constructor() {\n this.#registerActions();\n // TODO: make use of global shortcuts\n // this.shellService.globalShortcuts$.pipe(takeUntilDestroyed()).subscribe((s: GlobalShortcut) => {\n // if (s === GlobalShortcut.search) this.router.navigate([{ outlets: { modal: ['find'] } }], { relativeTo: this.route });\n // });\n }\n\n #trackRouteChanges() {\n // listen to navigation/route changes in order to restore it later on\n this.#router.events\n .pipe(\n takeUntilDestroyed(this.#destroyRef),\n filter((e) => e instanceof NavigationEnd)\n )\n .subscribe((e) => {\n this.#drive.lastRouteURL = (e as NavigationEnd).urlAfterRedirects;\n });\n }\n\n onUploadProgressResultItemClick(uploadRes: UploadResult) {\n if (uploadRes && uploadRes.objectId) {\n this.#router.navigate(['object', uploadRes.objectId], { relativeTo: this.#route });\n }\n }\n\n #registerActions() {\n this.#actionsService.registerActions(this.#actions);\n }\n\n ngOnInit(): void {\n if (this.#drive.lastRouteURL) this.#router.navigateByUrl(this.#drive.lastRouteURL).then(() => this.#trackRouteChanges());\n else this.#trackRouteChanges();\n }\n\n ngOnDestroy(): void {\n this.#actions.forEach((a) => this.#actionsService.concealActions([a.id]));\n }\n}\n","<yuv-upload-progress (resultItemClick)=\"onUploadProgressResultItemClick($event)\"></yuv-upload-progress>\n\n<ng-template yuvAppHeaderSlot=\"search\"><ymd-drive-search></ymd-drive-search></ng-template>\n<ng-template yuvAppHeaderSlot=\"actions\"> <yuv-overflow-menu [menuItems]=\"headerNavItems\"></yuv-overflow-menu></ng-template>\n\n\n\n<section class=\"drive-main__content\" [attr.aria-label]=\"'yuv.app.drive.content.aria.label' | translate\">\n <router-outlet></router-outlet>\n</section>\n\n<router-outlet name=\"modal\"></router-outlet>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, FlavoredDmsObject, TranslateModule } from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { FS_PROPERTIES } from '../../drive.schema';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { ObjectMetadataComponent } from '@yuuvis/client-framework/object-details';\nimport { FormStatusChangedEvent } from '@yuuvis/client-framework/object-form';\n\n@Component({\n selector: 'ymd-folder-details-dialog',\n imports: [CommonModule, DialogComponent, TranslateModule, ObjectMetadataComponent, BusyOverlayDirective, YmtButtonDirective],\n templateUrl: './folder-details-dialog.component.html',\n styleUrl: './folder-details-dialog.component.scss'\n})\nexport class FolderDetailsDialogComponent {\n #shell = inject(ShellService);\n #folder: DmsObject = inject<DmsObject>(MAT_DIALOG_DATA);\n\n readonly #dialogRef = inject(MatDialogRef<FolderDetailsDialogComponent>);\n\n folderName: string = this.#folder.data[FS_PROPERTIES.name] as string;\n formState = signal<FormStatusChangedEvent | undefined>(undefined);\n\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>(() =>\n this.#folder\n ? {\n object: this.#folder,\n flavors: [...this.#shell.getAppliedObjectFlavors(this.#folder).applied]\n }\n : undefined\n );\n\n onMetadataStatusChanged(formState: FormStatusChangedEvent) {\n this.formState.set(formState);\n }\n\n onIndexdataSaved(updatedObject: DmsObject) {\n this.close();\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitel]=\"folderName\">\n <main [yuvBusyOverlay]=\"metadata.busy()\">\n <yuv-object-metadata\n [flavoredDmsObject]=\"flavoredDmsObject()\"\n #metadata\n [disableControls]=\"true\"\n (statusChanged)=\"onMetadataStatusChanged($event)\"\n (indexDataSaved)=\"onIndexdataSaved($event)\"\n >\n </yuv-object-metadata>\n </main>\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"metadata.busy()\">\n {{ 'yuv.app.drive.action.rename.cancel' | translate }}\n </button>\n <button ymtButton=\"secondary\" (click)=\"metadata.resetForm()\" [hidden]=\"!formState()?.dirty\" [disabled]=\"!formState()?.dirty\">\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n class=\"primary\"\n [ngClass]=\"{ spinning: metadata.busy() }\"\n (click)=\"metadata.save()\"\n [disabled]=\"!formState()?.dirty || formState()?.invalid\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChild, effect, inject, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ClipboardService, DmsObject } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\nimport { ClipboardComponent } from '@yuuvis/client-framework/clipboard';\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { finalize } from 'rxjs';\nimport { ACTION_CONTEXT, APP_ID } from '../../drive.schema';\nimport { DriveService } from '../../services';\nimport { MatProgressBar } from '@angular/material/progress-bar';\n\n@Component({\n selector: 'ymd-ribbon',\n standalone: true,\n imports: [CommonModule, ClipboardComponent, OverflowMenuComponent, MatProgressBar],\n templateUrl: './ribbon.component.html',\n styleUrl: './ribbon.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ymd-ribbon'\n }\n})\nexport class RibbonComponent {\n primarySlot = contentChild<TemplateRef<any>>('primaryActions');\n secondarySlot = contentChild<TemplateRef<any>>('secondaryActions');\n\n #drive = inject(DriveService);\n #clipboard = inject(ClipboardService);\n #actionsService = inject(ActionsService);\n\n private _defaultMenuItems: OverflowMenuItem[] = this.#drive.getDefaultRibbonActions().map((a) => ({\n id: a.id,\n icon: a.icon,\n label: a.label,\n disabled: true,\n group: 'default',\n callback: () => this.executeAction(a)\n }));\n clipboardBucket = APP_ID;\n busy = input<boolean>(false);\n enableClipboard = input<boolean>(false);\n menuItems: OverflowMenuItem[] = this._defaultMenuItems;\n\n objects = input<DmsObject[]>();\n #objectsEffect = effect(() => {\n this.menuItems = this._defaultMenuItems;\n this.#getActionsAndSetupItems(this.objects() || []);\n });\n\n excludeActions = input<string[]>();\n\n constructor() {\n this.#clipboard\n .clipboard$(this.clipboardBucket)\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: () => this.#getActionsAndSetupItems(this.objects() || [])\n });\n }\n\n #getActionsAndSetupItems(objects: DmsObject[]) {\n this.#actionsService\n .getActions(objects, {\n context: ACTION_CONTEXT,\n exclude: this.excludeActions()\n })\n .subscribe({ next: (res) => this._setupMenuItems(res) });\n }\n\n executeAction(a: Action) {\n const o = this.objects();\n if (o && this._isAction(a)) (a as Action).run(o);\n }\n\n onClipboardPaste() {\n this.#drive.setBusy(true);\n this.#drive\n .pasteFromClipboard()\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe({\n next: () => this.#clipboard.clear(this.clipboardBucket)\n });\n }\n\n private _isAction(a: any) {\n return !!a['run'];\n }\n\n private _setupMenuItems(actions: Action[]) {\n // en-/disable default actions\n this._defaultMenuItems.forEach((mi) => {\n mi.disabled = !actions.find((a) => a.id === mi.id);\n });\n\n const defaultActionIds = this._defaultMenuItems.map((mi) => mi.id);\n this.menuItems = [\n ...this._defaultMenuItems,\n ...actions\n .filter((a) => !defaultActionIds.includes(a.id))\n .map((a) => ({\n id: a.id,\n icon: a.icon,\n label: a.label,\n group: 'aside',\n callback: () => this.executeAction(a)\n }))\n ];\n }\n}\n","@let primary = primarySlot();\n@let secondary = secondarySlot();\n\n@if (primary) {\n <div class=\"primary-actions\">\n <ng-container [ngTemplateOutlet]=\"primary\"></ng-container>\n </div>\n}\n\n<div class=\"object-actions\">\n @if (enableClipboard()) {\n <yuv-clipboard class=\"dark\" [bucket]=\"clipboardBucket\" [enablePaste]=\"true\" (paste)=\"onClipboardPaste()\"></yuv-clipboard>\n }\n <yuv-overflow-menu [menuItems]=\"menuItems\"></yuv-overflow-menu>\n</div>\n\n@if (secondary) {\n <div class=\"secondary-actions\">\n <ng-container [ngTemplateOutlet]=\"secondary\"></ng-container>\n </div>\n}\n\n@if (busy()) {\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { BaseObjectTypeField, ContentStreamField, Operator, SearchFilter, SearchQuery, SearchService } from '@yuuvis/client-core';\nimport { DragScrollDirective } from '@yuuvis/client-framework/common';\nimport { RangeSelectDateComponent, RangeSelectDateValue, RangeSelectFilesizeComponent, RangeSelectFilesizeValue } from '@yuuvis/client-framework/forms';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymd-search-filter',\n standalone: true,\n imports: [\n CommonModule,\n MatSelectModule,\n TranslateModule,\n RangeSelectFilesizeComponent,\n RangeSelectDateComponent,\n ReactiveFormsModule,\n DragScrollDirective,\n YmtButtonDirective\n ],\n templateUrl: './search-filter.component.html',\n styleUrl: './search-filter.component.scss'\n})\nexport class SearchFilterComponent {\n #shell = inject(ShellService);\n #fb = inject(FormBuilder);\n #search = inject(SearchService);\n\n private translate = inject(TranslateService);\n\n ANY_OPTION = 'any';\n #flavors = this.#shell.getObjectFlavors();\n\n typeOptions = signal<{ label: string; value: unknown }[]>([]);\n\n query = input<SearchQuery | null>(null);\n queryChange = output<SearchQuery>();\n filtersActive = signal<boolean>(false);\n\n filterForm = this.#fb.nonNullable.group({\n type: [this.ANY_OPTION],\n size: [this.ANY_OPTION],\n created: [this.ANY_OPTION]\n });\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n reset() {\n const q = this.query();\n if (q) {\n this.queryChange.emit(q);\n this.filterForm.reset();\n }\n }\n\n #onFormValueChange(v: any) {\n const updatedQuery: SearchQuery = this.#applyFilters(v);\n this.queryChange.emit(updatedQuery);\n this.filtersActive.set(!!updatedQuery.filters && updatedQuery.filters.length > 0);\n }\n\n #applyFilters(v: any): SearchQuery {\n const updatedQuery: SearchQuery = {\n ...(this.query() || {}),\n filters: []\n };\n updatedQuery.filters = [];\n\n // file size filter\n const typeFilter = this.#toTypeFilter(v.type);\n if (typeFilter) updatedQuery.filters.push(typeFilter);\n\n // file size filter\n const sizeFilter = v.size !== this.ANY_OPTION ? this.#toSizeFilter(v.size) : undefined;\n if (sizeFilter) updatedQuery.filters.push(sizeFilter);\n\n // creation date filter\n const dateFilter = v.created !== this.ANY_OPTION ? this.#toDateFilter(v.created) : undefined;\n if (dateFilter) updatedQuery.filters.push(dateFilter);\n\n return updatedQuery;\n }\n\n #setupOptions() {\n this.#setupTypeOptions();\n }\n\n #setupTypeOptions() {\n this.typeOptions.set([\n {\n label: this.translate.instant('yuv.app.drive.search.filter.option.any'),\n value: this.ANY_OPTION\n },\n ...this.#flavors.map((f: ObjectFlavor) => ({\n label: this.translate.instant(f.id),\n value: f.sot\n }))\n ]);\n }\n\n #toDateFilter(value: RangeSelectDateValue): SearchFilter | undefined {\n return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, BaseObjectTypeField.CREATION_DATE) : undefined;\n }\n\n #toSizeFilter(value: RangeSelectFilesizeValue): SearchFilter | undefined {\n return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, ContentStreamField.LENGTH) : undefined;\n }\n\n #toTypeFilter(value: string): SearchFilter | undefined {\n return value === this.ANY_OPTION\n ? undefined\n : {\n f: BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,\n o: Operator.IN,\n v1: [value]\n };\n }\n}\n","<form [formGroup]=\"filterForm\" yuvDragScroll>\n <mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" formControlName=\"type\">\n @for (o of typeOptions(); track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n <yuv-range-select-filesize formControlName=\"size\"></yuv-range-select-filesize>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n @if (filtersActive()) {\n <button ymtButton=\"secondary\" button-size=\"small\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n","import { Injectable, inject } from '@angular/core';\nimport { TranslateService, UserService } from '@yuuvis/client-core';\nimport { STORED_QUERIES } from './stored-query.data';\nimport { StoredQuery } from './stored-query.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoredQueryService {\n private userService = inject(UserService);\n private translate = inject(TranslateService);\n\n \n\n getStoredQuery(id: string): StoredQuery | undefined {\n const q = STORED_QUERIES[id];\n\n if (!q) return undefined;\n\n try {\n // if query has no label try to resolve from language resources\n return {\n label: q.label || this.translate.instant(id),\n query: JSON.parse(this._replaceVars(q.query))\n };\n } catch (e) {\n return undefined;\n }\n }\n\n private _replaceVars(str: string): string {\n const vars = [{ placeholder: '##me##', replace: this.userService.getCurrentUser().id }];\n vars.forEach((v) => {\n str = str.replaceAll(v.placeholder, v.replace);\n });\n return str;\n }\n}\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, computed, effect, inject, input, OnDestroy, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, ParamMap, Router, RouterModule } from '@angular/router';\nimport {\n AppCacheService,\n BaseObjectTypeField,\n ClipboardService,\n ConfigTypeOption,\n DeviceScreen,\n DeviceService,\n DmsObject,\n DmsService,\n EventService,\n ObjectConfigService,\n Operator,\n ResolvedObjectConfig,\n RetentionService,\n SearchQuery,\n SystemType,\n TranslateModule,\n TranslateService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport {\n ActionsService,\n BASE_ACTION,\n ContextmenuComponent,\n ContextMenuItemSelectEvent,\n YuvContextMenuTriggerDirective\n} from '@yuuvis/client-framework/actions';\nimport { FileDropZoneDirective } from '@yuuvis/client-framework/common';\nimport { MultiObjectSummaryComponent, ObjectSummaryComponent } from '@yuuvis/client-framework/object-summary';\nimport { OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { SplitViewComponent, YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { TileConfigTriggerComponent, TileData, TileListComponent, TileListConfigOptions, TileListHighlight } from '@yuuvis/client-framework/tile-list';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { finalize, map, Observable, tap } from 'rxjs';\nimport { BreadcrumbComponent, FolderTreeComponent, SortComponent } from '../../components';\nimport { AddButtonComponent } from '../../components/add-button/add-button.component';\nimport { FolderDetailsDialogComponent } from '../../components/folder-details-dialog/folder-details-dialog.component';\nimport { RibbonComponent } from '../../components/ribbon/ribbon.component';\nimport { SearchFilterComponent } from '../../components/search-filter/search-filter.component';\nimport { ACTION_CONTEXT, APP_ID, APP_TYPES } from '../../drive.schema';\nimport { DRIVE_EVENT, DRIVE_QUERY_FOLDER_ID, DRIVE_ROOT_FOLDER_ID, DriveFolderId } from '../../services/drive/drive.interface';\nimport { DriveService } from '../../services/drive/drive.service';\nimport { STORED_QUERY_ID_PREFIX } from '../../services/stored-query/stored-query.data';\nimport { StoredQuery } from '../../services/stored-query/stored-query.interface';\nimport { StoredQueryService } from '../../services/stored-query/stored-query.service';\n\nconst components = [\n TileListComponent,\n BreadcrumbComponent,\n FolderTreeComponent,\n ObjectSummaryComponent,\n TileConfigTriggerComponent,\n RibbonComponent,\n AddButtonComponent,\n MultiObjectSummaryComponent,\n SortComponent,\n SearchFilterComponent,\n MatTooltipModule,\n MatIconButton,\n MatIcon\n];\n\nconst module = [TranslateModule, RouterModule, YuvSplitViewModule, YuvClientShellModule];\n\n@Component({\n selector: 'ymd-files',\n standalone: true,\n imports: [NgClass, AsyncPipe, ...module, ...components, FileDropZoneDirective, ContextmenuComponent, YuvContextMenuTriggerDirective],\n templateUrl: './files.component.html',\n styleUrl: './files.component.scss',\n host: {\n '[class.smallScreen]': 'smallScreenLayout()'\n }\n})\nexport class FilesPageComponent implements OnDestroy {\n tileList = viewChild<TileListComponent>('tileList');\n\n #LAYOUT_SETTINGS_STORAGE_KEY = 'yuv.app.drive.files.layout';\n\n private shellService = inject(ShellService);\n private dmsService = inject(DmsService);\n private drive = inject(DriveService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private translate = inject(TranslateService);\n private storedQueryService = inject(StoredQueryService);\n private clipboard = inject(ClipboardService);\n private actionsService = inject(ActionsService);\n readonly #objectConfigService = inject(ObjectConfigService);\n readonly #device = inject(DeviceService);\n readonly #retention = inject(RetentionService);\n readonly #shell = inject(ShellService);\n readonly #dialog = inject(MatDialog);\n\n readonly #eventService = inject(EventService);\n\n readonly ERROR_CODE = {\n NOT_FOUND: '404',\n // pattern: {HTTP_STATUS_CODE}-{SERVICE_ERROR_CODE}\n INVALID_ID: '422-2912'\n };\n\n #appCache = inject(AppCacheService);\n\n objectConfigBucket: string = APP_ID;\n\n splitViewCmp = viewChild.required(SplitViewComponent);\n selected = signal<DmsObject | undefined>(undefined);\n\n #editAction: OverflowMenuItem = {\n id: 'edit',\n icon: 'edit_note',\n label: this.translate.instant('yuv.object-summary.action.edit'),\n callback: () => {\n const o = this.selected();\n if (o) {\n if (o.isFolder) {\n // open metadata edit dialog^\n this.#dialog.open(FolderDetailsDialogComponent, {\n maxHeight: '90vh',\n maxWidth: '90vw',\n data: o\n });\n } else {\n this.#navigateTo(o.id);\n }\n }\n }\n };\n\n summaryActions = computed<OverflowMenuItem[]>(() => {\n const e = this.selected();\n if (!e) return [];\n const res = this.#shell.getAppliedObjectFlavors(e);\n return !e.isFolder || res.applied.length ? [this.#editAction] : [];\n });\n\n fileDropSummaryDisabled = computed(() => {\n const e = this.selected();\n return !e || !e.permissions?.writeContent || this.#retention.getRetentionState(e).underRetention;\n });\n disableCreate = false;\n\n actions = this.drive.state$.actions;\n selection = this.drive.state$.selection;\n extendedQuery = this.drive.state$.extendedQuery;\n hasActions = computed(() => !!this.actions().length);\n\n busy = this.drive.state$.busy;\n flavorChips: ObjectFlavor[] = this.shellService.getObjectFlavors();\n appliedFlavor?: ObjectFlavor;\n\n selectionActions = computed(() => ({ selection: this.selection(), actions: this.actions() }));\n\n emptyMode = signal<DriveFolderId | null>(null);\n // error code when loading the object failed. This will be used\n // to determine a proper error message to display\n error = signal<string | undefined>(undefined);\n\n configTypeOptions: Record<string, ConfigTypeOption> = {\n folder: { bucket: APP_ID, type: APP_TYPES['folder'] },\n file: { bucket: APP_ID, type: APP_TYPES['file'] }\n };\n\n currentFolderID?: string;\n currentFolder?: DmsObject;\n enableDetails = signal<boolean>(true);\n enableTree = signal<boolean>(true);\n tileConfigBucketLabel = this.translate.instant('yuv.app.drive.tile-config.bucket');\n\n smallScreenLayout = signal(false);\n sortOptionsAvailable = signal(true);\n extendedSearch = signal(false);\n\n id = input<string | null>(null);\n\n highlightStyles$: Observable<TileListHighlight[]> = this.clipboard.clipboard$(APP_ID).pipe(\n takeUntilDestroyed(),\n map((c) => {\n return c && c.mode && c.objects?.length\n ? [\n {\n cssStyles: this.#highlightStyles[c?.mode],\n ids: c.objects.map((o) => o.id)\n }\n ]\n : [];\n })\n );\n\n readonly #highlightStyles: Record<string, Record<string, unknown>> = {\n cut: { opacity: 0.5 }\n };\n\n #routeIdEffect = effect(() => {\n const param = this.id() || undefined;\n\n untracked(async () => {\n if (param === DRIVE_QUERY_FOLDER_ID) {\n this.emptyMode.set(DRIVE_QUERY_FOLDER_ID);\n return;\n }\n\n this.emptyMode.set(param === DRIVE_ROOT_FOLDER_ID ? DRIVE_ROOT_FOLDER_ID : null);\n this.error.set(undefined);\n this.disableCreate = false;\n this.currentFolderID = param;\n this.drive.updateCurrentFolder(this.currentFolderID);\n this.selected.set(undefined);\n this.currentFolder = undefined;\n if (this.currentFolderID === DRIVE_ROOT_FOLDER_ID) this.currentFolderID = undefined;\n\n if (this.currentFolderID) {\n this.dmsService.getDmsObject(this.currentFolderID).subscribe({\n next: (o: DmsObject) => {\n this.currentFolder = o;\n this._setFolderQuery(this.#getTitle(o));\n },\n error: (e) => {\n console.error('Error getting folder', e);\n this.#processLoadError(e);\n }\n });\n } else this._setFolderQuery(this.translate.instant('yuv.app.drive.folder-tree.mydrive'));\n });\n });\n\n tileListOptions: TileListConfigOptions = {\n actionContext: ACTION_CONTEXT,\n configTypes: Object.values(APP_TYPES),\n configFlavors: [\n ]\n };\n\n query = this.drive.state$.query;\n queryTitle = this.drive.state$.queryTitle;\n\n constructor() {\n this.drive.events$.pipe(takeUntilDestroyed()).subscribe({\n next: (e) => {\n if (e === DRIVE_EVENT.refresh) {\n this.refresh();\n }\n }\n });\n\n this.#device.screenChange$.pipe(takeUntilDestroyed()).subscribe({\n next: (s: DeviceScreen) => {\n this.smallScreenLayout.set(s.size === 's' && s.orientation === 'portrait');\n this.enableDetails.set(!this.smallScreenLayout());\n }\n });\n\n toObservable(this.drive.state$.selection)\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (sel: DmsObject[]) => {\n if (sel?.length === 0) {\n this.tileList()?.clearSelection(true);\n this.selected.set(undefined);\n }\n }\n });\n\n this.route.queryParamMap.pipe(takeUntilDestroyed()).subscribe({\n next: (p: ParamMap) => {\n this.sortOptionsAvailable.set(true);\n if (this.route.snapshot.params['id'] === DRIVE_QUERY_FOLDER_ID) {\n const q = p.get('q');\n this.disableCreate = true;\n if (q?.startsWith(STORED_QUERY_ID_PREFIX)) {\n // stored query\n const sq: StoredQuery | undefined = this.storedQueryService.getStoredQuery(q);\n if (sq) {\n this.drive.updateQuery(sq.query, sq.label);\n this.sortOptionsAvailable.set(false);\n return;\n }\n } else if (q) {\n // search query\n this.sortOptionsAvailable.set(true);\n try {\n const sq: SearchQuery = JSON.parse(decodeURIComponent(q));\n sq.filters = (sq.filters || []).filter((f) => f.f !== BaseObjectTypeField.PARENT_ID);\n this.drive.updateQuery(sq, this.translate.instant('yuv.app.drive.files.search.result.title'), p.get('ext') === 'true');\n return;\n } catch (e) {\n console.error('Error parsing query', e);\n }\n }\n }\n }\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(\n takeUntilDestroyed(),\n tap((e) => {\n this.tileList()?.updateTileList([e.data]);\n e.data.id === this.selected()?.id && this.selected.set(e.data);\n })\n )\n .subscribe();\n }\n\n onFilterQueryChange(q: SearchQuery) {\n this.drive.updateQuery(q, this.translate.instant('yuv.app.drive.files.search.result.title'));\n this.drive.setSelection([]);\n }\n\n #processLoadError(e: HttpErrorResponse) {\n if (`${e.status}` !== this.ERROR_CODE.NOT_FOUND) {\n this.error.set(`${e.status}-${e.error?.serviceErrorCode || ''}`);\n } else this.error.set(this.ERROR_CODE.NOT_FOUND);\n }\n\n #getTitle(o: DmsObject): string {\n const cfgType: ConfigTypeOption = o.isFolder ? this.configTypeOptions['folder'] : this.configTypeOptions['file'];\n const oc: ResolvedObjectConfig = this.#objectConfigService.getResolvedObjectConfig(o.data, cfgType.type, cfgType.bucket, true);\n return oc.title.value;\n }\n\n onDelete() {\n const deleteAction = this.actions().find((a) => a.id === BASE_ACTION.delete);\n if (deleteAction) deleteAction.run(this.drive.state$.selection());\n }\n\n private _setFolderQuery(queryTitle?: string) {\n this.drive.updateQuery(\n {\n filters: [{ f: BaseObjectTypeField.PARENT_ID, o: Operator.EQUAL, v1: this.currentFolderID || null }]\n },\n queryTitle\n );\n }\n\n onContextmenuAction(data: ContextMenuItemSelectEvent) {\n data.action.run(this.selection());\n }\n\n onFileDrop(files: File[]) {\n this.drive.setBusy(true);\n this.drive.checkNamesAndUpload(files).subscribe({ complete: () => this.drive.setBusy(false) });\n }\n\n onFileUpdateDrop(file: File[]) {\n const dmsObject = this.selected();\n if (dmsObject) {\n this.drive.setBusy(true);\n this.drive\n .uploadContent(dmsObject.id, file[0])\n .pipe(finalize(() => this.drive.setBusy(false)))\n .subscribe();\n }\n }\n\n itemFocused(tile: TileData) {\n // console.log(tile);\n }\n\n itemClicked(tile: TileData) {\n if (this.smallScreenLayout()) this.itemDoubleClicked(tile);\n }\n\n onCopy(tiles: TileData[]) {\n this.clipboard.addObjects(\n tiles.map((t) => t.dmsObject),\n 'copy',\n APP_ID\n );\n }\n\n onCut(tiles: TileData[]) {\n this.clipboard.addObjects(\n tiles.map((t) => t.dmsObject),\n 'cut',\n APP_ID\n );\n }\n\n selectionChanged(tiles: TileData[]) {\n if (tiles.length === 1) this.loadDetails(tiles[0].id);\n else {\n this.selected.set(undefined);\n if (tiles.length === 0) {\n this.drive.setSelection([]);\n } else {\n this.drive.setBusy(true);\n this.dmsService.getDmsObjects(tiles.map((i) => i.id)).subscribe({\n next: (o: DmsObject[]) => {\n this.drive.setBusy(false);\n this.drive.setSelection(o);\n }\n });\n }\n }\n }\n\n itemDoubleClicked(tile: TileData) {\n if (tile.instanceData) {\n this.#navigateTo(\n tile.instanceData[BaseObjectTypeField.OBJECT_ID] as string,\n (tile.instanceData[BaseObjectTypeField.BASE_TYPE_ID] as string) === SystemType.FOLDER\n );\n }\n }\n\n #navigateTo(id: string, isFolder = false) {\n this.drive.setBusy(true);\n const nav = isFolder ? ['..'] : ['../..', 'object'];\n this.router.navigate([...nav, id], { relativeTo: this.route }).then(() => this.drive.setBusy(false));\n }\n\n loadDetails(id: string) {\n this.shellService.addBusy();\n // load the dms object\n this.dmsService.getDmsObject(id).subscribe({\n next: (o: DmsObject) => {\n this.selected.set(o);\n this.shellService.removeBusy();\n this.drive.setSelection([o]);\n }\n });\n }\n\n clearSelection() {\n this.drive.setSelection([]);\n }\n\n openParent() {\n if (this.currentFolder) {\n this.drive.setBusy(true);\n this.router\n .navigate(['..', this.currentFolder.data[BaseObjectTypeField.PARENT_ID] || DRIVE_ROOT_FOLDER_ID], {\n relativeTo: this.route,\n replaceUrl: true\n })\n .then(() => this.drive.setBusy(false));\n }\n }\n\n setBusy(busy: boolean) {\n this.drive.setBusy(busy);\n }\n\n refresh() {\n this.tileList()?.refresh();\n this.drive.setSelection([]);\n }\n\n onLayoutSettingsChange(e: any) {\n this.#appCache.setItem(this.#LAYOUT_SETTINGS_STORAGE_KEY, e).subscribe();\n }\n\n // #applyLayoutSettings(settings: SplitViewLayoutSettings) {\n // // this.splitViewCmp().applyLayoutSettings(settings);\n // }\n\n // ngAfterViewInit(): void {\n // // this.#appCache.getItem(this.#LAYOUT_SETTINGS_STORAGE_KEY).subscribe({\n // // next: (ls: SplitViewLayoutSettings) => {\n // // if (ls) {\n // // this.enableDetails.set(ls.areas[2]?.visible);\n // // this.enableTree.set(ls.areas[0]?.visible);\n // // this.#applyLayoutSettings(ls);\n // // }\n // // }\n // // });\n // }\n\n ngOnDestroy(): void {\n this.clipboard.clear(APP_ID);\n }\n}\n","<header>\n <!-- navigation bar -->\n <nav [attr.aria-label]=\"'yuv.app.drive.files.naviagtion.aria.label' | translate\">\n <div class=\"nav\">\n <button mat-icon-button [disabled]=\"!currentFolder\" [matTooltip]=\"'yuv.app.drive.files.nav.back.tooltip' | translate\" (click)=\"openParent()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <button mat-icon-button [matTooltip]=\"'yuv.app.drive.files.nav.refresh.tooltip' | translate\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n\n @if (!query()?.term) {\n <ymd-breadcrumb></ymd-breadcrumb>\n } @else {\n <div class=\"breadcrumb\"></div>\n }\n </nav>\n\n <!-- ribbon with actions and options -->\n <ymd-ribbon [objects]=\"selection()\" [busy]=\"busy()\" [enableClipboard]=\"true\" class=\"files__surface\">\n <ng-template #primaryActions>\n <ymd-add-button [disabled]=\"disableCreate\"></ymd-add-button>\n </ng-template>\n\n <ng-template #secondaryActions>\n <div class=\"options\">\n @if (!smallScreenLayout()) {\n <button\n mat-icon-button\n class=\"toggle-tree toggle\"\n [ngClass]=\"{ enabled: enableTree() }\"\n [matTooltip]=\"'yuv.app.drive.files.toggletree.tooltip' | translate\"\n (click)=\"enableTree.set(!enableTree())\"\n >\n <mat-icon>dock_to_right</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toggle-details toggle\"\n [ngClass]=\"{ enabled: enableDetails() }\"\n [matTooltip]=\"'yuv.app.drive.files.toggledetails.tooltip' | translate\"\n (click)=\"enableDetails.set(!enableDetails())\"\n >\n <mat-icon>dock_to_left</mat-icon>\n </button>\n }\n <yuv-tile-config-trigger [bucket]=\"objectConfigBucket\" [bucketLabel]=\"tileConfigBucketLabel\" [options]=\"tileListOptions\"></yuv-tile-config-trigger>\n </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yuv-split-view [gutterSize]=\"1\" (layoutSettingsChange)=\"onLayoutSettingsChange($event)\" class=\"files__surface\">\n <!-- folder tree -->\n <ng-template yuvSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <ymd-folder-tree></ymd-folder-tree>\n </ng-template>\n\n <!-- files -->\n <ng-template yuvSplitArea [size]=\"60\">\n @let err = error();\n @if (err) {\n <div class=\"error\">\n <p>\n <mat-icon>warning</mat-icon>\n @switch (err) {\n @case (ERROR_CODE.NOT_FOUND) {\n {{ 'yuv.app.drive.files.error.load.not-found' | translate }}\n }\n @case (ERROR_CODE.INVALID_ID) {\n {{ 'yuv.app.drive.files.error.load.invalid-id' | translate }}\n }\n @default {\n {{ 'yuv.app.drive.files.error.load' | translate }}\n }\n }\n </p>\n </div>\n } @else {\n <div class=\"files\" [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.label' | translate }\" (fileDrop)=\"onFileDrop($event)\">\n <header class=\"files-header\">\n <h1>{{ queryTitle() }}</h1>\n @if (sortOptionsAvailable()) {\n <ymd-sort />\n }\n <!-- <div class=\"flavors\">\n TODO: enable again once flavors/aspects are supported -->\n <!-- @for (f of flavorChips; track f.id) {\n <yuv-flavor-chip [ngClass]=\"{ active: f.id === appliedFlavor?.id }\" [flavor]=\"f\" (click)=\"appliedFlavor = f\"></yuv-flavor-chip>\n }\n </div>-->\n @if (query()?.term && !extendedQuery()) {\n <ymd-search-filter [query]=\"query()\" (queryChange)=\"onFilterQueryChange($event)\"></ymd-search-filter>\n }\n </header>\n <yuv-tile-list\n #tileList\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"busy()\"\n [attr.role]=\"'listbox'\"\n (keydown.backspace)=\"openParent()\"\n (keydown.delete)=\"onDelete()\"\n [bucket]=\"objectConfigBucket\"\n [multiselect]=\"true\"\n [query]=\"query()\"\n [flavor]=\"appliedFlavor\"\n [options]=\"tileListOptions\"\n (itemDblClick)=\"itemDoubleClicked($event)\"\n (itemSelect)=\"itemClicked($event)\"\n (selectionChange)=\"selectionChanged($event)\"\n (tileCopy)=\"onCopy($event)\"\n (tileCut)=\"onCut($event)\"\n (busy)=\"setBusy($event)\"\n [highlights]=\"highlightStyles$ | async\"\n [yuvContextMenuTrigger]=\"context_menu\"\n [yuvContextMenuTriggerWhen]=\"hasActions()\"\n >\n <div #empty>\n @if (emptyMode() === 'root') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.root.list' | translate }}</p>\n } @else if (emptyMode() === 'query') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.query.list' | translate }}</p>\n } @else {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.list' | translate }}</p>\n }\n </div>\n\n <ng-template #context_menu>\n <yuv-contextmenu [actions]=\"actions()\" (itemSelect)=\"onContextmenuAction($event)\"></yuv-contextmenu>\n </ng-template>\n </yuv-tile-list>\n </div>\n }\n </ng-template>\n\n <!-- details -->\n <ng-template yuvSplitArea [size]=\"20\" [visible]=\"enableDetails()\">\n @let selectedItem = selected();\n @if (enableDetails() && selectedItem) {\n @if (selectedItem?.isFolder) {\n <yuv-object-summary [actions]=\"summaryActions()\" [configType]=\"configTypeOptions['folder']\" [dmsObject]=\"selectedItem\"></yuv-object-summary>\n } @else {\n <yuv-object-summary\n [actions]=\"summaryActions()\"\n [configType]=\"configTypeOptions['file']\"\n [dmsObject]=\"selectedItem\"\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropSummaryDisabled()\"\n (fileDrop)=\"onFileUpdateDrop($event)\"\n ></yuv-object-summary>\n }\n } @else {\n @let sel = selection();\n @if (sel && sel.length > 0) {\n <yuv-multi-object-summary [headline]=\"'yuv.app.drive.multiselected.details' | translate: { count: selection().length }\"></yuv-multi-object-summary>\n } @else if (tileList()?.items?.length === 0) {\n <!-- TODO: CHOULD HAVE A DIFFERENT MESSAGE FOR EMPTY RESULTS EMPTY FOR NOW -->\n <div class=\"message\">{{ 'yuv.app.drive.empty.results.details.message' | translate }}</div>\n } @else {\n <div class=\"message\">{{ 'yuv.app.drive.unselected.details' | translate }}</div>\n }\n }\n </ng-template>\n</yuv-split-view>\n","import { CommonModule } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, computed, effect, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport {\n DeviceScreen,\n DeviceService,\n DmsObject,\n DmsService,\n EventService,\n FlavoredDmsObject,\n ObjectConfigService,\n RetentionService,\n RetentionState,\n TranslateModule,\n TranslateService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BASE_ACTION } from '@yuuvis/client-framework/actions';\nimport { ContainerSizeDirective, FileDropZoneDirective } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS, YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { ObjectAuditComponent, ObjectMetadataComponent, RetentionBadgeComponent } from '@yuuvis/client-framework/object-details';\nimport { ObjectFlavorComponent } from '@yuuvis/client-framework/object-flavor';\nimport { ObjectPreviewComponent, ObjectPreviewService } from '@yuuvis/client-framework/object-preview';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { finalize } from 'rxjs';\nimport { RibbonComponent } from '../../components/ribbon/ribbon.component';\nimport { APP_ACTIONS, APP_ID, APP_TYPES } from '../../drive.schema';\nimport { DRIVE_ROOT_FOLDER_ID, DriveService } from '../../services';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n@Component({\n selector: 'ymd-object',\n standalone: true,\n imports: [\n CommonModule,\n ObjectMetadataComponent,\n ObjectAuditComponent,\n ObjectFlavorComponent,\n YuvIconComponent,\n YuvSplitViewModule,\n RendererDirective,\n ContainerSizeDirective,\n TranslateModule,\n RibbonComponent,\n RetentionBadgeComponent,\n ObjectPreviewComponent,\n FileDropZoneDirective,\n MatTabsModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n MatProgressSpinner\n ],\n templateUrl: './object.component.html',\n styleUrl: './object.component.scss',\n host: {\n ['class.smallScreenLayout']: 'smallScreenLayout()'\n },\n providers: [ObjectPreviewService]\n})\nexport class ObjectPageComponent {\n #dmsService = inject(DmsService);\n #eventService = inject(EventService);\n #shellService = inject(ShellService);\n #route = inject(ActivatedRoute);\n #router = inject(Router);\n #objectConfig = inject(ObjectConfigService);\n translate = inject(TranslateService);\n #drive = inject(DriveService);\n #device = inject(DeviceService);\n #retention = inject(RetentionService);\n\n busy = this.#drive.state$.busy;\n smallScreenLayout = signal(false);\n errorMessage?: string;\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n retentionState = signal<RetentionState | undefined>(undefined);\n #dmsObjectEffect = effect(() => this.#setHeaderData());\n fileDropReplaceDisabled = computed(() => {\n const e = this.dmsObject();\n return !e || !e.permissions?.writeContent || this.#retention.getRetentionState(e).underRetention;\n });\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>(() => {\n const o = this.dmsObject();\n return o\n ? {\n object: o,\n flavors: [...this.#shellService.getAppliedObjectFlavors(o).applied]\n }\n : undefined;\n });\n\n icons = {\n back: YUV_ICONS.back,\n error: YUV_ICONS.attention,\n refresh: YUV_ICONS.refresh\n };\n\n layoutSettingIdBase = 'app.drive.object.';\n\n headerData?: {\n title: RendererDirectiveInput;\n description?: RendererDirectiveInput;\n icon: string;\n };\n\n excludeActions = [APP_ACTIONS.paste, APP_ACTIONS.contentUpdate, BASE_ACTION.copy, BASE_ACTION.cut];\n\n constructor() {\n this.#route.paramMap.pipe(takeUntilDestroyed()).subscribe((p: ParamMap) => {\n this._loadDetails(p.get('id'));\n });\n\n this.#device.screenChange$.pipe(takeUntilDestroyed()).subscribe({\n next: (s: DeviceScreen) => {\n const ssl = s.size === 's' && s.orientation === 'portrait';\n this.smallScreenLayout.set(ssl);\n }\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e) => {\n if (e.data.id === this.dmsObject()?.id) this.dmsObject.set(e.data);\n });\n\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_DELETED)\n .pipe(takeUntilDestroyed())\n .subscribe((e) => {\n if (e.data.id === this.dmsObject()?.id)\n if (e.data.id === this.dmsObject()?.id)\n // navigate to parent folder\n this.openParent();\n });\n }\n\n refresh() {\n const o = this.dmsObject();\n if (o)\n this.#dmsService.getDmsObject(o.id).subscribe((o) => {\n this.dmsObject.set(o);\n });\n if (o)\n this.#dmsService.getDmsObject(o.id).subscribe((o) => {\n this.dmsObject.set(o);\n });\n }\n\n openParent() {\n const pid = this.dmsObject()?.parentId || DRIVE_ROOT_FOLDER_ID;\n this.#router.navigate(['../..', 'files', pid], {\n relativeTo: this.#route\n });\n }\n\n onIndexdataSaved(updatedObject: DmsObject) {\n this.dmsObject.set(updatedObject);\n }\n\n #setHeaderData() {\n const o = this.dmsObject();\n if (!o) {\n this.headerData = undefined;\n } else {\n const roc = this.#objectConfig.getResolvedObjectConfig(o.data, APP_TYPES['file'], APP_ID);\n this.headerData = {\n title: roc.title,\n description: roc.description,\n icon: roc.icon?.value\n };\n this.retentionState.set(this.#retention.getRetentionState(o));\n }\n }\n\n onFileDrop(file: File[]) {\n this.#drive.setBusy(true);\n const dmsObject = this.dmsObject();\n\n dmsObject &&\n this.#drive\n .uploadContent(dmsObject.id, file[0])\n .pipe(finalize(() => this.#drive.setBusy(false)))\n .subscribe();\n }\n\n versionSelected(version: number) {\n const dmsObject = this.dmsObject();\n dmsObject && this.#router.navigate(['../..', 'versions', dmsObject.id], { queryParams: { version }, relativeTo: this.#route });\n }\n\n private _loadDetails(id: string | null) {\n if (!id) {\n this.dmsObject.set(undefined);\n this.headerData = undefined;\n } else {\n this.#shellService.addBusy();\n // load the dms object\n this.#dmsService.getDmsObject(id).subscribe({\n next: (o: DmsObject) => {\n this.dmsObject.set(o);\n },\n error: (e: HttpErrorResponse) => {\n this.dmsObject.set(undefined);\n switch (e.status) {\n case 404:\n this.errorMessage = this.translate.instant('yuv.app.drive.page.object.error.404');\n break;\n default:\n this.errorMessage = this.translate.instant('yuv.app.drive.page.object.error.default');\n }\n },\n complete: () => this.#shellService.removeBusy()\n });\n }\n }\n}\n","@let object = dmsObject();\n@if (object) {\n <div\n class=\"object\"\n yuvContainerSize\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropReplaceDisabled()\"\n (fileDrop)=\"onFileDrop($event)\"\n >\n <ymd-ribbon [objects]=\"[object]\" [excludeActions]=\"excludeActions\" class=\"object__surface\">\n <ng-template #primaryActions>\n <div class=\"nav\">\n <button mat-icon-button class=\"back\" (click)=\"openParent()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <button mat-icon-button class=\"refresh\" [matTooltip]=\"'yuv.app.drive.page.object.refresh.tooltip' | translate\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n </ng-template>\n <!-- <ng-template #secondaryActions></ng-template> -->\n </ymd-ribbon>\n\n @let ssl = smallScreenLayout();\n @if (ssl) {\n <mat-tab-group class=\"object__surface\" mat-stretch-tabs=\"true\">\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.content.title' | translate\">\n <ng-template matTabContent>\n @if (object && object?.content) {\n <yuv-object-preview [dmsObject]=\"object\"></yuv-object-preview>\n }\n </ng-template>\n </mat-tab>\n\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-metadata [flavoredDmsObject]=\"flavoredDmsObject()\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </ng-template>\n </mat-tab>\n\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.history.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-audit [dmsObject]=\"object\"></yuv-object-audit>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n } @else {\n <yuv-split-view [layoutSettingsID]=\"layoutSettingIdBase + 'splitview'\" [gutterSize]=\"1\" class=\"object__surface\">\n <ng-template yuvSplitArea [size]=\"40\">\n <section class=\"meta\">\n <header>\n <yuv-object-flavor disableSelection=\"true\" [dmsObject]=\"object\"></yuv-object-flavor>\n\n @if (headerData) {\n\n <div class=\"object-icon\"><mat-icon >{{headerData.icon}}</mat-icon></div>\n <h1><ng-container *yuvRenderer=\"headerData.title\"></ng-container></h1>\n <div class=\"description\"><ng-container *yuvRenderer=\"headerData.description\"></ng-container></div>\n <div class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"object\"></yuv-retention-badge>\n </div>\n }\n </header>\n\n <mat-tab-group>\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\" >\n <yuv-object-metadata [flavoredDmsObject]=\"flavoredDmsObject()\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </mat-tab>\n <mat-tab [label]=\"'yuv.app.drive.object-metadata.tabs.history.title' | translate\">\n <yuv-object-audit [dmsObject]=\"object\"></yuv-object-audit\n ></mat-tab>\n </mat-tab-group>\n </section>\n </ng-template>\n <ng-template yuvSplitArea [size]=\"60\">\n @if (object && object?.content) {\n <yuv-object-preview [dmsObject]=\"object\"></yuv-object-preview>\n }\n </ng-template>\n </yuv-split-view>\n }\n </div>\n} @else if (errorMessage) {\n <!-- object could not be loaded -->\n <div class=\"error state\">\n <yuv-icon [svg]=\"icons.error\"></yuv-icon>\n <p>{{ errorMessage }}</p>\n </div>\n} @else {\n <!-- object is loading -->\n <div class=\"loading state\">\n <mat-progress-spinner mode=\"indeterminate\" class=\"ymt-progress-spinner--giant\"></mat-progress-spinner>\n </div>\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';\nimport { of } from 'rxjs';\nimport { DriveService } from '../drive/drive.service';\nimport { DRIVE_QUERY_FOLDER_ID } from '../drive/drive.interface';\n\nexport const filesResolver: ResolveFn<boolean> = (route: ActivatedRouteSnapshot) => {\n const id = route.params['id'];\n const driveStore = inject(DriveService);\n if (id !== DRIVE_QUERY_FOLDER_ID) driveStore.resolveFilesState(id).subscribe();\n\n return of(true);\n};\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';\nimport { of, forkJoin } from 'rxjs';\nimport { DriveService } from '../drive/drive.service';\n\nexport const versionsResolver: ResolveFn<boolean> = (route: ActivatedRouteSnapshot) => {\n const id = route.params['id'];\n const driveStore = inject(DriveService);\n\n forkJoin([driveStore.getVersions(id), driveStore.getSelectedDmsObject(id)]).subscribe();\n\n return of(true);\n};\n","import { Route } from '@angular/router';\nimport { DriveFrameComponent } from './container/drive/drive.component';\nimport { FilesPageComponent } from './pages/files/files.component';\nimport { ObjectPageComponent } from './pages/object/object.component';\nimport { filesResolver } from './services/resolver';\n\nexport const YuuvisDriveRoutes: Route[] = [\n {\n path: '',\n component: DriveFrameComponent,\n children: [\n { path: 'files', redirectTo: 'files/root' },\n { path: 'files/:id', component: FilesPageComponent, resolve: { filesResolver } },\n { path: 'object/:id', component: ObjectPageComponent },\n { path: '', redirectTo: 'files/root', pathMatch: 'full' }\n ]\n }\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","switchMap","map","i2","i3","MATERIAL","TranslateService","i4","finalize","TranslateModule","i6","i9","i5","filter"],"mappings":"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"}