{"version":3,"file":"ng3-file-list.mjs","sources":["../../../projects/ng3-file-list/src/lib/ng3-file-list.component.ts","../../../projects/ng3-file-list/src/lib/ng3-file-list.component.html","../../../projects/ng3-file-list/src/lib/ng3-file-list.module.ts","../../../projects/ng3-file-list/src/public-api.ts","../../../projects/ng3-file-list/src/ng3-file-list.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { MomentModule } from 'ngx-moment'\r\n\r\nimport { Group, MeshBasicMaterial, Object3D } from 'three';\r\n\r\nimport { NgtObjectProps } from '@angular-three/core';\r\nimport { NgtGroup } from '@angular-three/core/group';\r\nimport { NgtMeshBasicMaterial } from '@angular-three/core/materials';\r\n\r\nimport { FlatUIBaseButton, FlatUIList, FlatUIMaterialIcon, FlatUIMenuItem, FlatUIPrompt, FlatUIConfirm, FlatUIInputService, FlatUILabel, FlatUIMenuMini, FlatUISelect, InteractiveObjects, ListItem, MenuItem } from 'ng3-flat-ui';\r\nimport { ConflictBehavior, FileData, FilterData, Ng3FileList } from 'ngx-cloud-storage-types';\r\n\r\nexport interface SaveFile {\r\n  prompttitle: string,\r\n  promptvalue: string,\r\n  conflictBehavior: ConflictBehavior,\r\n  content: string,\r\n}\r\n\r\nexport interface FileSelected {\r\n  item: FileData;\r\n  downloadUrl: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'ng3-file-list[service]',\r\n  exportAs: 'Ng3FileList',\r\n  templateUrl: './ng3-file-list.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [FlatUIInputService],\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    MomentModule,\r\n    NgtGroup,\r\n    NgtMeshBasicMaterial,\r\n    FlatUISelect,\r\n    FlatUIList,\r\n    FlatUIBaseButton,\r\n    FlatUIMaterialIcon,\r\n    FlatUILabel,\r\n    FlatUIMenuMini,\r\n    FlatUIMenuItem,\r\n    FlatUIPrompt,\r\n    FlatUIConfirm,\r\n]\r\n})\r\nexport class Ng3FileListComponent extends NgtObjectProps<Group> {\r\n  @Input() service!: Ng3FileList;\r\n\r\n  @Input() width = 2;\r\n\r\n  private _height = 1;\r\n  @Input()\r\n  get height(): number { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    this.rowcount = Math.round((newvalue - 0.26) / (this.rowheight + 0.01));\r\n  }\r\n\r\n  private _filters: Array<FilterData> = [\r\n    { name: 'All Files', filter: '' },\r\n  ]\r\n\r\n  @Input()\r\n  get filters(): Array<FilterData> { return this._filters }\r\n  set filters(newvalue: Array<FilterData>) {\r\n    this._filters = newvalue;\r\n    this.filterlist = this.filters.map(item => <ListItem>{ text: this.displayfilter(item) });\r\n    if (this.filterlist.length > 0)\r\n      this.changeFilter(this.filterlist[0].text);\r\n  }\r\n\r\n  protected filtereditems: Array<ListItem> = [];\r\n  protected filtervalue = 'All Files';\r\n  protected filterlist: Array<ListItem> = [{ text: 'All Files' }];\r\n\r\n  @Input() filterlistwidth = 1;\r\n  protected get filterlistheight(): number { return (this.filterlist.length * 0.11) + 0.06 }\r\n\r\n  @Input()\r\n  set addmenuitems(newvalue: Array<MenuItem>) {\r\n    this.menuitems.push(...newvalue);\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private folderid?: string;\r\n  @Input()\r\n  get startfolderid(): string | undefined { return this.folderid }\r\n  set startfolderid(newvalue: string | undefined) {\r\n    this.folderid = newvalue;\r\n    this.resetback();\r\n    this.refresh();\r\n  }\r\n\r\n  @Input() selectfolder = false;\r\n\r\n  private _savefile!: SaveFile;\r\n  @Input()\r\n  get savefile(): SaveFile { return this._savefile }\r\n  set savefile(newvalue: SaveFile | undefined) {\r\n    if (!newvalue) return;\r\n\r\n    this._savefile = newvalue;\r\n    this.createFilePrompt(newvalue.prompttitle, newvalue.promptvalue, newvalue.content, newvalue.conflictBehavior);\r\n  }\r\n\r\n  @Output() fileselected = new EventEmitter<FileSelected>();\r\n  @Output() folderselected = new EventEmitter<FileData>();\r\n  @Output() foldercreated = new EventEmitter<FileData>();\r\n  @Output() deleted = new EventEmitter<FileData>();\r\n  @Output() renamed = new EventEmitter<FileData>();\r\n  @Output() saved = new EventEmitter<FileData>();\r\n  @Output() close = new EventEmitter<void>();\r\n\r\n  protected rowheight = 0.2;\r\n  protected rowcount = 4;\r\n\r\n  protected fileid?: string;\r\n  protected backfolderids: Array<string | undefined> = [];\r\n\r\n  protected menuitems: Array<MenuItem> = [\r\n    { text: 'Back', keycode: 'Backspace', icon: 'arrow_back', enabled: false, visible: true, selected: () => { this.moveback() } },\r\n    { text: 'Refresh', keycode: 'F5', icon: 'refresh', enabled: true, visible: true, selected: () => { this.refresh(); } },\r\n    { text: 'Create Folder', keycode: '', icon: 'create_new_folder', enabled: true, visible: true, color: new MeshBasicMaterial({ color: 'yellow' }), selected: () => { this.createFolder(); } },\r\n  ]\r\n  protected menuwidth = 0;\r\n\r\n  private driveitems: Array<FileData> = [];\r\n\r\n\r\n  private filter: Array<string> = [''];\r\n\r\n  protected displayfilter(item: FilterData) {\r\n    if (item.filter) return `${item.name} (${item.filter})`\r\n    return item.name\r\n  }\r\n\r\n  constructor(\r\n    public input: FlatUIInputService,\r\n    private cd: ChangeDetectorRef,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  protected async refresh() {\r\n    await this.getFiles(this.folderid);\r\n  }\r\n\r\n  private async getFiles(id?: string) {\r\n    await this.service.getFolderItems(id).then(data => {\r\n      this.driveitems = data;\r\n      this.applyFilter();\r\n    });\r\n  }\r\n\r\n  protected downloadUrl?: string;\r\n\r\n  protected async openFile(item: FileData) {\r\n    if (!item.id || !this.visible) return;\r\n\r\n    if (item.isfolder) {\r\n      this.backfolderids.push(this.folderid);\r\n      this.back.enabled = true;\r\n\r\n      await this.getFiles(item.id);\r\n      this.folderid = item.id;\r\n      this.fileid = this.downloadUrl = undefined;\r\n    }\r\n    else {\r\n      if (this.showprompt) {\r\n        this.promptvalue = item.name;\r\n      }\r\n      else {\r\n        await this.service.getDownloadUrl(item.id).then(data => {\r\n          this.downloadUrl = data;\r\n          this.fileid = item.id;\r\n          if (data) {\r\n            this.fileselected.next({ item, downloadUrl: data });\r\n          }\r\n        });\r\n      }\r\n    }\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  private get back(): MenuItem { return this.menuitems[0] }\r\n  private resetback() {\r\n    this.backfolderids.length = 0;\r\n    this.back.enabled = false;\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  protected async moveback() {\r\n    if (!this.visible) return;\r\n\r\n    this.fileid = this.downloadUrl = undefined;\r\n    this.folderid = this.backfolderids.pop();\r\n    await this.getFiles(this.folderid);\r\n\r\n    this.back.enabled = this.backfolderids.length > 0;\r\n  }\r\n\r\n  protected async createFolder() {\r\n    if (!this.visible) return;\r\n\r\n    await this.prompt('Enter folder name', 'newfolder').then(async foldername => {\r\n      if (!foldername) return;\r\n\r\n      await this.service.createFolder(foldername, this.folderid).then(data => {\r\n        if (data) {\r\n          this.driveitems.push(data);\r\n          this.applyFilter();\r\n\r\n          this.foldercreated.next(data);\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  protected async deleteItem(item: FileData) {\r\n    if (!this.visible) return;\r\n\r\n    await this.confirm('Delete file?').then(async dodelete => {\r\n      if (!dodelete) return;\r\n\r\n      const fileid = item.id;\r\n      await this.service.deleteItem(fileid).then(data => {\r\n        this.driveitems = this.driveitems.filter(item => item.id != fileid);\r\n        this.filtereditems = this.driveitems.filter(item => item.id != fileid).map(item => <ListItem>{ text: item.name, data: item });\r\n\r\n        if (fileid == this.fileid) this.fileid = this.downloadUrl = undefined;\r\n        if (fileid == this.folderid) this.folderid = undefined;\r\n\r\n        this.deleted.next(item);\r\n      });\r\n    });\r\n  }\r\n\r\n  private async createFile(filename: string, content: string, conflictBehaivor: ConflictBehavior, folderid?: string) {\r\n    await this.service.createFile(folderid, filename, content, conflictBehaivor).then(data => {\r\n      if (!data) return;\r\n      this.fileid = data.id;\r\n\r\n      this.saved.next(data);\r\n      this.close.next();\r\n\r\n      this.refresh();\r\n    });\r\n  }\r\n\r\n  private async overwrite(filename: string): Promise<boolean> {\r\n    let result = true;\r\n    const item = this.driveitems.find(item => item.name == filename);\r\n    if (item) {\r\n      await this.confirm(\"Overwrite?\").then(overwrite => {\r\n        result = overwrite\r\n      });\r\n    }\r\n    return result;\r\n  }\r\n\r\n  public async createFilePrompt(title: string, defaultfile: string, content: string, conflictBehaivor: ConflictBehavior) {\r\n    if (!this.visible) return;\r\n    \r\n    await this.prompt(title, defaultfile).then(async filename => {\r\n      \r\n      if (filename) {\r\n        await this.overwrite(filename).then(async overwrite => {\r\n          if (overwrite) {\r\n            await this.createFile(filename, content, conflictBehaivor, this.folderid);\r\n          }\r\n        })\r\n      }\r\n      this.close.next();\r\n    })\r\n  }\r\n\r\n  protected async duplicateFile(item: FileData) {\r\n    if (!this.visible) return;\r\n\r\n    await this.service.duplicateFile(item.id, 'copy of ' + item.name).then(data => {\r\n      const timer = setTimeout(() => {\r\n        this.refresh();\r\n        clearTimeout(timer);\r\n      }, 1000)\r\n    });\r\n  }\r\n\r\n  protected async renameItem(item: FileData) {\r\n    if (!this.visible) return;\r\n\r\n    await this.prompt('Enter new name', item.name).then(async newname => {\r\n      if (newname) {\r\n        await this.service.renameItem(item.id, newname).then(data => {\r\n          if (data && data.name) {\r\n            item.name = data.name;\r\n            this.cd.detectChanges();\r\n\r\n            this.renamed.next(item);\r\n          }\r\n        });\r\n      }\r\n    })\r\n  }\r\n\r\n  private applyFilter() {\r\n    const driveitems = this.driveitems.filter(item => {\r\n      return this.filter[0] == '' || item.isfolder || this.filter.includes(item.extension)\r\n    });\r\n    this.filtereditems = driveitems.map(item => <ListItem>{ text: item.name, data: item });\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  protected changeFilter(newfilter: string) {\r\n    if (!this.visible) return;\r\n    if (newfilter == this.filtervalue) return;\r\n\r\n    this.filtervalue = newfilter;\r\n    const item = this.filters.find(item => newfilter.startsWith(item.name));\r\n    if (item) {\r\n      this.filter = item.filter.split(',');\r\n      this.applyFilter();\r\n    }\r\n  }\r\n\r\n  private popup = new Object3D\r\n\r\n  showprompt = false;\r\n  prompttitle!: string;\r\n  promptvalue!: string;\r\n\r\n  private prompt(title: string, defaultvalue: string): Promise<string | undefined> {\r\n    this.prompttitle = title;\r\n    this.promptvalue = defaultvalue;\r\n    this.showprompt = true;\r\n    this.showconfirm = false;\r\n\r\n    return new Promise((resolve, reject) => {\r\n      this.popup.addEventListener('prompt', (e: any) => {\r\n        if (e)\r\n          resolve(e.result);\r\n        else\r\n          reject();\r\n      })\r\n    });\r\n  }\r\n\r\n  protected promptresult(result?: string) {\r\n    this.popup.dispatchEvent({ type: 'prompt', result });\r\n    this.showprompt = false;\r\n  }\r\n\r\n  showconfirm = false;\r\n  confirmtitle!: string;\r\n\r\n  private confirm(title: string): Promise<boolean> {\r\n    this.confirmtitle = title;\r\n    this.showconfirm = true;\r\n    this.showprompt = false;\r\n\r\n    return new Promise((resolve, reject) => {\r\n      this.popup.addEventListener('confirm', (e: any) => {\r\n        if (e)\r\n          resolve(e.result);\r\n        else\r\n          reject(false);\r\n      })\r\n    });\r\n  }\r\n\r\n  protected confirmresult(result: boolean) {\r\n    this.popup.dispatchEvent({ type: 'confirm', result });\r\n    this.showconfirm = false\r\n  }\r\n}\r\n","<ngt-mesh-basic-material #yellow noAppend color=\"yellow\"></ngt-mesh-basic-material>\r\n<ngt-mesh-basic-material #black noAppend color=\"black\"></ngt-mesh-basic-material>\r\n\r\n<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n  <flat-ui-menu-mini #menu [menuitems]=\"menuitems\" [selectable]=\"selectable\"></flat-ui-menu-mini>\r\n\r\n  <flat-ui-select #select [text]=\"filtervalue\" [position]=\"[menu.width+filterlistwidth/2, 0, 0]\" [selectable]=\"selectable\"\r\n                  [width]=\"filterlistwidth\"\r\n                  (change)=\"changeFilter($event)\" (openinput)=\"filters.length>1 ? input.openlist($event, select, filterlist, filtervalue) : ''\">\r\n  </flat-ui-select>\r\n\r\n  <flat-ui-list [position]=\"[width/2, -height/2-0.15, 0]\" [width]=\"width\" [height]=\"height\" [rowcount]=\"rowcount\" [rowsize]=\"rowheight\"\r\n                [enablehover]=\"true\" [list]=\"filtereditems\" [selectable]=\"selectable\" [emptytext]=\"'Folder is empty'\">\r\n\r\n    <ng-template #listItem let-list=\"list\" let-text=\"text\" let-width=\"width\" let-data=\"data\" let-index=\"index\" let-parent=\"parent\">\r\n      <ngt-group *ngIf=\"data\" [appendTo]=\"parent\">\r\n        <flat-ui-base-button [selectable]=\"selectable\" [text]=\"text\" [width]=\"width\" [height]=\"rowheight\" (hover)=\"data.visible=$event\" (pressed)=\"openFile(data)\">\r\n          <ng-template #button let-parent=\"parent\">\r\n            <ngt-group [appendTo]=\"parent\">\r\n\r\n              <flat-ui-material-icon [position]=\"[-width/2+0.1, 0, 0]\" [fontsize]=\"0.1\" [labelmaterial]=\"data.isfolder ? yellow.instance.value : black.instance.value\" [text]=\"data.isfolder ? 'folder' : 'insert_drive_file'\"></flat-ui-material-icon>\r\n              <flat-ui-label [position]=\"[0.1, 0.05, 0]\" [cliptowidth]=\"true\" [text]=\"data.name\" [width]=\"width-0.2\"></flat-ui-label>\r\n              <flat-ui-label [position]=\"[0, -0.05, 0]\" text=\"{{data.size}}{{data.lastmodified | amTimeAgo}}\" [width]=\"width-0.4\"></flat-ui-label>\r\n\r\n            </ngt-group>\r\n\r\n            <flat-ui-menu-mini [visible]=\"data.visible\" [position]=\"[width/2-0.4, -0.04, 0]\" [selectable]=\"selectable\" [stoppropagation]=\"false\">\r\n              <flat-ui-menu-item [text]=\"'Rename'\" [icon]=\"'drive_file_rename_outline'\" (pressed)=\"renameItem(data)\"></flat-ui-menu-item>\r\n              <flat-ui-menu-item *ngIf=\"!data.isfolder\" [text]=\"'Duplicate File'\" [icon]=\"'file_copy'\" (pressed)=\"duplicateFile(data)\"></flat-ui-menu-item>\r\n              <flat-ui-menu-item [text]=\"'Delete'\" [icon]=\"'delete'\" (pressed)=\"deleteItem(data)\"></flat-ui-menu-item>\r\n              <flat-ui-menu-item *ngIf=\"selectfolder && data.isfolder\" [text]=\"'Select Folder'\" [icon]=\"'check'\" (pressed)=\"folderselected.next(data)\"></flat-ui-menu-item>\r\n            </flat-ui-menu-mini>\r\n\r\n          </ng-template>\r\n        </flat-ui-base-button>\r\n      </ngt-group>\r\n    </ng-template>\r\n\r\n  </flat-ui-list>\r\n\r\n  <flat-ui-prompt *ngIf=\"showprompt\" [title]=\"prompttitle\" [defaultvalue]=\"promptvalue\"\r\n                  [width]=\"1.5\" [selectable]=\"selectable\"\r\n                  [position]=\"[width/2, -height-0.4, 0]\"\r\n                  (result)=\"promptresult($event)\"></flat-ui-prompt>\r\n\r\n  <flat-ui-confirm *ngIf=\"showconfirm\" [title]=\"confirmtitle\" [width]=\"1.5\" [selectable]=\"selectable\"\r\n                   [position]=\"[width/2, -height-0.4, 0.001]\"\r\n                   (result)=\"confirmresult($event)\"></flat-ui-confirm>\r\n</ngt-group>\r\n\r\n\r\n<flat-ui-list *ngIf=\"input.showlist\" [list]=\"input.list\" [selectedtext]=\"input.method.text\" [rowcount]=\"filterlist.length\"\r\n              [showpaging]=\"false\" [height]=\"filterlistheight\" [width]=\"filterlistwidth\"\r\n              [position]=\"input.position\" [rotation]=\"input.rotation\" [scale]=\"scale\" [selectable]=\"selectable\"\r\n              (change)=\"input.method.text = $event.text;input.showlist=false\" (close)=\"input.showlist=false;input.closeinput()\">\r\n</flat-ui-list>\r\n\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MomentModule } from 'ngx-moment';\r\n\r\nimport { NgtGroupModule } from '@angular-three/core/group';\r\nimport { NgtMeshBasicMaterialModule } from '@angular-three/core/materials';\r\n\r\nimport { Ng3FlatUiModule } from 'ng3-flat-ui';\r\n\r\nimport { Ng3FileListComponent } from './ng3-file-list.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    MomentModule,\r\n    NgtGroupModule,\r\n    NgtMeshBasicMaterialModule,\r\n    Ng3FlatUiModule,\r\n\r\n    Ng3FileListComponent,\r\n  ],\r\n  exports: [\r\n    Ng3FileListComponent\r\n  ]\r\n})\r\nexport class Ng3FileListModule { }\r\n","/*\n * Public API Surface of ng3-file-list\n */\n\nexport * from './lib/ng3-file-list.component';\nexport * from './lib/ng3-file-list.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}