@yuuvis/app-drive 3.2.2 → 3.3.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":["../../../../projects/yuuvis/app-drive/src/lib/drive.icons.ts","../../../../projects/yuuvis/app-drive/src/lib/drive.schema.ts","../../../../projects/yuuvis/app-drive/src/lib/services/tokens/breadcrumb-max-depth.token.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/drive.interface.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/drive/versions/versions.mapping.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/drive.service.ts","../../../../projects/yuuvis/app-drive/src/lib/services/providers/drive.providers.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/paste/paste.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.validator.ts","../../../../projects/yuuvis/app-drive/src/lib/components/object-name/object-name.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/object-name/object-name.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.component.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/copy-link/copy-link.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/updateContent/update.content.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/open-folder/open-folder-link.action.ts","../../../../projects/yuuvis/app-drive/src/lib/components/overlay/create-folder/create-folder.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/overlay/create-folder/create-folder.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/add-button/add-button.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/add-button/add-button.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/breadcrumb/breadcrumb.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/stored-query/stored-query.data.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-tree/folder-tree.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-tree/folder-tree.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/versions-list/tile/tile.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/versions-list/versions-list.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/manage-versions/component/manage-versions.component.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/manage-versions/component/manage-versions.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/manage-versions/manage-versions.action.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/edit/edit.ts","../../../../projects/yuuvis/app-drive/src/lib/container/drive/drive.component.ts","../../../../projects/yuuvis/app-drive/src/lib/container/drive/drive.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/ribbon/ribbon.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/ribbon/ribbon.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/search-filter/search-filter.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/search-filter/search-filter.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/stored-query/stored-query.service.ts","../../../../projects/yuuvis/app-drive/src/lib/pages/files/files.component.ts","../../../../projects/yuuvis/app-drive/src/lib/pages/files/files.component.html","../../../../projects/yuuvis/app-drive/src/lib/pages/object/object.component.ts","../../../../projects/yuuvis/app-drive/src/lib/pages/object/object.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/resolver/files.resolver.ts","../../../../projects/yuuvis/app-drive/src/lib/services/resolver/versions.route.resolver.ts","../../../../projects/yuuvis/app-drive/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-drive/src/yuuvis-app-drive.ts"],"sourcesContent":["export const APP_DRIVE_ICONS = {\n file: 'draft',\n folder: 'folder',\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';\nimport { AppFlavor } from '@yuuvis/client-shell-core';\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_FLAVORS: AppFlavor[] = [\n {\n id: 'io.yuuvis.app.drive.flavor.email',\n descriptionKey: 'io.yuuvis.app.drive.flavor.email.description',\n icon: 'email',\n objectTypeID: SystemType.DOCUMENT,\n sot: 'appSystemmail:email',\n applicableTo: {\n mimeTypes: ['message/rfc822', 'application/vnd.ms-outlook'],\n documents: true\n },\n preventRemove: true,\n preventApply: true\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 openFolder: 'app.drive.action.open.folder',\n manageVersions: 'app.drive.action.manage-versions',\n edit: 'app.drive.action.edit',\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, Signal, 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 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';\nimport {ShellService} from '@yuuvis/client-shell-core';\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 #shell = inject(ShellService);\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: Signal<{\n folderId: string | null;\n entry: BreadCrumb[];\n loading: boolean;\n } | null> = 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(() => {\n const n = this.#router.getCurrentNavigation();\n return this.#shell.primaryRouteChanged(n);\n })\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 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 { inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FolderDetailsDialogComponent } from '../../components/folder-details-dialog/folder-details-dialog.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DriveService } from '../../services';\n\nexport class OpenFolderAction extends AbstractContextAction implements Action {\n translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n private drive = inject(DriveService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n\n id = 'app.drive.action.open.folder';\n label = this.translate.instant('yuv.object-summary.action.open.folder');\n description = this.translate.instant('yuv.app.drive.action.open.folder.description');\n priority = 3;\n icon = 'folder_open';\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const isObjectState = this.router.url.includes('object')\n return of(selection.length > 0 && selection[0] && selection[0].isFolder && !isObjectState);\n }\n\n #navigateTo(id: string) {\n this.drive.setBusy(true);\n const nav = ['/drive', 'files', id];\n \n this.router\n .navigate(nav)\n .finally(() => this.drive.setBusy(false));\n\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n const o = selection[0];\n console.log(o.id);\n \n if (o) {\n this.#navigateTo(o.id);\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 canCreateFolder = input<boolean>(false);\n canUploadFile = input<boolean>(false);\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'), type: 'folder'},\n { icon: this.icons.file, label: this.translate.instant('yuv.app.drive.create.file'), type: '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 [disabled]=\"i.type === 'folder' ? !canCreateFolder() : !canUploadFile()\" (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 { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ChangeDetectionStrategy, Component, effect, HostListener, inject, OnDestroy, viewChildren } from '@angular/core';\nimport { 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, 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 <button 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 </button>\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 { Component, computed, input, output } from '@angular/core';\nimport {BaseObjectTypeField, LocaleDatePipe, 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: [TranslateModule, LocaleDatePipe],\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 | localeDate: '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 | localeDate: 'medium' }}\">\n {{ rendererInputs().date | localeDate: '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, Signal, 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';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\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: Signal<TileData[]> = this.#drive.state$.versions.versionsList;\n selectedVersion: Signal<DmsObject[] | null> = 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';\nimport { debounceTime, from, of, Subject, switchMap } from 'rxjs';\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 readonly #fb = inject(FormBuilder);\n\n readonly #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DriveSearchOverlayComponent>);\n\n readonly #shell = inject(ShellService);\n readonly #system = inject(SystemService);\n readonly #drive = inject(DriveService);\n readonly #search = inject(SearchService);\n\n private close$ = new Subject<void>();\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 this.close$\n .pipe(\n // wait 500ms after last trigger, less felt more buggy since we need to wait for the last statusChanged event from yuv-object-form\n debounceTime(500),\n switchMap(() => of(this.#formToQuery()))\n )\n .subscribe((searchQuery) => {\n this.#dialogRef.close(searchQuery);\n });\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 // Filter out properties with undefined values from combinedFormState.data\n combinedFormState.data = Object.fromEntries(Object.entries(combinedFormState.data).filter(([_, v]) => v !== undefined));\n this.combinedFormState = combinedFormState;\n return this.combinedFormState;\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n\n submit() {\n this.close$.next();\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\">\n {{ 'yuv.app.drive.search.extended.dialog.title' | translate }}\n</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>\n {{ 'yuv.app.drive.search.meta.query.for-everything' | translate }}\n </p>\n } @for (o of flavorForms(); track o.id) {\n <details class=\"token\">\n <summary [ngClass]=\"{ dirty: (formStates[o.id] && 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 } @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()\">\n {{ 'yuv.app.drive.search.meta.button.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" (click)=\"submit()\">\n {{ 'yuv.app.drive.search.meta.button.search' | translate }}\n </button>\n</mat-dialog-actions>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Signal } 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: Signal<SearchQuery | null> = this.#drive.state$.query;\n extendedQuery: Signal<boolean> = this.#drive.state$.extendedQuery;\n currentFolder: Signal<string | null> = 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, Signal } 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';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\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: Signal<TileData[]> = this.#drive.state$.versions.versionsList;\n selectedVersion: Signal<DmsObject[] | null> = this.#drive.state$.versions.selectedVersion;\n selectedDmsObject: Signal<DmsObject | null> = this.#drive.state$.selectedDmsObject;\n\n isLoading: Signal<boolean> = 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, 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.busySaving()\">\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.busySaving()\">\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.busySaving() }\"\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 { inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FolderDetailsDialogComponent } from '../../components/folder-details-dialog/folder-details-dialog.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DriveService } from '../../services';\n\nexport class EditAction extends AbstractContextAction implements Action {\n translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n private drive = inject(DriveService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n\n id = 'app.drive.action.edit';\n label = this.translate.instant('yuv.object-summary.action.edit');\n description = this.translate.instant('yuv.app.drive.action.edit.description');\n priority = 3;\n icon = 'edit_note';\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const isObjectState = this.router.url.includes('object')\n return of(selection.length > 0 && selection[0] && selection[0].sots.length > 1 && !isObjectState);\n }\n\n #navigateTo(id: string, isFolder = false) {\n this.drive.setBusy(true);\n const nav = isFolder ? ['/drive', 'files', 'root'] : ['/drive', 'object', id];\n this.router\n .navigate(nav)\n .finally(() => this.drive.setBusy(false));\n\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n const o = selection[0];\n if (o) {\n if (o.isFolder) {\n this.#dialog.open(FolderDetailsDialogComponent, {\n maxHeight: '90vh',\n maxWidth: '90vw',\n data: o\n });\n } else {\n this.#navigateTo(o.id, o.isFolder);\n }\n }\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 { OpenFolderAction } 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';\nimport { ManageVersionsAction } from '../../actions/manage-versions/manage-versions.action';\nimport { EditAction } from '../../actions/edit/edit';\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: Signal<boolean> = 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.openFolder, action: OpenFolderAction },\n { id: APP_ACTIONS.manageVersions, action: ManageVersionsAction },\n { id: APP_ACTIONS.edit, action: EditAction }\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, 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, 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 ContentStreamField,\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 UserService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { Action, BASE_ACTION, ContextmenuComponent, ContextMenuItemSelectEvent, YuvContextMenuTriggerDirective } 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 } 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';\nimport { SortComponent } from '@yuuvis/client-framework/sort';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { ListComponent, ListItemDirective } from '@yuuvis/client-framework/list';\n\nconst components = [\n TileListComponent,\n BreadcrumbComponent,\n ListComponent,\n ListItemDirective,\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\ninterface NodeItem { id: number; route: string; name: string }\n\n@Component({\n selector: 'ymd-files',\n standalone: true,\n imports: [NgClass, AsyncPipe, ...module, ...components, FileDropZoneDirective, ContextmenuComponent, YuvContextMenuTriggerDirective, ObjectPreviewComponent],\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 userService = inject(UserService);\n private translate = inject(TranslateService);\n private storedQueryService = inject(StoredQueryService);\n private clipboard = inject(ClipboardService);\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 #router = inject(Router);\n #route = inject(ActivatedRoute);\n\n\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 sortOptions = signal<string[]>([\n BaseObjectTypeField.CREATION_DATE,\n BaseObjectTypeField.MODIFICATION_DATE,\n ContentStreamField.LENGTH,\n ContentStreamField.MIME_TYPE\n ]);\n storageKey = 'yuv.app.drive.files.sort';\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 canCreateFolder = false;\n canUploadFile = false;\n\n actions: Signal<Action[]> = this.drive.state$.actions;\n selection: Signal<DmsObject[]> = this.drive.state$.selection;\n extendedQuery: Signal<boolean> = this.drive.state$.extendedQuery;\n hasActions = computed(() => !!this.actions().length);\n\n busy: Signal<boolean> = 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 userPermissions = this.userService.userPermissions;\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 dataSource: NodeItem[] = [\n {\n id: 0,\n route: 'mydrive',\n\n name: this.translate.instant('yuv.app.drive.folder-tree.mydrive'),\n },\n {\n id: 1,\n route: 'ymsq.ymd.recent.added.by.me',\n name: this.translate.instant('ymsq.ymd.recent.added.by.me')\n },\n {\n id: 2,\n route: 'ymsq.ymd.recent.modified.by.me',\n name: this.translate.instant('ymsq.ymd.recent.modified.by.me')\n }\n ];\n\n currentPage = this.dataSource[0].route;\n itemSelected(idx: number[]) {\n\n const node = this.dataSource.find(({ id }) => id === idx[0]);\n if (node) {\n this.routeChange(node);\n }\n }\n\n private routeChange(node: NodeItem) {\n const commands =\n node.route === 'mydrive'\n ? ['..', DRIVE_ROOT_FOLDER_ID]\n : node.route.startsWith(STORED_QUERY_ID_PREFIX)\n ? ['..', DRIVE_QUERY_FOLDER_ID]\n : ['..', node.route];\n\n const extras: any = { relativeTo: this.#route };\n\n if (node.route.startsWith(STORED_QUERY_ID_PREFIX)) {\n extras.queryParams = { q: node.route };\n }\n\n this.#router.navigate(commands, extras)\n .then(() => (this.currentPage = node.route))\n .catch((e) => { throw new Error(e); });\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 = this.userPermissions?.create?.folderTypes.length === 0 && this.userPermissions?.create?.objectTypes.length === 0 ? true : false;\n this.canCreateFolder = this.userPermissions?.create.folderTypes.find(ft => ft === 'system:folder') && this.userPermissions?.create.secondaryObjectTypes.find(ft => ft === 'appOsdrive:file') ? true : false;\n this.canUploadFile = this.userPermissions?.create.objectTypes.find(ft => ft === 'system:document') && this.userPermissions?.create.secondaryObjectTypes.find(ft => ft === 'appOsdrive:file') ? true : 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 query: Signal<SearchQuery | null> = this.drive.state$.query;\n queryTitle: Signal<string | null> = 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 onSortChanged(event: any) {\n this.drive.setSort(event.field, event.order);\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\n .getDmsObject(id)\n .pipe(finalize(() => this.shellService.removeBusy()))\n .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 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\" [canCreateFolder]=\"canCreateFolder\" [canUploadFile]=\"canUploadFile\"></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 </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"LAYOUT_SETTINGS_STORAGE_KEY\" class=\"files__surface\">\n <!-- folder tree -->\n <ng-template yuvSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <yuv-list (itemSelect)=\"itemSelected($event)\" selectOnEnter=\"true\" [autoSelect]=\"true\">\n @for (source of dataSource; track source.id){\n <div yuvListItem>\n <span class=\"desc\">{{ source.name }}</span>\n </div>\n }\n </yuv-list>\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\" [fileDropDisabled]=\"this.disableCreate || !canUploadFile\" [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 <yuv-sort [sortOptions]=\"sortOptions()\" [storageKey]=\"storageKey\" (sortChanged)=\"onSortChanged($event)\"></yuv-sort>\n }\n <yuv-tile-config-trigger [bucket]=\"objectConfigBucket\" [bucketLabel]=\"tileConfigBucketLabel\" [options]=\"tileListOptions\"></yuv-tile-config-trigger>\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 [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-preview [dmsObject]=\"selectedItem\"></yuv-object-preview>\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, 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, RetentionBadgeComponent } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS, YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { ObjectAuditComponent, ObjectMetadataComponent } 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: Signal<boolean> = 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 './public-api';\n"],"names":["i1","switchMap","map","i2","i3","MATERIAL","TranslateService","finalize","TranslateModule","i6","i9","i4","i5","filter"],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-app-drive.mjs","sources":["../../../../projects/yuuvis/app-drive/src/lib/drive.icons.ts","../../../../projects/yuuvis/app-drive/src/lib/drive.schema.ts","../../../../projects/yuuvis/app-drive/src/lib/services/tokens/breadcrumb-max-depth.token.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/drive.interface.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/drive/versions/versions.mapping.ts","../../../../projects/yuuvis/app-drive/src/lib/services/drive/drive.service.ts","../../../../projects/yuuvis/app-drive/src/lib/services/providers/drive.providers.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/paste/paste.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.validator.ts","../../../../projects/yuuvis/app-drive/src/lib/components/object-name/object-name.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/object-name/object-name.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.component.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/rename/rename.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/copy-link/copy-link.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/updateContent/update.content.action.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/open-folder/open-folder-link.action.ts","../../../../projects/yuuvis/app-drive/src/lib/components/overlay/create-folder/create-folder.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/overlay/create-folder/create-folder.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/add-button/add-button.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/add-button/add-button.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/breadcrumb/breadcrumb.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/stored-query/stored-query.data.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-tree/folder-tree.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-tree/folder-tree.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/versions-list/tile/tile.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/versions-list/versions-list.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/drive-search/drive-search.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/manage-versions/component/manage-versions.component.ts","../../../../projects/yuuvis/app-drive/src/lib/actions/manage-versions/component/manage-versions.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/manage-versions/manage-versions.action.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/folder-details-dialog/folder-details-dialog.component.html","../../../../projects/yuuvis/app-drive/src/lib/actions/edit/edit.ts","../../../../projects/yuuvis/app-drive/src/lib/container/drive/drive.component.ts","../../../../projects/yuuvis/app-drive/src/lib/container/drive/drive.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/ribbon/ribbon.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/ribbon/ribbon.component.html","../../../../projects/yuuvis/app-drive/src/lib/components/search-filter/search-filter.component.ts","../../../../projects/yuuvis/app-drive/src/lib/components/search-filter/search-filter.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/stored-query/stored-query.service.ts","../../../../projects/yuuvis/app-drive/src/lib/pages/files/files.component.ts","../../../../projects/yuuvis/app-drive/src/lib/pages/files/files.component.html","../../../../projects/yuuvis/app-drive/src/lib/pages/object/object.component.ts","../../../../projects/yuuvis/app-drive/src/lib/pages/object/object.component.html","../../../../projects/yuuvis/app-drive/src/lib/services/resolver/files.resolver.ts","../../../../projects/yuuvis/app-drive/src/lib/services/resolver/versions.route.resolver.ts","../../../../projects/yuuvis/app-drive/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-drive/src/yuuvis-app-drive.ts"],"sourcesContent":["export const APP_DRIVE_ICONS = {\n file: 'draft',\n folder: 'folder',\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';\nimport { AppFlavor } from '@yuuvis/client-shell-core';\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_FLAVORS: AppFlavor[] = [\n {\n id: 'io.yuuvis.app.drive.flavor.email',\n descriptionKey: 'io.yuuvis.app.drive.flavor.email.description',\n icon: 'email',\n objectTypeID: SystemType.DOCUMENT,\n sot: 'appSystemmail:email',\n applicableTo: {\n mimeTypes: ['message/rfc822', 'application/vnd.ms-outlook'],\n documents: true\n },\n preventRemove: true,\n preventApply: true\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 openFolder: 'app.drive.action.open.folder',\n manageVersions: 'app.drive.action.manage-versions',\n edit: 'app.drive.action.edit',\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, Signal, 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 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';\nimport {ShellService} from '@yuuvis/client-shell-core';\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 #shell = inject(ShellService);\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: Signal<{\n folderId: string | null;\n entry: BreadCrumb[];\n loading: boolean;\n } | null> = 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(() => {\n const n = this.#router.getCurrentNavigation();\n return this.#shell.primaryRouteChanged(n);\n })\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)\n .subscribe((evt: YuvEvent) => {\n // Check if deleted object is in clipboard and clear if necessary\n const clipboardData = this.#clipboardService.getClipboardData(APP_ID);\n if (clipboardData?.objects?.length) {\n const deletedIds = Array.isArray(evt.data)\n ? evt.data.map((dmsObject: DmsObject) => dmsObject.id)\n : [evt.data.id];\n const hasDeletedObject = clipboardData.objects.some((clipboardObject: DmsObject) =>\n deletedIds.includes(clipboardObject.id)\n );\n if (hasDeletedObject) {\n this.#clipboardService.clear(APP_ID);\n }\n }\n this.emitEvent(DRIVE_EVENT.refresh);\n });\n\n this.#eventService\n .on(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 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 { inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FolderDetailsDialogComponent } from '../../components/folder-details-dialog/folder-details-dialog.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DriveService } from '../../services';\n\nexport class OpenFolderAction extends AbstractContextAction implements Action {\n translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n private drive = inject(DriveService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n\n id = 'app.drive.action.open.folder';\n label = this.translate.instant('yuv.object-summary.action.open.folder');\n description = this.translate.instant('yuv.app.drive.action.open.folder.description');\n priority = 3;\n icon = 'folder_open';\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const isObjectState = this.router.url.includes('object')\n return of(selection.length > 0 && selection[0] && selection[0].isFolder && !isObjectState);\n }\n\n #navigateTo(id: string) {\n this.drive.setBusy(true);\n const nav = ['/drive', 'files', id];\n \n this.router\n .navigate(nav)\n .finally(() => this.drive.setBusy(false));\n\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n const o = selection[0];\n console.log(o.id);\n \n if (o) {\n this.#navigateTo(o.id);\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 canCreateFolder = input<boolean>(false);\n canUploadFile = input<boolean>(false);\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'), type: 'folder'},\n { icon: this.icons.file, label: this.translate.instant('yuv.app.drive.create.file'), type: '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 [disabled]=\"i.type === 'folder' ? !canCreateFolder() : !canUploadFile()\" (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 { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ChangeDetectionStrategy, Component, effect, HostListener, inject, OnDestroy, viewChildren } from '@angular/core';\nimport { 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, 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 <button 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 </button>\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 { Component, computed, input, output } from '@angular/core';\nimport {BaseObjectTypeField, LocaleDatePipe, 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: [TranslateModule, LocaleDatePipe],\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 | localeDate: '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 | localeDate: 'medium' }}\">\n {{ rendererInputs().date | localeDate: '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, Signal, 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';\nimport { TileData } from '@yuuvis/client-framework/tile-list';\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: Signal<TileData[]> = this.#drive.state$.versions.versionsList;\n selectedVersion: Signal<DmsObject[] | null> = 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';\nimport { debounceTime, from, of, Subject, switchMap } from 'rxjs';\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 readonly #fb = inject(FormBuilder);\n\n readonly #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DriveSearchOverlayComponent>);\n\n readonly #shell = inject(ShellService);\n readonly #system = inject(SystemService);\n readonly #drive = inject(DriveService);\n readonly #search = inject(SearchService);\n\n private close$ = new Subject<void>();\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 this.close$\n .pipe(\n // wait 500ms after last trigger, less felt more buggy since we need to wait for the last statusChanged event from yuv-object-form\n debounceTime(500),\n switchMap(() => of(this.#formToQuery()))\n )\n .subscribe((searchQuery) => {\n this.#dialogRef.close(searchQuery);\n });\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 // Filter out properties with undefined values from combinedFormState.data\n combinedFormState.data = Object.fromEntries(Object.entries(combinedFormState.data).filter(([_, v]) => v !== undefined));\n this.combinedFormState = combinedFormState;\n return this.combinedFormState;\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n\n submit() {\n this.close$.next();\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\">\n {{ 'yuv.app.drive.search.extended.dialog.title' | translate }}\n</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>\n {{ 'yuv.app.drive.search.meta.query.for-everything' | translate }}\n </p>\n } @for (o of flavorForms(); track o.id) {\n <details class=\"token\" open>\n <summary [ngClass]=\"{ dirty: (formStates[o.id] && 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 } @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()\">\n {{ 'yuv.app.drive.search.meta.button.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" (click)=\"submit()\">\n {{ 'yuv.app.drive.search.meta.button.search' | translate }}\n </button>\n</mat-dialog-actions>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Signal } 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: Signal<SearchQuery | null> = this.#drive.state$.query;\n extendedQuery: Signal<boolean> = this.#drive.state$.extendedQuery;\n currentFolder: Signal<string | null> = 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, Signal } from '@angular/core';\nimport { BaseObjectTypeField, DmsObject, EventService, 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 { FS_PROPERTIES } 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 { TileData } from '@yuuvis/client-framework/tile-list';\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: Signal<TileData[]> = this.#drive.state$.versions.versionsList;\n selectedVersion: Signal<DmsObject[] | null> = this.#drive.state$.versions.selectedVersion;\n selectedDmsObject: Signal<DmsObject | null> = this.#drive.state$.selectedDmsObject;\n\n isLoading: Signal<boolean> = 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 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, computed, inject, signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, TranslateModule } from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { ObjectMetadataComponent } from '@yuuvis/client-framework/object-details';\nimport { FormStatusChangedEvent } from '@yuuvis/client-framework/object-form';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { FS_PROPERTIES } from '../../drive.schema';\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 dmsObject = signal<DmsObject | undefined>(this.#folder);\n flavors = computed(() => {\n const o = this.dmsObject();\n return o ? [...this.#shell.getAppliedObjectFlavors(o).applied] : [];\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 [headertitle]=\"folderName\">\n <main [yuvBusyOverlay]=\"metadata.busySaving()\">\n <yuv-object-metadata\n [dmsObject]=\"dmsObject()\"\n [flavors]=\"flavors()\"\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.busySaving()\">\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.busySaving() }\"\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 { inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { AbstractContextAction, Action, ActionSupport, SelectionRange } from '@yuuvis/client-framework/actions';\nimport { Observable, of } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FolderDetailsDialogComponent } from '../../components/folder-details-dialog/folder-details-dialog.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DriveService } from '../../services';\n\nexport class EditAction extends AbstractContextAction implements Action {\n translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n private drive = inject(DriveService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n\n id = 'app.drive.action.edit';\n label = this.translate.instant('yuv.object-summary.action.edit');\n description = this.translate.instant('yuv.app.drive.action.edit.description');\n priority = 3;\n icon = 'edit_note';\n group = 'common';\n range = SelectionRange.SINGLE_SELECT;\n supports: ActionSupport = {};\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const isObjectState = this.router.url.includes('object')\n return of(selection.length > 0 && selection[0] && selection[0].sots.length > 1 && !isObjectState);\n }\n\n #navigateTo(id: string, isFolder = false) {\n this.drive.setBusy(true);\n const nav = isFolder ? ['/drive', 'files', 'root'] : ['/drive', 'object', id];\n this.router\n .navigate(nav)\n .finally(() => this.drive.setBusy(false));\n\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n const o = selection[0];\n if (o) {\n if (o.isFolder) {\n this.#dialog.open(FolderDetailsDialogComponent, {\n maxHeight: '90vh',\n maxWidth: '90vw',\n data: o\n });\n } else {\n this.#navigateTo(o.id, o.isFolder);\n }\n }\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 { OpenFolderAction } 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';\nimport { ManageVersionsAction } from '../../actions/manage-versions/manage-versions.action';\nimport { EditAction } from '../../actions/edit/edit';\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: Signal<boolean> = 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.openFolder, action: OpenFolderAction },\n { id: APP_ACTIONS.manageVersions, action: ManageVersionsAction },\n { id: APP_ACTIONS.edit, action: EditAction }\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, 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, 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 ContentStreamField,\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 UserService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { Action, BASE_ACTION, ContextmenuComponent, ContextMenuItemSelectEvent, YuvContextMenuTriggerDirective } 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 } 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';\nimport { SortComponent } from '@yuuvis/client-framework/sort';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { ListComponent, ListItemDirective } from '@yuuvis/client-framework/list';\n\nconst components = [\n TileListComponent,\n BreadcrumbComponent,\n ListComponent,\n ListItemDirective,\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\ninterface NodeItem { id: number; route: string; name: string }\n\n@Component({\n selector: 'ymd-files',\n standalone: true,\n imports: [NgClass, AsyncPipe, ...module, ...components, FileDropZoneDirective, ContextmenuComponent, YuvContextMenuTriggerDirective, ObjectPreviewComponent],\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 userService = inject(UserService);\n private translate = inject(TranslateService);\n private storedQueryService = inject(StoredQueryService);\n private clipboard = inject(ClipboardService);\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 #router = inject(Router);\n #route = inject(ActivatedRoute);\n\n\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 sortOptions = signal<string[]>([\n BaseObjectTypeField.CREATION_DATE,\n BaseObjectTypeField.MODIFICATION_DATE,\n ContentStreamField.LENGTH,\n ContentStreamField.MIME_TYPE\n ]);\n storageKey = 'yuv.app.drive.files.sort';\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 canCreateFolder = false;\n canUploadFile = false;\n\n actions: Signal<Action[]> = this.drive.state$.actions;\n selection: Signal<DmsObject[]> = this.drive.state$.selection;\n extendedQuery: Signal<boolean> = this.drive.state$.extendedQuery;\n hasActions = computed(() => !!this.actions().length);\n\n busy: Signal<boolean> = 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 userPermissions = this.userService.userPermissions;\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 dataSource: NodeItem[] = [\n {\n id: 0,\n route: 'mydrive',\n\n name: this.translate.instant('yuv.app.drive.folder-tree.mydrive'),\n },\n {\n id: 1,\n route: 'ymsq.ymd.recent.added.by.me',\n name: this.translate.instant('ymsq.ymd.recent.added.by.me')\n },\n {\n id: 2,\n route: 'ymsq.ymd.recent.modified.by.me',\n name: this.translate.instant('ymsq.ymd.recent.modified.by.me')\n }\n ];\n\n currentPage = this.dataSource[0].route;\n itemSelected(idx: number[]) {\n\n const node = this.dataSource.find(({ id }) => id === idx[0]);\n if (node) {\n this.routeChange(node);\n }\n }\n\n private routeChange(node: NodeItem) {\n const commands =\n node.route === 'mydrive'\n ? ['..', DRIVE_ROOT_FOLDER_ID]\n : node.route.startsWith(STORED_QUERY_ID_PREFIX)\n ? ['..', DRIVE_QUERY_FOLDER_ID]\n : ['..', node.route];\n\n const extras: any = { relativeTo: this.#route };\n\n if (node.route.startsWith(STORED_QUERY_ID_PREFIX)) {\n extras.queryParams = { q: node.route };\n }\n\n this.#router.navigate(commands, extras)\n .then(() => (this.currentPage = node.route))\n .catch((e) => { throw new Error(e); });\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 = this.userPermissions?.create?.folderTypes.length === 0 && this.userPermissions?.create?.objectTypes.length === 0 ? true : false;\n this.canCreateFolder = this.userPermissions?.create.folderTypes.find(ft => ft === 'system:folder') && this.userPermissions?.create.secondaryObjectTypes.find(ft => ft === 'appOsdrive:file') ? true : false;\n this.canUploadFile = this.userPermissions?.create.objectTypes.find(ft => ft === 'system:document') && this.userPermissions?.create.secondaryObjectTypes.find(ft => ft === 'appOsdrive:file') ? true : 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 query: Signal<SearchQuery | null> = this.drive.state$.query;\n queryTitle: Signal<string | null> = 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 onSortChanged(event: any) {\n this.drive.setSort(event.field, event.order);\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\n .getDmsObject(id)\n .pipe(finalize(() => this.shellService.removeBusy()))\n .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 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\" [canCreateFolder]=\"canCreateFolder\" [canUploadFile]=\"canUploadFile\"></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 </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"LAYOUT_SETTINGS_STORAGE_KEY\" class=\"files__surface\">\n <!-- folder tree -->\n <ng-template yuvSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <yuv-list (itemSelect)=\"itemSelected($event)\" selectOnEnter=\"true\" [autoSelect]=\"true\">\n @for (source of dataSource; track source.id){\n <div yuvListItem>\n <span class=\"desc\">{{ source.name }}</span>\n </div>\n }\n </yuv-list>\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\" [fileDropDisabled]=\"this.disableCreate || !canUploadFile\" [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 <yuv-sort [sortOptions]=\"sortOptions()\" [storageKey]=\"storageKey\" (sortChanged)=\"onSortChanged($event)\"></yuv-sort>\n }\n <yuv-tile-config-trigger [bucket]=\"objectConfigBucket\" [bucketLabel]=\"tileConfigBucketLabel\" [options]=\"tileListOptions\"></yuv-tile-config-trigger>\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 [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-preview [dmsObject]=\"selectedItem\"></yuv-object-preview>\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, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport {\n DeviceScreen,\n DmsObject,\n DmsService,\n EventService,\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, RetentionBadgeComponent } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS, YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { ObjectAuditComponent, ObjectMetadataComponent } 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 { DeviceService } from '@yuuvis/material';\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: Signal<boolean> = 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 flavors = computed(() => {\n const o = this.dmsObject();\n return o ? [...this.#shellService.getAppliedObjectFlavors(o).applied] : [];\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 [dmsObject]=\"dmsObject()\" [flavors]=\"\" (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 [dmsObject]=\"dmsObject()\" [flavors]=\"flavors()\" (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 './public-api';\n"],"names":["i1","switchMap","map","i2","i3","MATERIAL","TranslateService","finalize","TranslateModule","i6","i9","i4","i5","filter","DeviceService"],"mappings":"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"}