{ "version": 3, "sources": ["src/app/admin/_modals/directory-picker/directory-picker.component.ts", "src/app/admin/_modals/directory-picker/directory-picker.component.html"], "sourcesContent": ["import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgbActiveModal, NgbTypeahead, NgbHighlight } from '@ng-bootstrap/ng-bootstrap';\nimport { catchError, debounceTime, distinctUntilChanged, filter, map, merge, Observable, of, OperatorFunction, Subject, switchMap, tap } from 'rxjs';\nimport { Stack } from 'src/app/shared/data-structures/stack';\nimport { DirectoryDto } from 'src/app/_models/system/directory-dto';\nimport { LibraryService } from '../../../_services/library.service';\nimport { NgIf, NgFor, NgClass } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport {TranslocoDirective} from \"@jsverse/transloco\";\nimport {WikiLink} from \"../../../_models/wiki\";\n\n\nexport interface DirectoryPickerResult {\n success: boolean;\n folderPath: string;\n}\n\n@Component({\n selector: 'app-directory-picker',\n templateUrl: './directory-picker.component.html',\n styleUrls: ['./directory-picker.component.scss'],\n standalone: true,\n imports: [ReactiveFormsModule, NgbTypeahead, FormsModule, NgbHighlight, NgIf, NgFor, NgClass, TranslocoDirective]\n})\nexport class DirectoryPickerComponent implements OnInit {\n\n @Input() startingFolder: string = '';\n /**\n * Url to give more information about selecting directories. Passing nothing will suppress.\n */\n @Input() helpUrl: string = WikiLink.Library;\n\n currentRoot = '';\n folders: DirectoryDto[] = [];\n routeStack: Stack = new Stack();\n\n\n path: string = '';\n @ViewChild('instance', {static: false}) instance!: NgbTypeahead;\n focus$ = new Subject();\n click$ = new Subject();\n searching: boolean = false;\n searchFailed: boolean = false;\n\n\n search: OperatorFunction = (text$: Observable) => {\n const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged());\n const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));\n const inputFocus$ = this.focus$;\n\n return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$, text$).pipe(\n debounceTime(300),\n distinctUntilChanged(),\n tap(() => this.searching = true),\n switchMap(term =>\n this.libraryService.listDirectories(this.path).pipe(\n tap(() => this.searchFailed = false),\n tap((folders) => this.folders = folders),\n map(folders => folders.map(f => f.fullPath)),\n catchError(() => {\n this.searchFailed = true;\n return of([]);\n }))\n ),\n tap(() => this.searching = false)\n )\n }\n\n constructor(public modal: NgbActiveModal, private libraryService: LibraryService) {\n\n }\n\n ngOnInit(): void {\n if (this.startingFolder && this.startingFolder.length > 0) {\n let folders = this.startingFolder.split('/');\n let folders2 = this.startingFolder.split('\\\\');\n if (folders.length === 1 && folders2.length > 1) {\n folders = folders2;\n }\n if (!folders[0].endsWith('/')) {\n folders[0] = folders[0] + '/';\n }\n folders.forEach(folder => this.routeStack.push(folder));\n\n const fullPath = this.routeStack.items.join('/');\n this.loadChildren(fullPath);\n } else {\n this.loadChildren(this.currentRoot);\n }\n }\n\n updateTable() {\n this.loadChildren(this.path);\n }\n\n\n selectNode(folder: DirectoryDto) {\n if (folder.disabled) return;\n this.currentRoot = folder.name;\n this.routeStack.push(folder.name);\n this.path = folder.fullPath;\n this.loadChildren(this.path);\n }\n\n goBack() {\n this.routeStack.pop();\n const stackPeek = this.routeStack.peek();\n if (stackPeek !== undefined) {\n this.currentRoot = stackPeek;\n const fullPath = this.routeStack.items.join('/');\n this.loadChildren(fullPath);\n } else {\n this.currentRoot = '';\n this.loadChildren(this.currentRoot);\n }\n }\n\n loadChildren(path: string) {\n this.libraryService.listDirectories(path).subscribe(folders => {\n this.folders = folders;\n }, err => {\n // If there was an error, pop off last directory added to stack\n this.routeStack.pop();\n const item = this.folders.find(f => f.fullPath === path);\n if (item) {\n item.disabled = true;\n }\n });\n }\n\n share() {\n this.modal.close({success: true, folderPath: this.path});\n }\n\n close() {\n this.modal.close({success: false, folderPath: undefined});\n }\n\n navigateTo(index: number) {\n while(this.routeStack.items.length - 1 > index) {\n this.routeStack.pop();\n }\n\n const fullPath = this.routeStack.items.join('/');\n this.path = fullPath;\n this.loadChildren(fullPath);\n }\n}\n\n\n", "\n
\n

{{t('title')}}

\n \n
\n
\n\n
\n \n
\n \n
\n \n \n \n
\n\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{t('type-header')}}{{t('name-header')}}
...
\n {{folder.name}}\n
\n
\n \n\n
\n"], "mappings": "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", "names": ["\u0275\u0275element", "\u0275\u0275property", "r_r3", "t_r4", "\u0275\u0275elementContainerStart", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "route_r5", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r6", "index_r7", "\u0275\u0275nextContext", "index", "ctx_r1", "\u0275\u0275resetView", "navigateTo", "\u0275\u0275elementEnd", "\u0275\u0275textInterpolate", "\u0275\u0275template", "DirectoryPickerComponent_ng_container_0_ol_15_li_1_ng_container_1_Template", "DirectoryPickerComponent_ng_container_0_ol_15_li_1_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "\u0275\u0275classMapInterpolate1", "routeStack", "peek", "last_r8", "nonActive_r9", "DirectoryPickerComponent_ng_container_0_ol_15_li_1_Template", "items", "t_r10", "folder_r12", "_r11", "$implicit", "selectNode", "\u0275\u0275pureFunction1", "_c1", "disabled", "\u0275\u0275propertyInterpolate1", "idx_r13", "name", "\u0275\u0275propertyInterpolate", "helpUrl", "\u0275\u0275sanitizeUrl", "_r1", "close", "\u0275\u0275twoWayListener", "$event", "i0", "\u0275\u0275twoWayBindingSet", "path", "focus$", "next", "target", "value", "click$", "updateTable", "DirectoryPickerComponent_ng_container_0_ng_template_12_Template", "DirectoryPickerComponent_ng_container_0_ol_15_Template", "DirectoryPickerComponent_ng_container_0_ng_template_16_Template", "goBack", "DirectoryPickerComponent_ng_container_0_tr_31_Template", "DirectoryPickerComponent_ng_container_0_a_33_Template", "share", "\u0275\u0275twoWayProperty", "search", "rt_r14", "undefined", "noBreadcrumb_r15", "folders", "length", "DirectoryPickerComponent", "constructor", "modal", "libraryService", "startingFolder", "WikiLink", "Library", "currentRoot", "Stack", "Subject", "searching", "searchFailed", "text$", "debouncedText$", "pipe", "debounceTime", "distinctUntilChanged", "clicksWithClosedPopup$", "filter", "instance", "isPopupOpen", "inputFocus$", "merge", "tap", "switchMap", "term", "listDirectories", "map", "f", "fullPath", "catchError", "of", "ngOnInit", "split", "folders2", "endsWith", "forEach", "folder", "push", "join", "loadChildren", "pop", "stackPeek", "subscribe", "err", "item", "find", "success", "folderPath", "\u0275\u0275directiveInject", "NgbActiveModal", "LibraryService", "selectors", "viewQuery", "rf", "ctx", "DirectoryPickerComponent_ng_container_0_Template", "ReactiveFormsModule", "DefaultValueAccessor", "NgControlStatus", "NgbTypeahead", "FormsModule", "NgModel", "NgbHighlight", "NgIf", "NgFor", "NgClass", "TranslocoDirective", "styles"] }