@deephaven/file-explorer 0.19.2-beta.5 → 0.20.0

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.
@@ -29,11 +29,11 @@ export interface FileStorageTable extends StorageTable<FileStorageItem> {
29
29
  * @param path The path to expand
30
30
  * @param expanded What expanded state to set
31
31
  */
32
- setExpanded(path: string, expanded: boolean): Promise<void>;
32
+ setExpanded(path: string, expanded: boolean): void;
33
33
  /**
34
34
  * Collapses all directories
35
35
  */
36
- collapseAll(): Promise<void>;
36
+ collapseAll(): void;
37
37
  }
38
38
  /**
39
39
  * FileStorage abstraction. Has methods for managing files, and for retrieving a table to browse files.
@@ -1 +1 @@
1
- {"version":3,"file":"FileStorage.d.ts","sourceRoot":"","sources":["../src/FileStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE5C,MAAM,WAAW,eAAgB,SAAQ,WAAW,EAAE,YAAY;IAChE,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,eAAe,GACpB,IAAI,IAAI,oBAAoB,CAE9B;AAED;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,YAAY;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,eAAe,CAAC;IACrE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7C;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACzD;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"FileStorage.d.ts","sourceRoot":"","sources":["../src/FileStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE5C,MAAM,WAAW,eAAgB,SAAQ,WAAW,EAAE,YAAY;IAChE,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,eAAe,GACpB,IAAI,IAAI,oBAAoB,CAE9B;AAED;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,YAAY;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,eAAe,CAAC;IACrE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnD;;OAEG;IACH,WAAW,IAAI,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7C;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACzD;AAED,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileStorage.js","names":["isDirectory","file","type"],"sources":["../src/FileStorage.ts"],"sourcesContent":["import { StorageTable, StorageItem } from '@deephaven/storage';\n\n/**\n * Basic metadata of the file\n */\nexport interface FileMetadata {\n /** Full path of the file */\n filename: string;\n\n /** Just the file name part of the file (no path) */\n basename: string;\n}\n\nexport type FileType = 'file' | 'directory';\n\nexport interface FileStorageItem extends StorageItem, FileMetadata {\n type: FileType;\n}\n\nexport interface DirectoryStorageItem extends FileStorageItem {\n type: 'directory';\n isExpanded: boolean;\n}\n\nexport function isDirectory(\n file: FileStorageItem\n): file is DirectoryStorageItem {\n return file.type === 'directory';\n}\n\n/**\n * A file including it's contents\n */\nexport interface File extends FileMetadata {\n content: string;\n}\n\nexport interface FileStorageTable extends StorageTable<FileStorageItem> {\n setSearch(search: string): void;\n\n /**\n * @param path The path to expand\n * @param expanded What expanded state to set\n */\n setExpanded(path: string, expanded: boolean): Promise<void>;\n\n /**\n * Collapses all directories\n */\n collapseAll(): Promise<void>;\n}\n\n/**\n * FileStorage abstraction. Has methods for managing files, and for retrieving a table to browse files.\n */\nexport interface FileStorage {\n /**\n * Retrieve a table to view the file list\n */\n getTable(): Promise<FileStorageTable>;\n\n /**\n * Save a file\n * @param file The file to save\n */\n saveFile(file: File): Promise<File>;\n\n /**\n * Load the contents of a file\n * @param name The file to load, including the full path\n */\n loadFile(name: string): Promise<File>;\n\n /**\n * Delete a file\n * @param name The full name of the file to delete\n */\n deleteFile(name: string): Promise<void>;\n\n /**\n * Move a file to a new location\n * @param name Source file name\n * @param newName The new file name, including path\n */\n moveFile(name: string, newName: string): Promise<void>;\n\n /**\n * Get the info for the file at the specified path.\n * If the file does not exists, rejects with a FileNotFoundError\n * @param name The file name to check, including path\n * @returns The FileStorageItem for the path specified, or reject with a FileNotFoundError if it does not exist.\n */\n info(name: string): Promise<FileStorageItem>;\n\n /**\n * Create the directory at the given path\n * @param name The full directory path\n */\n createDirectory(name: string): Promise<FileStorageItem>;\n}\n\nexport default FileStorage;\n"],"mappings":"AAEA;AACA;AACA;AAoBA,OAAO,SAASA,WAAT,CACLC,IADK,EAEyB;EAC9B,OAAOA,IAAI,CAACC,IAAL,KAAc,WAArB;AACD;AAED;AACA;AACA"}
1
+ {"version":3,"file":"FileStorage.js","names":["isDirectory","file","type"],"sources":["../src/FileStorage.ts"],"sourcesContent":["import { StorageTable, StorageItem } from '@deephaven/storage';\n\n/**\n * Basic metadata of the file\n */\nexport interface FileMetadata {\n /** Full path of the file */\n filename: string;\n\n /** Just the file name part of the file (no path) */\n basename: string;\n}\n\nexport type FileType = 'file' | 'directory';\n\nexport interface FileStorageItem extends StorageItem, FileMetadata {\n type: FileType;\n}\n\nexport interface DirectoryStorageItem extends FileStorageItem {\n type: 'directory';\n isExpanded: boolean;\n}\n\nexport function isDirectory(\n file: FileStorageItem\n): file is DirectoryStorageItem {\n return file.type === 'directory';\n}\n\n/**\n * A file including it's contents\n */\nexport interface File extends FileMetadata {\n content: string;\n}\n\nexport interface FileStorageTable extends StorageTable<FileStorageItem> {\n setSearch(search: string): void;\n\n /**\n * @param path The path to expand\n * @param expanded What expanded state to set\n */\n setExpanded(path: string, expanded: boolean): void;\n\n /**\n * Collapses all directories\n */\n collapseAll(): void;\n}\n\n/**\n * FileStorage abstraction. Has methods for managing files, and for retrieving a table to browse files.\n */\nexport interface FileStorage {\n /**\n * Retrieve a table to view the file list\n */\n getTable(): Promise<FileStorageTable>;\n\n /**\n * Save a file\n * @param file The file to save\n */\n saveFile(file: File): Promise<File>;\n\n /**\n * Load the contents of a file\n * @param name The file to load, including the full path\n */\n loadFile(name: string): Promise<File>;\n\n /**\n * Delete a file\n * @param name The full name of the file to delete\n */\n deleteFile(name: string): Promise<void>;\n\n /**\n * Move a file to a new location\n * @param name Source file name\n * @param newName The new file name, including path\n */\n moveFile(name: string, newName: string): Promise<void>;\n\n /**\n * Get the info for the file at the specified path.\n * If the file does not exists, rejects with a FileNotFoundError\n * @param name The file name to check, including path\n * @returns The FileStorageItem for the path specified, or reject with a FileNotFoundError if it does not exist.\n */\n info(name: string): Promise<FileStorageItem>;\n\n /**\n * Create the directory at the given path\n * @param name The full directory path\n */\n createDirectory(name: string): Promise<FileStorageItem>;\n}\n\nexport default FileStorage;\n"],"mappings":"AAEA;AACA;AACA;AAoBA,OAAO,SAASA,WAAT,CACLC,IADK,EAEyB;EAC9B,OAAOA,IAAI,CAACC,IAAL,KAAc,WAArB;AACD;AAED;AACA;AACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"NewItemModal.d.ts","sourceRoot":"","sources":["../src/NewItemModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,SAAS,MAAM,YAAY,CAAC;AAUnC,OAAO,EACL,iBAAiB,EAGjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,WAAW,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,qBAAqB,CAAC;AAM7B,oBAAY,iBAAiB,GAAG,OAAO,YAAY,CAAC,YAAY,GAAG;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,wBAAwB,EAAE,OAAO,CAAC;IAClC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,cAAM,YAAa,SAAQ,aAAa,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC5E,MAAM,CAAC,SAAS;;;;;;;;;;MAUd;IAEF,MAAM,CAAC,YAAY;;;;;yBAKA,MAAM,KAAG,IAAI;wBAChB,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM;IAO/C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;gBAMxB,KAAK,EAAE,iBAAiB;IAkCpC,kBAAkB,CAChB,SAAS,EAAE,iBAAiB,EAC5B,SAAS,EAAE,iBAAiB,GAC3B,IAAI;IAoBP,oBAAoB,IAAI,IAAI;IAU5B,OAAO,CAAC,QAAQ,CAAuC;IAEvD,OAAO,CAAC,yBAAyB,CAAC,CAA4B;IAE9D,OAAO,CAAC,6BAA6B,CAAC,CAA4C;IAElF,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,aAAa,CAAQ;IAE7B,UAAU,IAAI,IAAI;IAclB,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,UAAQ,GACpB,iBAAiB,CAAC,MAAM,CAAC;IAUtB,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC;IAsBlB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3D,iBAAiB,IAAI,IAAI;IAIzB,iBAAiB,IAAI,IAAI;IAIzB,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAKxD,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAezC,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAqBrC,qBAAqB,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAQvC,qBAAqB,IAAI,IAAI;IAO7B,sBAAsB,IAAI,IAAI;IAQ9B,2BAA2B,IAAI,IAAI;IAanC,4BAA4B,IAAI,IAAI;IAMpC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAexB,WAAW,CAAC,kBAAkB,UAAQ,GAAG,IAAI;IAmD7C,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAInD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS;IA2BhD,MAAM,IAAI,KAAK,CAAC,SAAS;CA6G1B;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"NewItemModal.d.ts","sourceRoot":"","sources":["../src/NewItemModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,SAAS,MAAM,YAAY,CAAC;AAUnC,OAAO,EACL,iBAAiB,EAGjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,WAAW,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,qBAAqB,CAAC;AAM7B,oBAAY,iBAAiB,GAAG,OAAO,YAAY,CAAC,YAAY,GAAG;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,wBAAwB,EAAE,OAAO,CAAC;IAClC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,cAAM,YAAa,SAAQ,aAAa,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC5E,MAAM,CAAC,SAAS;;;;;;;;;;MAUd;IAEF,MAAM,CAAC,YAAY;;;;;yBAKA,MAAM,KAAG,IAAI;wBAChB,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM;IAO/C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;gBAMxB,KAAK,EAAE,iBAAiB;IAkCpC,kBAAkB,CAChB,SAAS,EAAE,iBAAiB,EAC5B,SAAS,EAAE,iBAAiB,GAC3B,IAAI;IAoBP,oBAAoB,IAAI,IAAI;IAU5B,OAAO,CAAC,QAAQ,CAAuC;IAEvD,OAAO,CAAC,yBAAyB,CAAC,CAA4B;IAE9D,OAAO,CAAC,6BAA6B,CAAC,CAA4C;IAElF,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,aAAa,CAAQ;IAE7B,UAAU,IAAI,IAAI;IAclB,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,UAAQ,GACpB,iBAAiB,CAAC,MAAM,CAAC;IAUtB,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC;IAsBlB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3D,iBAAiB,IAAI,IAAI;IAIzB,iBAAiB,IAAI,IAAI;IAIzB,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAKxD,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAezC,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAqBrC,qBAAqB,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAQvC,qBAAqB,IAAI,IAAI;IAO7B,sBAAsB,IAAI,IAAI;IAQ9B,2BAA2B,IAAI,IAAI;IAanC,4BAA4B,IAAI,IAAI;IAMpC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAexB,WAAW,CAAC,kBAAkB,UAAQ,GAAG,IAAI;IAmD7C,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAInD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS;IAgChD,MAAM,IAAI,KAAK,CAAC,SAAS;CAwG1B;AAED,eAAe,YAAY,CAAC"}
@@ -11,6 +11,7 @@ import { Modal, ModalBody, ModalFooter, ModalHeader, BasicModal, Button } from '
11
11
  import { Pending, PromiseUtils, ValidationError } from '@deephaven/utils';
12
12
  import Log from '@deephaven/log';
13
13
  import { vsHome } from '@deephaven/icons';
14
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
14
15
  import FileExplorer from "./FileExplorer.js";
15
16
  import FileUtils from "./FileUtils.js";
16
17
  import "./NewItemModal.css";
@@ -399,8 +400,12 @@ class NewItemModal extends PureComponent {
399
400
  kind: "ghost",
400
401
  className: "directory-breadcrumbs",
401
402
  onClick: () => this.handleBreadcrumbSelect(directoryPath),
402
- "aria-label": index === 0 ? 'home' : undefined,
403
- icon: index === 0 ? vsHome : undefined
403
+ "aria-label": index === 0 ? 'Home' : undefined,
404
+ icon: index === 0 ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
405
+ icon: vsHome,
406
+ transform: "right-1.6"
407
+ }) : undefined,
408
+ tooltip: index === 0 ? 'Home' : undefined
404
409
  }, basename), "/");
405
410
  });
406
411
  }
@@ -467,15 +472,13 @@ class NewItemModal extends PureComponent {
467
472
  onSelect: this.handleSelect,
468
473
  storage: storage,
469
474
  focusedPath: path
470
- }))))), /*#__PURE__*/React.createElement(ModalFooter, null, /*#__PURE__*/React.createElement("button", {
471
- className: "btn btn-outline-primary",
472
- onClick: onCancel,
473
- type: "button"
474
- }, "Cancel"), /*#__PURE__*/React.createElement("button", {
475
- className: "btn btn-primary",
475
+ }))))), /*#__PURE__*/React.createElement(ModalFooter, null, /*#__PURE__*/React.createElement(Button, {
476
+ kind: "secondary",
477
+ onClick: onCancel
478
+ }, "Cancel"), /*#__PURE__*/React.createElement(Button, {
479
+ kind: "primary",
476
480
  disabled: isSubmitting,
477
- onClick: this.handleModalSubmit,
478
- type: "button"
481
+ onClick: this.handleModalSubmit
479
482
  }, submitBtnLabel))), /*#__PURE__*/React.createElement(BasicModal, {
480
483
  isOpen: showOverwriteModal,
481
484
  headerText: "Confirm overwrite",
@@ -1 +1 @@
1
- {"version":3,"file":"NewItemModal.js","names":["React","PureComponent","PropTypes","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Button","Pending","PromiseUtils","ValidationError","Log","vsHome","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","log","module","NewItemModal","getValidationMessage","err","info","type","handleError","isCanceled","error","constructor","props","createRef","Map","handleModalSubmit","bind","handleModalOpened","handleSelect","handleChange","handleKeyDown","handleValidationError","handleOverwriteCancel","handleOverwriteConfirm","handleExtensionChangeCancel","handleExtensionChangeConfirm","handleBreadcrumbSelect","defaultValue","path","hasPath","getPath","state","isSubmitting","prevExtension","getExtension","showExtensionChangeModal","showOverwriteModal","value","getBaseName","componentDidUpdate","prevProps","prevState","isOpen","prevIsOpen","resetValue","isInitialLoad","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","getValidationPromise","name","checkExisting","makeCancelable","validateName","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","bool","string","isRequired","oneOf","func","shape"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, { ChangeEvent, KeyboardEvent, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n Button,\n} from '@deephaven/components';\nimport {\n CancelablePromise,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { vsHome } from '@deephaven/icons';\nimport FileExplorer from './FileExplorer';\nimport FileStorage, { FileStorageItem, FileType } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nimport './NewItemModal.scss';\nimport FileExistsError from './FileExistsError';\nimport FileNotFoundError from './FileNotFoundError';\n\nconst log = Log.module('NewItemModal');\n\nexport type NewItemModalProps = typeof NewItemModal.defaultProps & {\n isOpen: boolean;\n title: string;\n defaultValue: string;\n type: FileType;\n onSubmit: (name: string) => void;\n onCancel: () => void;\n placeholder: string;\n storage: FileStorage;\n notifyOnExtensionChange?: boolean;\n};\n\nexport type NewItemModalState = {\n path: string;\n isSubmitting: boolean;\n showExtensionChangeModal: boolean;\n showOverwriteModal: boolean;\n validationError?: ValidationError;\n value: string;\n prevExtension?: string;\n newExtension?: string;\n};\n\nclass NewItemModal extends PureComponent<NewItemModalProps, NewItemModalState> {\n static propTypes = {\n isOpen: PropTypes.bool,\n title: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n type: PropTypes.oneOf(['file', 'directory']).isRequired,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n placeholder: PropTypes.string,\n storage: PropTypes.shape({}).isRequired,\n notifyOnExtensionChange: PropTypes.bool,\n };\n\n static defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static getValidationMessage(err: Error): string {\n if (err instanceof FileExistsError && err.info.type === 'directory') {\n return 'Error: Cannot overwrite existing directory';\n }\n return `${err}`;\n }\n\n static handleError(err: Error): void {\n if (!PromiseUtils.isCanceled(err)) {\n log.error(err);\n }\n }\n\n constructor(props: NewItemModalProps) {\n super(props);\n this.handleModalSubmit = this.handleModalSubmit.bind(this);\n this.handleModalOpened = this.handleModalOpened.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleValidationError = this.handleValidationError.bind(this);\n this.handleOverwriteCancel = this.handleOverwriteCancel.bind(this);\n this.handleOverwriteConfirm = this.handleOverwriteConfirm.bind(this);\n this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(\n this\n );\n this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(\n this\n );\n this.handleBreadcrumbSelect = this.handleBreadcrumbSelect.bind(this);\n\n const { defaultValue } = props;\n\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n\n this.state = {\n isSubmitting: false,\n path,\n prevExtension: FileUtils.getExtension(defaultValue),\n showExtensionChangeModal: false,\n showOverwriteModal: false,\n value: FileUtils.getBaseName(defaultValue),\n };\n }\n\n componentDidUpdate(\n prevProps: NewItemModalProps,\n prevState: NewItemModalState\n ): void {\n const { isOpen } = this.props;\n const { isOpen: prevIsOpen } = prevProps;\n const { value, path } = this.state;\n if (!prevIsOpen && isOpen) {\n this.resetValue();\n this.isInitialLoad = true;\n }\n\n if (prevIsOpen && isOpen) {\n if (\n !this.isInitialLoad &&\n (path !== prevState.path || value !== prevState.value)\n ) {\n this.updateValidationStatus(path, value);\n }\n this.isInitialLoad = false;\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n if (this.cancelableExistingItemPromise) {\n this.cancelableExistingItemPromise.cancel();\n }\n }\n\n private inputRef = React.createRef<HTMLInputElement>();\n\n private cancelableValidatePromise?: CancelablePromise<string>;\n\n private cancelableExistingItemPromise?: CancelablePromise<FileStorageItem | null>;\n\n private pending = new Pending();\n\n private pathMap = new Map();\n\n private isInitialLoad = true;\n\n resetValue(): void {\n const { defaultValue } = this.props as NewItemModalProps;\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n this.setState({\n path,\n value: FileUtils.getBaseName(defaultValue),\n validationError: undefined,\n prevExtension: FileUtils.getExtension(defaultValue),\n isSubmitting: false,\n });\n }\n\n getValidationPromise(\n path: string,\n name: string,\n checkExisting = false\n ): CancelablePromise<string> {\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n this.cancelableValidatePromise = PromiseUtils.makeCancelable(\n this.validateName(path, name, checkExisting)\n );\n return this.cancelableValidatePromise;\n }\n\n async validateName(\n path: string,\n name: string,\n checkExisting: boolean\n ): Promise<string> {\n FileUtils.validateName(name);\n\n const { defaultValue, storage } = this.props;\n if (checkExisting) {\n const value = `${path}${name}`;\n if (value !== defaultValue) {\n try {\n const existingFile = await storage.info(value);\n throw new FileExistsError(existingFile);\n } catch (e) {\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n // There is no existing file, ignore\n }\n }\n }\n\n return name;\n }\n\n updateValidationStatus(path: string, newName: string): void {\n this.getValidationPromise(path, newName)\n .then(() => {\n this.setState({ validationError: undefined });\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n }\n\n handleModalOpened(): void {\n this.focusRenameInput();\n }\n\n handleModalSubmit(): void {\n this.submitModal();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value });\n }\n\n handleSelect(item: FileStorageItem): void {\n log.debug('handleSelect', item);\n if (item.type === 'directory') {\n this.setState({ path: FileUtils.makePath(item.filename) });\n } else {\n // Use selected item name and folder and focus the input\n const value = item.basename;\n const path = FileUtils.getPath(item.filename);\n this.setState({ value, path }, () => {\n this.focusRenameInput();\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleKeyDown(e: KeyboardEvent): void {\n const { key } = e;\n e.stopPropagation();\n\n switch (key) {\n case 'Enter': {\n // Prevent form submit event\n e.preventDefault();\n this.submitModal();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n const { onCancel } = this.props;\n onCancel();\n break;\n }\n default:\n }\n }\n\n handleValidationError(err: Error): void {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n log.debug('Validation error', err);\n this.setState({ validationError: err });\n }\n\n handleOverwriteCancel(): void {\n this.setState({\n showOverwriteModal: false,\n isSubmitting: false,\n });\n }\n\n handleOverwriteConfirm(): void {\n this.setState({ showOverwriteModal: false });\n const { onSubmit } = this.props;\n const { path, value } = this.state;\n log.debug('handleOverwriteConfirm', path, value);\n onSubmit(`${path}${value}`);\n }\n\n handleExtensionChangeCancel(): void {\n log.debug('handleExtensionChangeCancel');\n this.setState(({ value, prevExtension }) => {\n const newValue = FileUtils.replaceExtension(value, prevExtension);\n return {\n showExtensionChangeModal: false,\n value: newValue,\n };\n });\n\n this.submitModal(true);\n }\n\n handleExtensionChangeConfirm(): void {\n log.debug('handleExtensionChangeConfirm');\n this.setState({ showExtensionChangeModal: false });\n this.submitModal(true);\n }\n\n /**\n * Focus rename input and select name part for files, select all text for folders\n */\n focusRenameInput(): void {\n const input = this.inputRef.current;\n if (input) {\n const { type } = this.props;\n const { value } = input;\n const selectionEnd =\n type === 'directory' ? value.length : value.lastIndexOf('.');\n input.focus();\n input.setSelectionRange(\n 0,\n selectionEnd > 0 ? selectionEnd : value.length\n );\n }\n }\n\n submitModal(skipExtensionCheck = false): void {\n this.setState(({ prevExtension, value, path }) => {\n const { notifyOnExtensionChange, type } = this.props;\n log.debug('submitModal', prevExtension, value);\n const newExtension = FileUtils.getExtension(value);\n if (\n notifyOnExtensionChange &&\n !skipExtensionCheck &&\n prevExtension !== null &&\n prevExtension !== newExtension\n ) {\n return {\n isSubmitting: false,\n showExtensionChangeModal: true,\n newExtension,\n };\n }\n\n this.getValidationPromise(path, value, true)\n .then((newItemName: string) => {\n const { onSubmit } = this.props;\n onSubmit(`${path}${value}`);\n })\n .catch(e => {\n // Don't allow using existing names for folders\n // For files, prompt if they want to overwrite existing file\n if (e instanceof FileExistsError) {\n if (type !== 'directory' && e.info.type !== 'directory') {\n this.setState({ showOverwriteModal: true });\n return;\n }\n }\n throw e;\n })\n .catch(e => {\n if (PromiseUtils.isCanceled(e)) {\n this.setState({ isSubmitting: false });\n }\n throw e;\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n\n return {\n isSubmitting: true,\n showExtensionChangeModal: false,\n newExtension: undefined,\n };\n });\n }\n\n handleBreadcrumbSelect(directoryPath: string): void {\n this.setState({ path: directoryPath });\n }\n\n renderPathButtons(path: string): React.ReactNode {\n const pathAsList = path.split('/');\n pathAsList.pop();\n return pathAsList.map((basename, index) => {\n let directoryPath = '';\n for (let i = 0; i < index; i += 1) {\n directoryPath += `${pathAsList[i]}/`;\n }\n directoryPath += `${basename}/`;\n\n return (\n <React.Fragment key={directoryPath}>\n <Button\n kind=\"ghost\"\n className=\"directory-breadcrumbs\"\n onClick={() => this.handleBreadcrumbSelect(directoryPath)}\n aria-label={index === 0 ? 'home' : undefined}\n icon={index === 0 ? vsHome : undefined}\n >\n {basename}\n </Button>\n /\n </React.Fragment>\n );\n });\n }\n\n render(): React.ReactNode {\n const { storage, isOpen, onCancel, placeholder, title, type } = this.props;\n const {\n isSubmitting,\n path,\n showExtensionChangeModal,\n showOverwriteModal,\n validationError,\n value,\n prevExtension,\n newExtension,\n } = this.state;\n\n const isDirectory = type === 'directory';\n const prevExtensionText = FileUtils.fileExtensionToString(prevExtension);\n const newExtensionText = FileUtils.fileExtensionToString(newExtension);\n const submitBtnLabel = isDirectory ? 'Create' : 'Save';\n const nameInputLabel = isDirectory ? 'New folder name' : 'Save file as';\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n toggle={onCancel}\n onOpened={this.handleModalOpened}\n className=\"modal-dialog-centered new-file-modal theme-bg-dark\"\n >\n <ModalHeader toggle={onCancel}>{title}</ModalHeader>\n <ModalBody>\n <form>\n <div className=\"d-flex flex-column new-file-modal-content\">\n <div className=\"flex-grow-0 mb-4\">\n <label htmlFor=\"file-name-input\">{nameInputLabel}</label>\n <input\n id=\"file-name-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n className={classNames('form-control', {\n 'is-invalid': validationError,\n })}\n value={value}\n placeholder={placeholder}\n ref={this.inputRef}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n />\n {validationError && (\n <div className=\"invalid-feedback\">\n {NewItemModal.getValidationMessage(validationError)}\n </div>\n )}\n </div>\n <div className=\"flex-grow-0\">\n <label>Directory: /</label>\n {this.renderPathButtons(path)}\n </div>\n <div className=\"flex-grow-1 file-explorer-container\">\n <FileExplorer\n onSelect={this.handleSelect}\n storage={storage}\n focusedPath={path}\n />\n </div>\n </div>\n </form>\n </ModalBody>\n\n <ModalFooter>\n <button\n className=\"btn btn-outline-primary\"\n onClick={onCancel}\n type=\"button\"\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n disabled={isSubmitting}\n onClick={this.handleModalSubmit}\n type=\"button\"\n >\n {submitBtnLabel}\n </button>\n </ModalFooter>\n </Modal>\n <BasicModal\n isOpen={showOverwriteModal}\n headerText=\"Confirm overwrite\"\n bodyText=\"File with this name already exists, are you sure you want to overwrite it?\"\n onCancel={this.handleOverwriteCancel}\n onConfirm={this.handleOverwriteConfirm}\n cancelButtonText=\"Cancel\"\n confirmButtonText=\"Overwrite\"\n />\n <BasicModal\n isOpen={showExtensionChangeModal}\n headerText=\"Confirm extension change\"\n bodyText={`Are you sure you want to change extension from \"${prevExtensionText}\" to \"${newExtensionText}\"?`}\n onCancel={this.handleExtensionChangeCancel}\n onConfirm={this.handleExtensionChangeConfirm}\n cancelButtonText={`Keep \"${prevExtensionText}\"`}\n confirmButtonText={`Use \"${newExtensionText}\"`}\n />\n </>\n );\n }\n}\n\nexport default NewItemModal;\n"],"mappings":"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"}
1
+ {"version":3,"file":"NewItemModal.js","names":["React","PureComponent","PropTypes","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Button","Pending","PromiseUtils","ValidationError","Log","vsHome","FontAwesomeIcon","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","log","module","NewItemModal","getValidationMessage","err","info","type","handleError","isCanceled","error","constructor","props","createRef","Map","handleModalSubmit","bind","handleModalOpened","handleSelect","handleChange","handleKeyDown","handleValidationError","handleOverwriteCancel","handleOverwriteConfirm","handleExtensionChangeCancel","handleExtensionChangeConfirm","handleBreadcrumbSelect","defaultValue","path","hasPath","getPath","state","isSubmitting","prevExtension","getExtension","showExtensionChangeModal","showOverwriteModal","value","getBaseName","componentDidUpdate","prevProps","prevState","isOpen","prevIsOpen","resetValue","isInitialLoad","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","getValidationPromise","name","checkExisting","makeCancelable","validateName","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","bool","string","isRequired","oneOf","func","shape"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, { ChangeEvent, KeyboardEvent, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n Button,\n} from '@deephaven/components';\nimport {\n CancelablePromise,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { vsHome } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport FileExplorer from './FileExplorer';\nimport FileStorage, { FileStorageItem, FileType } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nimport './NewItemModal.scss';\nimport FileExistsError from './FileExistsError';\nimport FileNotFoundError from './FileNotFoundError';\n\nconst log = Log.module('NewItemModal');\n\nexport type NewItemModalProps = typeof NewItemModal.defaultProps & {\n isOpen: boolean;\n title: string;\n defaultValue: string;\n type: FileType;\n onSubmit: (name: string) => void;\n onCancel: () => void;\n placeholder: string;\n storage: FileStorage;\n notifyOnExtensionChange?: boolean;\n};\n\nexport type NewItemModalState = {\n path: string;\n isSubmitting: boolean;\n showExtensionChangeModal: boolean;\n showOverwriteModal: boolean;\n validationError?: ValidationError;\n value: string;\n prevExtension?: string;\n newExtension?: string;\n};\n\nclass NewItemModal extends PureComponent<NewItemModalProps, NewItemModalState> {\n static propTypes = {\n isOpen: PropTypes.bool,\n title: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n type: PropTypes.oneOf(['file', 'directory']).isRequired,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n placeholder: PropTypes.string,\n storage: PropTypes.shape({}).isRequired,\n notifyOnExtensionChange: PropTypes.bool,\n };\n\n static defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static getValidationMessage(err: Error): string {\n if (err instanceof FileExistsError && err.info.type === 'directory') {\n return 'Error: Cannot overwrite existing directory';\n }\n return `${err}`;\n }\n\n static handleError(err: Error): void {\n if (!PromiseUtils.isCanceled(err)) {\n log.error(err);\n }\n }\n\n constructor(props: NewItemModalProps) {\n super(props);\n this.handleModalSubmit = this.handleModalSubmit.bind(this);\n this.handleModalOpened = this.handleModalOpened.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleValidationError = this.handleValidationError.bind(this);\n this.handleOverwriteCancel = this.handleOverwriteCancel.bind(this);\n this.handleOverwriteConfirm = this.handleOverwriteConfirm.bind(this);\n this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(\n this\n );\n this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(\n this\n );\n this.handleBreadcrumbSelect = this.handleBreadcrumbSelect.bind(this);\n\n const { defaultValue } = props;\n\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n\n this.state = {\n isSubmitting: false,\n path,\n prevExtension: FileUtils.getExtension(defaultValue),\n showExtensionChangeModal: false,\n showOverwriteModal: false,\n value: FileUtils.getBaseName(defaultValue),\n };\n }\n\n componentDidUpdate(\n prevProps: NewItemModalProps,\n prevState: NewItemModalState\n ): void {\n const { isOpen } = this.props;\n const { isOpen: prevIsOpen } = prevProps;\n const { value, path } = this.state;\n if (!prevIsOpen && isOpen) {\n this.resetValue();\n this.isInitialLoad = true;\n }\n\n if (prevIsOpen && isOpen) {\n if (\n !this.isInitialLoad &&\n (path !== prevState.path || value !== prevState.value)\n ) {\n this.updateValidationStatus(path, value);\n }\n this.isInitialLoad = false;\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n if (this.cancelableExistingItemPromise) {\n this.cancelableExistingItemPromise.cancel();\n }\n }\n\n private inputRef = React.createRef<HTMLInputElement>();\n\n private cancelableValidatePromise?: CancelablePromise<string>;\n\n private cancelableExistingItemPromise?: CancelablePromise<FileStorageItem | null>;\n\n private pending = new Pending();\n\n private pathMap = new Map();\n\n private isInitialLoad = true;\n\n resetValue(): void {\n const { defaultValue } = this.props as NewItemModalProps;\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n this.setState({\n path,\n value: FileUtils.getBaseName(defaultValue),\n validationError: undefined,\n prevExtension: FileUtils.getExtension(defaultValue),\n isSubmitting: false,\n });\n }\n\n getValidationPromise(\n path: string,\n name: string,\n checkExisting = false\n ): CancelablePromise<string> {\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n this.cancelableValidatePromise = PromiseUtils.makeCancelable(\n this.validateName(path, name, checkExisting)\n );\n return this.cancelableValidatePromise;\n }\n\n async validateName(\n path: string,\n name: string,\n checkExisting: boolean\n ): Promise<string> {\n FileUtils.validateName(name);\n\n const { defaultValue, storage } = this.props;\n if (checkExisting) {\n const value = `${path}${name}`;\n if (value !== defaultValue) {\n try {\n const existingFile = await storage.info(value);\n throw new FileExistsError(existingFile);\n } catch (e) {\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n // There is no existing file, ignore\n }\n }\n }\n\n return name;\n }\n\n updateValidationStatus(path: string, newName: string): void {\n this.getValidationPromise(path, newName)\n .then(() => {\n this.setState({ validationError: undefined });\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n }\n\n handleModalOpened(): void {\n this.focusRenameInput();\n }\n\n handleModalSubmit(): void {\n this.submitModal();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value });\n }\n\n handleSelect(item: FileStorageItem): void {\n log.debug('handleSelect', item);\n if (item.type === 'directory') {\n this.setState({ path: FileUtils.makePath(item.filename) });\n } else {\n // Use selected item name and folder and focus the input\n const value = item.basename;\n const path = FileUtils.getPath(item.filename);\n this.setState({ value, path }, () => {\n this.focusRenameInput();\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleKeyDown(e: KeyboardEvent): void {\n const { key } = e;\n e.stopPropagation();\n\n switch (key) {\n case 'Enter': {\n // Prevent form submit event\n e.preventDefault();\n this.submitModal();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n const { onCancel } = this.props;\n onCancel();\n break;\n }\n default:\n }\n }\n\n handleValidationError(err: Error): void {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n log.debug('Validation error', err);\n this.setState({ validationError: err });\n }\n\n handleOverwriteCancel(): void {\n this.setState({\n showOverwriteModal: false,\n isSubmitting: false,\n });\n }\n\n handleOverwriteConfirm(): void {\n this.setState({ showOverwriteModal: false });\n const { onSubmit } = this.props;\n const { path, value } = this.state;\n log.debug('handleOverwriteConfirm', path, value);\n onSubmit(`${path}${value}`);\n }\n\n handleExtensionChangeCancel(): void {\n log.debug('handleExtensionChangeCancel');\n this.setState(({ value, prevExtension }) => {\n const newValue = FileUtils.replaceExtension(value, prevExtension);\n return {\n showExtensionChangeModal: false,\n value: newValue,\n };\n });\n\n this.submitModal(true);\n }\n\n handleExtensionChangeConfirm(): void {\n log.debug('handleExtensionChangeConfirm');\n this.setState({ showExtensionChangeModal: false });\n this.submitModal(true);\n }\n\n /**\n * Focus rename input and select name part for files, select all text for folders\n */\n focusRenameInput(): void {\n const input = this.inputRef.current;\n if (input) {\n const { type } = this.props;\n const { value } = input;\n const selectionEnd =\n type === 'directory' ? value.length : value.lastIndexOf('.');\n input.focus();\n input.setSelectionRange(\n 0,\n selectionEnd > 0 ? selectionEnd : value.length\n );\n }\n }\n\n submitModal(skipExtensionCheck = false): void {\n this.setState(({ prevExtension, value, path }) => {\n const { notifyOnExtensionChange, type } = this.props;\n log.debug('submitModal', prevExtension, value);\n const newExtension = FileUtils.getExtension(value);\n if (\n notifyOnExtensionChange &&\n !skipExtensionCheck &&\n prevExtension !== null &&\n prevExtension !== newExtension\n ) {\n return {\n isSubmitting: false,\n showExtensionChangeModal: true,\n newExtension,\n };\n }\n\n this.getValidationPromise(path, value, true)\n .then((newItemName: string) => {\n const { onSubmit } = this.props;\n onSubmit(`${path}${value}`);\n })\n .catch(e => {\n // Don't allow using existing names for folders\n // For files, prompt if they want to overwrite existing file\n if (e instanceof FileExistsError) {\n if (type !== 'directory' && e.info.type !== 'directory') {\n this.setState({ showOverwriteModal: true });\n return;\n }\n }\n throw e;\n })\n .catch(e => {\n if (PromiseUtils.isCanceled(e)) {\n this.setState({ isSubmitting: false });\n }\n throw e;\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n\n return {\n isSubmitting: true,\n showExtensionChangeModal: false,\n newExtension: undefined,\n };\n });\n }\n\n handleBreadcrumbSelect(directoryPath: string): void {\n this.setState({ path: directoryPath });\n }\n\n renderPathButtons(path: string): React.ReactNode {\n const pathAsList = path.split('/');\n pathAsList.pop();\n return pathAsList.map((basename, index) => {\n let directoryPath = '';\n for (let i = 0; i < index; i += 1) {\n directoryPath += `${pathAsList[i]}/`;\n }\n directoryPath += `${basename}/`;\n\n return (\n <React.Fragment key={directoryPath}>\n <Button\n kind=\"ghost\"\n className=\"directory-breadcrumbs\"\n onClick={() => this.handleBreadcrumbSelect(directoryPath)}\n aria-label={index === 0 ? 'Home' : undefined}\n icon={\n index === 0 ? (\n <FontAwesomeIcon icon={vsHome} transform=\"right-1.6\" />\n ) : undefined\n }\n tooltip={index === 0 ? 'Home' : undefined}\n >\n {basename}\n </Button>\n /\n </React.Fragment>\n );\n });\n }\n\n render(): React.ReactNode {\n const { storage, isOpen, onCancel, placeholder, title, type } = this.props;\n const {\n isSubmitting,\n path,\n showExtensionChangeModal,\n showOverwriteModal,\n validationError,\n value,\n prevExtension,\n newExtension,\n } = this.state;\n\n const isDirectory = type === 'directory';\n const prevExtensionText = FileUtils.fileExtensionToString(prevExtension);\n const newExtensionText = FileUtils.fileExtensionToString(newExtension);\n const submitBtnLabel = isDirectory ? 'Create' : 'Save';\n const nameInputLabel = isDirectory ? 'New folder name' : 'Save file as';\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n toggle={onCancel}\n onOpened={this.handleModalOpened}\n className=\"modal-dialog-centered new-file-modal theme-bg-dark\"\n >\n <ModalHeader toggle={onCancel}>{title}</ModalHeader>\n <ModalBody>\n <form>\n <div className=\"d-flex flex-column new-file-modal-content\">\n <div className=\"flex-grow-0 mb-4\">\n <label htmlFor=\"file-name-input\">{nameInputLabel}</label>\n <input\n id=\"file-name-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n className={classNames('form-control', {\n 'is-invalid': validationError,\n })}\n value={value}\n placeholder={placeholder}\n ref={this.inputRef}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n />\n {validationError && (\n <div className=\"invalid-feedback\">\n {NewItemModal.getValidationMessage(validationError)}\n </div>\n )}\n </div>\n <div className=\"flex-grow-0\">\n <label>Directory: /</label>\n {this.renderPathButtons(path)}\n </div>\n <div className=\"flex-grow-1 file-explorer-container\">\n <FileExplorer\n onSelect={this.handleSelect}\n storage={storage}\n focusedPath={path}\n />\n </div>\n </div>\n </form>\n </ModalBody>\n\n <ModalFooter>\n <Button kind=\"secondary\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n disabled={isSubmitting}\n onClick={this.handleModalSubmit}\n >\n {submitBtnLabel}\n </Button>\n </ModalFooter>\n </Modal>\n <BasicModal\n isOpen={showOverwriteModal}\n headerText=\"Confirm overwrite\"\n bodyText=\"File with this name already exists, are you sure you want to overwrite it?\"\n onCancel={this.handleOverwriteCancel}\n onConfirm={this.handleOverwriteConfirm}\n cancelButtonText=\"Cancel\"\n confirmButtonText=\"Overwrite\"\n />\n <BasicModal\n isOpen={showExtensionChangeModal}\n headerText=\"Confirm extension change\"\n bodyText={`Are you sure you want to change extension from \"${prevExtensionText}\" to \"${newExtensionText}\"?`}\n onCancel={this.handleExtensionChangeCancel}\n onConfirm={this.handleExtensionChangeConfirm}\n cancelButtonText={`Keep \"${prevExtensionText}\"`}\n confirmButtonText={`Use \"${newExtensionText}\"`}\n />\n </>\n );\n }\n}\n\nexport default NewItemModal;\n"],"mappings":";;;;;;AAAA,OAAOA,KAAP,IAA4CC,aAA5C,QAAiE,OAAjE;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SACEC,KADF,EAEEC,SAFF,EAGEC,WAHF,EAIEC,WAJF,EAKEC,UALF,EAMEC,MANF,QAOO,uBAPP;AAQA,SAEEC,OAFF,EAGEC,YAHF,EAIEC,eAJF,QAKO,kBALP;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;OACOC,Y;OAEAC,S;;OAGAC,e;OACAC,iB;AAEP,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAJ,CAAW,cAAX,CAAZ;;AAyBA,MAAMC,YAAN,SAA2BrB,aAA3B,CAA+E;EAsBlD,OAApBsB,oBAAoB,CAACC,GAAD,EAAqB;IAC9C,IAAIA,GAAG,YAAYN,eAAf,IAAkCM,GAAG,CAACC,IAAJ,CAASC,IAAT,KAAkB,WAAxD,EAAqE;MACnE,OAAO,4CAAP;IACD;;IACD,iBAAUF,GAAV;EACD;;EAEiB,OAAXG,WAAW,CAACH,GAAD,EAAmB;IACnC,IAAI,CAACb,YAAY,CAACiB,UAAb,CAAwBJ,GAAxB,CAAL,EAAmC;MACjCJ,GAAG,CAACS,KAAJ,CAAUL,GAAV;IACD;EACF;;EAEDM,WAAW,CAACC,KAAD,EAA2B;IACpC,MAAMA,KAAN;;IADoC,+CAmEnB/B,KAAK,CAACgC,SAAN,EAnEmB;;IAAA;;IAAA;;IAAA,iCAyEpB,IAAItB,OAAJ,EAzEoB;;IAAA,iCA2EpB,IAAIuB,GAAJ,EA3EoB;;IAAA,uCA6Ed,IA7Ec;;IAEpC,KAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBD,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKG,YAAL,GAAoB,KAAKA,YAAL,CAAkBH,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;IACA,KAAKK,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BL,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKM,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BN,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKO,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BP,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKQ,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCR,IAAjC,CACjC,IADiC,CAAnC;IAGA,KAAKS,4BAAL,GAAoC,KAAKA,4BAAL,CAAkCT,IAAlC,CAClC,IADkC,CAApC;IAGA,KAAKU,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BV,IAA5B,CAAiC,IAAjC,CAA9B;IAEA,IAAM;MAAEW;IAAF,IAAmBf,KAAzB;IAEA,IAAMgB,IAAI,GAAG9B,SAAS,CAAC+B,OAAV,CAAkBF,YAAlB,IACT7B,SAAS,CAACgC,OAAV,CAAkBH,YAAlB,CADS,GAET,GAFJ;IAIA,KAAKI,KAAL,GAAa;MACXC,YAAY,EAAE,KADH;MAEXJ,IAFW;MAGXK,aAAa,EAAEnC,SAAS,CAACoC,YAAV,CAAuBP,YAAvB,CAHJ;MAIXQ,wBAAwB,EAAE,KAJf;MAKXC,kBAAkB,EAAE,KALT;MAMXC,KAAK,EAAEvC,SAAS,CAACwC,WAAV,CAAsBX,YAAtB;IANI,CAAb;EAQD;;EAEDY,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGV;IACN,IAAM;MAAEC;IAAF,IAAa,KAAK9B,KAAxB;IACA,IAAM;MAAE8B,MAAM,EAAEC;IAAV,IAAyBH,SAA/B;IACA,IAAM;MAAEH,KAAF;MAAST;IAAT,IAAkB,KAAKG,KAA7B;;IACA,IAAI,CAACY,UAAD,IAAeD,MAAnB,EAA2B;MACzB,KAAKE,UAAL;MACA,KAAKC,aAAL,GAAqB,IAArB;IACD;;IAED,IAAIF,UAAU,IAAID,MAAlB,EAA0B;MACxB,IACE,CAAC,KAAKG,aAAN,KACCjB,IAAI,KAAKa,SAAS,CAACb,IAAnB,IAA2BS,KAAK,KAAKI,SAAS,CAACJ,KADhD,CADF,EAGE;QACA,KAAKS,sBAAL,CAA4BlB,IAA5B,EAAkCS,KAAlC;MACD;;MACD,KAAKQ,aAAL,GAAqB,KAArB;IACD;EACF;;EAEDE,oBAAoB,GAAS;IAC3B,KAAKC,OAAL,CAAaC,MAAb;;IACA,IAAI,KAAKC,yBAAT,EAAoC;MAClC,KAAKA,yBAAL,CAA+BD,MAA/B;IACD;;IACD,IAAI,KAAKE,6BAAT,EAAwC;MACtC,KAAKA,6BAAL,CAAmCF,MAAnC;IACD;EACF;;EAcDL,UAAU,GAAS;IACjB,IAAM;MAAEjB;IAAF,IAAmB,KAAKf,KAA9B;IACA,IAAMgB,IAAI,GAAG9B,SAAS,CAAC+B,OAAV,CAAkBF,YAAlB,IACT7B,SAAS,CAACgC,OAAV,CAAkBH,YAAlB,CADS,GAET,GAFJ;IAGA,KAAKyB,QAAL,CAAc;MACZxB,IADY;MAEZS,KAAK,EAAEvC,SAAS,CAACwC,WAAV,CAAsBX,YAAtB,CAFK;MAGZ0B,eAAe,EAAEC,SAHL;MAIZrB,aAAa,EAAEnC,SAAS,CAACoC,YAAV,CAAuBP,YAAvB,CAJH;MAKZK,YAAY,EAAE;IALF,CAAd;EAOD;;EAEDuB,oBAAoB,CAClB3B,IADkB,EAElB4B,IAFkB,EAIS;IAAA,IAD3BC,aAC2B,uEADX,KACW;;IAC3B,IAAI,KAAKP,yBAAT,EAAoC;MAClC,KAAKA,yBAAL,CAA+BD,MAA/B;IACD;;IACD,KAAKC,yBAAL,GAAiC1D,YAAY,CAACkE,cAAb,CAC/B,KAAKC,YAAL,CAAkB/B,IAAlB,EAAwB4B,IAAxB,EAA8BC,aAA9B,CAD+B,CAAjC;IAGA,OAAO,KAAKP,yBAAZ;EACD;;EAEKS,YAAY,CAChB/B,IADgB,EAEhB4B,IAFgB,EAGhBC,aAHgB,EAIC;IAAA;;IAAA;MACjB3D,SAAS,CAAC6D,YAAV,CAAuBH,IAAvB;MAEA,IAAM;QAAE7B,YAAF;QAAgBiC;MAAhB,IAA4B,KAAI,CAAChD,KAAvC;;MACA,IAAI6C,aAAJ,EAAmB;QACjB,IAAMpB,KAAK,aAAMT,IAAN,SAAa4B,IAAb,CAAX;;QACA,IAAInB,KAAK,KAAKV,YAAd,EAA4B;UAC1B,IAAI;YACF,IAAMkC,YAAY,SAASD,OAAO,CAACtD,IAAR,CAAa+B,KAAb,CAA3B;YACA,MAAM,IAAItC,eAAJ,CAAoB8D,YAApB,CAAN;UACD,CAHD,CAGE,OAAOC,CAAP,EAAU;YACV,IAAI,EAAEA,CAAC,YAAY9D,iBAAf,CAAJ,EAAuC;cACrC,MAAM8D,CAAN;YACD,CAHS,CAIV;;UACD;QACF;MACF;;MAED,OAAON,IAAP;IAnBiB;EAoBlB;;EAEDV,sBAAsB,CAAClB,IAAD,EAAemC,OAAf,EAAsC;IAC1D,KAAKR,oBAAL,CAA0B3B,IAA1B,EAAgCmC,OAAhC,EACGC,IADH,CACQ,MAAM;MACV,KAAKZ,QAAL,CAAc;QAAEC,eAAe,EAAEC;MAAnB,CAAd;IACD,CAHH,EAIGW,KAJH,CAIS,KAAK5C,qBAJd,EAKG4C,KALH,CAKS9D,YAAY,CAACK,WALtB;EAMD;;EAEDS,iBAAiB,GAAS;IACxB,KAAKiD,gBAAL;EACD;;EAEDnD,iBAAiB,GAAS;IACxB,KAAKoD,WAAL;EACD;;EAEDhD,YAAY,CAACiD,KAAD,EAA6C;IACvD,IAAM;MAAE/B;IAAF,IAAY+B,KAAK,CAACC,MAAxB;IACA,KAAKjB,QAAL,CAAc;MAAEf;IAAF,CAAd;EACD;;EAEDnB,YAAY,CAACoD,IAAD,EAA8B;IACxCrE,GAAG,CAACsE,KAAJ,CAAU,cAAV,EAA0BD,IAA1B;;IACA,IAAIA,IAAI,CAAC/D,IAAL,KAAc,WAAlB,EAA+B;MAC7B,KAAK6C,QAAL,CAAc;QAAExB,IAAI,EAAE9B,SAAS,CAAC0E,QAAV,CAAmBF,IAAI,CAACG,QAAxB;MAAR,CAAd;IACD,CAFD,MAEO;MACL;MACA,IAAMpC,KAAK,GAAGiC,IAAI,CAACI,QAAnB;MACA,IAAM9C,IAAI,GAAG9B,SAAS,CAACgC,OAAV,CAAkBwC,IAAI,CAACG,QAAvB,CAAb;MACA,KAAKrB,QAAL,CAAc;QAAEf,KAAF;QAAST;MAAT,CAAd,EAA+B,MAAM;QACnC,KAAKsC,gBAAL;MACD,CAFD;IAGD;EACF,CA1M4E,CA4M7E;;;EACA9C,aAAa,CAAC0C,CAAD,EAAyB;IACpC,IAAM;MAAEa;IAAF,IAAUb,CAAhB;IACAA,CAAC,CAACc,eAAF;;IAEA,QAAQD,GAAR;MACE,KAAK,OAAL;QAAc;UACZ;UACAb,CAAC,CAACe,cAAF;UACA,KAAKV,WAAL;UACA;QACD;;MACD,KAAK,QAAL;QAAe;UACbL,CAAC,CAACe,cAAF;UACA,IAAM;YAAEC;UAAF,IAAe,KAAKlE,KAA1B;UACAkE,QAAQ;UACR;QACD;;MACD;IAbF;EAeD;;EAEDzD,qBAAqB,CAAChB,GAAD,EAAmB;IACtC,IAAI,EAAEA,GAAG,YAAYZ,eAAjB,CAAJ,EAAuC;MACrC,MAAMY,GAAN;IACD;;IACDJ,GAAG,CAACsE,KAAJ,CAAU,kBAAV,EAA8BlE,GAA9B;IACA,KAAK+C,QAAL,CAAc;MAAEC,eAAe,EAAEhD;IAAnB,CAAd;EACD;;EAEDiB,qBAAqB,GAAS;IAC5B,KAAK8B,QAAL,CAAc;MACZhB,kBAAkB,EAAE,KADR;MAEZJ,YAAY,EAAE;IAFF,CAAd;EAID;;EAEDT,sBAAsB,GAAS;IAC7B,KAAK6B,QAAL,CAAc;MAAEhB,kBAAkB,EAAE;IAAtB,CAAd;IACA,IAAM;MAAE2C;IAAF,IAAe,KAAKnE,KAA1B;IACA,IAAM;MAAEgB,IAAF;MAAQS;IAAR,IAAkB,KAAKN,KAA7B;IACA9B,GAAG,CAACsE,KAAJ,CAAU,wBAAV,EAAoC3C,IAApC,EAA0CS,KAA1C;IACA0C,QAAQ,WAAInD,IAAJ,SAAWS,KAAX,EAAR;EACD;;EAEDb,2BAA2B,GAAS;IAClCvB,GAAG,CAACsE,KAAJ,CAAU,6BAAV;IACA,KAAKnB,QAAL,CAAc,QAA8B;MAAA,IAA7B;QAAEf,KAAF;QAASJ;MAAT,CAA6B;MAC1C,IAAM+C,QAAQ,GAAGlF,SAAS,CAACmF,gBAAV,CAA2B5C,KAA3B,EAAkCJ,aAAlC,CAAjB;MACA,OAAO;QACLE,wBAAwB,EAAE,KADrB;QAELE,KAAK,EAAE2C;MAFF,CAAP;IAID,CAND;IAQA,KAAKb,WAAL,CAAiB,IAAjB;EACD;;EAED1C,4BAA4B,GAAS;IACnCxB,GAAG,CAACsE,KAAJ,CAAU,8BAAV;IACA,KAAKnB,QAAL,CAAc;MAAEjB,wBAAwB,EAAE;IAA5B,CAAd;IACA,KAAKgC,WAAL,CAAiB,IAAjB;EACD;EAED;AACF;AACA;;;EACED,gBAAgB,GAAS;IACvB,IAAMgB,KAAK,GAAG,KAAKC,QAAL,CAAcC,OAA5B;;IACA,IAAIF,KAAJ,EAAW;MACT,IAAM;QAAE3E;MAAF,IAAW,KAAKK,KAAtB;MACA,IAAM;QAAEyB;MAAF,IAAY6C,KAAlB;MACA,IAAMG,YAAY,GAChB9E,IAAI,KAAK,WAAT,GAAuB8B,KAAK,CAACiD,MAA7B,GAAsCjD,KAAK,CAACkD,WAAN,CAAkB,GAAlB,CADxC;MAEAL,KAAK,CAACM,KAAN;MACAN,KAAK,CAACO,iBAAN,CACE,CADF,EAEEJ,YAAY,GAAG,CAAf,GAAmBA,YAAnB,GAAkChD,KAAK,CAACiD,MAF1C;IAID;EACF;;EAEDnB,WAAW,GAAmC;IAAA,IAAlCuB,kBAAkC,uEAAb,KAAa;IAC5C,KAAKtC,QAAL,CAAc,SAAoC;MAAA,IAAnC;QAAEnB,aAAF;QAAiBI,KAAjB;QAAwBT;MAAxB,CAAmC;MAChD,IAAM;QAAE+D,uBAAF;QAA2BpF;MAA3B,IAAoC,KAAKK,KAA/C;MACAX,GAAG,CAACsE,KAAJ,CAAU,aAAV,EAAyBtC,aAAzB,EAAwCI,KAAxC;MACA,IAAMuD,YAAY,GAAG9F,SAAS,CAACoC,YAAV,CAAuBG,KAAvB,CAArB;;MACA,IACEsD,uBAAuB,IACvB,CAACD,kBADD,IAEAzD,aAAa,KAAK,IAFlB,IAGAA,aAAa,KAAK2D,YAJpB,EAKE;QACA,OAAO;UACL5D,YAAY,EAAE,KADT;UAELG,wBAAwB,EAAE,IAFrB;UAGLyD;QAHK,CAAP;MAKD;;MAED,KAAKrC,oBAAL,CAA0B3B,IAA1B,EAAgCS,KAAhC,EAAuC,IAAvC,EACG2B,IADH,CACS6B,WAAD,IAAyB;QAC7B,IAAM;UAAEd;QAAF,IAAe,KAAKnE,KAA1B;QACAmE,QAAQ,WAAInD,IAAJ,SAAWS,KAAX,EAAR;MACD,CAJH,EAKG4B,KALH,CAKSH,CAAC,IAAI;QACV;QACA;QACA,IAAIA,CAAC,YAAY/D,eAAjB,EAAkC;UAChC,IAAIQ,IAAI,KAAK,WAAT,IAAwBuD,CAAC,CAACxD,IAAF,CAAOC,IAAP,KAAgB,WAA5C,EAAyD;YACvD,KAAK6C,QAAL,CAAc;cAAEhB,kBAAkB,EAAE;YAAtB,CAAd;YACA;UACD;QACF;;QACD,MAAM0B,CAAN;MACD,CAfH,EAgBGG,KAhBH,CAgBSH,CAAC,IAAI;QACV,IAAItE,YAAY,CAACiB,UAAb,CAAwBqD,CAAxB,CAAJ,EAAgC;UAC9B,KAAKV,QAAL,CAAc;YAAEpB,YAAY,EAAE;UAAhB,CAAd;QACD;;QACD,MAAM8B,CAAN;MACD,CArBH,EAsBGG,KAtBH,CAsBS,KAAK5C,qBAtBd,EAuBG4C,KAvBH,CAuBS9D,YAAY,CAACK,WAvBtB;MAyBA,OAAO;QACLwB,YAAY,EAAE,IADT;QAELG,wBAAwB,EAAE,KAFrB;QAGLyD,YAAY,EAAEtC;MAHT,CAAP;IAKD,CA/CD;EAgDD;;EAED5B,sBAAsB,CAACoE,aAAD,EAA8B;IAClD,KAAK1C,QAAL,CAAc;MAAExB,IAAI,EAAEkE;IAAR,CAAd;EACD;;EAEDC,iBAAiB,CAACnE,IAAD,EAAgC;IAC/C,IAAMoE,UAAU,GAAGpE,IAAI,CAACqE,KAAL,CAAW,GAAX,CAAnB;IACAD,UAAU,CAACE,GAAX;IACA,OAAOF,UAAU,CAACG,GAAX,CAAe,CAACzB,QAAD,EAAW0B,KAAX,KAAqB;MACzC,IAAIN,aAAa,GAAG,EAApB;;MACA,KAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,KAApB,EAA2BC,CAAC,IAAI,CAAhC,EAAmC;QACjCP,aAAa,cAAOE,UAAU,CAACK,CAAD,CAAjB,MAAb;MACD;;MACDP,aAAa,cAAOpB,QAAP,MAAb;MAEA,oBACE,oBAAC,KAAD,CAAO,QAAP;QAAgB,GAAG,EAAEoB;MAArB,gBACE,oBAAC,MAAD;QACE,IAAI,EAAC,OADP;QAEE,SAAS,EAAC,uBAFZ;QAGE,OAAO,EAAE,MAAM,KAAKpE,sBAAL,CAA4BoE,aAA5B,CAHjB;QAIE,cAAYM,KAAK,KAAK,CAAV,GAAc,MAAd,GAAuB9C,SAJrC;QAKE,IAAI,EACF8C,KAAK,KAAK,CAAV,gBACE,oBAAC,eAAD;UAAiB,IAAI,EAAEzG,MAAvB;UAA+B,SAAS,EAAC;QAAzC,EADF,GAEI2D,SARR;QAUE,OAAO,EAAE8C,KAAK,KAAK,CAAV,GAAc,MAAd,GAAuB9C;MAVlC,GAYGoB,QAZH,CADF,MADF;IAmBD,CA1BM,CAAP;EA2BD;;EAED4B,MAAM,GAAoB;IACxB,IAAM;MAAE1C,OAAF;MAAWlB,MAAX;MAAmBoC,QAAnB;MAA6ByB,WAA7B;MAA0CC,KAA1C;MAAiDjG;IAAjD,IAA0D,KAAKK,KAArE;IACA,IAAM;MACJoB,YADI;MAEJJ,IAFI;MAGJO,wBAHI;MAIJC,kBAJI;MAKJiB,eALI;MAMJhB,KANI;MAOJJ,aAPI;MAQJ2D;IARI,IASF,KAAK7D,KATT;IAWA,IAAM0E,WAAW,GAAGlG,IAAI,KAAK,WAA7B;IACA,IAAMmG,iBAAiB,GAAG5G,SAAS,CAAC6G,qBAAV,CAAgC1E,aAAhC,CAA1B;IACA,IAAM2E,gBAAgB,GAAG9G,SAAS,CAAC6G,qBAAV,CAAgCf,YAAhC,CAAzB;IACA,IAAMiB,cAAc,GAAGJ,WAAW,GAAG,QAAH,GAAc,MAAhD;IACA,IAAMK,cAAc,GAAGL,WAAW,GAAG,iBAAH,GAAuB,cAAzD;IAEA,oBACE,uDACE,oBAAC,KAAD;MACE,MAAM,EAAE/D,MADV;MAEE,MAAM,EAAEoC,QAFV;MAGE,QAAQ,EAAE,KAAK7D,iBAHjB;MAIE,SAAS,EAAC;IAJZ,gBAME,oBAAC,WAAD;MAAa,MAAM,EAAE6D;IAArB,GAAgC0B,KAAhC,CANF,eAOE,oBAAC,SAAD,qBACE,+CACE;MAAK,SAAS,EAAC;IAAf,gBACE;MAAK,SAAS,EAAC;IAAf,gBACE;MAAO,OAAO,EAAC;IAAf,GAAkCM,cAAlC,CADF,eAEE;MACE,EAAE,EAAC,iBADL;MAEE,IAAI,EAAC,MAFP;MAGE,YAAY,EAAC,KAHf;MAIE,cAAc,EAAC,MAJjB;MAKE,WAAW,EAAC,KALd;MAME,UAAU,EAAC,OANb;MAOE,SAAS,EAAE9H,UAAU,CAAC,cAAD,EAAiB;QACpC,cAAcqE;MADsB,CAAjB,CAPvB;MAUE,KAAK,EAAEhB,KAVT;MAWE,WAAW,EAAEkE,WAXf;MAYE,GAAG,EAAE,KAAKpB,QAZZ;MAaE,SAAS,EAAE,KAAK/D,aAblB;MAcE,QAAQ,EAAE,KAAKD;IAdjB,EAFF,EAkBGkC,eAAe,iBACd;MAAK,SAAS,EAAC;IAAf,GACGlD,YAAY,CAACC,oBAAb,CAAkCiD,eAAlC,CADH,CAnBJ,CADF,eAyBE;MAAK,SAAS,EAAC;IAAf,gBACE,kDADF,EAEG,KAAK0C,iBAAL,CAAuBnE,IAAvB,CAFH,CAzBF,eA6BE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,YAAD;MACE,QAAQ,EAAE,KAAKV,YADjB;MAEE,OAAO,EAAE0C,OAFX;MAGE,WAAW,EAAEhC;IAHf,EADF,CA7BF,CADF,CADF,CAPF,eAiDE,oBAAC,WAAD,qBACE,oBAAC,MAAD;MAAQ,IAAI,EAAC,WAAb;MAAyB,OAAO,EAAEkD;IAAlC,YADF,eAIE,oBAAC,MAAD;MACE,IAAI,EAAC,SADP;MAEE,QAAQ,EAAE9C,YAFZ;MAGE,OAAO,EAAE,KAAKjB;IAHhB,GAKG8F,cALH,CAJF,CAjDF,CADF,eA+DE,oBAAC,UAAD;MACE,MAAM,EAAEzE,kBADV;MAEE,UAAU,EAAC,mBAFb;MAGE,QAAQ,EAAC,4EAHX;MAIE,QAAQ,EAAE,KAAKd,qBAJjB;MAKE,SAAS,EAAE,KAAKC,sBALlB;MAME,gBAAgB,EAAC,QANnB;MAOE,iBAAiB,EAAC;IAPpB,EA/DF,eAwEE,oBAAC,UAAD;MACE,MAAM,EAAEY,wBADV;MAEE,UAAU,EAAC,0BAFb;MAGE,QAAQ,6DAAqDuE,iBAArD,qBAA+EE,gBAA/E,QAHV;MAIE,QAAQ,EAAE,KAAKpF,2BAJjB;MAKE,SAAS,EAAE,KAAKC,4BALlB;MAME,gBAAgB,mBAAWiF,iBAAX,OANlB;MAOE,iBAAiB,kBAAUE,gBAAV;IAPnB,EAxEF,CADF;EAoFD;;AA5d4E;;gBAAzEzG,Y,eACe;EACjBuC,MAAM,EAAE3D,SAAS,CAACgI,IADD;EAEjBP,KAAK,EAAEzH,SAAS,CAACiI,MAAV,CAAiBC,UAFP;EAGjBtF,YAAY,EAAE5C,SAAS,CAACiI,MAHP;EAIjBzG,IAAI,EAAExB,SAAS,CAACmI,KAAV,CAAgB,CAAC,MAAD,EAAS,WAAT,CAAhB,EAAuCD,UAJ5B;EAKjBlC,QAAQ,EAAEhG,SAAS,CAACoI,IALH;EAMjBrC,QAAQ,EAAE/F,SAAS,CAACoI,IANH;EAOjBZ,WAAW,EAAExH,SAAS,CAACiI,MAPN;EAQjBpD,OAAO,EAAE7E,SAAS,CAACqI,KAAV,CAAgB,EAAhB,EAAoBH,UARZ;EASjBtB,uBAAuB,EAAE5G,SAAS,CAACgI;AATlB,C;;gBADf5G,Y,kBAakB;EACpBuC,MAAM,EAAE,KADY;EAEpBf,YAAY,EAAE,GAFM;EAGpBgE,uBAAuB,EAAE,KAHL;EAIpBY,WAAW,EAAE,EAJO;EAKpBxB,QAAQ,EAAGvB,IAAD,IAAwBF,SALd;EAMpBwB,QAAQ,EAAE,MAAYxB;AANF,C;;AAkdxB,eAAenD,YAAf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/file-explorer",
3
- "version": "0.19.2-beta.5+f6a5d6d",
3
+ "version": "0.20.0",
4
4
  "description": "Deephaven File Explorer React component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,11 +30,11 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/components": "^0.19.2-beta.5+f6a5d6d",
34
- "@deephaven/icons": "^0.19.2-beta.5+f6a5d6d",
35
- "@deephaven/log": "^0.19.2-beta.5+f6a5d6d",
36
- "@deephaven/storage": "^0.19.2-beta.5+f6a5d6d",
37
- "@deephaven/utils": "^0.19.2-beta.5+f6a5d6d",
33
+ "@deephaven/components": "^0.20.0",
34
+ "@deephaven/icons": "^0.20.0",
35
+ "@deephaven/log": "^0.20.0",
36
+ "@deephaven/storage": "^0.20.0",
37
+ "@deephaven/utils": "^0.20.0",
38
38
  "@fortawesome/fontawesome-svg-core": "^6.1.1",
39
39
  "@fortawesome/react-fontawesome": "^0.1.18",
40
40
  "classnames": "^2.3.1",
@@ -45,7 +45,7 @@
45
45
  "react": "^17.0.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@deephaven/tsconfig": "^0.19.2-beta.5+f6a5d6d"
48
+ "@deephaven/tsconfig": "^0.20.0"
49
49
  },
50
50
  "files": [
51
51
  "dist"
@@ -53,5 +53,5 @@
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  },
56
- "gitHead": "f6a5d6d2a6c2bbc3e8a9b05aad234c30bb0a7bcb"
56
+ "gitHead": "f1df977c5cc020a300015265ab20ad4c67ba51eb"
57
57
  }