Your search did not match any results.
File Manager

Toolbar and Context Menu

The FileManager widget provides the following UI customization options:

  • The toolbar option specifies the toolbar's visibility and available commands.
  • The contextMenu option specifies the context menu's availability and its commands.

The toolbar and context menu support context-invariant and context-sensitive items that can be visible or hidden depending on user action.

Copy to CodeSandBox
Apply
Reset
<dx-file-manager id="fileManager" [fileSystemProvider]="fileItems" (onContextMenuItemClick)="onItemClick($event)" height="450"> <dxo-permissions create="true" delete="true" rename="true" download="true"> </dxo-permissions> <dxo-item-view [showParentFolder]="false"> <dxo-details> <dxi-column dataField="thumbnail"></dxi-column> <dxi-column dataField="name"></dxi-column> <dxi-column dataField="category" caption="Category" width="95"></dxi-column> <dxi-column dataField="dateModified"></dxi-column> <dxi-column dataField="size"></dxi-column> </dxo-details> </dxo-item-view> <dxo-toolbar> <dxi-item name="showNavPane" visible="true"></dxi-item> <dxi-item name="separator"></dxi-item> <dxi-item name="create"></dxi-item> <dxi-item widget="dxMenu" location="before" [options]="newFileMenuOptions"></dxi-item> <dxi-item name="refresh"></dxi-item> <dxi-item name="separator" location="after"></dxi-item> <dxi-item name="switchView"></dxi-item> <dxi-file-selection-item name="rename"></dxi-file-selection-item> <dxi-file-selection-item name="separator"></dxi-file-selection-item> <dxi-file-selection-item name="delete"></dxi-file-selection-item> <dxi-file-selection-item name="separator"></dxi-file-selection-item> <dxi-file-selection-item widget="dxMenu" location="before" [options]="changeCategoryMenuOptions"></dxi-file-selection-item> <dxi-file-selection-item name="refresh"></dxi-file-selection-item> <dxi-file-selection-item name="clearSelection"></dxi-file-selection-item> </dxo-toolbar> <dxo-context-menu> <dxi-item name="create"></dxi-item> <dxi-item text="Create new file" icon="plus"> <dxi-item text="Text Document" [options]="{ extension: '.txt' }"></dxi-item> <dxi-item text="RTF Document" [options]="{ extension: '.rtf' }"></dxi-item> <dxi-item text="Spreadsheet" [options]="{ extension: '.xls' }"></dxi-item> </dxi-item> <dxi-item name="rename" beginGroup="true"></dxi-item> <dxi-item name="delete"></dxi-item> <dxi-item text="Category" icon="tags" beginGroup="true"> <dxi-item text="Work" [options]="{ category: 'Work' }"></dxi-item> <dxi-item text="Important" [options]="{ category: 'Important' }"></dxi-item> <dxi-item text="Home" [options]="{ category: 'Home' }"></dxi-item> <dxi-item text="None" [options]="{ category: '' }"></dxi-item> </dxi-item> <dxi-item name="refresh"></dxi-item> </dxo-context-menu> </dx-file-manager>
import { NgModule, Component, ViewChild, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxFileManagerModule, DxFileManagerComponent } from 'devextreme-angular'; import FileManager from "devextreme/ui/file_manager"; import { Service, FileItem } from './app.service'; if (!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ styleUrls: ['app/app.component.css'], selector: 'demo-app', templateUrl: 'app/app.component.html', providers: [Service], preserveWhitespaces: true }) export class AppComponent { @ViewChild(DxFileManagerComponent, { static: false }) fileManager: DxFileManagerComponent; fileItems: FileItem[]; newFileMenuOptions: any; changeCategoryMenuOptions: any; constructor(service: Service) { this.fileItems = service.getFileItems(); this.newFileMenuOptions = { items: [ { text: "Create new file", icon: "plus", items: [ { text: "Text Document", options: { extension: ".txt", } }, { text: "RTF Document", options: { extension: ".rtf", } }, { text: "Spreadsheet", options: { extension: ".xls", } } ] } ], onItemClick: this.onItemClick.bind(this) }; this.changeCategoryMenuOptions = { items: [ { text: "Category", icon: "tags", items: [ { text: "Work", options: { category: "Work" } }, { text: "Important", options: { category: "Important" } }, { text: "Home", options: { category: "Home" } }, { text: "None", options: { category: "" } } ] } ], onItemClick: this.onItemClick.bind(this) }; this.onItemClick = this.onItemClick.bind(this); } onItemClick({itemData}) { let updated = false; const extension = itemData.options ? itemData.options.extension : undefined; const category = itemData.options ? itemData.options.category : undefined; if(extension) { updated = this.createFile(extension); } else if(category !== undefined) { updated = this.updateCategory(category); } if(updated) { this.fileManager.instance.refresh(); } } createFile(fileExtension) { const currentDirectory = this.fileManager.instance.getCurrentDirectory(); const newItem = { __KEY__: Date.now(), name: "New file" + fileExtension, isDirectory: false, size: 0 }; if(currentDirectory.dataItem) { currentDirectory.dataItem.items.push(newItem); } else { this.fileItems.push(newItem); } return true; } updateCategory(newCategory) { const selectedItems = this.fileManager.instance.getSelectedItems(); selectedItems.forEach(function(selectedItem) { selectedItem.dataItem.category = newCategory; }); return selectedItems.length > 0; } } @NgModule({ imports: [ BrowserModule, DxFileManagerModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
import { Injectable } from '@angular/core'; export class FileItem { name: string; isDirectory: boolean; category?: string; size?: number; items?: FileItem[]; } let fileItems: FileItem[] = [{ 'name': 'Documents', 'isDirectory': true, 'category': 'Work', 'items': [{ 'name': 'Projects', 'isDirectory': true, 'category': 'Work', 'items': [{ 'name': 'About.rtf', 'isDirectory': false, 'size': 1024 }, { 'name': 'Passwords.rtf', 'isDirectory': false, 'category': 'Important', 'size': 2048 }] }, { 'name': 'About.xml', 'isDirectory': false, 'size': 1024 }, { 'name': 'Managers.rtf', 'isDirectory': false, 'size': 2048 }, { 'name': 'ToDo.txt', 'isDirectory': false, 'size': 3072 }], }, { 'name': 'Images', 'isDirectory': true, 'category': 'Home', 'items': [{ 'name': 'logo.png', 'isDirectory': false, 'size': 20480 }, { 'name': 'banner.gif', 'isDirectory': false, 'size': 10240 }] }, { 'name': 'System', 'isDirectory': true, 'category': 'Important', 'items': [{ 'name': 'Employees.txt', 'isDirectory': false, 'category': 'Important', 'size': 3072 }, { 'name': 'PasswordList.txt', 'isDirectory': false, 'category': 'Important', 'size': 5120 }] }, { 'name': 'Description.rtf', 'isDirectory': false, 'size': 1024 }, { 'name': 'Description.txt', 'isDirectory': false, 'size': 2048 }]; @Injectable() export class Service { getFileItems(): FileItem[] { return fileItems; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular and DevExtreme here: // https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Create_a_DevExtreme_Application/ System.config({ transpiler: 'ts', typescriptOptions: { module: "system", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" }, }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.4.5/lib/typescript.js', '@angular': 'npm:@angular', 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs', 'devextreme': 'npm:devextreme@20.1', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.7/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram@1.0.5', 'devexpress-gantt': 'npm:devexpress-gantt@1.0.3', 'devextreme-angular': 'npm:devextreme-angular@20.1' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, }, packageConfigPaths: [ "npm:*/package.json", "npm:@angular/*/package.json", "npm:@angular/common/*/package.json", "npm:rxjs/operators/package.json", "npm:devextreme-angular@20.1/*/package.json", "npm:devextreme-angular@20.1/ui/*/package.json", ] });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.1.4/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.1.4/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.6.25/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>