@fundamental-ngx/platform 0.43.26 → 0.43.28

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.
Files changed (91) hide show
  1. package/esm2020/dynamic-page/dynamic-page.component.mjs +1 -1
  2. package/esm2020/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +1 -1
  3. package/esm2020/form/date-picker/date-picker.component.mjs +1 -2
  4. package/esm2020/form/datetime-picker/datetime-picker.component.mjs +4 -2
  5. package/esm2020/form/multi-combobox/commons/base-multi-combobox.mjs +2 -1
  6. package/esm2020/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +1 -1
  7. package/esm2020/form/step-input/base.step-input.mjs +2 -1
  8. package/esm2020/list/base-list-item.mjs +10 -2
  9. package/esm2020/list/list.component.mjs +3 -3
  10. package/esm2020/settings-generator/settings-generator-content/settings-generator-content.component.mjs +1 -1
  11. package/esm2020/shared/form/base.input.mjs +14 -3
  12. package/esm2020/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +1 -1
  13. package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  14. package/esm2020/table/components/table-header-row/table-header-row.component.mjs +3 -3
  15. package/esm2020/table/components/table-p13-dialog/columns/columns.component.mjs +3 -3
  16. package/esm2020/table/components/table-p13-dialog/filtering/filtering.component.mjs +1 -1
  17. package/esm2020/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
  18. package/esm2020/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
  19. package/esm2020/table/components/table-row/table-row.component.mjs +20 -3
  20. package/esm2020/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +1 -1
  21. package/esm2020/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +1 -1
  22. package/esm2020/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +1 -1
  23. package/esm2020/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +1 -1
  24. package/esm2020/thumbnail/thumbnail-details/thumbnail-details.component.mjs +1 -1
  25. package/esm2020/upload-collection/dialogs/move-to/move-to.component.mjs +1 -1
  26. package/esm2020/upload-collection/dialogs/new-folder/new-folder.component.mjs +1 -1
  27. package/esm2020/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
  28. package/esm2020/value-help-dialog/components/select-tab/select-tab.component.mjs +1 -1
  29. package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +1 -1
  30. package/esm2020/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +1 -1
  31. package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
  32. package/esm2020/variant-management/variant-management.component.mjs +1 -1
  33. package/esm2020/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +1 -1
  34. package/esm2020/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +1 -1
  35. package/esm2020/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +1 -1
  36. package/fesm2015/fundamental-ngx-platform-dynamic-page.mjs +1 -1
  37. package/fesm2015/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  38. package/fesm2015/fundamental-ngx-platform-form.mjs +7 -4
  39. package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
  40. package/fesm2015/fundamental-ngx-platform-list.mjs +11 -3
  41. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  42. package/fesm2015/fundamental-ngx-platform-settings-generator.mjs +1 -1
  43. package/fesm2015/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  44. package/fesm2015/fundamental-ngx-platform-shared.mjs +13 -2
  45. package/fesm2015/fundamental-ngx-platform-shared.mjs.map +1 -1
  46. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
  47. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  48. package/fesm2015/fundamental-ngx-platform-table.mjs +31 -13
  49. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  50. package/fesm2015/fundamental-ngx-platform-thumbnail.mjs +1 -1
  51. package/fesm2015/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
  52. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +2 -2
  53. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  54. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +3 -3
  55. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  56. package/fesm2015/fundamental-ngx-platform-variant-management.mjs +3 -3
  57. package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  58. package/fesm2015/fundamental-ngx-platform-wizard-generator.mjs +3 -3
  59. package/fesm2015/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  60. package/fesm2020/fundamental-ngx-platform-dynamic-page.mjs +1 -1
  61. package/fesm2020/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  62. package/fesm2020/fundamental-ngx-platform-form.mjs +7 -4
  63. package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
  64. package/fesm2020/fundamental-ngx-platform-list.mjs +11 -3
  65. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  66. package/fesm2020/fundamental-ngx-platform-settings-generator.mjs +1 -1
  67. package/fesm2020/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  68. package/fesm2020/fundamental-ngx-platform-shared.mjs +13 -2
  69. package/fesm2020/fundamental-ngx-platform-shared.mjs.map +1 -1
  70. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
  71. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  72. package/fesm2020/fundamental-ngx-platform-table.mjs +30 -13
  73. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  74. package/fesm2020/fundamental-ngx-platform-thumbnail.mjs +1 -1
  75. package/fesm2020/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
  76. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +2 -2
  77. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  78. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +3 -3
  79. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  80. package/fesm2020/fundamental-ngx-platform-variant-management.mjs +3 -3
  81. package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  82. package/fesm2020/fundamental-ngx-platform-wizard-generator.mjs +3 -3
  83. package/fesm2020/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  84. package/fundamental-ngx-platform-v0.43.28.tgz +0 -0
  85. package/list/base-list-item.d.ts +2 -0
  86. package/package.json +4 -4
  87. package/schematics/ng-add/index.js +1 -1
  88. package/shared/form/base.input.d.ts +6 -0
  89. package/table/components/table-p13-dialog/columns/columns.component.d.ts +1 -1
  90. package/table/components/table-row/table-row.component.d.ts +3 -0
  91. package/fundamental-ngx-platform-v0.43.26.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-platform-upload-collection.mjs","sources":["../../../../libs/platform/src/lib/upload-collection/services/files-validator.service.ts","../../../../libs/platform/src/lib/upload-collection/directives/upload-collection-dragndrop.directive.ts","../../../../libs/platform/src/lib/upload-collection/dialogs/new-folder/new-folder.component.ts","../../../../libs/platform/src/lib/upload-collection/dialogs/new-folder/new-folder.component.html","../../../../libs/platform/src/lib/upload-collection/dialogs/move-to/move-to.component.ts","../../../../libs/platform/src/lib/upload-collection/dialogs/move-to/move-to.component.html","../../../../libs/platform/src/lib/upload-collection/models/upload-collection.models.ts","../../../../libs/platform/src/lib/upload-collection/helpers/generate-message-stripe-data.ts","../../../../libs/platform/src/lib/upload-collection/upload-collection/upload-collection.component.ts","../../../../libs/platform/src/lib/upload-collection/upload-collection/upload-collection.component.html","../../../../libs/platform/src/lib/upload-collection/upload-collection.module.ts","../../../../libs/platform/src/lib/upload-collection/domain/upload-collection-data-provider.ts","../../../../libs/platform/src/lib/upload-collection/domain/upload-collection-data-source.ts","../../../../libs/platform/src/lib/upload-collection/upload-collection/upload-collection-data-provider-test.ts","../../../../libs/platform/src/lib/upload-collection/fundamental-ngx-platform-upload-collection.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { parserFileSize } from '@fundamental-ngx/cdk/utils';\nimport { FilesValidatorOutput, FilesValidatorParams } from '../models/upload-collection.models';\n\n@Injectable({ providedIn: 'root' })\nexport class FilesValidatorService {\n /**\n * Method that validates files passed. It is based on\n * @param files File[]\n * @param params ValidateFilesParams\n */\n validation(\n files: File[],\n { maxFileNameLength, fileTypes, maxFileSize, mimeTypes }: FilesValidatorParams\n ): FilesValidatorOutput {\n return files.reduce((res, file) => {\n if (\n (fileTypes && fileTypes.length > 0 && this._checkByFileExtension(file, fileTypes)) ||\n (mimeTypes && mimeTypes.length > 0 && this._checkByMimeType(file, mimeTypes))\n ) {\n if (!res.typeMismatch) {\n res.typeMismatch = [];\n }\n\n res.typeMismatch.push(file);\n\n return res;\n }\n\n if (maxFileSize) {\n const maxSize = parserFileSize(maxFileSize);\n if (file.size > maxSize) {\n if (!res.fileSizeExceed) {\n res.fileSizeExceed = [];\n }\n\n res.fileSizeExceed.push(file);\n\n return res;\n }\n }\n\n if (typeof maxFileNameLength === 'number' && this._checkByFileNameLength(file, maxFileNameLength)) {\n if (!res.filenameLengthExceed) {\n res.filenameLengthExceed = [];\n }\n\n res.filenameLengthExceed.push(file);\n\n return res;\n }\n\n if (!res.validFiles) {\n res.validFiles = [];\n }\n\n res.validFiles.push(file);\n\n return res;\n }, {} as FilesValidatorOutput);\n }\n\n /** @hidden */\n private _checkByFileExtension(file: File, fileTypes: string[]): boolean {\n const fileNameSplit = file.name.split('.');\n const extension = fileNameSplit[fileNameSplit.length - 1].toLocaleLowerCase();\n\n return !fileTypes.some((type) => type.replace('.', '').toLowerCase() === extension);\n }\n\n /** @hidden */\n private _checkByMimeType(file: File, mimeTypes: string[]): boolean {\n return !mimeTypes.some((type) => type.toLowerCase() === file.type);\n }\n\n /** @hidden */\n private _checkByFileNameLength(file: File, maxFileNameLength: number): boolean {\n const fileNameSplit = file.name.split('.');\n fileNameSplit.pop();\n const fileName = fileNameSplit.join('.');\n\n return fileName.length > maxFileNameLength;\n }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\n\nimport { FilesValidatorService } from '../services/files-validator.service';\nimport { FilesValidatorOutput } from '../models/upload-collection.models';\n\n/**\n * Directive that handles the drag and drop feature of the file input.\n */\n@Directive({\n selector: '[fdpUploadCollectionDragnDrop]'\n})\nexport class UploadCollectionDragnDropDirective {\n /** Whether multiple files can be dropped at once. */\n @Input()\n multiple = true;\n\n /**\n * Defines the allowed file types for the upload.\n * The chosen files will be checked against an array of file types.\n * If at least one file does not fit the file type requirements,\n * the upload is prevented. Example: [\"jpg\", \"png\", \"bmp\"].\n */\n @Input()\n fileTypes: string[] = [];\n\n /**\n * Specifies a file size limit in megabytes that prevents the upload\n * if at least one file exceeds the limit.\n */\n @Input()\n maxFileSize?: string;\n\n /**\n * Specifies the maximum length of a file name.\n * If the maximum file name length is exceeded,\n * the corresponding event 'filenameLengthExceed' is triggered.\n */\n @Input()\n maxFilenameLength?: number;\n\n /**\n * Defines the allowed MIME types of files to be uploaded.\n * The chosen files will be checked against an array of MIME types.\n * If at least one file does not fit the MIME type requirements, the upload is prevented.\n * Example: mimeTypes [\"image/png\", \"image/jpeg\"].\n */\n @Input()\n mimeTypes: string[] = [];\n\n /** Whether selecting of new files is disabled. */\n @Input()\n disabled = false;\n\n /** Whether drag and drop is enabled. Disables this directive. */\n @Input()\n dragndrop = true;\n\n /** Event emitted when files are dropped. Passes back an array of files. */\n @Output()\n readonly fileChanged = new EventEmitter<FilesValidatorOutput>();\n\n /** Event emitted when the dragged file enters the dropzone or exits from it. */\n @Output()\n readonly cancel = new EventEmitter<void>();\n\n /** Event emitted when the dragged file enters the dropzone. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDropzone = new EventEmitter<boolean>();\n\n /** @hidden */\n private dropzonePreviousState: boolean | null = null;\n\n /** @hidden */\n private elementSelector: string;\n\n /** @hidden */\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _filesValidatorService: FilesValidatorService\n ) {\n const element = this._elementRef.nativeElement as HTMLElement;\n this.elementSelector = element.id ? `#${element.id}` : '';\n this.elementSelector += element.className ? `.${element.className.split(' ').join('.')}` : '';\n if (!this.elementSelector) {\n this.elementSelector = `${element.localName}[fdpUploadCollectionDragnDrop]`;\n }\n }\n\n /** @hidden */\n @HostListener('window:dragover', ['$event'])\n onWindowDragover(event: DragEvent): void {\n if (!this.dragndrop || this.disabled) {\n return;\n }\n\n this._muteEvent(event);\n\n const isDragDropArea = !!(event.target instanceof HTMLElement && event.target.closest(this.elementSelector));\n if (this.dropzonePreviousState !== isDragDropArea) {\n this.dropzonePreviousState = isDragDropArea;\n this.onDropzone.emit(isDragDropArea);\n }\n }\n\n /** @hidden */\n @HostListener('window:dragleave', ['$event'])\n onDragLeave(event: DragEvent): void {\n if (!this.dragndrop || this.disabled) {\n return;\n }\n\n const leavePositions = [event.screenX, event.screenY, event.clientX, event.clientY, event.pageX, event.pageY];\n\n if (!leavePositions.some((item) => item > 0)) {\n this._muteEvent(event);\n this.dropzonePreviousState = null;\n this.cancel.emit();\n }\n }\n\n /** @hidden */\n @HostListener('window:drop', ['$event'])\n onDrop(event: DragEvent): void {\n if (!this.dragndrop || this.disabled) {\n return;\n }\n\n this.dropzonePreviousState = null;\n this.cancel.emit();\n\n const isDragDropArea = !!(event.target instanceof HTMLElement && event.target.closest(this.elementSelector));\n if (!isDragDropArea) {\n return;\n }\n\n this._muteEvent(event);\n const rawFiles = event.dataTransfer?.files ?? [];\n const files: File[] = Array.from(rawFiles);\n\n const output = this._filesValidatorService.validation(files, {\n maxFileSize: this.maxFileSize,\n maxFileNameLength: this.maxFilenameLength,\n fileTypes: this.fileTypes,\n mimeTypes: this.mimeTypes\n });\n\n this.fileChanged.emit(output);\n }\n\n /** @hidden */\n private _muteEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { Component, ViewChild, AfterViewInit } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { UploadCollectionFolder } from '../../models/upload-collection.models';\n\n@Component({\n templateUrl: './new-folder.component.html',\n styles: [\n `\n .fd-title--bold {\n font-weight: bold;\n }\n `\n ]\n})\nexport class NewFolderComponent implements AfterViewInit {\n /**\n * @hidden\n * The current folder in what need to create a new one\n */\n readonly _currentFolder?: UploadCollectionFolder = this.dialogRef.data.currentFolder;\n\n /** @hidden */\n readonly _maxFilenameLength = this.dialogRef.data.maxFilenameLength;\n\n /** @hidden */\n _newFolderName = 'New Folder';\n\n /** @hidden */\n @ViewChild(FormControlComponent)\n private readonly formControl: FormControlComponent;\n\n /** @hidden */\n constructor(public readonly dialogRef: DialogRef) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n const el = this.formControl.elementRef.nativeElement as HTMLInputElement;\n if (el) {\n el.focus();\n this._setSelectionRange(el, 0, this._newFolderName.length);\n }\n }\n\n /** @hidden */\n private _setSelectionRange(el: HTMLInputElement, selectionStart: number, selectionEnd: number): void {\n const direction = el.selectionDirection;\n\n el.setSelectionRange(selectionStart, selectionEnd, direction || undefined);\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <h1 class=\"fd-title--bold\" fd-dialog-title id=\"fdp-upload-collection-new-folder-title\" fd-title>\n {{ 'platformUploadCollection.newFolderTitle' | fdTranslate }}\n </h1>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <div fd-form-item>\n <label fd-form-label for=\"fdp-upload-collection-new-folder-input\">\n {{\n (_currentFolder\n ? 'platformUploadCollection.newFolderAtFolderInputLabel'\n : 'platformUploadCollection.newFolderAtRootInputLabel'\n ) | fdTranslate : { folderName: _currentFolder?.name || '' }\n }}:\n </label>\n <input\n #formControl\n fd-form-control\n fdkInitialFocus\n id=\"fdp-upload-collection-new-folder-input\"\n type=\"text\"\n [(ngModel)]=\"_newFolderName\"\n [placeholder]=\"'platformUploadCollection.newFolderInputPlaceholder' | fdTranslate\"\n />\n <span\n *ngIf=\"_newFolderName.length > _maxFilenameLength\"\n fd-object-status\n status=\"negative\"\n [label]=\"'platformUploadCollection.newFolderInputErrorLabel' | fdTranslate\"\n [attr.title]=\"'platformUploadCollection.newFolderInputErrorLabel' | fdTranslate\"\n [attr.aria-label]=\"'platformUploadCollection.newFolderInputErrorLabel' | fdTranslate\"\n ></span>\n </div>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformUploadCollection.newFolderDialogCreateBtnLabel' | fdTranslate\"\n [disabled]=\"_newFolderName.length > _maxFilenameLength\"\n (click)=\"dialogRef.close(_newFolderName)\"\n >\n </fd-button-bar>\n <fd-button-bar\n [label]=\"'platformUploadCollection.newFolderDialogCancelBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.dismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { take } from 'rxjs/operators';\n\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\nimport { isObject } from '@fundamental-ngx/platform/shared';\n\nimport { UploadCollectionFolder, UploadCollectionItem } from '../../models/upload-collection.models';\nimport { NewFolderComponent } from '../new-folder/new-folder.component';\n\nexport interface MoveToComponentDialogData {\n items: UploadCollectionItem[];\n currentFolder?: UploadCollectionFolder;\n movableFolders?: UploadCollectionFolder[];\n maxFilenameLength: number;\n}\n\n@Component({\n templateUrl: './move-to.component.html',\n styles: [\n `\n .fd-list__item--title-background {\n background-color: var(--sapList_HeaderBackground);\n }\n\n .fd-dialog__body--no-horizontal-padding {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .fd-title--bold {\n font-weight: bold;\n }\n `\n ]\n})\nexport class MoveToComponent implements OnInit {\n /**\n * List of upload collection items\n */\n readonly items: UploadCollectionItem[] = this.dialogRef.data.items;\n /**\n * The current folder in what need to create a new one\n */\n originalFolder?: UploadCollectionFolder = this.dialogRef.data.currentFolder;\n\n /** @hidden */\n readonly movableFolders?: UploadCollectionFolder[] = this.dialogRef.data.movableFolders;\n\n /** @hidden */\n readonly _maxFilenameLength = this.dialogRef.data.maxFilenameLength;\n\n /** @hidden */\n _currentFolder?: UploadCollectionFolder = this.originalFolder && { ...this.originalFolder };\n /** @hidden */\n selectedFolder: UploadCollectionFolder | null;\n\n /** @hidden */\n _foldersList: UploadCollectionFolder[] = [];\n\n /** @hidden */\n constructor(\n public readonly dialogRef: DialogRef<MoveToComponentDialogData>,\n private readonly _dialogService: DialogService,\n private readonly _cd: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._init(this._currentFolder ? this._currentFolder.files : this.items);\n }\n\n /** @hidden */\n _goToParentFolder(): void {\n this.selectedFolder = null;\n this._currentFolder = this._getParentFolderByCurrentFolderId(this._currentFolder?.documentId);\n this._init(this._currentFolder ? this._currentFolder.files : this.items);\n\n this._cd.detectChanges();\n }\n\n /** @hidden */\n _close(): void {\n this.dialogRef.dismiss();\n }\n\n /** @hidden */\n _confirm(): void {\n this.dialogRef.close({\n selectedFolder: this.selectedFolder || this._currentFolder\n });\n }\n\n /** @hidden */\n _openFolder(folder: UploadCollectionFolder): void {\n this.selectedFolder = null;\n this._currentFolder = folder;\n this._init(folder.files);\n\n this._cd.detectChanges();\n }\n\n /** @hidden */\n _selectFolder(folder: UploadCollectionFolder): void {\n this.selectedFolder = folder;\n }\n\n /** @hidden */\n _hasFolders(items: UploadCollectionItem[]): boolean {\n return items.some((item) => item.type === 'folder');\n }\n\n /** @hidden */\n _newFolder(): void {\n const dialogRef = this._dialogService.open(NewFolderComponent, {\n responsivePadding: true,\n backdropClickCloseable: false,\n height: '350px',\n backdropClass: 'fdp-upload-collection-dialig-no-bg',\n data: {\n currentFolder: this._currentFolder,\n maxFilenameLength: this._maxFilenameLength\n }\n } as DialogConfig);\n\n dialogRef.afterClosed.pipe(take(1)).subscribe((folderName) => {\n this.dialogRef.close({\n parentFolderId: this._currentFolder?.documentId,\n selectedFolder: null,\n folderName\n });\n });\n }\n\n /** @hidden */\n private _init(items: UploadCollectionItem[]): void {\n this._foldersList = items.filter(\n (item) =>\n item.type === 'folder' && !this.movableFolders?.some((folder) => folder.documentId === item.documentId)\n ) as UploadCollectionFolder[];\n }\n\n /** @hidden */\n private _getParentFolderByCurrentFolderId(documentId?: string | number): UploadCollectionFolder | undefined {\n let foundObj: UploadCollectionFolder | undefined;\n\n if (documentId) {\n JSON.stringify(this.items, (_, nestedValue) => {\n if (!isObject(nestedValue) || nestedValue.type === 'file' || !nestedValue.files) {\n return nestedValue;\n }\n\n if (nestedValue.files.some((item) => item.documentId === documentId)) {\n foundObj = nestedValue;\n }\n\n return nestedValue;\n });\n }\n\n return foundObj;\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 class=\"fd-title--bold\" *ngIf=\"!_currentFolder\" fd-title>\n {{ 'platformUploadCollection.moveToTitle' | fdTranslate }}\n </h1>\n <ng-container *ngIf=\"_currentFolder\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n (click)=\"_goToParentFolder()\"\n ></button>\n <h1 fd-title>\n <span>{{ 'platformUploadCollection.moveToTitleFolder' | fdTranslate }}</span>\n {{ _currentFolder.name }}\n </h1>\n </ng-container>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformUploadCollection.moveToNewFolderBtnLabel' | fdTranslate\"\n (click)=\"_newFolder()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body class=\"fd-dialog__body--no-horizontal-padding\">\n <ul fd-list>\n <li *ngIf=\"!_currentFolder\" fd-list-item class=\"fd-list__item--title-background\">\n <span fd-list-title>{{ 'platformUploadCollection.moveToAllFilesSubHeaderLabel' | fdTranslate }}</span>\n </li>\n <li\n fd-list-item\n *ngFor=\"let folder of _foldersList\"\n [selected]=\"selectedFolder?.documentId === folder.documentId\"\n >\n <a fd-list-link (click)=\"_hasFolders(folder.files) ? _openFolder(folder) : _selectFolder(folder)\">\n <fd-icon class=\"fdp-upload-collection__fd-icon\" glyph=\"folder-blank\"></fd-icon>\n <span fd-list-title>{{ folder.name }}</span>\n <i *ngIf=\"_hasFolders(folder.files)\" fd-list-icon glyph=\"slim-arrow-right\"></i>\n </a>\n </li>\n </ul>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n type=\"submit\"\n [disabled]=\"\n !(\n (selectedFolder && originalFolder?.documentId !== selectedFolder.documentId) ||\n (!selectedFolder && originalFolder?.documentId !== _currentFolder?.documentId)\n )\n \"\n (click)=\"_confirm()\"\n >\n {{ 'platformUploadCollection.moveToConfirmBtn' | fdTranslate }}\n </fd-button-bar>\n <fd-button-bar (click)=\"_close()\">\n {{ 'platformUploadCollection.moveToCloseBtn' | fdTranslate }}\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { EventEmitter } from '@angular/core';\nimport { TableRowSelectionChangeEvent } from '@fundamental-ngx/platform/table-helpers';\n\nexport enum UploadCollectionItemStatus {\n LOADING = 'loading',\n SUCCESSFUL = 'successful',\n UNSUCCESSFUL = 'unsuccessful'\n}\n\nexport interface Author {\n id: number | string;\n name: string;\n}\n\nexport interface UploadCollectionFolder {\n documentId?: number | string;\n type: 'folder';\n name: string;\n uploadedBy: Author;\n uploadedOn: Date;\n fileSize?: number;\n files: UploadCollectionItem[];\n status?: UploadCollectionItemStatus;\n sameFilenameState?: FormStates;\n}\n\nexport interface UploadCollectionFile {\n documentId: number | string;\n type: 'file';\n name: string;\n uploadedBy: Author;\n uploadedOn: Date;\n fileSize: number;\n version: number;\n url: string;\n status?: UploadCollectionItemStatus;\n file?: File;\n sameFilenameState?: FormStates;\n}\n\nexport interface ItemPerPage {\n label: number;\n default: boolean;\n}\n\nexport type UploadCollectionItem = UploadCollectionFile | UploadCollectionFolder;\n\nexport enum MessageStripType {\n WARNING = 'warning',\n SUCCESS = 'success',\n INFORMATION = 'information',\n ERROR = 'error'\n}\n\nexport interface Message {\n messageType: MessageType;\n messageStripType: MessageStripType;\n payload: EventPayload;\n count?: MessageItemsCount;\n}\n\nexport interface MessageItemsCount {\n file: number;\n folder: number;\n}\n\nexport enum MessageType {\n CREATE,\n REMOVE,\n MOVE,\n UPDATE_VERSION,\n FILE_RENAME,\n TYPE_MISMATCH,\n FILE_NAME_LENGTH,\n FILE_SIZE\n}\n\nexport interface MessageOptions {\n type: MessageStripType;\n payload: EventPayload;\n}\n\nexport interface BreadcrumbList {\n folderId: number | string;\n folderName: string;\n clikable: boolean;\n}\n\nexport interface GroupByType {\n files: UploadCollectionFile[];\n folders: UploadCollectionFolder[];\n}\n\nexport interface NewFolderEvent {\n parentFolderId?: string | number;\n folder: UploadCollectionFolder;\n}\n\nexport interface UploadCollectionNewItem {\n temporaryDocumentId: string | number;\n item: UploadCollectionItem;\n}\n\nexport interface UploadEvent {\n parentFolderId?: string | number;\n items: UploadCollectionFile[];\n}\n\nexport interface CancelUploadNewFileEvent {\n parentFolderId?: string | number;\n item: UploadCollectionFile;\n}\n\n// UpdateVersionEvent\nexport interface UpdateVersionEvent {\n parentFolderId?: string | number;\n item: UploadCollectionFile;\n newItem: File;\n}\n\nexport interface DeleteEvent {\n parentFolderId?: string | number;\n items: UploadCollectionItem[];\n}\n\nexport interface FileRenamedEvent {\n parentFolderId?: string | number;\n fileName: string;\n item: UploadCollectionItem;\n}\n\nexport interface DownloadEvent {\n items: UploadCollectionFile[];\n}\n\nexport interface MoveToEvent {\n from?: UploadCollectionFolder;\n to?: UploadCollectionFolder;\n items: UploadCollectionItem[];\n newFolder?: {\n parentFolderId: string | number | null;\n folderName: string;\n };\n}\n\nexport interface FilenameLengthExceedEventPayload {\n items: (File | UploadCollectionItem)[];\n}\n\nexport class FilenameLengthExceedEvent<T extends UploadCollectionCmp = UploadCollectionCmp> {\n /**\n * Filename length exceed event payload\n * @param source Upload Collection component\n * @param payload Files\n */\n constructor(public source: T, public payload: FilenameLengthExceedEventPayload) {}\n}\n\nexport interface TypeMismatchEventPayload {\n items: File[];\n}\n\nexport class TypeMismatchEvent<T extends UploadCollectionCmp = UploadCollectionCmp> {\n /**\n * Type mismatch event\n * @param source Upload Collection component\n * @param payload Files\n */\n constructor(public source: T, public payload: TypeMismatchEventPayload) {}\n}\n\nexport interface FileSizeExceedEventPayload {\n items: File[];\n}\n\nexport class FileSizeExceedEvent<T extends UploadCollectionCmp = UploadCollectionCmp> {\n /**\n * Filesize exceed event\n * @param source Upload Collection component\n * @param payload Files\n */\n constructor(public source: T, public payload: FileSizeExceedEventPayload) {}\n}\n\nexport type EventPayload =\n | NewFolderEvent\n | UploadEvent\n | UpdateVersionEvent\n | DeleteEvent\n | FileRenamedEvent\n | DownloadEvent\n | MoveToEvent\n | FileSizeExceedEventPayload\n | TypeMismatchEventPayload\n | FilenameLengthExceedEventPayload;\n\nexport interface FilesValidatorOutput {\n validFiles?: File[];\n typeMismatch?: File[];\n filenameLengthExceed?: File[];\n fileSizeExceed?: File[];\n}\n\nexport interface FilesValidatorParams {\n maxFileSize?: string;\n maxFileNameLength?: number;\n fileTypes?: string[];\n mimeTypes?: string[];\n}\n\nexport interface UploadCollectionCmp<T = any> {\n id: string;\n itemsPerPage: number | ItemPerPage[];\n dataSource: T;\n fileTypes: string[];\n maxFileSize?: string;\n maxFilenameLength?: number;\n mimeTypes: string[];\n noDataText: string;\n noDataDescription: string;\n disabled: boolean;\n readonly: boolean;\n hierarchy: boolean;\n enablePagination: boolean;\n terminationEnabled: boolean;\n multiple: boolean;\n showSearch: boolean;\n sameFileNameAllowed: boolean;\n typeMismatch: EventEmitter<TypeMismatchEvent>;\n filenameLengthExceed: EventEmitter<FilenameLengthExceedEvent>;\n fileSizeExceed: EventEmitter<FileSizeExceedEvent>;\n showMessage(type: MessageType, options: MessageOptions): void;\n _fileNameChange(e: FocusEvent, currentItem: UploadCollectionItem): void;\n _checkName(e: Event, currentItem: UploadCollectionItem): void;\n _openUploadFiles(): void;\n _openUpdateFileVersion(): void;\n _selectHandler(files: File[]): void;\n _handleDrop(output: FilesValidatorOutput): void;\n _openNewFolderDialog(): void;\n _moveToClicked(multiple?: boolean): void;\n _downloadClicked(multiple?: boolean): void;\n _remove(multiple?: boolean): void;\n _runUploadNewFileAfterFail(item: UploadCollectionFile): void;\n _cancelUploadNewFile(file: UploadCollectionFile): void;\n _messageStripDismiss(): void;\n _openFolder(item: UploadCollectionItem): void;\n _actionButton(item: UploadCollectionItem): void;\n _onDropzone(event: boolean): void;\n _dragDropCancel(): void;\n _breadcrumbGoTo(event: MouseEvent, index?: number): void;\n _pageChanged(pageNumber: number): void;\n _itemsPerPageChange(value: number): void;\n _searchInputChanged(): void;\n _onRowSelectionChange(data: TableRowSelectionChangeEvent<UploadCollectionItem>): void;\n _getItemName(item: UploadCollectionItem): string;\n _getItemExtension(item: UploadCollectionItem): string;\n _getIconByType(file: UploadCollectionFile): string;\n _showIfSelectedOnlyFiles(): boolean;\n _isSelectedItem(item: UploadCollectionItem): boolean;\n _getList(): UploadCollectionItem[];\n _trackByDocumentId(index: number, item: UploadCollectionItem): UploadCollectionItem['documentId'];\n _getAllowedTypes(): string;\n}\n","import {\n MessageOptions,\n MessageType,\n Message,\n UploadCollectionItem,\n MessageItemsCount,\n DeleteEvent,\n MoveToEvent\n} from '../models/upload-collection.models';\n\nfunction _groupByTypeAndCount(items: UploadCollectionItem[]): MessageItemsCount {\n return items.reduce(\n (res, item) => {\n res[item.type] += 1;\n\n return res;\n },\n { file: 0, folder: 0 } as MessageItemsCount\n );\n}\n\n/** @hidden */\nexport function generateMessageStripeData(type: MessageType, options: MessageOptions): Message {\n const newMessage: Message = {\n messageType: type,\n messageStripType: options.type,\n payload: options.payload\n };\n\n const items = (<DeleteEvent | MoveToEvent>options.payload).items;\n\n if (items && items.length > 0) {\n newMessage.count = _groupByTypeAndCount(items);\n }\n\n return newMessage;\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { take, tap } from 'rxjs/operators';\n\nimport { uuidv4 } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig, DialogService } from '@fundamental-ngx/core/dialog';\nimport { ColumnAlign, SelectionMode, TableRowSelectionChangeEvent } from '@fundamental-ngx/platform/table';\nimport { isDataSource } from '@fundamental-ngx/platform/shared';\nimport { NewFolderComponent } from '../dialogs/new-folder/new-folder.component';\nimport { MoveToComponent, MoveToComponentDialogData } from '../dialogs/move-to/move-to.component';\nimport { FilesValidatorService } from '../services/files-validator.service';\nimport {\n BreadcrumbList,\n ItemPerPage,\n Message,\n MessageOptions,\n MessageStripType,\n MessageType,\n UploadCollectionFile,\n UploadCollectionFolder,\n UploadCollectionItem,\n UploadCollectionItemStatus,\n FilenameLengthExceedEvent,\n FileSizeExceedEvent,\n MoveToEvent,\n TypeMismatchEvent,\n UpdateVersionEvent,\n FilesValidatorOutput,\n UploadCollectionCmp\n} from '../models/upload-collection.models';\nimport { generateMessageStripeData } from '../helpers/generate-message-stripe-data';\nimport { UploadCollectionDataSource } from '../domain/upload-collection-data-source';\n\nexport type FdpUploadCollectionDataSource = UploadCollectionDataSource;\n\nlet randomId = 0;\n\n/**\n * @deprecated\n * UploadCollection component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-upload-collection',\n templateUrl: './upload-collection.component.html',\n styleUrls: ['./upload-collection.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class UploadCollectionComponent\n implements OnChanges, OnDestroy, UploadCollectionCmp<FdpUploadCollectionDataSource>\n{\n /** ID of the upload collection element. If none is provided, one will be generated. */\n @Input()\n id = `fdp-upload-collection-id-${randomId++}`;\n\n /** Defines the number of items on the page */\n @Input()\n set itemsPerPage(value: number | ItemPerPage[]) {\n if (typeof value === 'number') {\n this._itemsPerPage = value;\n this._match();\n\n return;\n }\n\n const defaultValue = value.find((item) => item.default);\n this._itemsPerPageOptions = value;\n\n if (defaultValue) {\n this._itemsPerPage = defaultValue.label;\n this._match();\n\n return;\n }\n\n this._itemsPerPage = value[Math.round(value.length / 2)].label;\n\n this._match();\n }\n get itemsPerPage(): number | ItemPerPage[] {\n return this._itemsPerPage;\n }\n\n /** List of items */\n @Input()\n set dataSource(value: FdpUploadCollectionDataSource) {\n if (value) {\n this._initializeDS(value);\n }\n }\n get dataSource(): FdpUploadCollectionDataSource {\n return this._dataSource;\n }\n\n /**\n * Defines the allowed file types for the upload.\n * The chosen files will be checked against an array of file types.\n * If at least one file does not fit the file type requirements,\n * the upload is prevented. Example: [\"jpg\", \"png\", \"bmp\"].\n */\n @Input()\n fileTypes: string[] = [];\n\n /**\n * Specifies a file size limit in megabytes that prevents the upload\n * if at least one file exceeds the limit.\n */\n @Input()\n maxFileSize?: string;\n\n /**\n * Specifies the maximum length of a file name.\n * If the maximum file name length is exceeded,\n * the corresponding event 'filenameLengthExceed' is triggered.\n */\n @Input()\n maxFilenameLength?: number;\n\n /**\n * Defines the allowed MIME types of files to be uploaded.\n * The chosen files will be checked against an array of MIME types.\n * If at least one file does not fit the MIME type requirements, the upload is prevented.\n * Example: mimeTypes [\"image/png\", \"image/jpeg\"].\n */\n @Input()\n mimeTypes: string[] = [];\n\n /**\n * @deprecated use i18n capabilities instead\n * Allows to set own text for the 'No data' text label.\n */\n @Input()\n noDataText: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * Allows to set own text for the 'No data' description label.\n */\n @Input()\n noDataDescription: string;\n\n /** All action buttons will be disabled */\n @Input()\n disabled = false;\n\n /** All action buttons will be invisible */\n @Input()\n readonly = false;\n\n /** Allows to support hierarchy */\n @Input()\n hierarchy = true;\n\n /** Allows to show/hide pagination */\n @Input()\n enablePagination = true;\n\n /**\n * If true, the button that is used to terminate the instant file upload gets visible.\n * The button normally appears when a file is being uploaded.\n */\n @Input()\n terminationEnabled = true;\n\n /** Gives to select multiple files from the same folder and then upload them. */\n @Input()\n multiple = true;\n\n /** Allows to show/hide search */\n @Input()\n showSearch = true;\n\n /**\n * Allows to use the same name for a file when editing the file name.\n * 'Same name' refers to an already existing file name in the list.\n * */\n @Input()\n sameFileNameAllowed = false;\n\n /**\n * The event is triggered when the file type or the MIME type don't match the permitted types\n * (only if the fileTypes property or the mimeTypes property are provided by the application).\n */\n @Output()\n typeMismatch = new EventEmitter<TypeMismatchEvent>();\n\n /**\n * The event is triggered when the name of a chosen file is longer than the value specified\n * with the maxFilenameLength property (only if provided by the application).\n */\n @Output()\n filenameLengthExceed = new EventEmitter<FilenameLengthExceedEvent>();\n\n /**\n * The event is triggered when the file size of an uploaded file is exceeded\n * (only if the maxFileSize property was provided by the application).\n */\n @Output()\n fileSizeExceed = new EventEmitter<FileSizeExceedEvent>();\n\n /** @hidden */\n _uploadCollectionItemStatus = UploadCollectionItemStatus;\n\n /** @hidden */\n _breadcrumbList: BreadcrumbList[] = [];\n\n /** @hidden */\n _currentPage = 1;\n\n /** @hidden */\n _itemsPerPage = 10;\n\n /** @hidden */\n _itemsPerPageOptions: ItemPerPage[] = [];\n\n /** @hidden */\n _totalItems = 0;\n\n /** @hidden */\n _countShowedItems = 0;\n\n /** @hidden */\n _countNotShowedItems = 0;\n\n /** @hidden\n * List of currently displayed items\n */\n _visibleList$ = new BehaviorSubject<UploadCollectionItem[]>([]);\n\n /** @hidden */\n selectedItems: UploadCollectionItem[] = [];\n\n /** @hidden */\n _searchText = '';\n\n /** @hidden */\n _showDragDropArea = false;\n\n /** @hidden */\n _onDragDropArea = false;\n\n /** @hidden */\n _activeItem?: UploadCollectionItem;\n\n /** @hidden */\n _currentUpdateFileVersion?: UploadCollectionFile;\n\n /** @hidden */\n _message?: Message;\n\n /** @hidden */\n _messageType = MessageType;\n\n /** @hidden */\n _messageStripType = MessageStripType;\n\n /** @hidden */\n _columnAlign = ColumnAlign;\n\n /** @hidden */\n _selectionMode = SelectionMode;\n\n /** @hidden */\n private _dataSource: UploadCollectionDataSource;\n\n /** @hidden */\n private _contentDensityManuallySet = false;\n\n /** @hidden */\n @ViewChild('fileInput')\n private readonly _uploadFilesRef: ElementRef;\n\n /** @hidden */\n @ViewChild('updateVersionInput')\n private readonly _updateVersionRef: ElementRef;\n\n /** @hidden */\n private readonly _imageExtensions: string[] = [\n '.apng',\n '.bmp',\n '.gif',\n '.ico',\n '.cur',\n '.jpg',\n '.jpeg',\n '.jfif',\n '.pjpeg',\n '.pjp',\n '.png',\n '.svg',\n '.tif',\n '.tiff',\n '.webp',\n '.flif',\n '.cr2',\n '.jxr',\n '.psd',\n '.bpg',\n '.jp2',\n '.jpm',\n '.jpx',\n '.heic',\n '.dcm'\n ];\n\n /** @hidden */\n private _validatedFiles: FilesValidatorOutput;\n\n /** @hidden for data source handling */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private readonly _onDestroy$ = new Subject<void>();\n\n /** @hidden */\n constructor(\n private readonly _dialogService: DialogService,\n private readonly _filesValidatorService: FilesValidatorService,\n private readonly _cdr: ChangeDetectorRef,\n private _injector: Injector\n ) {}\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.contentDensity) {\n this._contentDensityManuallySet = true;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n this._dsSubscription?.unsubscribe();\n this.dataSource.close();\n }\n\n /** Show meessage for types NEW FOLDER CREATE, REMOVE, MOVE TO, UPDATE_VERSION, FILE_RENAMED */\n showMessage(type: MessageType, options: MessageOptions): void {\n this._message = generateMessageStripeData(type, options);\n }\n\n /**\n * @hidden\n * Opens the file selector.\n */\n _fileNameChange(e: FocusEvent, currentItem: UploadCollectionItem): void {\n const input = e.target as HTMLInputElement;\n const itemName = input.value.trim();\n const newName = currentItem.type === 'file' ? `${itemName}.${currentItem.name.split('.').pop()}` : itemName;\n\n if (currentItem.name === newName) {\n return;\n }\n\n if (this.maxFilenameLength && itemName.length > this.maxFilenameLength) {\n const renamedItem = {\n ...currentItem,\n name: newName\n };\n const payload = {\n items: [renamedItem]\n };\n const filenameLengthEvent = new FilenameLengthExceedEvent(this, payload);\n\n this.showMessage(MessageType.FILE_NAME_LENGTH, { payload, type: MessageStripType.ERROR });\n\n this.filenameLengthExceed.emit(filenameLengthEvent);\n\n return;\n }\n\n if (currentItem.sameFilenameState) {\n return;\n }\n\n const data = {\n parentFolderId: this._getCurrentFolderId(),\n fileName: newName,\n item: { ...currentItem }\n };\n\n this.dataSource\n .fileRenamed(data)\n .pipe(\n tap(() => {\n this.selectedItems = [];\n\n this._match();\n })\n )\n .subscribe({\n next: () => {\n this.showMessage(MessageType.FILE_RENAME, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.FILE_RENAME, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n }\n\n /** @hidden */\n _checkName(e: Event, currentItem: UploadCollectionItem): void {\n const input = e.target as HTMLInputElement;\n const itemName = input.value.trim();\n const newName = currentItem.type === 'file' ? `${itemName}.${currentItem.name.split('.').pop()}` : itemName;\n const nameAlreadyExists = this._getList().some(\n (item) => currentItem.documentId !== item.documentId && item.name === newName\n );\n\n if (!this.sameFileNameAllowed && nameAlreadyExists) {\n currentItem.sameFilenameState = 'error';\n\n return;\n }\n\n delete currentItem.sameFilenameState;\n }\n\n /** @hidden\n * Opens the file selector.\n */\n _openUploadFiles(): void {\n const input = this._uploadFilesRef.nativeElement;\n if (input) {\n input.click();\n }\n }\n\n /** @hidden\n * Opens the update file version selector.\n */\n _openUpdateFileVersion(): void {\n if (this.disabled) {\n return;\n }\n\n const input = this._updateVersionRef.nativeElement;\n if (input) {\n this._currentUpdateFileVersion = this._activeItem as UploadCollectionFile;\n input.click();\n }\n }\n\n /** @hidden */\n _selectHandler(files: File[]): void {\n this._validateFiles(files);\n this._propagateFiles();\n }\n\n /** @hidden */\n _handleDrop(output: FilesValidatorOutput): void {\n this._validatedFiles = output;\n this._propagateFiles();\n }\n\n /** @hidden */\n _openNewFolderDialog(): void {\n const dialogRef = this._dialogService.open(NewFolderComponent, {\n responsivePadding: true,\n backdropClickCloseable: false,\n height: '320px',\n data: {\n currentFolder: this._getCurrentFolder(),\n maxFilenameLength: this.maxFilenameLength\n }\n } as DialogConfig);\n\n dialogRef.afterClosed.pipe(take(1)).subscribe((folderName) => {\n const folder = this._generateTemporaryNewFolder(folderName);\n const parentFolderId = this._getCurrentFolderId();\n const data = {\n parentFolderId,\n folder: { ...folder }\n };\n\n this._findParentFolderAndAddTemporaryFiles(parentFolderId, [folder]);\n\n this.dataSource\n .newFolder(data)\n .pipe(tap(() => this._match()))\n .subscribe({\n next: () => {\n this.showMessage(MessageType.CREATE, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.CREATE, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n });\n }\n\n /** @hidden */\n _moveToClicked(multiple?: boolean): void {\n if (this.disabled) {\n return;\n }\n\n const _activeItem = this._activeItem;\n const currentFolder = this._getCurrentFolder();\n const movableItems = multiple ? this.selectedItems : _activeItem ? [_activeItem] : [];\n const dialogRef = this._dialogService.open(\n MoveToComponent,\n {\n responsivePadding: true,\n verticalPadding: false,\n backdropClickCloseable: false,\n height: '350px',\n data: {\n items: this.dataSource.dataProvider.items,\n currentFolder,\n movableFolders: movableItems.filter((item) => item?.type === 'folder'),\n maxFilenameLength: this.maxFilenameLength\n } as MoveToComponentDialogData\n } as DialogConfig,\n this._injector\n );\n\n dialogRef.afterClosed.pipe(take(1)).subscribe(\n ({ selectedFolder, parentFolderId, folderName }) => {\n const payload: MoveToEvent = {\n from: currentFolder,\n to: selectedFolder,\n items: movableItems\n };\n\n if (folderName) {\n payload.newFolder = {\n parentFolderId,\n folderName\n };\n }\n\n this.dataSource\n .moveTo(payload)\n .pipe(\n tap(() => {\n this.selectedItems = [];\n\n this._match();\n })\n )\n .subscribe({\n next: () => {\n this.showMessage(MessageType.MOVE, {\n payload,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.MOVE, {\n payload,\n type: MessageStripType.ERROR\n });\n }\n });\n },\n (error) => {\n console.error(error);\n }\n );\n }\n\n /** @hidden */\n _downloadClicked(multiple?: boolean): void {\n if (this.disabled) {\n return;\n }\n\n const _activeItem = { ...this._activeItem };\n const items = (multiple ? this.selectedItems : [_activeItem]) as UploadCollectionFile[];\n\n this.dataSource.download({ items }).subscribe();\n }\n\n /** @hidden */\n _remove(multiple?: boolean): void {\n if (this.disabled) {\n return;\n }\n\n const _activeItem = { ...this._activeItem } as UploadCollectionItem;\n const items = multiple ? this.selectedItems : [_activeItem];\n const data = { parentFolderId: this._getCurrentFolderId(), items };\n\n this.dataSource\n .delete(data)\n .pipe(\n tap(() => {\n this.selectedItems = [];\n\n this._match();\n })\n )\n .subscribe({\n next: () => {\n this.showMessage(MessageType.REMOVE, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.REMOVE, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n }\n\n /** @hidden */\n _runUploadNewFileAfterFail(item: UploadCollectionFile): void {\n this.dataSource\n .runAfterFail({ parentFolderId: this._getCurrentFolderId(), items: [item] })\n .pipe(tap(() => this._match()))\n .subscribe();\n }\n\n /** @hidden */\n _cancelUploadNewFile(file: UploadCollectionFile): void {\n this.dataSource\n .cancelUploadNewFile({ parentFolderId: this._getCurrentFolderId(), item: file })\n .pipe(tap(() => this._match()))\n .subscribe();\n }\n\n /** @hidden */\n _messageStripDismiss(): void {\n this._message = undefined;\n }\n\n /** @hidden */\n _openFolder(item: UploadCollectionItem): void {\n if (item.type === 'file' || !item.documentId) {\n return;\n }\n\n if (this._breadcrumbList.length > 0) {\n this._breadcrumbList[this._breadcrumbList.length - 1].clikable = true;\n }\n\n this._breadcrumbList.push({\n clikable: false,\n folderId: item.documentId,\n folderName: item.name\n });\n\n this._match();\n }\n\n /** @hidden */\n _actionButton(item: UploadCollectionItem): void {\n this._activeItem = item;\n }\n\n /** @hidden */\n _onDropzone(event: boolean): void {\n this._showDragDropArea = true;\n this._onDragDropArea = event;\n }\n\n /** @hidden */\n _dragDropCancel(): void {\n this._showDragDropArea = false;\n }\n\n /** @hidden */\n _breadcrumbGoTo(event: MouseEvent, index?: number): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (!Number.isInteger(index)) {\n this._breadcrumbList = [];\n this._match();\n\n return;\n }\n\n this._breadcrumbList = this._breadcrumbList.slice(0, index! + 1);\n this._breadcrumbList[this._breadcrumbList.length - 1].clikable = false;\n\n this._match();\n }\n\n /** @hidden */\n _pageChanged(pageNumber: number): void {\n if (!this.enablePagination || this._currentPage === pageNumber) {\n return;\n }\n\n this.selectedItems = [];\n this._currentPage = pageNumber;\n\n this._match();\n }\n\n /** @hidden */\n _itemsPerPageChange(value: number): void {\n if (value === this._itemsPerPage) {\n return;\n }\n\n this._itemsPerPage = value;\n if (this._currentPage * this._itemsPerPage > this._totalItems) {\n this._currentPage = Math.ceil(this._totalItems / this._itemsPerPage);\n }\n\n this._match();\n }\n\n /** @hidden */\n _searchInputChanged(): void {\n this._match();\n }\n\n /** @hidden */\n _onRowSelectionChange(data: TableRowSelectionChangeEvent<UploadCollectionItem>): void {\n if (!this.sameFileNameAllowed) {\n const removedItem = data.removed[0];\n this._clearItemSameFilenameState(removedItem);\n }\n\n this.selectedItems = data.selection;\n }\n\n /** @hidden */\n _getItemName(item: UploadCollectionItem): string {\n if (item.type === 'folder') {\n return item.name;\n }\n\n return item.name.split('.').slice(0, -1).join('.');\n }\n\n /** @hidden */\n _getItemExtension(item: UploadCollectionItem): string {\n if (item.type === 'folder') {\n return '';\n }\n\n return `.${item.name.split('.').pop()}`;\n }\n\n /** @hidden */\n _getIconByType(file: UploadCollectionFile): string {\n const type = `.${file.name.split('.').pop()}`;\n\n return this._imageExtensions.includes(type) ? 'background' : 'document';\n }\n\n /** @hidden */\n _showIfSelectedOnlyFiles(): boolean {\n return !this.selectedItems.some((item) => item.type === 'folder');\n }\n\n /** @hidden */\n _isSelectedItem(item: UploadCollectionItem): boolean {\n return this.selectedItems.some((selectedItem) => selectedItem.documentId === item.documentId);\n }\n\n /** @hidden */\n _getList(): UploadCollectionItem[] {\n return this.dataSource.dataProvider.list;\n }\n\n /** @hidden */\n _trackByDocumentId(index: number, item: UploadCollectionItem): UploadCollectionItem['documentId'] {\n return item.documentId;\n }\n\n /** @hidden */\n _getAllowedTypes(): string {\n return `${this.fileTypes?.join(', ')}${\n this.fileTypes?.length && this.mimeTypes?.length ? ', ' : ''\n }${this.mimeTypes?.join(', ')}`;\n }\n\n /** @hidden */\n private _validateFiles(files: File[]): void {\n this._validatedFiles = this._filesValidatorService.validation(files, {\n maxFileSize: this.maxFileSize,\n maxFileNameLength: this.maxFilenameLength,\n fileTypes: this.fileTypes,\n mimeTypes: this.mimeTypes\n });\n }\n\n /** @hidden */\n private _propagateFiles(): void {\n const { validFiles, typeMismatch, filenameLengthExceed, fileSizeExceed } = this._validatedFiles;\n\n if (validFiles) {\n if (this._currentUpdateFileVersion) {\n this._updateFileVersion(validFiles[0]);\n } else {\n this._uploadNewFiles(validFiles);\n }\n }\n\n if (typeMismatch) {\n const payload = { items: typeMismatch };\n const event = new TypeMismatchEvent(this, payload);\n\n this.showMessage(MessageType.TYPE_MISMATCH, { payload, type: MessageStripType.ERROR });\n\n this.typeMismatch.emit(event);\n }\n\n if (filenameLengthExceed) {\n const payload = { items: filenameLengthExceed };\n const event = new FilenameLengthExceedEvent(this, payload);\n\n this.showMessage(MessageType.FILE_NAME_LENGTH, { payload, type: MessageStripType.ERROR });\n\n this.filenameLengthExceed.emit(event);\n }\n\n if (fileSizeExceed) {\n const payload = { items: fileSizeExceed };\n const event = new FileSizeExceedEvent(this, payload);\n\n this.showMessage(MessageType.FILE_SIZE, { payload, type: MessageStripType.ERROR });\n\n this.fileSizeExceed.emit(event);\n }\n }\n\n /** @hidden */\n private _updateFileVersion(newItem: File): void {\n const currentFolderId = this._getCurrentFolderId();\n const currentItem = {\n ...this._currentUpdateFileVersion,\n status: UploadCollectionItemStatus.LOADING\n } as UploadCollectionItem;\n\n const data = {\n parentFolderId: this._getCurrentFolderId(),\n item: this._currentUpdateFileVersion,\n newItem\n } as UpdateVersionEvent;\n\n this._findParentFolderAndUpdateItem(currentFolderId, currentItem);\n\n this.dataSource\n .updateVersion(data)\n .pipe(tap(() => this._match()))\n .subscribe({\n next: () => {\n this.showMessage(MessageType.UPDATE_VERSION, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n this._currentUpdateFileVersion = undefined;\n },\n error: () => {\n this.showMessage(MessageType.UPDATE_VERSION, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n }\n\n /** @hidden */\n private _uploadNewFiles(files: File[]): void {\n const currentFolderId = this._getCurrentFolderId();\n const newItems = this._generateTemporaryNewFiles(files);\n\n this._findParentFolderAndAddTemporaryFiles(currentFolderId, newItems);\n\n this.dataSource\n .upload({\n parentFolderId: currentFolderId,\n items: newItems.map((item) => ({ ...item }))\n })\n .pipe(tap(() => this._match()))\n .subscribe();\n }\n\n /** @hidden */\n private _getCurrentFolder(): UploadCollectionFolder | undefined {\n const currentFolderId = this._getCurrentFolderId();\n\n return !currentFolderId ? undefined : this._findFolderById(currentFolderId);\n }\n\n /** @hidden */\n private _getCurrentFolderId(): string | number | undefined {\n return this._breadcrumbList.length === 0\n ? undefined\n : this._breadcrumbList[this._breadcrumbList.length - 1].folderId;\n }\n\n /** @hidden */\n private _findFolderById(\n folderId: number | string,\n items: UploadCollectionItem[] = this.dataSource.dataProvider.items\n ): UploadCollectionFolder | undefined {\n let foundObj: UploadCollectionFolder | undefined;\n\n JSON.stringify(items, (_, nestedValue) => {\n if (nestedValue && nestedValue.documentId === folderId) {\n foundObj = nestedValue;\n }\n\n return nestedValue;\n });\n\n return foundObj;\n }\n\n /** @hidden */\n private _findParentFolderAndUpdateItem(\n parentFolderId: string | number | undefined,\n updatedItem: UploadCollectionItem,\n items = this.dataSource.dataProvider.items\n ): void {\n if (!parentFolderId) {\n const index = items.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n items[index] = updatedItem;\n }\n\n this._match();\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n const index = currentItem.files.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n currentItem.files[i] = updatedItem;\n this._match();\n\n break;\n }\n } else {\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _findParentFolderAndAddTemporaryFiles(\n parentFolderId: string | number | undefined,\n newItems: UploadCollectionItem[],\n items = this.dataSource.dataProvider.items\n ): void {\n if (!parentFolderId) {\n items.push(...newItems);\n this._match();\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n currentItem.files.push(...newItems);\n this._match();\n\n break;\n } else {\n this._findParentFolderAndAddTemporaryFiles(parentFolderId, newItems, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _generateTemporaryNewFiles(files: File[]): UploadCollectionFile[] {\n return files.map((file) => ({\n documentId: uuidv4(),\n type: 'file',\n name: file.name,\n uploadedBy: {\n id: uuidv4(),\n name: `You`\n },\n uploadedOn: new Date(),\n fileSize: file.size,\n version: 1,\n url: '',\n status: UploadCollectionItemStatus.LOADING,\n file\n }));\n }\n\n /** @hidden */\n private _generateTemporaryNewFolder(folderName: string): UploadCollectionFolder {\n return {\n documentId: uuidv4(),\n type: 'folder',\n name: folderName,\n uploadedBy: {\n id: Date.now(),\n name: 'You'\n },\n uploadedOn: new Date(),\n files: [],\n status: UploadCollectionItemStatus.LOADING\n };\n }\n\n /** @hidden */\n private _initializeDS(ds: FdpUploadCollectionDataSource): void {\n this._visibleList$.next([]);\n if (isDataSource(this.dataSource)) {\n this.dataSource.close();\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = undefined;\n }\n }\n\n this._dataSource = this._openDataStream(ds);\n\n // initial data fetch\n this._match();\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpUploadCollectionDataSource): UploadCollectionDataSource {\n const initDataSource = this._toDataStream(ds);\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n this._dsSubscription = initDataSource.open().subscribe((data) => {\n this._visibleList$.next(data);\n\n this._totalItems = initDataSource.dataProvider.totalItems;\n\n this._countUnvisibleItems();\n });\n\n return initDataSource;\n }\n\n /** @hidden */\n private _toDataStream(ds: FdpUploadCollectionDataSource): UploadCollectionDataSource | undefined {\n if (isDataSource(ds)) {\n return ds as UploadCollectionDataSource;\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _match(): void {\n const query = new Map();\n\n query.set('folderId', this._getCurrentFolderId());\n query.set('page', this._currentPage);\n query.set('searchText', this._searchText || '*');\n\n if (this.enablePagination) {\n query.set('limit', this._itemsPerPage);\n }\n\n this.dataSource.match(query);\n }\n\n /** @hidden */\n private _countUnvisibleItems(): void {\n const itemsPerPage = this._itemsPerPage as number;\n this._countShowedItems = this._currentPage * itemsPerPage - itemsPerPage + 1;\n this._countNotShowedItems = this._countShowedItems + this._visibleList$.value.length - 1;\n }\n\n /** @hidden */\n private _clearItemSameFilenameState(currentItem: UploadCollectionItem): void {\n if (!currentItem) {\n return;\n }\n\n for (const item of this._getList()) {\n if (item.documentId === currentItem.documentId) {\n delete item.sameFilenameState;\n break;\n }\n }\n }\n}\n","<div [id]=\"id\" class=\"fdp-upload-collection\">\n <!-- Message strip -->\n <fd-message-strip *ngIf=\"_message\" [type]=\"_message.messageStripType\" (onDismiss)=\"_messageStripDismiss()\">\n <ng-container\n [ngTemplateOutlet]=\"message\"\n [ngTemplateOutletContext]=\"{\n messageType: _message.messageType,\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </fd-message-strip>\n\n <!-- Toolbar -->\n <fd-toolbar class=\"fdp-upload-collection__toolbar\">\n <div style=\"flex: 1 auto\">\n <fd-breadcrumb [id]=\"id + '-breadcrumb'\">\n <fd-breadcrumb-item>\n <ng-template #multipleBreadcrumbs>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event)\">\n {{ 'platformUploadCollection.breadcrumbLabelAllFiles' | fdTranslate }}\n </a>\n </ng-template>\n <ng-template #singleBreadcrumb>\n <span>\n {{\n 'platformUploadCollection.breadcrumbLabelAllFilesWithTotal'\n | fdTranslate : { total: _totalItems }\n }}\n </span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"_breadcrumbList.length > 0 ? multipleBreadcrumbs : singleBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n <fd-breadcrumb-item *ngFor=\"let item of _breadcrumbList; let i = index\">\n <ng-template #clickableBreadcrumb>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event, i)\">{{ item.folderName }}</a>\n </ng-template>\n <ng-template #textBreadcrumb>\n <span>{{ item.folderName }} ({{ _totalItems }})</span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"item.clikable ? clickableBreadcrumb : textBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n </fd-breadcrumb>\n </div>\n\n <fd-toolbar-spacer style=\"max-width: 3rem\"></fd-toolbar-spacer>\n <ng-container *ngIf=\"readonly || selectedItems.length === 0\">\n <fd-input-group\n *ngIf=\"showSearch\"\n [(ngModel)]=\"_searchText\"\n (ngModelChange)=\"_searchInputChanged()\"\n glyph=\"search\"\n [ariaLabelledBy]=\"id + '-breadcrumb'\"\n [placeholder]=\"'platformUploadCollection.searchPlaceholder' | fdTranslate\"\n ></fd-input-group>\n\n <ng-container *ngIf=\"!readonly\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openUploadFiles()\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n ></button>\n\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openNewFolderDialog()\"\n *ngIf=\"hierarchy\"\n [disabled]=\"disabled\"\n fdType=\"transparent\"\n [label]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!readonly && selectedItems.length > 0\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_moveToClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_downloadClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"_showIfSelectedOnlyFiles()\"\n [label]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_remove(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </fd-toolbar>\n\n <div class=\"fdp-upload-collection__table--wrapper\">\n <div\n class=\"fdp-upload-collection__table\"\n fdpUploadCollectionDragnDrop\n [fileTypes]=\"fileTypes\"\n [maxFilenameLength]=\"maxFilenameLength\"\n [maxFileSize]=\"maxFileSize\"\n [mimeTypes]=\"mimeTypes\"\n [dragndrop]=\"!readonly\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n (fileChanged)=\"_handleDrop($event)\"\n (cancel)=\"_dragDropCancel()\"\n (onDropzone)=\"_onDropzone($event)\"\n >\n <!-- Table -->\n <fdp-table\n *ngIf=\"_visibleList$.value.length > 0\"\n [dataSource]=\"_visibleList$\"\n [loading]=\"dataSource.isDataLoading\"\n selectionMode=\"multiple\"\n emptyTableMessage=\"\"\n [noHorizontalBorders]=\"true\"\n [trackBy]=\"_trackByDocumentId\"\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n >\n <fdp-column name=\"name\" label=\"Name\" width=\"8rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'folder'\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.folderIconTitle' | fdTranslate\"\n ></fd-icon>\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'file'\"\n [glyph]=\"_getIconByType(item)\"\n [title]=\"'platformUploadCollection.fileIconTitle' | fdTranslate\"\n ></fd-icon>\n\n <ng-container *ngIf=\"disabled || readonly || !_isSelectedItem(item); else editMode\">\n <span\n [class.fdp-upload-collection__cursor]=\"item.type === 'folder'\"\n (click)=\"_openFolder(item)\"\n >{{ item.name }}</span\n >\n </ng-container>\n </div>\n\n <ng-template #editMode>\n <div fd-form-item>\n <fd-form-input-message-group [triggers]=\"[]\" [isOpen]=\"!!item.sameFilenameState\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <input\n fd-form-control\n [value]=\"_getItemName(item)\"\n (blur)=\"_fileNameChange($event, item)\"\n (input)=\"_checkName($event, item)\"\n type=\"text\"\n [placeholder]=\"\n 'platformUploadCollection.editFileNameInputPlaceholder' | fdTranslate\n \"\n [state]=\"item.sameFilenameState\"\n />\n <span class=\"fdp-upload-collection__item_extension\">{{\n _getItemExtension(item)\n }}</span>\n </div>\n\n <fd-form-message [type]=\"item.sameFilenameState\">\n {{\n (item.type === 'file'\n ? 'platformUploadCollection.editFileNameFileAlreadyExistsError'\n : 'platformUploadCollection.editFileNameFolderAlreadyExistsError'\n ) | fdTranslate\n }}\n </fd-form-message>\n </fd-form-input-message-group>\n </div>\n </ng-template>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedBy\" label=\"Uploaded by\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedBy.name }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedOn\" label=\"Uploaded on\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedOn | date : 'shortDate' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"size\" label=\"File size\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.fileSize | convertBytes }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"version\" label=\"Version\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.version || '' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"status\" label=\"Status\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-busy-indicator\n *ngIf=\"item.status === _uploadCollectionItemStatus.LOADING\"\n [loading]=\"true\"\n ariaLabel=\"Status: Loading\"\n ariaLive=\"polite\"\n size=\"s\"\n ></fd-busy-indicator>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.SUCCESSFUL\"\n fd-object-status\n status=\"positive\"\n >\n {{ 'platformUploadCollection.itemStatusSuccessful' | fdTranslate }}\n </span>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n fd-object-status\n status=\"negative\"\n >\n {{ 'platformUploadCollection.itemStatusUnsuccessful' | fdTranslate }}\n </span>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"action\" *ngIf=\"!readonly\" width=\"5rem\" align=\"end\">\n <fdp-table-header *fdpHeaderCellDef>Action</fdp-table-header>\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__actions\">\n <div class=\"fdp-upload-collection__actions--status\">\n <button\n fd-button\n [label]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n (click)=\"_runUploadNewFileAfterFail(item)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n ></button>\n\n <button\n fd-button\n [label]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n (click)=\"_cancelUploadNewFile(item)\"\n *ngIf=\"terminationEnabled && item.status === _uploadCollectionItemStatus.LOADING\"\n ></button>\n </div>\n\n <fdp-menu-button\n icon=\"overflow\"\n [disabled]=\"disabled\"\n type=\"transparent\"\n [title]=\"'platformUploadCollection.itemMenuBtnTitle' | fdTranslate\"\n [fdpMenuTriggerFor]=\"menuActions\"\n (buttonClicked)=\"_actionButton(item)\"\n >\n </fdp-menu-button>\n </div>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n\n <!-- Dragdrop area -->\n <div\n class=\"fdp-upload-collection__dragdrop-area\"\n *ngIf=\"_showDragDropArea\"\n [class.active]=\"_onDragDropArea\"\n >\n <fd-icon class=\"fdp-upload-collection__dragdrop-area--icon\" glyph=\"upload-to-cloud\"></fd-icon>\n <p class=\"fdp-upload-collection__dragdrop-area--text\">\n {{ 'platformUploadCollection.dragDropAreaText' | fdTranslate }}\n </p>\n </div>\n\n <!-- No data -->\n <div\n class=\"fdp-upload-collection__no-data\"\n *ngIf=\"_visibleList$.value.length === 0\"\n [class.invisible]=\"_showDragDropArea\"\n >\n <fd-icon glyph=\"document\"></fd-icon>\n <h3>{{ noDataText || ('platformUploadCollection.noDataText' | fdTranslate) }}</h3>\n <p>{{ noDataDescription || ('platformUploadCollection.noDataDescription' | fdTranslate) }}</p>\n </div>\n </div>\n\n <!-- Table footer -->\n <div class=\"fdp-upload-collection__table-footer\" *ngIf=\"enablePagination\">\n <!-- Pagination -->\n <div class=\"fdp-upload-collection__pagination\">\n <span [id]=\"id + '-pagination'\" class=\"fdp-upload-collection__pagination--total\">\n {{\n 'platformUploadCollection.paginationTotal'\n | fdTranslate : { from: _countShowedItems, to: _countNotShowedItems, total: _totalItems }\n }}\n </span>\n <fd-pagination\n [totalItems]=\"_totalItems\"\n [displayTotalItems]=\"false\"\n (pageChangeStart)=\"_pageChanged($event)\"\n [itemsPerPage]=\"_itemsPerPage\"\n [currentPage]=\"_currentPage\"\n [attr.aria-labelledby]=\"id + '-pagination'\"\n ></fd-pagination>\n </div>\n\n <!-- Results per page -->\n <div class=\"fdp-upload-collection__results\">\n <span class=\"fdp-upload-collection__results--title\">\n <span [id]=\"id + '-results'\">\n {{ 'platformUploadCollection.resultsPerPage' | fdTranslate }}\n </span>\n <span *ngIf=\"_itemsPerPageOptions.length === 0\">{{ _itemsPerPage }}</span>\n </span>\n <fdp-menu-button\n *ngIf=\"_itemsPerPageOptions.length > 0\"\n type=\"ghost\"\n [ariaLabelledBy]=\"id + '-results'\"\n [fdpMenuTriggerFor]=\"itemsPerPageMenu\"\n [label]=\"_itemsPerPage + ''\"\n >\n </fdp-menu-button>\n </div>\n </div>\n </div>\n</div>\n\n<fdp-menu #itemsPerPageMenu xPosition=\"before\">\n <fdp-menu-item\n *ngFor=\"let value of _itemsPerPageOptions\"\n (itemSelect)=\"_itemsPerPageChange(value.label)\"\n [attr.title]=\"'Results per page: ' + value.label\"\n >\n <span>{{ value.label }}</span>\n </fdp-menu-item>\n</fdp-menu>\n\n<fdp-menu #menuActions xPosition=\"before\">\n <fdp-menu-item (itemSelect)=\"_moveToClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.moveToBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <ng-container *ngIf=\"_activeItem?.type === 'file'\">\n <fdp-menu-item (itemSelect)=\"_downloadClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"download\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.downloadBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <fdp-menu-item (itemSelect)=\"_openUpdateFileVersion()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"drill-up\"\n [title]=\"'platformUploadCollection.updateVersionBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.updateVersionBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n </ng-container>\n <fdp-menu-item (itemSelect)=\"_remove()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"delete\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.removeBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n</fdp-menu>\n\n<input\n #fileInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n fdFileSelect\n/>\n\n<input\n #updateVersionInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [disabled]=\"disabled\"\n [multiple]=\"false\"\n fdFileSelect\n/>\n\n<ng-template\n let-messageType=\"messageType\"\n let-payload=\"payload\"\n let-messageStripType=\"messageStripType\"\n let-count=\"count\"\n #message\n>\n <ng-container *ngIf=\"_message\" [ngSwitch]=\"messageType\">\n <ng-container\n *ngSwitchCase=\"_messageType.CREATE\"\n [ngTemplateOutlet]=\"messageNewFolder\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.UPDATE_VERSION\"\n [ngTemplateOutlet]=\"messageUpdateVersion\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_RENAME\"\n [ngTemplateOutlet]=\"messageFileRename\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.REMOVE\"\n [ngTemplateOutlet]=\"messageRemove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.MOVE\"\n [ngTemplateOutlet]=\"messageMove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.TYPE_MISMATCH\"\n [ngTemplateOutlet]=\"messageTypeMismatch\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_SIZE\"\n [ngTemplateOutlet]=\"messageFileSize\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_NAME_LENGTH\"\n [ngTemplateOutlet]=\"messageFilenameLength\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #messageNewFolder let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersCreated\">\n {{ 'platformUploadCollection.messageCreateFailed' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-container>\n <ng-template #foldersCreated>\n {{ 'platformUploadCollection.messageCreateSuccess' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageUpdateVersion let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else versionUpdated\">\n {{ 'platformUploadCollection.messageUpdateVersionFailed' | fdTranslate : { folderName: payload.item.name } }}\n </ng-container>\n <ng-template #versionUpdated>\n {{ 'platformUploadCollection.messageUpdateVersionSuccess' | fdTranslate : { folderName: payload.item.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageFileRename let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else fileRenamed\">\n {{\n 'platformUploadCollection.messageFileRenameFailed'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-container>\n <ng-template #fileRenamed>\n {{\n 'platformUploadCollection.messageFileRenameSuccess'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageRemove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersAndFilesRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesFailed'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-container>\n <ng-template #foldersAndFilesRemoved>\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesSuccess'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersRemoved\">\n {{ 'platformUploadCollection.messageRemoveFoldersFailed' | fdTranslate : { foldersCount: count.folder } }}\n </ng-container>\n <ng-template #foldersRemoved>\n {{ 'platformUploadCollection.messageRemoveFoldersSuccess' | fdTranslate : { foldersCount: count.folder } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesRemoved\">\n {{ 'platformUploadCollection.messageRemoveFilesFailed' | fdTranslate : { filesCount: count.file } }}\n </ng-container>\n <ng-template #filesRemoved>\n {{ 'platformUploadCollection.messageRemoveFilesSuccess' | fdTranslate : { filesCount: count.file } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderFailed'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-container>\n <ng-template #oneItemRemoved>\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderSuccess'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageMove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesAndFoldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesFailed'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesFailed'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesAndFoldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesSuccess'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersFailed'\n : 'platformUploadCollection.messageMoveRootFoldersFailed'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #foldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersSuccess'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesFailed'\n : 'platformUploadCollection.messageMoveRootFilesFailed'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFilesSuccess'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderFailed'\n : 'platformUploadCollection.messageMoveRootFileOrFolderFailed'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #oneItemMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderSuccess'\n : 'platformUploadCollection.messageMoveRootFileOrFolderSuccess'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageTypeMismatch let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchPlural'\n | fdTranslate : { filesCount: payload.items.length, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchSingular'\n | fdTranslate : { fileName: payload.items[0].name, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFileSize let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFilenameLength let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { ToolbarModule } from '@fundamental-ngx/core/toolbar';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { FormModule } from '@fundamental-ngx/core/form';\nimport { PipeModule } from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';\nimport { MessageStripModule } from '@fundamental-ngx/core/message-strip';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { BreadcrumbModule } from '@fundamental-ngx/core/breadcrumb';\nimport { PaginationModule } from '@fundamental-ngx/core/pagination';\nimport { ObjectStatusModule } from '@fundamental-ngx/core/object-status';\nimport { FileUploaderModule } from '@fundamental-ngx/core/file-uploader';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\nimport { PlatformTableModule } from '@fundamental-ngx/platform/table';\nimport { PlatformMenuModule } from '@fundamental-ngx/platform/menu';\nimport { PlatformButtonModule } from '@fundamental-ngx/platform/button';\nimport { PlatformMenuButtonModule } from '@fundamental-ngx/platform/menu-button';\nimport { PlatformPipeModule } from '@fundamental-ngx/platform/shared';\nimport { PlatformContentDensityDeprecationsModule } from '@fundamental-ngx/platform/shared';\n\nimport { UploadCollectionDragnDropDirective } from './directives/upload-collection-dragndrop.directive';\nimport { UploadCollectionComponent } from './upload-collection/upload-collection.component';\nimport { NewFolderComponent } from './dialogs/new-folder/new-folder.component';\nimport { MoveToComponent } from './dialogs/move-to/move-to.component';\nimport { I18nModule } from '@fundamental-ngx/i18n';\n\n@NgModule({\n declarations: [UploadCollectionComponent, NewFolderComponent, MoveToComponent, UploadCollectionDragnDropDirective],\n imports: [\n CommonModule,\n PlatformTableModule,\n ToolbarModule,\n ButtonModule,\n InputGroupModule,\n FormModule,\n I18nModule,\n FormsModule,\n ReactiveFormsModule,\n DialogModule,\n PipeModule,\n IconModule,\n BreadcrumbModule,\n PaginationModule,\n BusyIndicatorModule,\n ObjectStatusModule,\n PlatformMenuModule,\n PlatformButtonModule,\n MessageStripModule,\n FileUploaderModule,\n ListModule,\n PlatformPipeModule,\n PlatformMenuButtonModule,\n RouterModule,\n PlatformContentDensityDeprecationsModule,\n ContentDensityModule\n ],\n exports: [UploadCollectionComponent, PlatformContentDensityDeprecationsModule, ContentDensityModule]\n})\nexport class PlatformUploadCollectionModule {}\n","/**\n * Default implementation for Observable Arrays and Arrays.\n */\nimport { Observable, of } from 'rxjs';\n\nimport { DataProvider } from '@fundamental-ngx/platform/shared';\nimport {\n GroupByType,\n UploadCollectionFile,\n UploadCollectionFolder,\n UploadCollectionItem,\n CancelUploadNewFileEvent,\n DeleteEvent,\n DownloadEvent,\n FileRenamedEvent,\n MoveToEvent,\n NewFolderEvent,\n UpdateVersionEvent,\n UploadEvent\n} from '../models/upload-collection.models';\n\n/**\n * In Memory implementation of DataProvider that supports fulltext search\n */\nexport abstract class UploadCollectionDataProvider extends DataProvider<UploadCollectionItem> {\n /** @hidden */\n totalItems = 0;\n /** @hidden */\n list: UploadCollectionItem[] = [];\n\n abstract items: UploadCollectionItem[];\n\n /** The method is triggered when valid files are selected in the file uploader dialog. */\n abstract upload(data: UploadEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when an uploaded attachment is selected and the Download button is pressed. */\n abstract download(data: DownloadEvent): Observable<void>;\n\n /** The method is triggered when Move to button is pressed and folder to move is selected in the dialog modal. */\n abstract moveTo(data: MoveToEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when an uploaded attachment is selected and the Delete button is pressed. */\n abstract delete(data: DeleteEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when the file name is changed. */\n abstract fileRenamed(data: FileRenamedEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when the new folder added. */\n abstract newFolder(data: NewFolderEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when Update Version button is pressed and valid file are selected in the file uploader dialog. */\n abstract updateVersion(data: UpdateVersionEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when Run button is pressed */\n abstract runAfterFail(data: UploadEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when Cancel button is pressed */\n abstract cancelUploadNewFile(data: CancelUploadNewFileEvent): Observable<UploadCollectionItem[]>;\n\n /** @hidden */\n fetch(params: Map<string, string | number>): Observable<UploadCollectionItem[]> {\n let currentItems: UploadCollectionItem[] = this.items;\n\n const folderId = params.get('folderId');\n if (folderId) {\n const folder = this._findFolderById(folderId);\n currentItems = folder ? folder.files : [];\n }\n\n let _list = this._defaultSorting(currentItems);\n const searchText = (params.get('searchText') as string) ?? '';\n const limit = +(params.get('limit') ?? (100 as number));\n const page = +(params.get('page') ?? 1);\n\n if (!searchText || searchText === '*') {\n this.list = _list;\n this.totalItems = _list.length;\n\n return of(this._getItemsByPage(_list, page, limit));\n }\n\n const keyword = searchText.toLowerCase();\n _list = _list.filter((item) => item.name.toLowerCase().indexOf(keyword) > -1);\n this.list = _list;\n this.totalItems = _list.length;\n\n _list = this._getItemsByPage(_list, page, limit);\n\n return of(_list);\n }\n\n /** @hidden */\n private _getItemsByPage(items: UploadCollectionItem[], page: number, limit: number): UploadCollectionItem[] {\n const firstDisplayedRow = (page - 1) * limit;\n const _visibleList = items.slice(firstDisplayedRow, firstDisplayedRow + limit);\n\n if (_visibleList.length === 0 && items.length > 0) {\n this._getItemsByPage(items, page > 1 ? page - 1 : 1, limit);\n }\n\n return _visibleList;\n }\n\n /** @hidden */\n private _defaultSorting(list: UploadCollectionItem[]): UploadCollectionItem[] {\n let _list: UploadCollectionItem[] = [];\n const groupByType: GroupByType = list.reduce((res: GroupByType, item: UploadCollectionItem) => {\n const type = `${item.type}s`;\n\n if (!res[type]) {\n res[type] = [];\n }\n\n if (item.type === 'folder') {\n item.fileSize = +this._getFileSize(item).toFixed(2);\n }\n\n res[type].push(item);\n\n return res;\n }, {} as GroupByType);\n\n groupByType.folders = this._sortBy(groupByType.folders, 'name') as UploadCollectionFolder[];\n groupByType.files = this._sortBy(groupByType.files, 'name') as UploadCollectionFile[];\n\n if (groupByType.folders) {\n _list = groupByType.folders;\n } else {\n _list = [];\n }\n\n if (groupByType.files) {\n _list.push(...groupByType.files);\n }\n\n return _list;\n }\n\n /** @hidden */\n private _getFileSize(item: UploadCollectionItem): number {\n if (item.type === 'file') {\n return item.fileSize;\n }\n\n if (item.type === 'folder') {\n return item.files.reduce((res, folderItem) => {\n res += this._getFileSize(folderItem);\n\n return res;\n }, 0);\n }\n return 0;\n }\n\n /** @hidden */\n private _sortBy(items: UploadCollectionItem[] = [], key: string): UploadCollectionItem[] {\n return items.sort((a, b) => (a[key] > b[key] ? 1 : -1));\n }\n\n /** @hidden */\n private _findFolderById(folderId: number | string): UploadCollectionFolder | undefined {\n let foundObj: UploadCollectionFolder | undefined;\n\n JSON.stringify(this.items, (_, nestedValue) => {\n if (nestedValue && nestedValue.documentId === folderId) {\n foundObj = nestedValue;\n }\n\n return nestedValue;\n });\n\n return foundObj;\n }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { DataSource } from '@fundamental-ngx/platform/shared';\nimport {\n UploadCollectionItem,\n CancelUploadNewFileEvent,\n DeleteEvent,\n DownloadEvent,\n FileRenamedEvent,\n MoveToEvent,\n NewFolderEvent,\n UpdateVersionEvent,\n UploadEvent\n} from '../models/upload-collection.models';\nimport { UploadCollectionDataProvider } from './upload-collection-data-provider';\n\nexport class UploadCollectionDataSource implements DataSource<UploadCollectionItem> {\n /** Max items for response */\n static readonly MaxLimit = Number.MAX_SAFE_INTEGER;\n\n /** @hidden */\n protected _dataChanges = new BehaviorSubject<UploadCollectionItem[]>([]);\n /** @hidden */\n protected _onDataRequested$ = new Subject<void>();\n /** @hidden */\n protected _onDataReceived$ = new Subject<void>();\n /** @hidden */\n protected _dataLoading = false;\n\n /** @hidden */\n get isDataLoading(): boolean {\n return this._dataLoading;\n }\n\n /** @hidden */\n constructor(public readonly dataProvider: UploadCollectionDataProvider) {}\n\n /** Filtering data */\n match(searchParam: Map<string, string | number>): void {\n this._onDataRequested$.next();\n this._dataLoading = true;\n if (!(searchParam instanceof Map)) {\n throw new Error('DataSource.match() predicate can only accepts string and Map');\n }\n\n if (!searchParam.has('limit')) {\n searchParam.set('limit', UploadCollectionDataSource.MaxLimit);\n }\n\n this.dataProvider\n .fetch(searchParam)\n .pipe(take(1))\n .subscribe(\n (result: UploadCollectionItem[]) => {\n this._onDataReceived$.next();\n this._dataLoading = false;\n this._dataChanges.next(result);\n },\n () => {\n this._onDataReceived$.next();\n this._dataLoading = false;\n }\n );\n }\n\n /** The method is triggered when valid files are selected in the file uploader dialog. */\n upload(data: UploadEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.upload(data).pipe(take(1));\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Download button is pressed. */\n download(data: DownloadEvent): Observable<void> {\n return this.dataProvider.download(data);\n }\n\n /** The method is triggered when Move to button is pressed and folder to move is selected in the dialog modal. */\n moveTo(data: MoveToEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.moveTo(data).pipe(take(1));\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Delete button is pressed. */\n delete(data: DeleteEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.delete(data).pipe(take(1));\n }\n\n /** The method is triggered when the file name is changed. */\n fileRenamed(data: FileRenamedEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.fileRenamed(data).pipe(take(1));\n }\n\n /** The method is triggered when the new folder added. */\n newFolder(data: NewFolderEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.newFolder(data).pipe(take(1));\n }\n\n /** The method is triggered when Update Version button is pressed and valid file are selected in the file uploader dialog. */\n updateVersion(data: UpdateVersionEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.updateVersion(data).pipe(take(1));\n }\n\n /** The method is triggered when Run button is pressed */\n runAfterFail(data: UploadEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.runAfterFail(data).pipe(take(1));\n }\n\n /** The method is triggered when Cancel button is pressed */\n cancelUploadNewFile(data: CancelUploadNewFileEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.cancelUploadNewFile(data).pipe(take(1));\n }\n\n /** @hidden */\n open(): Observable<UploadCollectionItem[]> {\n return this._dataChanges.asObservable();\n }\n\n /** @hidden */\n close(): void {}\n\n /** @hidden */\n onDataRequested(): Observable<void> {\n return this._onDataRequested$.asObservable();\n }\n\n /** @hidden */\n onDataReceived(): Observable<void> {\n return this._onDataReceived$.asObservable();\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { delay, map } from 'rxjs/operators';\n\nimport { uuidv4 } from '@fundamental-ngx/cdk/utils';\nimport { UploadCollectionDataProvider } from '../domain/upload-collection-data-provider';\n\nimport {\n UploadCollectionFile,\n UploadCollectionItem,\n UploadCollectionItemStatus,\n CancelUploadNewFileEvent,\n DeleteEvent,\n DownloadEvent,\n FileRenamedEvent,\n MoveToEvent,\n NewFolderEvent,\n UpdateVersionEvent,\n UploadCollectionNewItem,\n UploadEvent\n} from '../models/upload-collection.models';\n\nconst dataSource: UploadCollectionItem[] = [\n {\n documentId: uuidv4(),\n type: 'folder',\n name: 'Folder-1',\n uploadedBy: {\n id: uuidv4(),\n name: 'Lucas A.'\n },\n uploadedOn: new Date(2018, 4, 1),\n files: [\n {\n documentId: uuidv4(),\n type: 'file',\n name: 'File-2',\n uploadedBy: {\n id: uuidv4(),\n name: 'Oliver T.'\n },\n url: '',\n uploadedOn: new Date(2018, 0, 1),\n fileSize: 1024,\n version: 2\n }\n ]\n },\n {\n documentId: uuidv4(),\n type: 'file',\n name: `File-1`,\n uploadedBy: {\n id: uuidv4(),\n name: 'William G.'\n },\n url: '',\n uploadedOn: new Date(2010, 9, 4),\n fileSize: 2048,\n version: 1\n }\n];\n\nexport class UploadCollectionDataProviderTest extends UploadCollectionDataProvider {\n /** @hidden */\n items: UploadCollectionItem[] = dataSource.map((item) => ({ ...item }));\n\n /** @hidden */\n private _cancelUploadNewFileIds: (string | number)[] = [];\n\n /** The method is triggered when valid files are selected in the file uploader dialog. */\n upload({ parentFolderId, items }: UploadEvent): Observable<UploadCollectionItem[]> {\n console.log('upload', parentFolderId, items);\n\n const newFiles: UploadCollectionNewItem[] = items.map((item) => {\n delete item.file;\n item.status = UploadCollectionItemStatus.SUCCESSFUL;\n\n return {\n temporaryDocumentId: item.documentId,\n item\n };\n });\n\n this._findParentFolderAndAddNewFiles(parentFolderId, newFiles);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const ids = newFiles\n .filter((file) => {\n const includes =\n file.item.documentId && this._cancelUploadNewFileIds.includes(file.item.documentId);\n if (includes) {\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter(\n (id) => id !== file.item.documentId\n );\n return true;\n }\n\n return false;\n })\n .map((file) => file.item.documentId);\n\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, ids, updatedItems);\n\n return updatedItems;\n })\n );\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Download button is pressed. */\n download(data: DownloadEvent): Observable<void> {\n console.log('download', data);\n\n return of(undefined);\n }\n\n /**\n * The method is triggered when Move to button is pressed and folder to move is selected in the dialog modal.\n * Should return full dataSource\n * */\n moveTo(data: MoveToEvent): Observable<UploadCollectionItem[]> {\n console.log('moveTo', data);\n\n return of([]);\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Delete button is pressed. */\n delete({ parentFolderId, items }: DeleteEvent): Observable<UploadCollectionItem[]> {\n console.log('delete', parentFolderId, items);\n\n const ids = items.map((item) => item.documentId);\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, ids);\n\n return of(this.items);\n }\n\n /** The method is triggered when the file name is changed. */\n fileRenamed({ parentFolderId, item, fileName }: FileRenamedEvent): Observable<UploadCollectionItem[]> {\n console.log('fileRenamed', parentFolderId, item, fileName);\n let updatedItem = {\n ...item,\n name: fileName,\n status: UploadCollectionItemStatus.SUCCESSFUL\n };\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const itemId = item.documentId;\n const includes = itemId && this._cancelUploadNewFileIds.includes(itemId);\n if (includes) {\n updatedItem = { ...updatedItem };\n updatedItem.name = item.name;\n updatedItem.status = UploadCollectionItemStatus.SUCCESSFUL;\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, updatedItems);\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter((id) => id !== itemId);\n }\n\n return updatedItems;\n })\n );\n }\n\n /** The method is triggered when the new folder added. */\n newFolder({ parentFolderId, folder }: NewFolderEvent): Observable<UploadCollectionItem[]> {\n console.log('newFolder', folder, parentFolderId);\n\n folder.status = UploadCollectionItemStatus.SUCCESSFUL;\n\n this._findParentFolderAndAddNewFiles(parentFolderId, [\n {\n temporaryDocumentId: folder.documentId!,\n item: folder\n }\n ]);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const folderId = folder.documentId;\n const includes = !!folderId && this._cancelUploadNewFileIds.includes(folderId);\n if (includes) {\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter((id) => id !== folderId);\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, [folderId], updatedItems);\n }\n\n return updatedItems;\n })\n );\n }\n\n /** The method is triggered when Update Version button is pressed and valid file are selected in the file uploader dialog. */\n updateVersion({ parentFolderId, item, newItem }: UpdateVersionEvent): Observable<UploadCollectionItem[]> {\n console.log('updateVersion', parentFolderId, item);\n\n let updatedItem: UploadCollectionFile = {\n ...item,\n status: UploadCollectionItemStatus.SUCCESSFUL,\n uploadedOn: new Date(),\n uploadedBy: {\n id: Date.now(),\n name: 'You'\n },\n version: +item.version,\n name: newItem.name,\n fileSize: newItem.size\n };\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const itemId = updatedItem.documentId;\n const includes = this._cancelUploadNewFileIds.includes(itemId);\n if (includes) {\n updatedItem = { ...item };\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, updatedItems);\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter((id) => id !== itemId);\n }\n\n return updatedItems;\n })\n );\n }\n\n /** @hidden */\n runAfterFail({ parentFolderId, items }: UploadEvent): Observable<UploadCollectionItem[]> {\n console.log('runAfterFail', parentFolderId, items);\n const item = items[0];\n\n this._findParentFolderAndAddNewFiles(parentFolderId, [\n {\n temporaryDocumentId: item.documentId,\n item: {\n ...item,\n status: UploadCollectionItemStatus.SUCCESSFUL\n }\n }\n ]);\n\n return of(this.items);\n }\n\n /** The method is triggered when Cancel button is pressed */\n cancelUploadNewFile({ parentFolderId, item }: CancelUploadNewFileEvent): Observable<UploadCollectionItem[]> {\n console.log('cancelUploadNewFile', parentFolderId, item);\n const id = item.documentId;\n this._cancelUploadNewFileIds.push(id);\n\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, [id]);\n\n return of([]);\n }\n\n /** @hidden */\n private _findParentFolderAndUpdateItem(\n parentFolderId: string | number | undefined,\n updatedItem: UploadCollectionItem,\n items = this.items\n ): void {\n if (!parentFolderId) {\n const index = items.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n items[index] = updatedItem;\n }\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n const index = currentItem.files.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n currentItem.files[i] = updatedItem;\n\n break;\n }\n } else {\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _findParentFolderAndAddNewFiles(\n parentFolderId: string | number | undefined,\n uploadedFiles: UploadCollectionNewItem[],\n items = this.items\n ): void {\n if (uploadedFiles.length === 0) {\n return;\n }\n\n if (!parentFolderId) {\n const uploadedFile = uploadedFiles.pop();\n const index = items.findIndex((item) => item.documentId === uploadedFile?.temporaryDocumentId);\n if (index !== -1) {\n items[index] = uploadedFile!.item;\n this._findParentFolderAndAddNewFiles(parentFolderId, uploadedFiles);\n }\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n const hash = uploadedFiles.reduce((res, file) => {\n res[file.temporaryDocumentId] = file.item;\n return res;\n }, {} as Record<string, UploadCollectionItem>);\n\n currentItem.files = currentItem.files.map((item) => hash[item.documentId as any] || item);\n\n break;\n } else {\n this._findParentFolderAndAddNewFiles(parentFolderId, uploadedFiles, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _findParentFolderAndRemoveItemsByIds(\n parentFolderId: string | number | undefined,\n documentsIds: (number | string | undefined)[],\n items = this.items\n ): void {\n if (documentsIds.length === 0) {\n return;\n }\n\n if (!parentFolderId) {\n const documentId = documentsIds.pop();\n const index = items.findIndex((item) => item.documentId === documentId);\n if (index !== -1) {\n items.splice(index, 1);\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, documentsIds);\n }\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n currentItem.files = currentItem.files.filter(\n (item) => !documentsIds.some((documentId) => documentId === item.documentId)\n );\n\n break;\n } else {\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, documentsIds, currentItem.files);\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.FilesValidatorService","i2","i3","i5","i9","i4","i6","i7","i8","i2.FilesValidatorService","i10","i11","i16","i21.UploadCollectionDragnDropDirective","i22"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-platform-upload-collection.mjs","sources":["../../../../libs/platform/src/lib/upload-collection/services/files-validator.service.ts","../../../../libs/platform/src/lib/upload-collection/directives/upload-collection-dragndrop.directive.ts","../../../../libs/platform/src/lib/upload-collection/dialogs/new-folder/new-folder.component.ts","../../../../libs/platform/src/lib/upload-collection/dialogs/new-folder/new-folder.component.html","../../../../libs/platform/src/lib/upload-collection/dialogs/move-to/move-to.component.ts","../../../../libs/platform/src/lib/upload-collection/dialogs/move-to/move-to.component.html","../../../../libs/platform/src/lib/upload-collection/models/upload-collection.models.ts","../../../../libs/platform/src/lib/upload-collection/helpers/generate-message-stripe-data.ts","../../../../libs/platform/src/lib/upload-collection/upload-collection/upload-collection.component.ts","../../../../libs/platform/src/lib/upload-collection/upload-collection/upload-collection.component.html","../../../../libs/platform/src/lib/upload-collection/upload-collection.module.ts","../../../../libs/platform/src/lib/upload-collection/domain/upload-collection-data-provider.ts","../../../../libs/platform/src/lib/upload-collection/domain/upload-collection-data-source.ts","../../../../libs/platform/src/lib/upload-collection/upload-collection/upload-collection-data-provider-test.ts","../../../../libs/platform/src/lib/upload-collection/fundamental-ngx-platform-upload-collection.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { parserFileSize } from '@fundamental-ngx/cdk/utils';\nimport { FilesValidatorOutput, FilesValidatorParams } from '../models/upload-collection.models';\n\n@Injectable({ providedIn: 'root' })\nexport class FilesValidatorService {\n /**\n * Method that validates files passed. It is based on\n * @param files File[]\n * @param params ValidateFilesParams\n */\n validation(\n files: File[],\n { maxFileNameLength, fileTypes, maxFileSize, mimeTypes }: FilesValidatorParams\n ): FilesValidatorOutput {\n return files.reduce((res, file) => {\n if (\n (fileTypes && fileTypes.length > 0 && this._checkByFileExtension(file, fileTypes)) ||\n (mimeTypes && mimeTypes.length > 0 && this._checkByMimeType(file, mimeTypes))\n ) {\n if (!res.typeMismatch) {\n res.typeMismatch = [];\n }\n\n res.typeMismatch.push(file);\n\n return res;\n }\n\n if (maxFileSize) {\n const maxSize = parserFileSize(maxFileSize);\n if (file.size > maxSize) {\n if (!res.fileSizeExceed) {\n res.fileSizeExceed = [];\n }\n\n res.fileSizeExceed.push(file);\n\n return res;\n }\n }\n\n if (typeof maxFileNameLength === 'number' && this._checkByFileNameLength(file, maxFileNameLength)) {\n if (!res.filenameLengthExceed) {\n res.filenameLengthExceed = [];\n }\n\n res.filenameLengthExceed.push(file);\n\n return res;\n }\n\n if (!res.validFiles) {\n res.validFiles = [];\n }\n\n res.validFiles.push(file);\n\n return res;\n }, {} as FilesValidatorOutput);\n }\n\n /** @hidden */\n private _checkByFileExtension(file: File, fileTypes: string[]): boolean {\n const fileNameSplit = file.name.split('.');\n const extension = fileNameSplit[fileNameSplit.length - 1].toLocaleLowerCase();\n\n return !fileTypes.some((type) => type.replace('.', '').toLowerCase() === extension);\n }\n\n /** @hidden */\n private _checkByMimeType(file: File, mimeTypes: string[]): boolean {\n return !mimeTypes.some((type) => type.toLowerCase() === file.type);\n }\n\n /** @hidden */\n private _checkByFileNameLength(file: File, maxFileNameLength: number): boolean {\n const fileNameSplit = file.name.split('.');\n fileNameSplit.pop();\n const fileName = fileNameSplit.join('.');\n\n return fileName.length > maxFileNameLength;\n }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\n\nimport { FilesValidatorService } from '../services/files-validator.service';\nimport { FilesValidatorOutput } from '../models/upload-collection.models';\n\n/**\n * Directive that handles the drag and drop feature of the file input.\n */\n@Directive({\n selector: '[fdpUploadCollectionDragnDrop]'\n})\nexport class UploadCollectionDragnDropDirective {\n /** Whether multiple files can be dropped at once. */\n @Input()\n multiple = true;\n\n /**\n * Defines the allowed file types for the upload.\n * The chosen files will be checked against an array of file types.\n * If at least one file does not fit the file type requirements,\n * the upload is prevented. Example: [\"jpg\", \"png\", \"bmp\"].\n */\n @Input()\n fileTypes: string[] = [];\n\n /**\n * Specifies a file size limit in megabytes that prevents the upload\n * if at least one file exceeds the limit.\n */\n @Input()\n maxFileSize?: string;\n\n /**\n * Specifies the maximum length of a file name.\n * If the maximum file name length is exceeded,\n * the corresponding event 'filenameLengthExceed' is triggered.\n */\n @Input()\n maxFilenameLength?: number;\n\n /**\n * Defines the allowed MIME types of files to be uploaded.\n * The chosen files will be checked against an array of MIME types.\n * If at least one file does not fit the MIME type requirements, the upload is prevented.\n * Example: mimeTypes [\"image/png\", \"image/jpeg\"].\n */\n @Input()\n mimeTypes: string[] = [];\n\n /** Whether selecting of new files is disabled. */\n @Input()\n disabled = false;\n\n /** Whether drag and drop is enabled. Disables this directive. */\n @Input()\n dragndrop = true;\n\n /** Event emitted when files are dropped. Passes back an array of files. */\n @Output()\n readonly fileChanged = new EventEmitter<FilesValidatorOutput>();\n\n /** Event emitted when the dragged file enters the dropzone or exits from it. */\n @Output()\n readonly cancel = new EventEmitter<void>();\n\n /** Event emitted when the dragged file enters the dropzone. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDropzone = new EventEmitter<boolean>();\n\n /** @hidden */\n private dropzonePreviousState: boolean | null = null;\n\n /** @hidden */\n private elementSelector: string;\n\n /** @hidden */\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _filesValidatorService: FilesValidatorService\n ) {\n const element = this._elementRef.nativeElement as HTMLElement;\n this.elementSelector = element.id ? `#${element.id}` : '';\n this.elementSelector += element.className ? `.${element.className.split(' ').join('.')}` : '';\n if (!this.elementSelector) {\n this.elementSelector = `${element.localName}[fdpUploadCollectionDragnDrop]`;\n }\n }\n\n /** @hidden */\n @HostListener('window:dragover', ['$event'])\n onWindowDragover(event: DragEvent): void {\n if (!this.dragndrop || this.disabled) {\n return;\n }\n\n this._muteEvent(event);\n\n const isDragDropArea = !!(event.target instanceof HTMLElement && event.target.closest(this.elementSelector));\n if (this.dropzonePreviousState !== isDragDropArea) {\n this.dropzonePreviousState = isDragDropArea;\n this.onDropzone.emit(isDragDropArea);\n }\n }\n\n /** @hidden */\n @HostListener('window:dragleave', ['$event'])\n onDragLeave(event: DragEvent): void {\n if (!this.dragndrop || this.disabled) {\n return;\n }\n\n const leavePositions = [event.screenX, event.screenY, event.clientX, event.clientY, event.pageX, event.pageY];\n\n if (!leavePositions.some((item) => item > 0)) {\n this._muteEvent(event);\n this.dropzonePreviousState = null;\n this.cancel.emit();\n }\n }\n\n /** @hidden */\n @HostListener('window:drop', ['$event'])\n onDrop(event: DragEvent): void {\n if (!this.dragndrop || this.disabled) {\n return;\n }\n\n this.dropzonePreviousState = null;\n this.cancel.emit();\n\n const isDragDropArea = !!(event.target instanceof HTMLElement && event.target.closest(this.elementSelector));\n if (!isDragDropArea) {\n return;\n }\n\n this._muteEvent(event);\n const rawFiles = event.dataTransfer?.files ?? [];\n const files: File[] = Array.from(rawFiles);\n\n const output = this._filesValidatorService.validation(files, {\n maxFileSize: this.maxFileSize,\n maxFileNameLength: this.maxFilenameLength,\n fileTypes: this.fileTypes,\n mimeTypes: this.mimeTypes\n });\n\n this.fileChanged.emit(output);\n }\n\n /** @hidden */\n private _muteEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { Component, ViewChild, AfterViewInit } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { UploadCollectionFolder } from '../../models/upload-collection.models';\n\n@Component({\n templateUrl: './new-folder.component.html',\n styles: [\n `\n .fd-title--bold {\n font-weight: bold;\n }\n `\n ]\n})\nexport class NewFolderComponent implements AfterViewInit {\n /**\n * @hidden\n * The current folder in what need to create a new one\n */\n readonly _currentFolder?: UploadCollectionFolder = this.dialogRef.data.currentFolder;\n\n /** @hidden */\n readonly _maxFilenameLength = this.dialogRef.data.maxFilenameLength;\n\n /** @hidden */\n _newFolderName = 'New Folder';\n\n /** @hidden */\n @ViewChild(FormControlComponent)\n private readonly formControl: FormControlComponent;\n\n /** @hidden */\n constructor(public readonly dialogRef: DialogRef) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n const el = this.formControl.elementRef.nativeElement as HTMLInputElement;\n if (el) {\n el.focus();\n this._setSelectionRange(el, 0, this._newFolderName.length);\n }\n }\n\n /** @hidden */\n private _setSelectionRange(el: HTMLInputElement, selectionStart: number, selectionEnd: number): void {\n const direction = el.selectionDirection;\n\n el.setSelectionRange(selectionStart, selectionEnd, direction || undefined);\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <h1 class=\"fd-title--bold\" fd-dialog-title id=\"fdp-upload-collection-new-folder-title\" fd-title>\n {{ 'platformUploadCollection.newFolderTitle' | fdTranslate }}\n </h1>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <div fd-form-item>\n <label fd-form-label for=\"fdp-upload-collection-new-folder-input\">\n {{\n (_currentFolder\n ? 'platformUploadCollection.newFolderAtFolderInputLabel'\n : 'platformUploadCollection.newFolderAtRootInputLabel'\n ) | fdTranslate : { folderName: _currentFolder?.name || '' }\n }}:\n </label>\n <input\n #formControl\n fd-form-control\n fdkInitialFocus\n id=\"fdp-upload-collection-new-folder-input\"\n type=\"text\"\n [(ngModel)]=\"_newFolderName\"\n [placeholder]=\"'platformUploadCollection.newFolderInputPlaceholder' | fdTranslate\"\n />\n <span\n *ngIf=\"_newFolderName.length > _maxFilenameLength\"\n fd-object-status\n status=\"negative\"\n [label]=\"'platformUploadCollection.newFolderInputErrorLabel' | fdTranslate\"\n [attr.title]=\"'platformUploadCollection.newFolderInputErrorLabel' | fdTranslate\"\n [attr.aria-label]=\"'platformUploadCollection.newFolderInputErrorLabel' | fdTranslate\"\n ></span>\n </div>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformUploadCollection.newFolderDialogCreateBtnLabel' | fdTranslate\"\n [disabled]=\"_newFolderName.length > _maxFilenameLength\"\n (click)=\"dialogRef.close(_newFolderName)\"\n >\n </fd-button-bar>\n <fd-button-bar\n [label]=\"'platformUploadCollection.newFolderDialogCancelBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.dismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { take } from 'rxjs/operators';\n\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\nimport { isObject } from '@fundamental-ngx/platform/shared';\n\nimport { UploadCollectionFolder, UploadCollectionItem } from '../../models/upload-collection.models';\nimport { NewFolderComponent } from '../new-folder/new-folder.component';\n\nexport interface MoveToComponentDialogData {\n items: UploadCollectionItem[];\n currentFolder?: UploadCollectionFolder;\n movableFolders?: UploadCollectionFolder[];\n maxFilenameLength: number;\n}\n\n@Component({\n templateUrl: './move-to.component.html',\n styles: [\n `\n .fd-list__item--title-background {\n background-color: var(--sapList_HeaderBackground);\n }\n\n .fd-dialog__body--no-horizontal-padding {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .fd-title--bold {\n font-weight: bold;\n }\n `\n ]\n})\nexport class MoveToComponent implements OnInit {\n /**\n * List of upload collection items\n */\n readonly items: UploadCollectionItem[] = this.dialogRef.data.items;\n /**\n * The current folder in what need to create a new one\n */\n originalFolder?: UploadCollectionFolder = this.dialogRef.data.currentFolder;\n\n /** @hidden */\n readonly movableFolders?: UploadCollectionFolder[] = this.dialogRef.data.movableFolders;\n\n /** @hidden */\n readonly _maxFilenameLength = this.dialogRef.data.maxFilenameLength;\n\n /** @hidden */\n _currentFolder?: UploadCollectionFolder = this.originalFolder && { ...this.originalFolder };\n /** @hidden */\n selectedFolder: UploadCollectionFolder | null;\n\n /** @hidden */\n _foldersList: UploadCollectionFolder[] = [];\n\n /** @hidden */\n constructor(\n public readonly dialogRef: DialogRef<MoveToComponentDialogData>,\n private readonly _dialogService: DialogService,\n private readonly _cd: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._init(this._currentFolder ? this._currentFolder.files : this.items);\n }\n\n /** @hidden */\n _goToParentFolder(): void {\n this.selectedFolder = null;\n this._currentFolder = this._getParentFolderByCurrentFolderId(this._currentFolder?.documentId);\n this._init(this._currentFolder ? this._currentFolder.files : this.items);\n\n this._cd.detectChanges();\n }\n\n /** @hidden */\n _close(): void {\n this.dialogRef.dismiss();\n }\n\n /** @hidden */\n _confirm(): void {\n this.dialogRef.close({\n selectedFolder: this.selectedFolder || this._currentFolder\n });\n }\n\n /** @hidden */\n _openFolder(folder: UploadCollectionFolder): void {\n this.selectedFolder = null;\n this._currentFolder = folder;\n this._init(folder.files);\n\n this._cd.detectChanges();\n }\n\n /** @hidden */\n _selectFolder(folder: UploadCollectionFolder): void {\n this.selectedFolder = folder;\n }\n\n /** @hidden */\n _hasFolders(items: UploadCollectionItem[]): boolean {\n return items.some((item) => item.type === 'folder');\n }\n\n /** @hidden */\n _newFolder(): void {\n const dialogRef = this._dialogService.open(NewFolderComponent, {\n responsivePadding: true,\n backdropClickCloseable: false,\n height: '350px',\n backdropClass: 'fdp-upload-collection-dialig-no-bg',\n data: {\n currentFolder: this._currentFolder,\n maxFilenameLength: this._maxFilenameLength\n }\n } as DialogConfig);\n\n dialogRef.afterClosed.pipe(take(1)).subscribe((folderName) => {\n this.dialogRef.close({\n parentFolderId: this._currentFolder?.documentId,\n selectedFolder: null,\n folderName\n });\n });\n }\n\n /** @hidden */\n private _init(items: UploadCollectionItem[]): void {\n this._foldersList = items.filter(\n (item) =>\n item.type === 'folder' && !this.movableFolders?.some((folder) => folder.documentId === item.documentId)\n ) as UploadCollectionFolder[];\n }\n\n /** @hidden */\n private _getParentFolderByCurrentFolderId(documentId?: string | number): UploadCollectionFolder | undefined {\n let foundObj: UploadCollectionFolder | undefined;\n\n if (documentId) {\n JSON.stringify(this.items, (_, nestedValue) => {\n if (!isObject(nestedValue) || nestedValue.type === 'file' || !nestedValue.files) {\n return nestedValue;\n }\n\n if (nestedValue.files.some((item) => item.documentId === documentId)) {\n foundObj = nestedValue;\n }\n\n return nestedValue;\n });\n }\n\n return foundObj;\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 class=\"fd-title--bold\" *ngIf=\"!_currentFolder\" fd-title>\n {{ 'platformUploadCollection.moveToTitle' | fdTranslate }}\n </h1>\n <ng-container *ngIf=\"_currentFolder\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n (click)=\"_goToParentFolder()\"\n ></button>\n <h1 fd-title>\n <span>{{ 'platformUploadCollection.moveToTitleFolder' | fdTranslate }}</span>\n {{ _currentFolder.name }}\n </h1>\n </ng-container>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformUploadCollection.moveToNewFolderBtnLabel' | fdTranslate\"\n (click)=\"_newFolder()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body class=\"fd-dialog__body--no-horizontal-padding\">\n <ul fd-list>\n <li *ngIf=\"!_currentFolder\" fd-list-item class=\"fd-list__item--title-background\">\n <span fd-list-title>{{ 'platformUploadCollection.moveToAllFilesSubHeaderLabel' | fdTranslate }}</span>\n </li>\n <li\n fd-list-item\n *ngFor=\"let folder of _foldersList\"\n [selected]=\"selectedFolder?.documentId === folder.documentId\"\n >\n <a fd-list-link (click)=\"_hasFolders(folder.files) ? _openFolder(folder) : _selectFolder(folder)\">\n <fd-icon class=\"fdp-upload-collection__fd-icon\" glyph=\"folder-blank\"></fd-icon>\n <span fd-list-title>{{ folder.name }}</span>\n <i *ngIf=\"_hasFolders(folder.files)\" fd-list-icon glyph=\"slim-arrow-right\"></i>\n </a>\n </li>\n </ul>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n type=\"submit\"\n [disabled]=\"\n !(\n (selectedFolder && originalFolder?.documentId !== selectedFolder.documentId) ||\n (!selectedFolder && originalFolder?.documentId !== _currentFolder?.documentId)\n )\n \"\n (click)=\"_confirm()\"\n >\n {{ 'platformUploadCollection.moveToConfirmBtn' | fdTranslate }}\n </fd-button-bar>\n <fd-button-bar (click)=\"_close()\">\n {{ 'platformUploadCollection.moveToCloseBtn' | fdTranslate }}\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { EventEmitter } from '@angular/core';\nimport { TableRowSelectionChangeEvent } from '@fundamental-ngx/platform/table-helpers';\n\nexport enum UploadCollectionItemStatus {\n LOADING = 'loading',\n SUCCESSFUL = 'successful',\n UNSUCCESSFUL = 'unsuccessful'\n}\n\nexport interface Author {\n id: number | string;\n name: string;\n}\n\nexport interface UploadCollectionFolder {\n documentId?: number | string;\n type: 'folder';\n name: string;\n uploadedBy: Author;\n uploadedOn: Date;\n fileSize?: number;\n files: UploadCollectionItem[];\n status?: UploadCollectionItemStatus;\n sameFilenameState?: FormStates;\n}\n\nexport interface UploadCollectionFile {\n documentId: number | string;\n type: 'file';\n name: string;\n uploadedBy: Author;\n uploadedOn: Date;\n fileSize: number;\n version: number;\n url: string;\n status?: UploadCollectionItemStatus;\n file?: File;\n sameFilenameState?: FormStates;\n}\n\nexport interface ItemPerPage {\n label: number;\n default: boolean;\n}\n\nexport type UploadCollectionItem = UploadCollectionFile | UploadCollectionFolder;\n\nexport enum MessageStripType {\n WARNING = 'warning',\n SUCCESS = 'success',\n INFORMATION = 'information',\n ERROR = 'error'\n}\n\nexport interface Message {\n messageType: MessageType;\n messageStripType: MessageStripType;\n payload: EventPayload;\n count?: MessageItemsCount;\n}\n\nexport interface MessageItemsCount {\n file: number;\n folder: number;\n}\n\nexport enum MessageType {\n CREATE,\n REMOVE,\n MOVE,\n UPDATE_VERSION,\n FILE_RENAME,\n TYPE_MISMATCH,\n FILE_NAME_LENGTH,\n FILE_SIZE\n}\n\nexport interface MessageOptions {\n type: MessageStripType;\n payload: EventPayload;\n}\n\nexport interface BreadcrumbList {\n folderId: number | string;\n folderName: string;\n clikable: boolean;\n}\n\nexport interface GroupByType {\n files: UploadCollectionFile[];\n folders: UploadCollectionFolder[];\n}\n\nexport interface NewFolderEvent {\n parentFolderId?: string | number;\n folder: UploadCollectionFolder;\n}\n\nexport interface UploadCollectionNewItem {\n temporaryDocumentId: string | number;\n item: UploadCollectionItem;\n}\n\nexport interface UploadEvent {\n parentFolderId?: string | number;\n items: UploadCollectionFile[];\n}\n\nexport interface CancelUploadNewFileEvent {\n parentFolderId?: string | number;\n item: UploadCollectionFile;\n}\n\n// UpdateVersionEvent\nexport interface UpdateVersionEvent {\n parentFolderId?: string | number;\n item: UploadCollectionFile;\n newItem: File;\n}\n\nexport interface DeleteEvent {\n parentFolderId?: string | number;\n items: UploadCollectionItem[];\n}\n\nexport interface FileRenamedEvent {\n parentFolderId?: string | number;\n fileName: string;\n item: UploadCollectionItem;\n}\n\nexport interface DownloadEvent {\n items: UploadCollectionFile[];\n}\n\nexport interface MoveToEvent {\n from?: UploadCollectionFolder;\n to?: UploadCollectionFolder;\n items: UploadCollectionItem[];\n newFolder?: {\n parentFolderId: string | number | null;\n folderName: string;\n };\n}\n\nexport interface FilenameLengthExceedEventPayload {\n items: (File | UploadCollectionItem)[];\n}\n\nexport class FilenameLengthExceedEvent<T extends UploadCollectionCmp = UploadCollectionCmp> {\n /**\n * Filename length exceed event payload\n * @param source Upload Collection component\n * @param payload Files\n */\n constructor(public source: T, public payload: FilenameLengthExceedEventPayload) {}\n}\n\nexport interface TypeMismatchEventPayload {\n items: File[];\n}\n\nexport class TypeMismatchEvent<T extends UploadCollectionCmp = UploadCollectionCmp> {\n /**\n * Type mismatch event\n * @param source Upload Collection component\n * @param payload Files\n */\n constructor(public source: T, public payload: TypeMismatchEventPayload) {}\n}\n\nexport interface FileSizeExceedEventPayload {\n items: File[];\n}\n\nexport class FileSizeExceedEvent<T extends UploadCollectionCmp = UploadCollectionCmp> {\n /**\n * Filesize exceed event\n * @param source Upload Collection component\n * @param payload Files\n */\n constructor(public source: T, public payload: FileSizeExceedEventPayload) {}\n}\n\nexport type EventPayload =\n | NewFolderEvent\n | UploadEvent\n | UpdateVersionEvent\n | DeleteEvent\n | FileRenamedEvent\n | DownloadEvent\n | MoveToEvent\n | FileSizeExceedEventPayload\n | TypeMismatchEventPayload\n | FilenameLengthExceedEventPayload;\n\nexport interface FilesValidatorOutput {\n validFiles?: File[];\n typeMismatch?: File[];\n filenameLengthExceed?: File[];\n fileSizeExceed?: File[];\n}\n\nexport interface FilesValidatorParams {\n maxFileSize?: string;\n maxFileNameLength?: number;\n fileTypes?: string[];\n mimeTypes?: string[];\n}\n\nexport interface UploadCollectionCmp<T = any> {\n id: string;\n itemsPerPage: number | ItemPerPage[];\n dataSource: T;\n fileTypes: string[];\n maxFileSize?: string;\n maxFilenameLength?: number;\n mimeTypes: string[];\n noDataText: string;\n noDataDescription: string;\n disabled: boolean;\n readonly: boolean;\n hierarchy: boolean;\n enablePagination: boolean;\n terminationEnabled: boolean;\n multiple: boolean;\n showSearch: boolean;\n sameFileNameAllowed: boolean;\n typeMismatch: EventEmitter<TypeMismatchEvent>;\n filenameLengthExceed: EventEmitter<FilenameLengthExceedEvent>;\n fileSizeExceed: EventEmitter<FileSizeExceedEvent>;\n showMessage(type: MessageType, options: MessageOptions): void;\n _fileNameChange(e: FocusEvent, currentItem: UploadCollectionItem): void;\n _checkName(e: Event, currentItem: UploadCollectionItem): void;\n _openUploadFiles(): void;\n _openUpdateFileVersion(): void;\n _selectHandler(files: File[]): void;\n _handleDrop(output: FilesValidatorOutput): void;\n _openNewFolderDialog(): void;\n _moveToClicked(multiple?: boolean): void;\n _downloadClicked(multiple?: boolean): void;\n _remove(multiple?: boolean): void;\n _runUploadNewFileAfterFail(item: UploadCollectionFile): void;\n _cancelUploadNewFile(file: UploadCollectionFile): void;\n _messageStripDismiss(): void;\n _openFolder(item: UploadCollectionItem): void;\n _actionButton(item: UploadCollectionItem): void;\n _onDropzone(event: boolean): void;\n _dragDropCancel(): void;\n _breadcrumbGoTo(event: MouseEvent, index?: number): void;\n _pageChanged(pageNumber: number): void;\n _itemsPerPageChange(value: number): void;\n _searchInputChanged(): void;\n _onRowSelectionChange(data: TableRowSelectionChangeEvent<UploadCollectionItem>): void;\n _getItemName(item: UploadCollectionItem): string;\n _getItemExtension(item: UploadCollectionItem): string;\n _getIconByType(file: UploadCollectionFile): string;\n _showIfSelectedOnlyFiles(): boolean;\n _isSelectedItem(item: UploadCollectionItem): boolean;\n _getList(): UploadCollectionItem[];\n _trackByDocumentId(index: number, item: UploadCollectionItem): UploadCollectionItem['documentId'];\n _getAllowedTypes(): string;\n}\n","import {\n MessageOptions,\n MessageType,\n Message,\n UploadCollectionItem,\n MessageItemsCount,\n DeleteEvent,\n MoveToEvent\n} from '../models/upload-collection.models';\n\nfunction _groupByTypeAndCount(items: UploadCollectionItem[]): MessageItemsCount {\n return items.reduce(\n (res, item) => {\n res[item.type] += 1;\n\n return res;\n },\n { file: 0, folder: 0 } as MessageItemsCount\n );\n}\n\n/** @hidden */\nexport function generateMessageStripeData(type: MessageType, options: MessageOptions): Message {\n const newMessage: Message = {\n messageType: type,\n messageStripType: options.type,\n payload: options.payload\n };\n\n const items = (<DeleteEvent | MoveToEvent>options.payload).items;\n\n if (items && items.length > 0) {\n newMessage.count = _groupByTypeAndCount(items);\n }\n\n return newMessage;\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { take, tap } from 'rxjs/operators';\n\nimport { uuidv4 } from '@fundamental-ngx/cdk/utils';\nimport { DialogConfig, DialogService } from '@fundamental-ngx/core/dialog';\nimport { ColumnAlign, SelectionMode, TableRowSelectionChangeEvent } from '@fundamental-ngx/platform/table';\nimport { isDataSource } from '@fundamental-ngx/platform/shared';\nimport { NewFolderComponent } from '../dialogs/new-folder/new-folder.component';\nimport { MoveToComponent, MoveToComponentDialogData } from '../dialogs/move-to/move-to.component';\nimport { FilesValidatorService } from '../services/files-validator.service';\nimport {\n BreadcrumbList,\n ItemPerPage,\n Message,\n MessageOptions,\n MessageStripType,\n MessageType,\n UploadCollectionFile,\n UploadCollectionFolder,\n UploadCollectionItem,\n UploadCollectionItemStatus,\n FilenameLengthExceedEvent,\n FileSizeExceedEvent,\n MoveToEvent,\n TypeMismatchEvent,\n UpdateVersionEvent,\n FilesValidatorOutput,\n UploadCollectionCmp\n} from '../models/upload-collection.models';\nimport { generateMessageStripeData } from '../helpers/generate-message-stripe-data';\nimport { UploadCollectionDataSource } from '../domain/upload-collection-data-source';\n\nexport type FdpUploadCollectionDataSource = UploadCollectionDataSource;\n\nlet randomId = 0;\n\n/**\n * @deprecated\n * UploadCollection component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-upload-collection',\n templateUrl: './upload-collection.component.html',\n styleUrls: ['./upload-collection.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class UploadCollectionComponent\n implements OnChanges, OnDestroy, UploadCollectionCmp<FdpUploadCollectionDataSource>\n{\n /** ID of the upload collection element. If none is provided, one will be generated. */\n @Input()\n id = `fdp-upload-collection-id-${randomId++}`;\n\n /** Defines the number of items on the page */\n @Input()\n set itemsPerPage(value: number | ItemPerPage[]) {\n if (typeof value === 'number') {\n this._itemsPerPage = value;\n this._match();\n\n return;\n }\n\n const defaultValue = value.find((item) => item.default);\n this._itemsPerPageOptions = value;\n\n if (defaultValue) {\n this._itemsPerPage = defaultValue.label;\n this._match();\n\n return;\n }\n\n this._itemsPerPage = value[Math.round(value.length / 2)].label;\n\n this._match();\n }\n get itemsPerPage(): number | ItemPerPage[] {\n return this._itemsPerPage;\n }\n\n /** List of items */\n @Input()\n set dataSource(value: FdpUploadCollectionDataSource) {\n if (value) {\n this._initializeDS(value);\n }\n }\n get dataSource(): FdpUploadCollectionDataSource {\n return this._dataSource;\n }\n\n /**\n * Defines the allowed file types for the upload.\n * The chosen files will be checked against an array of file types.\n * If at least one file does not fit the file type requirements,\n * the upload is prevented. Example: [\"jpg\", \"png\", \"bmp\"].\n */\n @Input()\n fileTypes: string[] = [];\n\n /**\n * Specifies a file size limit in megabytes that prevents the upload\n * if at least one file exceeds the limit.\n */\n @Input()\n maxFileSize?: string;\n\n /**\n * Specifies the maximum length of a file name.\n * If the maximum file name length is exceeded,\n * the corresponding event 'filenameLengthExceed' is triggered.\n */\n @Input()\n maxFilenameLength?: number;\n\n /**\n * Defines the allowed MIME types of files to be uploaded.\n * The chosen files will be checked against an array of MIME types.\n * If at least one file does not fit the MIME type requirements, the upload is prevented.\n * Example: mimeTypes [\"image/png\", \"image/jpeg\"].\n */\n @Input()\n mimeTypes: string[] = [];\n\n /**\n * @deprecated use i18n capabilities instead\n * Allows to set own text for the 'No data' text label.\n */\n @Input()\n noDataText: string;\n\n /**\n * @deprecated use i18n capabilities instead\n * Allows to set own text for the 'No data' description label.\n */\n @Input()\n noDataDescription: string;\n\n /** All action buttons will be disabled */\n @Input()\n disabled = false;\n\n /** All action buttons will be invisible */\n @Input()\n readonly = false;\n\n /** Allows to support hierarchy */\n @Input()\n hierarchy = true;\n\n /** Allows to show/hide pagination */\n @Input()\n enablePagination = true;\n\n /**\n * If true, the button that is used to terminate the instant file upload gets visible.\n * The button normally appears when a file is being uploaded.\n */\n @Input()\n terminationEnabled = true;\n\n /** Gives to select multiple files from the same folder and then upload them. */\n @Input()\n multiple = true;\n\n /** Allows to show/hide search */\n @Input()\n showSearch = true;\n\n /**\n * Allows to use the same name for a file when editing the file name.\n * 'Same name' refers to an already existing file name in the list.\n * */\n @Input()\n sameFileNameAllowed = false;\n\n /**\n * The event is triggered when the file type or the MIME type don't match the permitted types\n * (only if the fileTypes property or the mimeTypes property are provided by the application).\n */\n @Output()\n typeMismatch = new EventEmitter<TypeMismatchEvent>();\n\n /**\n * The event is triggered when the name of a chosen file is longer than the value specified\n * with the maxFilenameLength property (only if provided by the application).\n */\n @Output()\n filenameLengthExceed = new EventEmitter<FilenameLengthExceedEvent>();\n\n /**\n * The event is triggered when the file size of an uploaded file is exceeded\n * (only if the maxFileSize property was provided by the application).\n */\n @Output()\n fileSizeExceed = new EventEmitter<FileSizeExceedEvent>();\n\n /** @hidden */\n _uploadCollectionItemStatus = UploadCollectionItemStatus;\n\n /** @hidden */\n _breadcrumbList: BreadcrumbList[] = [];\n\n /** @hidden */\n _currentPage = 1;\n\n /** @hidden */\n _itemsPerPage = 10;\n\n /** @hidden */\n _itemsPerPageOptions: ItemPerPage[] = [];\n\n /** @hidden */\n _totalItems = 0;\n\n /** @hidden */\n _countShowedItems = 0;\n\n /** @hidden */\n _countNotShowedItems = 0;\n\n /** @hidden\n * List of currently displayed items\n */\n _visibleList$ = new BehaviorSubject<UploadCollectionItem[]>([]);\n\n /** @hidden */\n selectedItems: UploadCollectionItem[] = [];\n\n /** @hidden */\n _searchText = '';\n\n /** @hidden */\n _showDragDropArea = false;\n\n /** @hidden */\n _onDragDropArea = false;\n\n /** @hidden */\n _activeItem?: UploadCollectionItem;\n\n /** @hidden */\n _currentUpdateFileVersion?: UploadCollectionFile;\n\n /** @hidden */\n _message?: Message;\n\n /** @hidden */\n _messageType = MessageType;\n\n /** @hidden */\n _messageStripType = MessageStripType;\n\n /** @hidden */\n _columnAlign = ColumnAlign;\n\n /** @hidden */\n _selectionMode = SelectionMode;\n\n /** @hidden */\n private _dataSource: UploadCollectionDataSource;\n\n /** @hidden */\n private _contentDensityManuallySet = false;\n\n /** @hidden */\n @ViewChild('fileInput')\n private readonly _uploadFilesRef: ElementRef;\n\n /** @hidden */\n @ViewChild('updateVersionInput')\n private readonly _updateVersionRef: ElementRef;\n\n /** @hidden */\n private readonly _imageExtensions: string[] = [\n '.apng',\n '.bmp',\n '.gif',\n '.ico',\n '.cur',\n '.jpg',\n '.jpeg',\n '.jfif',\n '.pjpeg',\n '.pjp',\n '.png',\n '.svg',\n '.tif',\n '.tiff',\n '.webp',\n '.flif',\n '.cr2',\n '.jxr',\n '.psd',\n '.bpg',\n '.jp2',\n '.jpm',\n '.jpx',\n '.heic',\n '.dcm'\n ];\n\n /** @hidden */\n private _validatedFiles: FilesValidatorOutput;\n\n /** @hidden for data source handling */\n private _dsSubscription?: Subscription;\n\n /** @hidden */\n private readonly _onDestroy$ = new Subject<void>();\n\n /** @hidden */\n constructor(\n private readonly _dialogService: DialogService,\n private readonly _filesValidatorService: FilesValidatorService,\n private readonly _cdr: ChangeDetectorRef,\n private _injector: Injector\n ) {}\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.contentDensity) {\n this._contentDensityManuallySet = true;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n this._dsSubscription?.unsubscribe();\n this.dataSource.close();\n }\n\n /** Show meessage for types NEW FOLDER CREATE, REMOVE, MOVE TO, UPDATE_VERSION, FILE_RENAMED */\n showMessage(type: MessageType, options: MessageOptions): void {\n this._message = generateMessageStripeData(type, options);\n }\n\n /**\n * @hidden\n * Opens the file selector.\n */\n _fileNameChange(e: FocusEvent, currentItem: UploadCollectionItem): void {\n const input = e.target as HTMLInputElement;\n const itemName = input.value.trim();\n const newName = currentItem.type === 'file' ? `${itemName}.${currentItem.name.split('.').pop()}` : itemName;\n\n if (currentItem.name === newName) {\n return;\n }\n\n if (this.maxFilenameLength && itemName.length > this.maxFilenameLength) {\n const renamedItem = {\n ...currentItem,\n name: newName\n };\n const payload = {\n items: [renamedItem]\n };\n const filenameLengthEvent = new FilenameLengthExceedEvent(this, payload);\n\n this.showMessage(MessageType.FILE_NAME_LENGTH, { payload, type: MessageStripType.ERROR });\n\n this.filenameLengthExceed.emit(filenameLengthEvent);\n\n return;\n }\n\n if (currentItem.sameFilenameState) {\n return;\n }\n\n const data = {\n parentFolderId: this._getCurrentFolderId(),\n fileName: newName,\n item: { ...currentItem }\n };\n\n this.dataSource\n .fileRenamed(data)\n .pipe(\n tap(() => {\n this.selectedItems = [];\n\n this._match();\n })\n )\n .subscribe({\n next: () => {\n this.showMessage(MessageType.FILE_RENAME, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.FILE_RENAME, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n }\n\n /** @hidden */\n _checkName(e: Event, currentItem: UploadCollectionItem): void {\n const input = e.target as HTMLInputElement;\n const itemName = input.value.trim();\n const newName = currentItem.type === 'file' ? `${itemName}.${currentItem.name.split('.').pop()}` : itemName;\n const nameAlreadyExists = this._getList().some(\n (item) => currentItem.documentId !== item.documentId && item.name === newName\n );\n\n if (!this.sameFileNameAllowed && nameAlreadyExists) {\n currentItem.sameFilenameState = 'error';\n\n return;\n }\n\n delete currentItem.sameFilenameState;\n }\n\n /** @hidden\n * Opens the file selector.\n */\n _openUploadFiles(): void {\n const input = this._uploadFilesRef.nativeElement;\n if (input) {\n input.click();\n }\n }\n\n /** @hidden\n * Opens the update file version selector.\n */\n _openUpdateFileVersion(): void {\n if (this.disabled) {\n return;\n }\n\n const input = this._updateVersionRef.nativeElement;\n if (input) {\n this._currentUpdateFileVersion = this._activeItem as UploadCollectionFile;\n input.click();\n }\n }\n\n /** @hidden */\n _selectHandler(files: File[]): void {\n this._validateFiles(files);\n this._propagateFiles();\n }\n\n /** @hidden */\n _handleDrop(output: FilesValidatorOutput): void {\n this._validatedFiles = output;\n this._propagateFiles();\n }\n\n /** @hidden */\n _openNewFolderDialog(): void {\n const dialogRef = this._dialogService.open(NewFolderComponent, {\n responsivePadding: true,\n backdropClickCloseable: false,\n height: '320px',\n data: {\n currentFolder: this._getCurrentFolder(),\n maxFilenameLength: this.maxFilenameLength\n }\n } as DialogConfig);\n\n dialogRef.afterClosed.pipe(take(1)).subscribe((folderName) => {\n const folder = this._generateTemporaryNewFolder(folderName);\n const parentFolderId = this._getCurrentFolderId();\n const data = {\n parentFolderId,\n folder: { ...folder }\n };\n\n this._findParentFolderAndAddTemporaryFiles(parentFolderId, [folder]);\n\n this.dataSource\n .newFolder(data)\n .pipe(tap(() => this._match()))\n .subscribe({\n next: () => {\n this.showMessage(MessageType.CREATE, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.CREATE, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n });\n }\n\n /** @hidden */\n _moveToClicked(multiple?: boolean): void {\n if (this.disabled) {\n return;\n }\n\n const _activeItem = this._activeItem;\n const currentFolder = this._getCurrentFolder();\n const movableItems = multiple ? this.selectedItems : _activeItem ? [_activeItem] : [];\n const dialogRef = this._dialogService.open(\n MoveToComponent,\n {\n responsivePadding: true,\n verticalPadding: false,\n backdropClickCloseable: false,\n height: '350px',\n data: {\n items: this.dataSource.dataProvider.items,\n currentFolder,\n movableFolders: movableItems.filter((item) => item?.type === 'folder'),\n maxFilenameLength: this.maxFilenameLength\n } as MoveToComponentDialogData\n } as DialogConfig,\n this._injector\n );\n\n dialogRef.afterClosed.pipe(take(1)).subscribe(\n ({ selectedFolder, parentFolderId, folderName }) => {\n const payload: MoveToEvent = {\n from: currentFolder,\n to: selectedFolder,\n items: movableItems\n };\n\n if (folderName) {\n payload.newFolder = {\n parentFolderId,\n folderName\n };\n }\n\n this.dataSource\n .moveTo(payload)\n .pipe(\n tap(() => {\n this.selectedItems = [];\n\n this._match();\n })\n )\n .subscribe({\n next: () => {\n this.showMessage(MessageType.MOVE, {\n payload,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.MOVE, {\n payload,\n type: MessageStripType.ERROR\n });\n }\n });\n },\n (error) => {\n console.error(error);\n }\n );\n }\n\n /** @hidden */\n _downloadClicked(multiple?: boolean): void {\n if (this.disabled) {\n return;\n }\n\n const _activeItem = { ...this._activeItem };\n const items = (multiple ? this.selectedItems : [_activeItem]) as UploadCollectionFile[];\n\n this.dataSource.download({ items }).subscribe();\n }\n\n /** @hidden */\n _remove(multiple?: boolean): void {\n if (this.disabled) {\n return;\n }\n\n const _activeItem = { ...this._activeItem } as UploadCollectionItem;\n const items = multiple ? this.selectedItems : [_activeItem];\n const data = { parentFolderId: this._getCurrentFolderId(), items };\n\n this.dataSource\n .delete(data)\n .pipe(\n tap(() => {\n this.selectedItems = [];\n\n this._match();\n })\n )\n .subscribe({\n next: () => {\n this.showMessage(MessageType.REMOVE, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n },\n error: () => {\n this.showMessage(MessageType.REMOVE, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n }\n\n /** @hidden */\n _runUploadNewFileAfterFail(item: UploadCollectionFile): void {\n this.dataSource\n .runAfterFail({ parentFolderId: this._getCurrentFolderId(), items: [item] })\n .pipe(tap(() => this._match()))\n .subscribe();\n }\n\n /** @hidden */\n _cancelUploadNewFile(file: UploadCollectionFile): void {\n this.dataSource\n .cancelUploadNewFile({ parentFolderId: this._getCurrentFolderId(), item: file })\n .pipe(tap(() => this._match()))\n .subscribe();\n }\n\n /** @hidden */\n _messageStripDismiss(): void {\n this._message = undefined;\n }\n\n /** @hidden */\n _openFolder(item: UploadCollectionItem): void {\n if (item.type === 'file' || !item.documentId) {\n return;\n }\n\n if (this._breadcrumbList.length > 0) {\n this._breadcrumbList[this._breadcrumbList.length - 1].clikable = true;\n }\n\n this._breadcrumbList.push({\n clikable: false,\n folderId: item.documentId,\n folderName: item.name\n });\n\n this._match();\n }\n\n /** @hidden */\n _actionButton(item: UploadCollectionItem): void {\n this._activeItem = item;\n }\n\n /** @hidden */\n _onDropzone(event: boolean): void {\n this._showDragDropArea = true;\n this._onDragDropArea = event;\n }\n\n /** @hidden */\n _dragDropCancel(): void {\n this._showDragDropArea = false;\n }\n\n /** @hidden */\n _breadcrumbGoTo(event: MouseEvent, index?: number): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (!Number.isInteger(index)) {\n this._breadcrumbList = [];\n this._match();\n\n return;\n }\n\n this._breadcrumbList = this._breadcrumbList.slice(0, index! + 1);\n this._breadcrumbList[this._breadcrumbList.length - 1].clikable = false;\n\n this._match();\n }\n\n /** @hidden */\n _pageChanged(pageNumber: number): void {\n if (!this.enablePagination || this._currentPage === pageNumber) {\n return;\n }\n\n this.selectedItems = [];\n this._currentPage = pageNumber;\n\n this._match();\n }\n\n /** @hidden */\n _itemsPerPageChange(value: number): void {\n if (value === this._itemsPerPage) {\n return;\n }\n\n this._itemsPerPage = value;\n if (this._currentPage * this._itemsPerPage > this._totalItems) {\n this._currentPage = Math.ceil(this._totalItems / this._itemsPerPage);\n }\n\n this._match();\n }\n\n /** @hidden */\n _searchInputChanged(): void {\n this._match();\n }\n\n /** @hidden */\n _onRowSelectionChange(data: TableRowSelectionChangeEvent<UploadCollectionItem>): void {\n if (!this.sameFileNameAllowed) {\n const removedItem = data.removed[0];\n this._clearItemSameFilenameState(removedItem);\n }\n\n this.selectedItems = data.selection;\n }\n\n /** @hidden */\n _getItemName(item: UploadCollectionItem): string {\n if (item.type === 'folder') {\n return item.name;\n }\n\n return item.name.split('.').slice(0, -1).join('.');\n }\n\n /** @hidden */\n _getItemExtension(item: UploadCollectionItem): string {\n if (item.type === 'folder') {\n return '';\n }\n\n return `.${item.name.split('.').pop()}`;\n }\n\n /** @hidden */\n _getIconByType(file: UploadCollectionFile): string {\n const type = `.${file.name.split('.').pop()}`;\n\n return this._imageExtensions.includes(type) ? 'background' : 'document';\n }\n\n /** @hidden */\n _showIfSelectedOnlyFiles(): boolean {\n return !this.selectedItems.some((item) => item.type === 'folder');\n }\n\n /** @hidden */\n _isSelectedItem(item: UploadCollectionItem): boolean {\n return this.selectedItems.some((selectedItem) => selectedItem.documentId === item.documentId);\n }\n\n /** @hidden */\n _getList(): UploadCollectionItem[] {\n return this.dataSource.dataProvider.list;\n }\n\n /** @hidden */\n _trackByDocumentId(index: number, item: UploadCollectionItem): UploadCollectionItem['documentId'] {\n return item.documentId;\n }\n\n /** @hidden */\n _getAllowedTypes(): string {\n return `${this.fileTypes?.join(', ')}${\n this.fileTypes?.length && this.mimeTypes?.length ? ', ' : ''\n }${this.mimeTypes?.join(', ')}`;\n }\n\n /** @hidden */\n private _validateFiles(files: File[]): void {\n this._validatedFiles = this._filesValidatorService.validation(files, {\n maxFileSize: this.maxFileSize,\n maxFileNameLength: this.maxFilenameLength,\n fileTypes: this.fileTypes,\n mimeTypes: this.mimeTypes\n });\n }\n\n /** @hidden */\n private _propagateFiles(): void {\n const { validFiles, typeMismatch, filenameLengthExceed, fileSizeExceed } = this._validatedFiles;\n\n if (validFiles) {\n if (this._currentUpdateFileVersion) {\n this._updateFileVersion(validFiles[0]);\n } else {\n this._uploadNewFiles(validFiles);\n }\n }\n\n if (typeMismatch) {\n const payload = { items: typeMismatch };\n const event = new TypeMismatchEvent(this, payload);\n\n this.showMessage(MessageType.TYPE_MISMATCH, { payload, type: MessageStripType.ERROR });\n\n this.typeMismatch.emit(event);\n }\n\n if (filenameLengthExceed) {\n const payload = { items: filenameLengthExceed };\n const event = new FilenameLengthExceedEvent(this, payload);\n\n this.showMessage(MessageType.FILE_NAME_LENGTH, { payload, type: MessageStripType.ERROR });\n\n this.filenameLengthExceed.emit(event);\n }\n\n if (fileSizeExceed) {\n const payload = { items: fileSizeExceed };\n const event = new FileSizeExceedEvent(this, payload);\n\n this.showMessage(MessageType.FILE_SIZE, { payload, type: MessageStripType.ERROR });\n\n this.fileSizeExceed.emit(event);\n }\n }\n\n /** @hidden */\n private _updateFileVersion(newItem: File): void {\n const currentFolderId = this._getCurrentFolderId();\n const currentItem = {\n ...this._currentUpdateFileVersion,\n status: UploadCollectionItemStatus.LOADING\n } as UploadCollectionItem;\n\n const data = {\n parentFolderId: this._getCurrentFolderId(),\n item: this._currentUpdateFileVersion,\n newItem\n } as UpdateVersionEvent;\n\n this._findParentFolderAndUpdateItem(currentFolderId, currentItem);\n\n this.dataSource\n .updateVersion(data)\n .pipe(tap(() => this._match()))\n .subscribe({\n next: () => {\n this.showMessage(MessageType.UPDATE_VERSION, {\n payload: data,\n type: MessageStripType.SUCCESS\n });\n this._currentUpdateFileVersion = undefined;\n },\n error: () => {\n this.showMessage(MessageType.UPDATE_VERSION, {\n payload: data,\n type: MessageStripType.ERROR\n });\n }\n });\n }\n\n /** @hidden */\n private _uploadNewFiles(files: File[]): void {\n const currentFolderId = this._getCurrentFolderId();\n const newItems = this._generateTemporaryNewFiles(files);\n\n this._findParentFolderAndAddTemporaryFiles(currentFolderId, newItems);\n\n this.dataSource\n .upload({\n parentFolderId: currentFolderId,\n items: newItems.map((item) => ({ ...item }))\n })\n .pipe(tap(() => this._match()))\n .subscribe();\n }\n\n /** @hidden */\n private _getCurrentFolder(): UploadCollectionFolder | undefined {\n const currentFolderId = this._getCurrentFolderId();\n\n return !currentFolderId ? undefined : this._findFolderById(currentFolderId);\n }\n\n /** @hidden */\n private _getCurrentFolderId(): string | number | undefined {\n return this._breadcrumbList.length === 0\n ? undefined\n : this._breadcrumbList[this._breadcrumbList.length - 1].folderId;\n }\n\n /** @hidden */\n private _findFolderById(\n folderId: number | string,\n items: UploadCollectionItem[] = this.dataSource.dataProvider.items\n ): UploadCollectionFolder | undefined {\n let foundObj: UploadCollectionFolder | undefined;\n\n JSON.stringify(items, (_, nestedValue) => {\n if (nestedValue && nestedValue.documentId === folderId) {\n foundObj = nestedValue;\n }\n\n return nestedValue;\n });\n\n return foundObj;\n }\n\n /** @hidden */\n private _findParentFolderAndUpdateItem(\n parentFolderId: string | number | undefined,\n updatedItem: UploadCollectionItem,\n items = this.dataSource.dataProvider.items\n ): void {\n if (!parentFolderId) {\n const index = items.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n items[index] = updatedItem;\n }\n\n this._match();\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n const index = currentItem.files.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n currentItem.files[i] = updatedItem;\n this._match();\n\n break;\n }\n } else {\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _findParentFolderAndAddTemporaryFiles(\n parentFolderId: string | number | undefined,\n newItems: UploadCollectionItem[],\n items = this.dataSource.dataProvider.items\n ): void {\n if (!parentFolderId) {\n items.push(...newItems);\n this._match();\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n currentItem.files.push(...newItems);\n this._match();\n\n break;\n } else {\n this._findParentFolderAndAddTemporaryFiles(parentFolderId, newItems, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _generateTemporaryNewFiles(files: File[]): UploadCollectionFile[] {\n return files.map((file) => ({\n documentId: uuidv4(),\n type: 'file',\n name: file.name,\n uploadedBy: {\n id: uuidv4(),\n name: `You`\n },\n uploadedOn: new Date(),\n fileSize: file.size,\n version: 1,\n url: '',\n status: UploadCollectionItemStatus.LOADING,\n file\n }));\n }\n\n /** @hidden */\n private _generateTemporaryNewFolder(folderName: string): UploadCollectionFolder {\n return {\n documentId: uuidv4(),\n type: 'folder',\n name: folderName,\n uploadedBy: {\n id: Date.now(),\n name: 'You'\n },\n uploadedOn: new Date(),\n files: [],\n status: UploadCollectionItemStatus.LOADING\n };\n }\n\n /** @hidden */\n private _initializeDS(ds: FdpUploadCollectionDataSource): void {\n this._visibleList$.next([]);\n if (isDataSource(this.dataSource)) {\n this.dataSource.close();\n if (this._dsSubscription) {\n this._dsSubscription.unsubscribe();\n this._dsSubscription = undefined;\n }\n }\n\n this._dataSource = this._openDataStream(ds);\n\n // initial data fetch\n this._match();\n }\n\n /** @hidden */\n private _openDataStream(ds: FdpUploadCollectionDataSource): UploadCollectionDataSource {\n const initDataSource = this._toDataStream(ds);\n if (initDataSource === undefined) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n /**\n * This is single point of data entry to the component. We dont want to set data on different\n * places. If any new data comes in either you do a search and you want to pass initial data\n * its here.\n */\n this._dsSubscription = initDataSource.open().subscribe((data) => {\n this._visibleList$.next(data);\n\n this._totalItems = initDataSource.dataProvider.totalItems;\n\n this._countUnvisibleItems();\n });\n\n return initDataSource;\n }\n\n /** @hidden */\n private _toDataStream(ds: FdpUploadCollectionDataSource): UploadCollectionDataSource | undefined {\n if (isDataSource(ds)) {\n return ds as UploadCollectionDataSource;\n }\n\n return undefined;\n }\n\n /** @hidden */\n private _match(): void {\n const query = new Map();\n\n query.set('folderId', this._getCurrentFolderId());\n query.set('page', this._currentPage);\n query.set('searchText', this._searchText || '*');\n\n if (this.enablePagination) {\n query.set('limit', this._itemsPerPage);\n }\n\n this.dataSource.match(query);\n }\n\n /** @hidden */\n private _countUnvisibleItems(): void {\n const itemsPerPage = this._itemsPerPage as number;\n this._countShowedItems = this._currentPage * itemsPerPage - itemsPerPage + 1;\n this._countNotShowedItems = this._countShowedItems + this._visibleList$.value.length - 1;\n }\n\n /** @hidden */\n private _clearItemSameFilenameState(currentItem: UploadCollectionItem): void {\n if (!currentItem) {\n return;\n }\n\n for (const item of this._getList()) {\n if (item.documentId === currentItem.documentId) {\n delete item.sameFilenameState;\n break;\n }\n }\n }\n}\n","<div [id]=\"id\" class=\"fdp-upload-collection\">\n <!-- Message strip -->\n <fd-message-strip *ngIf=\"_message\" [type]=\"_message.messageStripType\" (onDismiss)=\"_messageStripDismiss()\">\n <ng-container\n [ngTemplateOutlet]=\"message\"\n [ngTemplateOutletContext]=\"{\n messageType: _message.messageType,\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </fd-message-strip>\n\n <!-- Toolbar -->\n <fd-toolbar class=\"fdp-upload-collection__toolbar\">\n <div style=\"flex: 1 auto\">\n <fd-breadcrumb [id]=\"id + '-breadcrumb'\">\n <fd-breadcrumb-item>\n <ng-template #multipleBreadcrumbs>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event)\">\n {{ 'platformUploadCollection.breadcrumbLabelAllFiles' | fdTranslate }}\n </a>\n </ng-template>\n <ng-template #singleBreadcrumb>\n <span>\n {{\n 'platformUploadCollection.breadcrumbLabelAllFilesWithTotal'\n | fdTranslate : { total: _totalItems }\n }}\n </span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"_breadcrumbList.length > 0 ? multipleBreadcrumbs : singleBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n <fd-breadcrumb-item *ngFor=\"let item of _breadcrumbList; let i = index\">\n <ng-template #clickableBreadcrumb>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event, i)\">{{ item.folderName }}</a>\n </ng-template>\n <ng-template #textBreadcrumb>\n <span>{{ item.folderName }} ({{ _totalItems }})</span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"item.clikable ? clickableBreadcrumb : textBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n </fd-breadcrumb>\n </div>\n\n <fd-toolbar-spacer style=\"max-width: 3rem\"></fd-toolbar-spacer>\n <ng-container *ngIf=\"readonly || selectedItems.length === 0\">\n <fd-input-group\n *ngIf=\"showSearch\"\n [(ngModel)]=\"_searchText\"\n (ngModelChange)=\"_searchInputChanged()\"\n glyph=\"search\"\n [ariaLabelledBy]=\"id + '-breadcrumb'\"\n [placeholder]=\"'platformUploadCollection.searchPlaceholder' | fdTranslate\"\n ></fd-input-group>\n\n <ng-container *ngIf=\"!readonly\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openUploadFiles()\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n ></button>\n\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openNewFolderDialog()\"\n *ngIf=\"hierarchy\"\n [disabled]=\"disabled\"\n fdType=\"transparent\"\n [label]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!readonly && selectedItems.length > 0\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_moveToClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_downloadClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"_showIfSelectedOnlyFiles()\"\n [label]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_remove(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </fd-toolbar>\n\n <div class=\"fdp-upload-collection__table--wrapper\">\n <div\n class=\"fdp-upload-collection__table\"\n fdpUploadCollectionDragnDrop\n [fileTypes]=\"fileTypes\"\n [maxFilenameLength]=\"maxFilenameLength\"\n [maxFileSize]=\"maxFileSize\"\n [mimeTypes]=\"mimeTypes\"\n [dragndrop]=\"!readonly\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n (fileChanged)=\"_handleDrop($event)\"\n (cancel)=\"_dragDropCancel()\"\n (onDropzone)=\"_onDropzone($event)\"\n >\n <!-- Table -->\n <fdp-table\n *ngIf=\"_visibleList$.value.length > 0\"\n [dataSource]=\"_visibleList$\"\n [loading]=\"dataSource.isDataLoading\"\n selectionMode=\"multiple\"\n emptyTableMessage=\"\"\n [noHorizontalBorders]=\"true\"\n [trackBy]=\"_trackByDocumentId\"\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n >\n <fdp-column name=\"name\" label=\"Name\" width=\"8rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'folder'\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.folderIconTitle' | fdTranslate\"\n ></fd-icon>\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'file'\"\n [glyph]=\"_getIconByType(item)\"\n [title]=\"'platformUploadCollection.fileIconTitle' | fdTranslate\"\n ></fd-icon>\n\n <ng-container *ngIf=\"disabled || readonly || !_isSelectedItem(item); else editMode\">\n <span\n [class.fdp-upload-collection__cursor]=\"item.type === 'folder'\"\n (click)=\"_openFolder(item)\"\n >{{ item.name }}</span\n >\n </ng-container>\n </div>\n\n <ng-template #editMode>\n <div fd-form-item>\n <fd-form-input-message-group [triggers]=\"[]\" [isOpen]=\"!!item.sameFilenameState\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <input\n fd-form-control\n [value]=\"_getItemName(item)\"\n (blur)=\"_fileNameChange($event, item)\"\n (input)=\"_checkName($event, item)\"\n type=\"text\"\n [placeholder]=\"\n 'platformUploadCollection.editFileNameInputPlaceholder' | fdTranslate\n \"\n [state]=\"item.sameFilenameState\"\n />\n <span class=\"fdp-upload-collection__item_extension\">{{\n _getItemExtension(item)\n }}</span>\n </div>\n\n <fd-form-message [type]=\"item.sameFilenameState\">\n {{\n (item.type === 'file'\n ? 'platformUploadCollection.editFileNameFileAlreadyExistsError'\n : 'platformUploadCollection.editFileNameFolderAlreadyExistsError'\n ) | fdTranslate\n }}\n </fd-form-message>\n </fd-form-input-message-group>\n </div>\n </ng-template>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedBy\" label=\"Uploaded by\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedBy.name }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedOn\" label=\"Uploaded on\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedOn | date : 'shortDate' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"size\" label=\"File size\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.fileSize | convertBytes }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"version\" label=\"Version\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.version || '' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"status\" label=\"Status\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-busy-indicator\n *ngIf=\"item.status === _uploadCollectionItemStatus.LOADING\"\n [loading]=\"true\"\n ariaLabel=\"Status: Loading\"\n ariaLive=\"polite\"\n size=\"s\"\n ></fd-busy-indicator>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.SUCCESSFUL\"\n fd-object-status\n status=\"positive\"\n >\n {{ 'platformUploadCollection.itemStatusSuccessful' | fdTranslate }}\n </span>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n fd-object-status\n status=\"negative\"\n >\n {{ 'platformUploadCollection.itemStatusUnsuccessful' | fdTranslate }}\n </span>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"action\" *ngIf=\"!readonly\" width=\"5rem\" align=\"end\">\n <fdp-table-header *fdpHeaderCellDef>Action</fdp-table-header>\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__actions\">\n <div class=\"fdp-upload-collection__actions--status\">\n <button\n fd-button\n [label]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n (click)=\"_runUploadNewFileAfterFail(item)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n ></button>\n\n <button\n fd-button\n [label]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n (click)=\"_cancelUploadNewFile(item)\"\n *ngIf=\"terminationEnabled && item.status === _uploadCollectionItemStatus.LOADING\"\n ></button>\n </div>\n\n <fdp-menu-button\n icon=\"overflow\"\n [disabled]=\"disabled\"\n type=\"transparent\"\n [title]=\"'platformUploadCollection.itemMenuBtnTitle' | fdTranslate\"\n [fdpMenuTriggerFor]=\"menuActions\"\n (buttonClicked)=\"_actionButton(item)\"\n >\n </fdp-menu-button>\n </div>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n\n <!-- Dragdrop area -->\n <div\n class=\"fdp-upload-collection__dragdrop-area\"\n *ngIf=\"_showDragDropArea\"\n [class.active]=\"_onDragDropArea\"\n >\n <fd-icon class=\"fdp-upload-collection__dragdrop-area--icon\" glyph=\"upload-to-cloud\"></fd-icon>\n <p class=\"fdp-upload-collection__dragdrop-area--text\">\n {{ 'platformUploadCollection.dragDropAreaText' | fdTranslate }}\n </p>\n </div>\n\n <!-- No data -->\n <div\n class=\"fdp-upload-collection__no-data\"\n *ngIf=\"_visibleList$.value.length === 0\"\n [class.invisible]=\"_showDragDropArea\"\n >\n <fd-icon glyph=\"document\"></fd-icon>\n <h3>{{ noDataText || ('platformUploadCollection.noDataText' | fdTranslate) }}</h3>\n <p>{{ noDataDescription || ('platformUploadCollection.noDataDescription' | fdTranslate) }}</p>\n </div>\n </div>\n\n <!-- Table footer -->\n <div class=\"fdp-upload-collection__table-footer\" *ngIf=\"enablePagination\">\n <!-- Pagination -->\n <div class=\"fdp-upload-collection__pagination\">\n <span [id]=\"id + '-pagination'\" class=\"fdp-upload-collection__pagination--total\">\n {{\n 'platformUploadCollection.paginationTotal'\n | fdTranslate : { from: _countShowedItems, to: _countNotShowedItems, total: _totalItems }\n }}\n </span>\n <fd-pagination\n [totalItems]=\"_totalItems\"\n [displayTotalItems]=\"false\"\n (pageChangeStart)=\"_pageChanged($event)\"\n [itemsPerPage]=\"_itemsPerPage\"\n [currentPage]=\"_currentPage\"\n [attr.aria-labelledby]=\"id + '-pagination'\"\n ></fd-pagination>\n </div>\n\n <!-- Results per page -->\n <div class=\"fdp-upload-collection__results\">\n <span class=\"fdp-upload-collection__results--title\">\n <span [id]=\"id + '-results'\">\n {{ 'platformUploadCollection.resultsPerPage' | fdTranslate }}\n </span>\n <span *ngIf=\"_itemsPerPageOptions.length === 0\">{{ _itemsPerPage }}</span>\n </span>\n <fdp-menu-button\n *ngIf=\"_itemsPerPageOptions.length > 0\"\n type=\"ghost\"\n [ariaLabelledBy]=\"id + '-results'\"\n [fdpMenuTriggerFor]=\"itemsPerPageMenu\"\n [label]=\"_itemsPerPage + ''\"\n >\n </fdp-menu-button>\n </div>\n </div>\n </div>\n</div>\n\n<fdp-menu #itemsPerPageMenu xPosition=\"before\">\n <fdp-menu-item\n *ngFor=\"let value of _itemsPerPageOptions\"\n (itemSelect)=\"_itemsPerPageChange(value.label)\"\n [attr.title]=\"'Results per page: ' + value.label\"\n >\n <span>{{ value.label }}</span>\n </fdp-menu-item>\n</fdp-menu>\n\n<fdp-menu #menuActions xPosition=\"before\">\n <fdp-menu-item (itemSelect)=\"_moveToClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.moveToBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <ng-container *ngIf=\"_activeItem?.type === 'file'\">\n <fdp-menu-item (itemSelect)=\"_downloadClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"download\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.downloadBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <fdp-menu-item (itemSelect)=\"_openUpdateFileVersion()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"drill-up\"\n [title]=\"'platformUploadCollection.updateVersionBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.updateVersionBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n </ng-container>\n <fdp-menu-item (itemSelect)=\"_remove()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"delete\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.removeBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n</fdp-menu>\n\n<input\n #fileInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n fdFileSelect\n/>\n\n<input\n #updateVersionInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [disabled]=\"disabled\"\n [multiple]=\"false\"\n fdFileSelect\n/>\n\n<ng-template\n let-messageType=\"messageType\"\n let-payload=\"payload\"\n let-messageStripType=\"messageStripType\"\n let-count=\"count\"\n #message\n>\n <ng-container *ngIf=\"_message\" [ngSwitch]=\"messageType\">\n <ng-container\n *ngSwitchCase=\"_messageType.CREATE\"\n [ngTemplateOutlet]=\"messageNewFolder\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.UPDATE_VERSION\"\n [ngTemplateOutlet]=\"messageUpdateVersion\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_RENAME\"\n [ngTemplateOutlet]=\"messageFileRename\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.REMOVE\"\n [ngTemplateOutlet]=\"messageRemove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.MOVE\"\n [ngTemplateOutlet]=\"messageMove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.TYPE_MISMATCH\"\n [ngTemplateOutlet]=\"messageTypeMismatch\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_SIZE\"\n [ngTemplateOutlet]=\"messageFileSize\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_NAME_LENGTH\"\n [ngTemplateOutlet]=\"messageFilenameLength\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #messageNewFolder let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersCreated\">\n {{ 'platformUploadCollection.messageCreateFailed' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-container>\n <ng-template #foldersCreated>\n {{ 'platformUploadCollection.messageCreateSuccess' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageUpdateVersion let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else versionUpdated\">\n {{ 'platformUploadCollection.messageUpdateVersionFailed' | fdTranslate : { folderName: payload.item.name } }}\n </ng-container>\n <ng-template #versionUpdated>\n {{ 'platformUploadCollection.messageUpdateVersionSuccess' | fdTranslate : { folderName: payload.item.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageFileRename let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else fileRenamed\">\n {{\n 'platformUploadCollection.messageFileRenameFailed'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-container>\n <ng-template #fileRenamed>\n {{\n 'platformUploadCollection.messageFileRenameSuccess'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageRemove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersAndFilesRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesFailed'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-container>\n <ng-template #foldersAndFilesRemoved>\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesSuccess'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersRemoved\">\n {{ 'platformUploadCollection.messageRemoveFoldersFailed' | fdTranslate : { foldersCount: count.folder } }}\n </ng-container>\n <ng-template #foldersRemoved>\n {{ 'platformUploadCollection.messageRemoveFoldersSuccess' | fdTranslate : { foldersCount: count.folder } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesRemoved\">\n {{ 'platformUploadCollection.messageRemoveFilesFailed' | fdTranslate : { filesCount: count.file } }}\n </ng-container>\n <ng-template #filesRemoved>\n {{ 'platformUploadCollection.messageRemoveFilesSuccess' | fdTranslate : { filesCount: count.file } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderFailed'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-container>\n <ng-template #oneItemRemoved>\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderSuccess'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageMove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesAndFoldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesFailed'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesFailed'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesAndFoldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesSuccess'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersFailed'\n : 'platformUploadCollection.messageMoveRootFoldersFailed'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #foldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersSuccess'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesFailed'\n : 'platformUploadCollection.messageMoveRootFilesFailed'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFilesSuccess'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderFailed'\n : 'platformUploadCollection.messageMoveRootFileOrFolderFailed'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #oneItemMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderSuccess'\n : 'platformUploadCollection.messageMoveRootFileOrFolderSuccess'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageTypeMismatch let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchPlural'\n | fdTranslate : { filesCount: payload.items.length, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchSingular'\n | fdTranslate : { fileName: payload.items[0].name, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFileSize let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFilenameLength let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { ToolbarModule } from '@fundamental-ngx/core/toolbar';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { FormModule } from '@fundamental-ngx/core/form';\nimport { PipeModule } from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';\nimport { MessageStripModule } from '@fundamental-ngx/core/message-strip';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { BreadcrumbModule } from '@fundamental-ngx/core/breadcrumb';\nimport { PaginationModule } from '@fundamental-ngx/core/pagination';\nimport { ObjectStatusModule } from '@fundamental-ngx/core/object-status';\nimport { FileUploaderModule } from '@fundamental-ngx/core/file-uploader';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\nimport { PlatformTableModule } from '@fundamental-ngx/platform/table';\nimport { PlatformMenuModule } from '@fundamental-ngx/platform/menu';\nimport { PlatformButtonModule } from '@fundamental-ngx/platform/button';\nimport { PlatformMenuButtonModule } from '@fundamental-ngx/platform/menu-button';\nimport { PlatformPipeModule } from '@fundamental-ngx/platform/shared';\nimport { PlatformContentDensityDeprecationsModule } from '@fundamental-ngx/platform/shared';\n\nimport { UploadCollectionDragnDropDirective } from './directives/upload-collection-dragndrop.directive';\nimport { UploadCollectionComponent } from './upload-collection/upload-collection.component';\nimport { NewFolderComponent } from './dialogs/new-folder/new-folder.component';\nimport { MoveToComponent } from './dialogs/move-to/move-to.component';\nimport { I18nModule } from '@fundamental-ngx/i18n';\n\n@NgModule({\n declarations: [UploadCollectionComponent, NewFolderComponent, MoveToComponent, UploadCollectionDragnDropDirective],\n imports: [\n CommonModule,\n PlatformTableModule,\n ToolbarModule,\n ButtonModule,\n InputGroupModule,\n FormModule,\n I18nModule,\n FormsModule,\n ReactiveFormsModule,\n DialogModule,\n PipeModule,\n IconModule,\n BreadcrumbModule,\n PaginationModule,\n BusyIndicatorModule,\n ObjectStatusModule,\n PlatformMenuModule,\n PlatformButtonModule,\n MessageStripModule,\n FileUploaderModule,\n ListModule,\n PlatformPipeModule,\n PlatformMenuButtonModule,\n RouterModule,\n PlatformContentDensityDeprecationsModule,\n ContentDensityModule\n ],\n exports: [UploadCollectionComponent, PlatformContentDensityDeprecationsModule, ContentDensityModule]\n})\nexport class PlatformUploadCollectionModule {}\n","/**\n * Default implementation for Observable Arrays and Arrays.\n */\nimport { Observable, of } from 'rxjs';\n\nimport { DataProvider } from '@fundamental-ngx/platform/shared';\nimport {\n GroupByType,\n UploadCollectionFile,\n UploadCollectionFolder,\n UploadCollectionItem,\n CancelUploadNewFileEvent,\n DeleteEvent,\n DownloadEvent,\n FileRenamedEvent,\n MoveToEvent,\n NewFolderEvent,\n UpdateVersionEvent,\n UploadEvent\n} from '../models/upload-collection.models';\n\n/**\n * In Memory implementation of DataProvider that supports fulltext search\n */\nexport abstract class UploadCollectionDataProvider extends DataProvider<UploadCollectionItem> {\n /** @hidden */\n totalItems = 0;\n /** @hidden */\n list: UploadCollectionItem[] = [];\n\n abstract items: UploadCollectionItem[];\n\n /** The method is triggered when valid files are selected in the file uploader dialog. */\n abstract upload(data: UploadEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when an uploaded attachment is selected and the Download button is pressed. */\n abstract download(data: DownloadEvent): Observable<void>;\n\n /** The method is triggered when Move to button is pressed and folder to move is selected in the dialog modal. */\n abstract moveTo(data: MoveToEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when an uploaded attachment is selected and the Delete button is pressed. */\n abstract delete(data: DeleteEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when the file name is changed. */\n abstract fileRenamed(data: FileRenamedEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when the new folder added. */\n abstract newFolder(data: NewFolderEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when Update Version button is pressed and valid file are selected in the file uploader dialog. */\n abstract updateVersion(data: UpdateVersionEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when Run button is pressed */\n abstract runAfterFail(data: UploadEvent): Observable<UploadCollectionItem[]>;\n\n /** The method is triggered when Cancel button is pressed */\n abstract cancelUploadNewFile(data: CancelUploadNewFileEvent): Observable<UploadCollectionItem[]>;\n\n /** @hidden */\n fetch(params: Map<string, string | number>): Observable<UploadCollectionItem[]> {\n let currentItems: UploadCollectionItem[] = this.items;\n\n const folderId = params.get('folderId');\n if (folderId) {\n const folder = this._findFolderById(folderId);\n currentItems = folder ? folder.files : [];\n }\n\n let _list = this._defaultSorting(currentItems);\n const searchText = (params.get('searchText') as string) ?? '';\n const limit = +(params.get('limit') ?? (100 as number));\n const page = +(params.get('page') ?? 1);\n\n if (!searchText || searchText === '*') {\n this.list = _list;\n this.totalItems = _list.length;\n\n return of(this._getItemsByPage(_list, page, limit));\n }\n\n const keyword = searchText.toLowerCase();\n _list = _list.filter((item) => item.name.toLowerCase().indexOf(keyword) > -1);\n this.list = _list;\n this.totalItems = _list.length;\n\n _list = this._getItemsByPage(_list, page, limit);\n\n return of(_list);\n }\n\n /** @hidden */\n private _getItemsByPage(items: UploadCollectionItem[], page: number, limit: number): UploadCollectionItem[] {\n const firstDisplayedRow = (page - 1) * limit;\n const _visibleList = items.slice(firstDisplayedRow, firstDisplayedRow + limit);\n\n if (_visibleList.length === 0 && items.length > 0) {\n this._getItemsByPage(items, page > 1 ? page - 1 : 1, limit);\n }\n\n return _visibleList;\n }\n\n /** @hidden */\n private _defaultSorting(list: UploadCollectionItem[]): UploadCollectionItem[] {\n let _list: UploadCollectionItem[] = [];\n const groupByType: GroupByType = list.reduce((res: GroupByType, item: UploadCollectionItem) => {\n const type = `${item.type}s`;\n\n if (!res[type]) {\n res[type] = [];\n }\n\n if (item.type === 'folder') {\n item.fileSize = +this._getFileSize(item).toFixed(2);\n }\n\n res[type].push(item);\n\n return res;\n }, {} as GroupByType);\n\n groupByType.folders = this._sortBy(groupByType.folders, 'name') as UploadCollectionFolder[];\n groupByType.files = this._sortBy(groupByType.files, 'name') as UploadCollectionFile[];\n\n if (groupByType.folders) {\n _list = groupByType.folders;\n } else {\n _list = [];\n }\n\n if (groupByType.files) {\n _list.push(...groupByType.files);\n }\n\n return _list;\n }\n\n /** @hidden */\n private _getFileSize(item: UploadCollectionItem): number {\n if (item.type === 'file') {\n return item.fileSize;\n }\n\n if (item.type === 'folder') {\n return item.files.reduce((res, folderItem) => {\n res += this._getFileSize(folderItem);\n\n return res;\n }, 0);\n }\n return 0;\n }\n\n /** @hidden */\n private _sortBy(items: UploadCollectionItem[] = [], key: string): UploadCollectionItem[] {\n return items.sort((a, b) => (a[key] > b[key] ? 1 : -1));\n }\n\n /** @hidden */\n private _findFolderById(folderId: number | string): UploadCollectionFolder | undefined {\n let foundObj: UploadCollectionFolder | undefined;\n\n JSON.stringify(this.items, (_, nestedValue) => {\n if (nestedValue && nestedValue.documentId === folderId) {\n foundObj = nestedValue;\n }\n\n return nestedValue;\n });\n\n return foundObj;\n }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { DataSource } from '@fundamental-ngx/platform/shared';\nimport {\n UploadCollectionItem,\n CancelUploadNewFileEvent,\n DeleteEvent,\n DownloadEvent,\n FileRenamedEvent,\n MoveToEvent,\n NewFolderEvent,\n UpdateVersionEvent,\n UploadEvent\n} from '../models/upload-collection.models';\nimport { UploadCollectionDataProvider } from './upload-collection-data-provider';\n\nexport class UploadCollectionDataSource implements DataSource<UploadCollectionItem> {\n /** Max items for response */\n static readonly MaxLimit = Number.MAX_SAFE_INTEGER;\n\n /** @hidden */\n protected _dataChanges = new BehaviorSubject<UploadCollectionItem[]>([]);\n /** @hidden */\n protected _onDataRequested$ = new Subject<void>();\n /** @hidden */\n protected _onDataReceived$ = new Subject<void>();\n /** @hidden */\n protected _dataLoading = false;\n\n /** @hidden */\n get isDataLoading(): boolean {\n return this._dataLoading;\n }\n\n /** @hidden */\n constructor(public readonly dataProvider: UploadCollectionDataProvider) {}\n\n /** Filtering data */\n match(searchParam: Map<string, string | number>): void {\n this._onDataRequested$.next();\n this._dataLoading = true;\n if (!(searchParam instanceof Map)) {\n throw new Error('DataSource.match() predicate can only accepts string and Map');\n }\n\n if (!searchParam.has('limit')) {\n searchParam.set('limit', UploadCollectionDataSource.MaxLimit);\n }\n\n this.dataProvider\n .fetch(searchParam)\n .pipe(take(1))\n .subscribe(\n (result: UploadCollectionItem[]) => {\n this._onDataReceived$.next();\n this._dataLoading = false;\n this._dataChanges.next(result);\n },\n () => {\n this._onDataReceived$.next();\n this._dataLoading = false;\n }\n );\n }\n\n /** The method is triggered when valid files are selected in the file uploader dialog. */\n upload(data: UploadEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.upload(data).pipe(take(1));\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Download button is pressed. */\n download(data: DownloadEvent): Observable<void> {\n return this.dataProvider.download(data);\n }\n\n /** The method is triggered when Move to button is pressed and folder to move is selected in the dialog modal. */\n moveTo(data: MoveToEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.moveTo(data).pipe(take(1));\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Delete button is pressed. */\n delete(data: DeleteEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.delete(data).pipe(take(1));\n }\n\n /** The method is triggered when the file name is changed. */\n fileRenamed(data: FileRenamedEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.fileRenamed(data).pipe(take(1));\n }\n\n /** The method is triggered when the new folder added. */\n newFolder(data: NewFolderEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.newFolder(data).pipe(take(1));\n }\n\n /** The method is triggered when Update Version button is pressed and valid file are selected in the file uploader dialog. */\n updateVersion(data: UpdateVersionEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.updateVersion(data).pipe(take(1));\n }\n\n /** The method is triggered when Run button is pressed */\n runAfterFail(data: UploadEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.runAfterFail(data).pipe(take(1));\n }\n\n /** The method is triggered when Cancel button is pressed */\n cancelUploadNewFile(data: CancelUploadNewFileEvent): Observable<UploadCollectionItem[]> {\n return this.dataProvider.cancelUploadNewFile(data).pipe(take(1));\n }\n\n /** @hidden */\n open(): Observable<UploadCollectionItem[]> {\n return this._dataChanges.asObservable();\n }\n\n /** @hidden */\n close(): void {}\n\n /** @hidden */\n onDataRequested(): Observable<void> {\n return this._onDataRequested$.asObservable();\n }\n\n /** @hidden */\n onDataReceived(): Observable<void> {\n return this._onDataReceived$.asObservable();\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { delay, map } from 'rxjs/operators';\n\nimport { uuidv4 } from '@fundamental-ngx/cdk/utils';\nimport { UploadCollectionDataProvider } from '../domain/upload-collection-data-provider';\n\nimport {\n UploadCollectionFile,\n UploadCollectionItem,\n UploadCollectionItemStatus,\n CancelUploadNewFileEvent,\n DeleteEvent,\n DownloadEvent,\n FileRenamedEvent,\n MoveToEvent,\n NewFolderEvent,\n UpdateVersionEvent,\n UploadCollectionNewItem,\n UploadEvent\n} from '../models/upload-collection.models';\n\nconst dataSource: UploadCollectionItem[] = [\n {\n documentId: uuidv4(),\n type: 'folder',\n name: 'Folder-1',\n uploadedBy: {\n id: uuidv4(),\n name: 'Lucas A.'\n },\n uploadedOn: new Date(2018, 4, 1),\n files: [\n {\n documentId: uuidv4(),\n type: 'file',\n name: 'File-2',\n uploadedBy: {\n id: uuidv4(),\n name: 'Oliver T.'\n },\n url: '',\n uploadedOn: new Date(2018, 0, 1),\n fileSize: 1024,\n version: 2\n }\n ]\n },\n {\n documentId: uuidv4(),\n type: 'file',\n name: `File-1`,\n uploadedBy: {\n id: uuidv4(),\n name: 'William G.'\n },\n url: '',\n uploadedOn: new Date(2010, 9, 4),\n fileSize: 2048,\n version: 1\n }\n];\n\nexport class UploadCollectionDataProviderTest extends UploadCollectionDataProvider {\n /** @hidden */\n items: UploadCollectionItem[] = dataSource.map((item) => ({ ...item }));\n\n /** @hidden */\n private _cancelUploadNewFileIds: (string | number)[] = [];\n\n /** The method is triggered when valid files are selected in the file uploader dialog. */\n upload({ parentFolderId, items }: UploadEvent): Observable<UploadCollectionItem[]> {\n console.log('upload', parentFolderId, items);\n\n const newFiles: UploadCollectionNewItem[] = items.map((item) => {\n delete item.file;\n item.status = UploadCollectionItemStatus.SUCCESSFUL;\n\n return {\n temporaryDocumentId: item.documentId,\n item\n };\n });\n\n this._findParentFolderAndAddNewFiles(parentFolderId, newFiles);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const ids = newFiles\n .filter((file) => {\n const includes =\n file.item.documentId && this._cancelUploadNewFileIds.includes(file.item.documentId);\n if (includes) {\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter(\n (id) => id !== file.item.documentId\n );\n return true;\n }\n\n return false;\n })\n .map((file) => file.item.documentId);\n\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, ids, updatedItems);\n\n return updatedItems;\n })\n );\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Download button is pressed. */\n download(data: DownloadEvent): Observable<void> {\n console.log('download', data);\n\n return of(undefined);\n }\n\n /**\n * The method is triggered when Move to button is pressed and folder to move is selected in the dialog modal.\n * Should return full dataSource\n * */\n moveTo(data: MoveToEvent): Observable<UploadCollectionItem[]> {\n console.log('moveTo', data);\n\n return of([]);\n }\n\n /** The method is triggered when an uploaded attachment is selected and the Delete button is pressed. */\n delete({ parentFolderId, items }: DeleteEvent): Observable<UploadCollectionItem[]> {\n console.log('delete', parentFolderId, items);\n\n const ids = items.map((item) => item.documentId);\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, ids);\n\n return of(this.items);\n }\n\n /** The method is triggered when the file name is changed. */\n fileRenamed({ parentFolderId, item, fileName }: FileRenamedEvent): Observable<UploadCollectionItem[]> {\n console.log('fileRenamed', parentFolderId, item, fileName);\n let updatedItem = {\n ...item,\n name: fileName,\n status: UploadCollectionItemStatus.SUCCESSFUL\n };\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const itemId = item.documentId;\n const includes = itemId && this._cancelUploadNewFileIds.includes(itemId);\n if (includes) {\n updatedItem = { ...updatedItem };\n updatedItem.name = item.name;\n updatedItem.status = UploadCollectionItemStatus.SUCCESSFUL;\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, updatedItems);\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter((id) => id !== itemId);\n }\n\n return updatedItems;\n })\n );\n }\n\n /** The method is triggered when the new folder added. */\n newFolder({ parentFolderId, folder }: NewFolderEvent): Observable<UploadCollectionItem[]> {\n console.log('newFolder', folder, parentFolderId);\n\n folder.status = UploadCollectionItemStatus.SUCCESSFUL;\n\n this._findParentFolderAndAddNewFiles(parentFolderId, [\n {\n temporaryDocumentId: folder.documentId!,\n item: folder\n }\n ]);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const folderId = folder.documentId;\n const includes = !!folderId && this._cancelUploadNewFileIds.includes(folderId);\n if (includes) {\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter((id) => id !== folderId);\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, [folderId], updatedItems);\n }\n\n return updatedItems;\n })\n );\n }\n\n /** The method is triggered when Update Version button is pressed and valid file are selected in the file uploader dialog. */\n updateVersion({ parentFolderId, item, newItem }: UpdateVersionEvent): Observable<UploadCollectionItem[]> {\n console.log('updateVersion', parentFolderId, item);\n\n let updatedItem: UploadCollectionFile = {\n ...item,\n status: UploadCollectionItemStatus.SUCCESSFUL,\n uploadedOn: new Date(),\n uploadedBy: {\n id: Date.now(),\n name: 'You'\n },\n version: +item.version,\n name: newItem.name,\n fileSize: newItem.size\n };\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem);\n\n return of(this.items).pipe(\n delay(5000),\n map((updatedItems) => {\n const itemId = updatedItem.documentId;\n const includes = this._cancelUploadNewFileIds.includes(itemId);\n if (includes) {\n updatedItem = { ...item };\n\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, updatedItems);\n this._cancelUploadNewFileIds = this._cancelUploadNewFileIds.filter((id) => id !== itemId);\n }\n\n return updatedItems;\n })\n );\n }\n\n /** @hidden */\n runAfterFail({ parentFolderId, items }: UploadEvent): Observable<UploadCollectionItem[]> {\n console.log('runAfterFail', parentFolderId, items);\n const item = items[0];\n\n this._findParentFolderAndAddNewFiles(parentFolderId, [\n {\n temporaryDocumentId: item.documentId,\n item: {\n ...item,\n status: UploadCollectionItemStatus.SUCCESSFUL\n }\n }\n ]);\n\n return of(this.items);\n }\n\n /** The method is triggered when Cancel button is pressed */\n cancelUploadNewFile({ parentFolderId, item }: CancelUploadNewFileEvent): Observable<UploadCollectionItem[]> {\n console.log('cancelUploadNewFile', parentFolderId, item);\n const id = item.documentId;\n this._cancelUploadNewFileIds.push(id);\n\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, [id]);\n\n return of([]);\n }\n\n /** @hidden */\n private _findParentFolderAndUpdateItem(\n parentFolderId: string | number | undefined,\n updatedItem: UploadCollectionItem,\n items = this.items\n ): void {\n if (!parentFolderId) {\n const index = items.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n items[index] = updatedItem;\n }\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n const index = currentItem.files.findIndex((item) => item.documentId === updatedItem.documentId);\n if (index !== -1) {\n currentItem.files[i] = updatedItem;\n\n break;\n }\n } else {\n this._findParentFolderAndUpdateItem(parentFolderId, updatedItem, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _findParentFolderAndAddNewFiles(\n parentFolderId: string | number | undefined,\n uploadedFiles: UploadCollectionNewItem[],\n items = this.items\n ): void {\n if (uploadedFiles.length === 0) {\n return;\n }\n\n if (!parentFolderId) {\n const uploadedFile = uploadedFiles.pop();\n const index = items.findIndex((item) => item.documentId === uploadedFile?.temporaryDocumentId);\n if (index !== -1) {\n items[index] = uploadedFile!.item;\n this._findParentFolderAndAddNewFiles(parentFolderId, uploadedFiles);\n }\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n const hash = uploadedFiles.reduce((res, file) => {\n res[file.temporaryDocumentId] = file.item;\n return res;\n }, {} as Record<string, UploadCollectionItem>);\n\n currentItem.files = currentItem.files.map((item) => hash[item.documentId as any] || item);\n\n break;\n } else {\n this._findParentFolderAndAddNewFiles(parentFolderId, uploadedFiles, currentItem.files);\n }\n }\n }\n\n /** @hidden */\n private _findParentFolderAndRemoveItemsByIds(\n parentFolderId: string | number | undefined,\n documentsIds: (number | string | undefined)[],\n items = this.items\n ): void {\n if (documentsIds.length === 0) {\n return;\n }\n\n if (!parentFolderId) {\n const documentId = documentsIds.pop();\n const index = items.findIndex((item) => item.documentId === documentId);\n if (index !== -1) {\n items.splice(index, 1);\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, documentsIds);\n }\n\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const currentItem = items[i];\n if (currentItem.type !== 'folder') {\n continue;\n }\n\n if (currentItem.documentId === parentFolderId) {\n currentItem.files = currentItem.files.filter(\n (item) => !documentsIds.some((documentId) => documentId === item.documentId)\n );\n\n break;\n } else {\n this._findParentFolderAndRemoveItemsByIds(parentFolderId, documentsIds, currentItem.files);\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.FilesValidatorService","i2","i3","i5","i9","i4","i6","i7","i8","i2.FilesValidatorService","i10","i11","i16","i21.UploadCollectionDragnDropDirective","i22"],"mappings":"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"}