@deephaven/file-explorer 1.22.1 → 1.22.2-alpha-pivot-builder.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.
- package/dist/FileExplorer.js +32 -15
- package/dist/FileExplorer.js.map +1 -1
- package/dist/FileExplorerToolbar.js +5 -6
- package/dist/FileExplorerToolbar.js.map +1 -1
- package/dist/FileList.js +59 -32
- package/dist/FileList.js.map +1 -1
- package/dist/FileListContainer.js +37 -22
- package/dist/FileListContainer.js.map +1 -1
- package/dist/FileListItem.js +13 -15
- package/dist/FileListItem.js.map +1 -1
- package/dist/FileListItemEditor.js +25 -15
- package/dist/FileListItemEditor.js.map +1 -1
- package/dist/FileListUtils.js +1 -3
- package/dist/FileListUtils.js.map +1 -1
- package/dist/NewItemModal.js +47 -78
- package/dist/NewItemModal.js.map +1 -1
- package/package.json +9 -9
package/dist/FileListItem.js
CHANGED
|
@@ -27,21 +27,19 @@ function getItemIcon(item) {
|
|
|
27
27
|
}
|
|
28
28
|
export function FileListItem(props) {
|
|
29
29
|
var _draggedItems$some;
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
onDrop: _onDrop
|
|
44
|
-
} = props;
|
|
30
|
+
var children = props.children,
|
|
31
|
+
draggedItems = props.draggedItems,
|
|
32
|
+
isDragInProgress = props.isDragInProgress,
|
|
33
|
+
isDropTargetValid = props.isDropTargetValid,
|
|
34
|
+
isSelected = props.isSelected,
|
|
35
|
+
item = props.item,
|
|
36
|
+
itemIndex = props.itemIndex,
|
|
37
|
+
dropTargetItem = props.dropTargetItem,
|
|
38
|
+
_onDragStart = props.onDragStart,
|
|
39
|
+
_onDragOver = props.onDragOver,
|
|
40
|
+
_onDragEnd = props.onDragEnd,
|
|
41
|
+
onDragExit = props.onDragExit,
|
|
42
|
+
_onDrop = props.onDrop;
|
|
45
43
|
var isDragged = (_draggedItems$some = draggedItems === null || draggedItems === void 0 ? void 0 : draggedItems.some(draggedItem => draggedItem.id === item.id)) !== null && _draggedItems$some !== void 0 ? _draggedItems$some : false;
|
|
46
44
|
var itemPath = getPathFromItem(item);
|
|
47
45
|
var dropTargetPath = isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;
|
package/dist/FileListItem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListItem.js","names":["React","Tooltip","dhPython","vsCode","vsFolder","vsFolderOpened","FontAwesomeIcon","classNames","isDirectory","FileUtils","MIME_TYPE","getPathFromItem","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","getItemIcon","item","isExpanded","mimeType","getMimeType","basename","PYTHON","FileListItem","props","_draggedItems$some","children","draggedItems","isDragInProgress","isDropTargetValid","isSelected","itemIndex","dropTargetItem","onDragStart","onDragOver","onDragEnd","onDragExit","onDrop","isDragged","some","draggedItem","id","itemPath","dropTargetPath","isExactDropTarget","isInDropTarget","isInvalidDropTarget","icon","depth","getDepth","filename","depthLines","Array","fill","map","value","index","className","e","draggable","role","fixedWidth"],"sources":["../src/FileListItem.tsx"],"sourcesContent":["import React from 'react';\nimport { Tooltip, type RenderItemProps } from '@deephaven/components';\nimport { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport { type FileStorageItem, isDirectory } from './FileStorage';\nimport './FileList.scss';\nimport FileUtils, { MIME_TYPE } from './FileUtils';\nimport { getPathFromItem } from './FileListUtils';\n\n/**\n * Get the icon definition for a file or folder item\n * @param item Item to get the icon for\n * @returns Icon definition to pass in the FontAwesomeIcon icon prop\n */\nfunction getItemIcon(item: FileStorageItem): IconDefinition {\n if (isDirectory(item)) {\n return item.isExpanded ? vsFolderOpened : vsFolder;\n }\n const mimeType = FileUtils.getMimeType(item.basename);\n switch (mimeType) {\n case MIME_TYPE.PYTHON:\n return dhPython;\n default:\n return vsCode;\n }\n}\n\nexport type FileListRenderItemProps = RenderItemProps<FileStorageItem> & {\n children?: JSX.Element;\n dropTargetItem?: FileStorageItem;\n draggedItems?: FileStorageItem[];\n isDragInProgress: boolean;\n isDropTargetValid: boolean;\n\n onDragStart: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n onDragOver: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n onDragExit: () => void;\n onDrop: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n};\n\nexport function FileListItem(props: FileListRenderItemProps): JSX.Element {\n const {\n children,\n draggedItems,\n isDragInProgress,\n isDropTargetValid,\n isSelected,\n item,\n itemIndex,\n dropTargetItem,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDragExit,\n onDrop,\n } = props;\n\n const isDragged =\n draggedItems?.some(draggedItem => draggedItem.id === item.id) ?? false;\n const itemPath = getPathFromItem(item);\n const dropTargetPath =\n isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;\n\n const isExactDropTarget =\n isDragInProgress &&\n isDropTargetValid &&\n isDirectory(item) &&\n dropTargetPath === itemPath;\n const isInDropTarget =\n isDragInProgress && isDropTargetValid && dropTargetPath === itemPath;\n const isInvalidDropTarget =\n isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;\n\n const icon = getItemIcon(item);\n const depth = FileUtils.getDepth(item.filename);\n const depthLines = Array(depth)\n .fill(null)\n .map((value, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"file-list-depth-line\" key={index} />\n ));\n\n return (\n <div\n className={classNames(\n 'd-flex w-100 align-items-center',\n 'file-list-item',\n {\n 'is-dragged': isDragged,\n 'is-exact-drop-target': isExactDropTarget,\n 'is-in-drop-target': isInDropTarget,\n 'is-invalid-drop-target': isInvalidDropTarget,\n 'is-selected': isSelected,\n }\n )}\n onDragStart={e => onDragStart(itemIndex, e)}\n onDragOver={e => onDragOver(itemIndex, e)}\n onDragEnd={e => onDragEnd(itemIndex, e)}\n onDragExit={onDragExit}\n onDrop={e => onDrop(itemIndex, e)}\n draggable\n role=\"presentation\"\n aria-label={item.basename}\n >\n {depthLines}{' '}\n <FontAwesomeIcon icon={icon} className=\"item-icon\" fixedWidth />{' '}\n <span className=\"truncation-wrapper\">\n {children ?? (\n <>\n {item.basename}\n <Tooltip>{item.basename}</Tooltip>\n </>\n )}\n </span>\n </div>\n );\n}\n\nexport default FileListItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,QAA8B,uBAAuB;AACrE,SAASC,QAAQ,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,kBAAkB;AAE7E,SAASC,eAAe,QAAQ,gCAAgC;AAChE,OAAOC,UAAU,MAAM,YAAY;AAAC,SACLC,WAAW;AAAA;AAAA,OAEnCC,SAAS,IAAIC,SAAS;AAAA,SACpBC,eAAe;AAExB;AACA;AACA;AACA;AACA;AAJA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAKA,SAASC,WAAWA,CAACC,IAAqB,EAAkB;EAC1D,IAAIX,WAAW,CAACW,IAAI,CAAC,EAAE;IACrB,OAAOA,IAAI,CAACC,UAAU,GAAGf,cAAc,GAAGD,QAAQ;EACpD;EACA,IAAMiB,QAAQ,GAAGZ,SAAS,CAACa,WAAW,CAACH,IAAI,CAACI,QAAQ,CAAC;EACrD,QAAQF,QAAQ;IACd,KAAKX,SAAS,CAACc,MAAM;MACnB,OAAOtB,QAAQ;IACjB;MACE,OAAOC,MAAM;EACjB;AACF;AAgBA,OAAO,SAASsB,YAAYA,CAACC,KAA8B,EAAe;EAAA,IAAAC,kBAAA;EACxE,
|
|
1
|
+
{"version":3,"file":"FileListItem.js","names":["React","Tooltip","dhPython","vsCode","vsFolder","vsFolderOpened","FontAwesomeIcon","classNames","isDirectory","FileUtils","MIME_TYPE","getPathFromItem","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","getItemIcon","item","isExpanded","mimeType","getMimeType","basename","PYTHON","FileListItem","props","_draggedItems$some","children","draggedItems","isDragInProgress","isDropTargetValid","isSelected","itemIndex","dropTargetItem","onDragStart","onDragOver","onDragEnd","onDragExit","onDrop","isDragged","some","draggedItem","id","itemPath","dropTargetPath","isExactDropTarget","isInDropTarget","isInvalidDropTarget","icon","depth","getDepth","filename","depthLines","Array","fill","map","value","index","className","e","draggable","role","fixedWidth"],"sources":["../src/FileListItem.tsx"],"sourcesContent":["import React from 'react';\nimport { Tooltip, type RenderItemProps } from '@deephaven/components';\nimport { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport { type FileStorageItem, isDirectory } from './FileStorage';\nimport './FileList.scss';\nimport FileUtils, { MIME_TYPE } from './FileUtils';\nimport { getPathFromItem } from './FileListUtils';\n\n/**\n * Get the icon definition for a file or folder item\n * @param item Item to get the icon for\n * @returns Icon definition to pass in the FontAwesomeIcon icon prop\n */\nfunction getItemIcon(item: FileStorageItem): IconDefinition {\n if (isDirectory(item)) {\n return item.isExpanded ? vsFolderOpened : vsFolder;\n }\n const mimeType = FileUtils.getMimeType(item.basename);\n switch (mimeType) {\n case MIME_TYPE.PYTHON:\n return dhPython;\n default:\n return vsCode;\n }\n}\n\nexport type FileListRenderItemProps = RenderItemProps<FileStorageItem> & {\n children?: JSX.Element;\n dropTargetItem?: FileStorageItem;\n draggedItems?: FileStorageItem[];\n isDragInProgress: boolean;\n isDropTargetValid: boolean;\n\n onDragStart: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n onDragOver: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n onDragExit: () => void;\n onDrop: (index: number, e: React.DragEvent<HTMLDivElement>) => void;\n};\n\nexport function FileListItem(props: FileListRenderItemProps): JSX.Element {\n const {\n children,\n draggedItems,\n isDragInProgress,\n isDropTargetValid,\n isSelected,\n item,\n itemIndex,\n dropTargetItem,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDragExit,\n onDrop,\n } = props;\n\n const isDragged =\n draggedItems?.some(draggedItem => draggedItem.id === item.id) ?? false;\n const itemPath = getPathFromItem(item);\n const dropTargetPath =\n isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;\n\n const isExactDropTarget =\n isDragInProgress &&\n isDropTargetValid &&\n isDirectory(item) &&\n dropTargetPath === itemPath;\n const isInDropTarget =\n isDragInProgress && isDropTargetValid && dropTargetPath === itemPath;\n const isInvalidDropTarget =\n isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;\n\n const icon = getItemIcon(item);\n const depth = FileUtils.getDepth(item.filename);\n const depthLines = Array(depth)\n .fill(null)\n .map((value, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"file-list-depth-line\" key={index} />\n ));\n\n return (\n <div\n className={classNames(\n 'd-flex w-100 align-items-center',\n 'file-list-item',\n {\n 'is-dragged': isDragged,\n 'is-exact-drop-target': isExactDropTarget,\n 'is-in-drop-target': isInDropTarget,\n 'is-invalid-drop-target': isInvalidDropTarget,\n 'is-selected': isSelected,\n }\n )}\n onDragStart={e => onDragStart(itemIndex, e)}\n onDragOver={e => onDragOver(itemIndex, e)}\n onDragEnd={e => onDragEnd(itemIndex, e)}\n onDragExit={onDragExit}\n onDrop={e => onDrop(itemIndex, e)}\n draggable\n role=\"presentation\"\n aria-label={item.basename}\n >\n {depthLines}{' '}\n <FontAwesomeIcon icon={icon} className=\"item-icon\" fixedWidth />{' '}\n <span className=\"truncation-wrapper\">\n {children ?? (\n <>\n {item.basename}\n <Tooltip>{item.basename}</Tooltip>\n </>\n )}\n </span>\n </div>\n );\n}\n\nexport default FileListItem;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
8
|
import classNames from 'classnames';
|
|
3
9
|
import Log from '@deephaven/log';
|
|
@@ -7,16 +13,24 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
13
|
var log = Log.module('FileListItemEditor');
|
|
8
14
|
var DEFAULT_VALIDATE = () => Promise.resolve();
|
|
9
15
|
export function FileListItemEditor(_ref) {
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
validate = DEFAULT_VALIDATE
|
|
15
|
-
} = _ref;
|
|
16
|
+
var item = _ref.item,
|
|
17
|
+
onCancel = _ref.onCancel,
|
|
18
|
+
onSubmit = _ref.onSubmit,
|
|
19
|
+
_ref$validate = _ref.validate,
|
|
20
|
+
validate = _ref$validate === void 0 ? DEFAULT_VALIDATE : _ref$validate;
|
|
16
21
|
var input = useRef(null);
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
var _useState = useState(item.basename),
|
|
23
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
24
|
+
value = _useState2[0],
|
|
25
|
+
setValue = _useState2[1];
|
|
26
|
+
var _useState3 = useState(),
|
|
27
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
28
|
+
validationError = _useState4[0],
|
|
29
|
+
setValidationError = _useState4[1];
|
|
30
|
+
var _useState5 = useState(Promise.resolve()),
|
|
31
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
32
|
+
validationPromise = _useState6[0],
|
|
33
|
+
setValidationPromise = _useState6[1];
|
|
20
34
|
var focus = useCallback(() => {
|
|
21
35
|
var _input$current;
|
|
22
36
|
(_input$current = input.current) === null || _input$current === void 0 || _input$current.focus();
|
|
@@ -46,16 +60,12 @@ export function FileListItemEditor(_ref) {
|
|
|
46
60
|
validateAndSubmit();
|
|
47
61
|
}, [validateAndSubmit]);
|
|
48
62
|
var handleChange = useCallback(e => {
|
|
49
|
-
var
|
|
50
|
-
value: newValue
|
|
51
|
-
} = e.target;
|
|
63
|
+
var newValue = e.target.value;
|
|
52
64
|
setValue(newValue);
|
|
53
65
|
}, []);
|
|
54
66
|
var handleKeyDown = useCallback(e => {
|
|
55
67
|
e.stopPropagation();
|
|
56
|
-
var
|
|
57
|
-
key
|
|
58
|
-
} = e;
|
|
68
|
+
var key = e.key;
|
|
59
69
|
switch (key) {
|
|
60
70
|
case 'Enter':
|
|
61
71
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListItemEditor.js","names":["React","useCallback","useEffect","useRef","useState","classNames","Log","PromiseUtils","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_VALIDATE","Promise","resolve","FileListItemEditor","_ref","item","onCancel","onSubmit","validate","input","value","setValue","
|
|
1
|
+
{"version":3,"file":"FileListItemEditor.js","names":["React","useCallback","useEffect","useRef","useState","classNames","Log","PromiseUtils","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_VALIDATE","Promise","resolve","FileListItemEditor","_ref","item","onCancel","onSubmit","_ref$validate","validate","input","_useState","basename","_useState2","_slicedToArray","value","setValue","_useState3","_useState4","validationError","setValidationError","_useState5","_useState6","validationPromise","setValidationPromise","focus","_input$current","current","stopPropagation","e","validateAndSubmit","then","catch","info","validateValueAndSetPromise","validatePromise","makeCancelable","undefined","isCanceled","cancel","selectRange","handleBlur","debug2","handleChange","newValue","target","handleKeyDown","key","className","children","type","ref","onBlur","onKeyDown","onChange","onClick","onDoubleClick","onMouseDown","concat"],"sources":["../src/FileListItemEditor.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type KeyboardEvent,\n type MouseEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport './FileListItemEditor.scss';\nimport { type FileStorageItem } from './FileStorage';\n\nconst log = Log.module('FileListItemEditor');\n\nexport interface FileListItemEditorProps {\n item: FileStorageItem;\n onCancel: () => void;\n onSubmit: (newName: string) => void;\n validate?: (newName: string) => Promise<void>;\n}\n\nconst DEFAULT_VALIDATE = (): Promise<void> => Promise.resolve();\n\nexport function FileListItemEditor({\n item,\n onCancel,\n onSubmit,\n validate = DEFAULT_VALIDATE,\n}: FileListItemEditorProps): JSX.Element {\n const input = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(item.basename);\n const [validationError, setValidationError] = useState<Error>();\n const [validationPromise, setValidationPromise] = useState<Promise<void>>(\n Promise.resolve()\n );\n\n const focus = useCallback(() => {\n input.current?.focus();\n // Select the proper range based on the type...\n }, [input]);\n\n const stopPropagation = useCallback(\n (e: MouseEvent) => e.stopPropagation(),\n []\n );\n\n const validateAndSubmit = useCallback(() => {\n validationPromise\n .then(() => {\n onSubmit(value);\n })\n .catch(e => log.info('Unable to validate name', e));\n }, [onSubmit, value, validationPromise]);\n\n useEffect(\n function validateValueAndSetPromise() {\n const validatePromise = PromiseUtils.makeCancelable(validate(value));\n validatePromise\n .then(() => setValidationError(undefined))\n .catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n setValidationError(e);\n }\n });\n setValidationPromise(validatePromise);\n return () => validatePromise.cancel();\n },\n [validate, value]\n );\n\n useEffect(\n function selectRange() {\n focus();\n },\n [focus]\n );\n\n const handleBlur = useCallback(() => {\n log.debug2('handleBlur');\n validateAndSubmit();\n }, [validateAndSubmit]);\n\n const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n const { value: newValue } = e.target;\n setValue(newValue);\n }, []);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n e.stopPropagation();\n\n const { key } = e;\n switch (key) {\n case 'Enter': {\n validateAndSubmit();\n break;\n }\n case 'Escape': {\n onCancel();\n break;\n }\n default:\n }\n },\n [onCancel, validateAndSubmit]\n );\n\n return (\n <div className=\"file-list-item-editor\">\n <input\n type=\"text\"\n className={classNames('form-control file-list-item-editor-input', {\n 'is-invalid': validationError,\n })}\n value={value}\n ref={input}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onClick={stopPropagation}\n onDoubleClick={stopPropagation}\n onMouseDown={stopPropagation}\n />\n\n {validationError && (\n <div className=\"invalid-feedback\">{`${validationError}`}</div>\n )}\n </div>\n );\n}\n\nexport default FileListItemEditor;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/FileListUtils.js
CHANGED
|
@@ -14,9 +14,7 @@ export function getMoveOperation(draggedItems, targetItem) {
|
|
|
14
14
|
}
|
|
15
15
|
var targetPath = getPathFromItem(targetItem);
|
|
16
16
|
if (draggedItems.some(_ref => {
|
|
17
|
-
var
|
|
18
|
-
filename
|
|
19
|
-
} = _ref;
|
|
17
|
+
var filename = _ref.filename;
|
|
20
18
|
return FileUtils.getPath(filename) === targetPath;
|
|
21
19
|
})) {
|
|
22
20
|
// Cannot drop if target is one of the dragged items is already in the target folder
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListUtils.js","names":["isDirectory","FileUtils","DEFAULT_ROW_HEIGHT","getPathFromItem","file","makePath","filename","getPath","getMoveOperation","draggedItems","targetItem","length","Error","targetPath","some","_ref","item","startsWith","files"],"sources":["../src/FileListUtils.ts"],"sourcesContent":["import { isDirectory } from './FileStorage';\nimport type { FileStorageItem } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nexport const DEFAULT_ROW_HEIGHT = 26;\n\nexport function getPathFromItem(file: FileStorageItem): string {\n return isDirectory(file)\n ? FileUtils.makePath(file.filename)\n : FileUtils.getPath(file.filename);\n}\n\n/**\n * Get the move operation for the current selection and the given target. Throws if the operation is invalid.\n */\nexport function getMoveOperation(\n draggedItems: FileStorageItem[],\n targetItem: FileStorageItem\n): { files: FileStorageItem[]; targetPath: string } {\n if (draggedItems.length === 0 || targetItem == null) {\n throw new Error('No items to move');\n }\n\n const targetPath = getPathFromItem(targetItem);\n if (\n draggedItems.some(\n ({ filename }) => FileUtils.getPath(filename) === targetPath\n )\n ) {\n // Cannot drop if target is one of the dragged items is already in the target folder\n throw new Error('File already in the destination folder');\n }\n if (\n draggedItems.some(\n item =>\n isDirectory(item) &&\n targetPath.startsWith(FileUtils.makePath(item.filename))\n )\n ) {\n // Cannot drop if target is a child of one of the directories being moved\n throw new Error('Destination folder cannot be a child of a dragged folder');\n }\n return { files: draggedItems, targetPath };\n}\n"],"mappings":"SAASA,WAAW;AAAA,OAEbC,SAAS;AAEhB,OAAO,IAAMC,kBAAkB,GAAG,EAAE;AAEpC,OAAO,SAASC,eAAeA,CAACC,IAAqB,EAAU;EAC7D,OAAOJ,WAAW,CAACI,IAAI,CAAC,GACpBH,SAAS,CAACI,QAAQ,CAACD,IAAI,CAACE,QAAQ,CAAC,GACjCL,SAAS,CAACM,OAAO,CAACH,IAAI,CAACE,QAAQ,CAAC;AACtC;;AAEA;AACA;AACA;AACA,OAAO,SAASE,gBAAgBA,CAC9BC,YAA+B,EAC/BC,UAA2B,EACuB;EAClD,IAAID,YAAY,CAACE,MAAM,KAAK,CAAC,IAAID,UAAU,IAAI,IAAI,EAAE;IACnD,MAAM,IAAIE,KAAK,CAAC,kBAAkB,CAAC;EACrC;EAEA,IAAMC,UAAU,GAAGV,eAAe,CAACO,UAAU,CAAC;EAC9C,IACED,YAAY,CAACK,IAAI,CACfC,IAAA;IAAA,
|
|
1
|
+
{"version":3,"file":"FileListUtils.js","names":["isDirectory","FileUtils","DEFAULT_ROW_HEIGHT","getPathFromItem","file","makePath","filename","getPath","getMoveOperation","draggedItems","targetItem","length","Error","targetPath","some","_ref","item","startsWith","files"],"sources":["../src/FileListUtils.ts"],"sourcesContent":["import { isDirectory } from './FileStorage';\nimport type { FileStorageItem } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nexport const DEFAULT_ROW_HEIGHT = 26;\n\nexport function getPathFromItem(file: FileStorageItem): string {\n return isDirectory(file)\n ? FileUtils.makePath(file.filename)\n : FileUtils.getPath(file.filename);\n}\n\n/**\n * Get the move operation for the current selection and the given target. Throws if the operation is invalid.\n */\nexport function getMoveOperation(\n draggedItems: FileStorageItem[],\n targetItem: FileStorageItem\n): { files: FileStorageItem[]; targetPath: string } {\n if (draggedItems.length === 0 || targetItem == null) {\n throw new Error('No items to move');\n }\n\n const targetPath = getPathFromItem(targetItem);\n if (\n draggedItems.some(\n ({ filename }) => FileUtils.getPath(filename) === targetPath\n )\n ) {\n // Cannot drop if target is one of the dragged items is already in the target folder\n throw new Error('File already in the destination folder');\n }\n if (\n draggedItems.some(\n item =>\n isDirectory(item) &&\n targetPath.startsWith(FileUtils.makePath(item.filename))\n )\n ) {\n // Cannot drop if target is a child of one of the directories being moved\n throw new Error('Destination folder cannot be a child of a dragged folder');\n }\n return { files: draggedItems, targetPath };\n}\n"],"mappings":"SAASA,WAAW;AAAA,OAEbC,SAAS;AAEhB,OAAO,IAAMC,kBAAkB,GAAG,EAAE;AAEpC,OAAO,SAASC,eAAeA,CAACC,IAAqB,EAAU;EAC7D,OAAOJ,WAAW,CAACI,IAAI,CAAC,GACpBH,SAAS,CAACI,QAAQ,CAACD,IAAI,CAACE,QAAQ,CAAC,GACjCL,SAAS,CAACM,OAAO,CAACH,IAAI,CAACE,QAAQ,CAAC;AACtC;;AAEA;AACA;AACA;AACA,OAAO,SAASE,gBAAgBA,CAC9BC,YAA+B,EAC/BC,UAA2B,EACuB;EAClD,IAAID,YAAY,CAACE,MAAM,KAAK,CAAC,IAAID,UAAU,IAAI,IAAI,EAAE;IACnD,MAAM,IAAIE,KAAK,CAAC,kBAAkB,CAAC;EACrC;EAEA,IAAMC,UAAU,GAAGV,eAAe,CAACO,UAAU,CAAC;EAC9C,IACED,YAAY,CAACK,IAAI,CACfC,IAAA;IAAA,IAAGT,QAAQ,GAAAS,IAAA,CAART,QAAQ;IAAA,OAAOL,SAAS,CAACM,OAAO,CAACD,QAAQ,CAAC,KAAKO,UAAU;EAAA,CAC9D,CAAC,EACD;IACA;IACA,MAAM,IAAID,KAAK,CAAC,wCAAwC,CAAC;EAC3D;EACA,IACEH,YAAY,CAACK,IAAI,CACfE,IAAI,IACFhB,WAAW,CAACgB,IAAI,CAAC,IACjBH,UAAU,CAACI,UAAU,CAAChB,SAAS,CAACI,QAAQ,CAACW,IAAI,CAACV,QAAQ,CAAC,CAC3D,CAAC,EACD;IACA;IACA,MAAM,IAAIM,KAAK,CAAC,0DAA0D,CAAC;EAC7E;EACA,OAAO;IAAEM,KAAK,EAAET,YAAY;IAAEI;EAAW,CAAC;AAC5C","ignoreList":[]}
|
package/dist/NewItemModal.js
CHANGED
|
@@ -48,9 +48,7 @@ class NewItemModal extends PureComponent {
|
|
|
48
48
|
this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(this);
|
|
49
49
|
this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(this);
|
|
50
50
|
this.handleBreadcrumbSelect = this.handleBreadcrumbSelect.bind(this);
|
|
51
|
-
var
|
|
52
|
-
defaultValue
|
|
53
|
-
} = props;
|
|
51
|
+
var defaultValue = props.defaultValue;
|
|
54
52
|
var path = FileUtils.hasPath(defaultValue) ? FileUtils.getPath(defaultValue) : '/';
|
|
55
53
|
this.state = {
|
|
56
54
|
isSubmitting: false,
|
|
@@ -62,16 +60,11 @@ class NewItemModal extends PureComponent {
|
|
|
62
60
|
};
|
|
63
61
|
}
|
|
64
62
|
componentDidUpdate(prevProps, prevState) {
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
} = prevProps;
|
|
71
|
-
var {
|
|
72
|
-
value,
|
|
73
|
-
path
|
|
74
|
-
} = this.state;
|
|
63
|
+
var isOpen = this.props.isOpen;
|
|
64
|
+
var prevIsOpen = prevProps.isOpen;
|
|
65
|
+
var _this$state = this.state,
|
|
66
|
+
value = _this$state.value,
|
|
67
|
+
path = _this$state.path;
|
|
75
68
|
if (!prevIsOpen && isOpen) {
|
|
76
69
|
this.resetValue();
|
|
77
70
|
this.isInitialLoad = true;
|
|
@@ -93,9 +86,8 @@ class NewItemModal extends PureComponent {
|
|
|
93
86
|
}
|
|
94
87
|
}
|
|
95
88
|
resetValue() {
|
|
96
|
-
var
|
|
97
|
-
defaultValue
|
|
98
|
-
} = this.props;
|
|
89
|
+
var _ref = this.props,
|
|
90
|
+
defaultValue = _ref.defaultValue;
|
|
99
91
|
var path = FileUtils.hasPath(defaultValue) ? FileUtils.getPath(defaultValue) : '/';
|
|
100
92
|
this.setState({
|
|
101
93
|
path,
|
|
@@ -117,10 +109,9 @@ class NewItemModal extends PureComponent {
|
|
|
117
109
|
var _this = this;
|
|
118
110
|
return _asyncToGenerator(function* () {
|
|
119
111
|
FileUtils.validateName(name);
|
|
120
|
-
var
|
|
121
|
-
defaultValue,
|
|
122
|
-
storage
|
|
123
|
-
} = _this.props;
|
|
112
|
+
var _this$props = _this.props,
|
|
113
|
+
defaultValue = _this$props.defaultValue,
|
|
114
|
+
storage = _this$props.storage;
|
|
124
115
|
if (checkExisting) {
|
|
125
116
|
var value = "".concat(path).concat(name);
|
|
126
117
|
if (value !== defaultValue) {
|
|
@@ -152,9 +143,7 @@ class NewItemModal extends PureComponent {
|
|
|
152
143
|
this.submitModal();
|
|
153
144
|
}
|
|
154
145
|
handleChange(event) {
|
|
155
|
-
var
|
|
156
|
-
value
|
|
157
|
-
} = event.target;
|
|
146
|
+
var value = event.target.value;
|
|
158
147
|
this.setState({
|
|
159
148
|
value
|
|
160
149
|
});
|
|
@@ -180,9 +169,7 @@ class NewItemModal extends PureComponent {
|
|
|
180
169
|
|
|
181
170
|
// eslint-disable-next-line class-methods-use-this
|
|
182
171
|
handleKeyDown(e) {
|
|
183
|
-
var
|
|
184
|
-
key
|
|
185
|
-
} = e;
|
|
172
|
+
var key = e.key;
|
|
186
173
|
e.stopPropagation();
|
|
187
174
|
switch (key) {
|
|
188
175
|
case 'Enter':
|
|
@@ -195,9 +182,7 @@ class NewItemModal extends PureComponent {
|
|
|
195
182
|
case 'Escape':
|
|
196
183
|
{
|
|
197
184
|
e.preventDefault();
|
|
198
|
-
var
|
|
199
|
-
onCancel
|
|
200
|
-
} = this.props;
|
|
185
|
+
var onCancel = this.props.onCancel;
|
|
201
186
|
onCancel();
|
|
202
187
|
break;
|
|
203
188
|
}
|
|
@@ -223,23 +208,18 @@ class NewItemModal extends PureComponent {
|
|
|
223
208
|
this.setState({
|
|
224
209
|
showOverwriteModal: false
|
|
225
210
|
});
|
|
226
|
-
var
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
path,
|
|
231
|
-
value
|
|
232
|
-
} = this.state;
|
|
211
|
+
var onSubmit = this.props.onSubmit;
|
|
212
|
+
var _this$state2 = this.state,
|
|
213
|
+
path = _this$state2.path,
|
|
214
|
+
value = _this$state2.value;
|
|
233
215
|
log.debug('handleOverwriteConfirm', path, value);
|
|
234
216
|
onSubmit("".concat(path).concat(value), true);
|
|
235
217
|
}
|
|
236
218
|
handleExtensionChangeCancel() {
|
|
237
219
|
log.debug('handleExtensionChangeCancel');
|
|
238
|
-
this.setState(
|
|
239
|
-
var
|
|
240
|
-
|
|
241
|
-
prevExtension
|
|
242
|
-
} = _ref;
|
|
220
|
+
this.setState(_ref2 => {
|
|
221
|
+
var value = _ref2.value,
|
|
222
|
+
prevExtension = _ref2.prevExtension;
|
|
243
223
|
var newValue = FileUtils.replaceExtension(value, prevExtension);
|
|
244
224
|
return {
|
|
245
225
|
showExtensionChangeModal: false,
|
|
@@ -262,12 +242,8 @@ class NewItemModal extends PureComponent {
|
|
|
262
242
|
focusRenameInput() {
|
|
263
243
|
var input = this.inputRef.current;
|
|
264
244
|
if (input) {
|
|
265
|
-
var
|
|
266
|
-
|
|
267
|
-
} = this.props;
|
|
268
|
-
var {
|
|
269
|
-
value
|
|
270
|
-
} = input;
|
|
245
|
+
var type = this.props.type;
|
|
246
|
+
var value = input.value;
|
|
271
247
|
var selectionEnd = type === 'directory' ? value.length : value.lastIndexOf('.');
|
|
272
248
|
input.focus();
|
|
273
249
|
input.setSelectionRange(0, selectionEnd > 0 ? selectionEnd : value.length);
|
|
@@ -275,16 +251,13 @@ class NewItemModal extends PureComponent {
|
|
|
275
251
|
}
|
|
276
252
|
submitModal() {
|
|
277
253
|
var skipExtensionCheck = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
278
|
-
this.setState(
|
|
279
|
-
var
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
notifyOnExtensionChange,
|
|
286
|
-
type
|
|
287
|
-
} = this.props;
|
|
254
|
+
this.setState(_ref3 => {
|
|
255
|
+
var prevExtension = _ref3.prevExtension,
|
|
256
|
+
value = _ref3.value,
|
|
257
|
+
path = _ref3.path;
|
|
258
|
+
var _this$props2 = this.props,
|
|
259
|
+
notifyOnExtensionChange = _this$props2.notifyOnExtensionChange,
|
|
260
|
+
type = _this$props2.type;
|
|
288
261
|
log.debug('submitModal', prevExtension, value);
|
|
289
262
|
var newExtension = FileUtils.getExtension(value);
|
|
290
263
|
if (notifyOnExtensionChange && !skipExtensionCheck && prevExtension !== null && prevExtension !== newExtension) {
|
|
@@ -295,9 +268,7 @@ class NewItemModal extends PureComponent {
|
|
|
295
268
|
};
|
|
296
269
|
}
|
|
297
270
|
this.getValidationPromise(path, value, true).then(newItemName => {
|
|
298
|
-
var
|
|
299
|
-
onSubmit
|
|
300
|
-
} = this.props;
|
|
271
|
+
var onSubmit = this.props.onSubmit;
|
|
301
272
|
onSubmit("".concat(path).concat(value));
|
|
302
273
|
}).catch(e => {
|
|
303
274
|
// Don't allow using existing names for folders
|
|
@@ -357,24 +328,22 @@ class NewItemModal extends PureComponent {
|
|
|
357
328
|
});
|
|
358
329
|
}
|
|
359
330
|
render() {
|
|
360
|
-
var
|
|
361
|
-
storage,
|
|
362
|
-
isOpen,
|
|
363
|
-
onCancel,
|
|
364
|
-
placeholder,
|
|
365
|
-
title,
|
|
366
|
-
type
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
newExtension
|
|
377
|
-
} = this.state;
|
|
331
|
+
var _this$props3 = this.props,
|
|
332
|
+
storage = _this$props3.storage,
|
|
333
|
+
isOpen = _this$props3.isOpen,
|
|
334
|
+
onCancel = _this$props3.onCancel,
|
|
335
|
+
placeholder = _this$props3.placeholder,
|
|
336
|
+
title = _this$props3.title,
|
|
337
|
+
type = _this$props3.type;
|
|
338
|
+
var _this$state3 = this.state,
|
|
339
|
+
isSubmitting = _this$state3.isSubmitting,
|
|
340
|
+
path = _this$state3.path,
|
|
341
|
+
showExtensionChangeModal = _this$state3.showExtensionChangeModal,
|
|
342
|
+
showOverwriteModal = _this$state3.showOverwriteModal,
|
|
343
|
+
validationError = _this$state3.validationError,
|
|
344
|
+
value = _this$state3.value,
|
|
345
|
+
prevExtension = _this$state3.prevExtension,
|
|
346
|
+
newExtension = _this$state3.newExtension;
|
|
378
347
|
var isDirectory = type === 'directory';
|
|
379
348
|
var prevExtensionText = FileUtils.fileExtensionToString(prevExtension);
|
|
380
349
|
var newExtensionText = FileUtils.fileExtensionToString(newExtension);
|
package/dist/NewItemModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewItemModal.js","names":["React","PureComponent","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Button","Pending","PromiseUtils","ValidationError","Log","vsHome","FontAwesomeIcon","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","NewItemModal","getValidationMessage","err","info","type","concat","handleError","isCanceled","error","constructor","props","_defineProperty","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","arguments","length","makeCancelable","validateName","_this","_asyncToGenerator","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","_ref","newValue","replaceExtension","input","inputRef","current","selectionEnd","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","_ref2","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","children","kind","className","onClick","icon","transform","tooltip","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","toggle","onOpened","htmlFor","id","autoComplete","autoCapitalize","autoCorrect","spellCheck","ref","onKeyDown","onChange","onSelect","focusedPath","disabled","headerText","bodyText","onConfirm","cancelButtonText","confirmButtonText","isOverwrite"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type KeyboardEvent,\n PureComponent,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n Button,\n} from '@deephaven/components';\nimport {\n type 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 { type FileStorageItem, type FileType } from './FileStorage';\nimport type FileStorage 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, isOverwrite?: boolean) => 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 defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string, isOverwrite?: boolean): 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 =\n this.handleExtensionChangeCancel.bind(this);\n this.handleExtensionChangeConfirm =\n this.handleExtensionChangeConfirm.bind(this);\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\n onSubmit(`${path}${value}`, true);\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\"\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,KAAK,IAGVC,aAAa,QACR,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,KAAK,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,UAAU,EACVC,MAAM,QACD,uBAAuB;AAC9B,SAEEC,OAAO,EACPC,YAAY,EACZC,eAAe,QACV,kBAAkB;AACzB,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAC1DC,YAAY;AAAA,OAGZC,SAAS;AAAA;AAAA,OAGTC,eAAe;AAAA,OACfC,iBAAiB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAExB,IAAMC,GAAG,GAAGb,GAAG,CAACc,MAAM,CAAC,cAAc,CAAC;AAyBtC,MAAMC,YAAY,SAAS1B,aAAa,CAAuC;EAU7E,OAAO2B,oBAAoBA,CAACC,GAAU,EAAU;IAC9C,IAAIA,GAAG,YAAYZ,eAAe,IAAIY,GAAG,CAACC,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE;MACnE,OAAO,4CAA4C;IACrD;IACA,UAAAC,MAAA,CAAUH,GAAG;EACf;EAEA,OAAOI,WAAWA,CAACJ,GAAU,EAAQ;IACnC,IAAI,CAACnB,YAAY,CAACwB,UAAU,CAACL,GAAG,CAAC,EAAE;MACjCJ,GAAG,CAACU,KAAK,CAACN,GAAG,CAAC;IAChB;EACF;EAEAO,WAAWA,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,gCAgEItC,KAAK,CAACuC,SAAS,CAAmB,CAAC;IAAAD,eAAA;IAAAA,eAAA;IAAAA,eAAA,kBAMpC,IAAI7B,OAAO,CAAC,CAAC;IAAA6B,eAAA,kBAEb,IAAIE,GAAG,CAAC,CAAC;IAAAF,eAAA,wBAEH,IAAI;IAzE1B,IAAI,CAACG,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACE,YAAY,GAAG,IAAI,CAACA,YAAY,CAACF,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACG,YAAY,GAAG,IAAI,CAACA,YAAY,CAACH,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACK,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACL,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACN,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACO,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACP,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACQ,2BAA2B,GAC9B,IAAI,CAACA,2BAA2B,CAACR,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAACS,4BAA4B,GAC/B,IAAI,CAACA,4BAA4B,CAACT,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACU,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACV,IAAI,CAAC,IAAI,CAAC;IAEpE,IAAM;MAAEW;IAAa,CAAC,GAAGhB,KAAK;IAE9B,IAAMiB,IAAI,GAAGtC,SAAS,CAACuC,OAAO,CAACF,YAAY,CAAC,GACxCrC,SAAS,CAACwC,OAAO,CAACH,YAAY,CAAC,GAC/B,GAAG;IAEP,IAAI,CAACI,KAAK,GAAG;MACXC,YAAY,EAAE,KAAK;MACnBJ,IAAI;MACJK,aAAa,EAAE3C,SAAS,CAAC4C,YAAY,CAACP,YAAY,CAAC;MACnDQ,wBAAwB,EAAE,KAAK;MAC/BC,kBAAkB,EAAE,KAAK;MACzBC,KAAK,EAAE/C,SAAS,CAACgD,WAAW,CAACX,YAAY;IAC3C,CAAC;EACH;EAEAY,kBAAkBA,CAChBC,SAA4B,EAC5BC,SAA4B,EACtB;IACN,IAAM;MAAEC;IAAO,CAAC,GAAG,IAAI,CAAC/B,KAAK;IAC7B,IAAM;MAAE+B,MAAM,EAAEC;IAAW,CAAC,GAAGH,SAAS;IACxC,IAAM;MAAEH,KAAK;MAAET;IAAK,CAAC,GAAG,IAAI,CAACG,KAAK;IAClC,IAAI,CAACY,UAAU,IAAID,MAAM,EAAE;MACzB,IAAI,CAACE,UAAU,CAAC,CAAC;MACjB,IAAI,CAACC,aAAa,GAAG,IAAI;IAC3B;IAEA,IAAIF,UAAU,IAAID,MAAM,EAAE;MACxB,IACE,CAAC,IAAI,CAACG,aAAa,KAClBjB,IAAI,KAAKa,SAAS,CAACb,IAAI,IAAIS,KAAK,KAAKI,SAAS,CAACJ,KAAK,CAAC,EACtD;QACA,IAAI,CAACS,sBAAsB,CAAClB,IAAI,EAAES,KAAK,CAAC;MAC1C;MACA,IAAI,CAACQ,aAAa,GAAG,KAAK;IAC5B;EACF;EAEAE,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACC,OAAO,CAACC,MAAM,CAAC,CAAC;IACrB,IAAI,IAAI,CAACC,yBAAyB,EAAE;MAClC,IAAI,CAACA,yBAAyB,CAACD,MAAM,CAAC,CAAC;IACzC;IACA,IAAI,IAAI,CAACE,6BAA6B,EAAE;MACtC,IAAI,CAACA,6BAA6B,CAACF,MAAM,CAAC,CAAC;IAC7C;EACF;EAcAL,UAAUA,CAAA,EAAS;IACjB,IAAM;MAAEjB;IAAa,CAAC,GAAG,IAAI,CAAChB,KAA0B;IACxD,IAAMiB,IAAI,GAAGtC,SAAS,CAACuC,OAAO,CAACF,YAAY,CAAC,GACxCrC,SAAS,CAACwC,OAAO,CAACH,YAAY,CAAC,GAC/B,GAAG;IACP,IAAI,CAACyB,QAAQ,CAAC;MACZxB,IAAI;MACJS,KAAK,EAAE/C,SAAS,CAACgD,WAAW,CAACX,YAAY,CAAC;MAC1C0B,eAAe,EAAEC,SAAS;MAC1BrB,aAAa,EAAE3C,SAAS,CAAC4C,YAAY,CAACP,YAAY,CAAC;MACnDK,YAAY,EAAE;IAChB,CAAC,CAAC;EACJ;EAEAuB,oBAAoBA,CAClB3B,IAAY,EACZ4B,IAAY,EAEe;IAAA,IAD3BC,aAAa,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAJ,SAAA,GAAAI,SAAA,MAAG,KAAK;IAErB,IAAI,IAAI,CAACR,yBAAyB,EAAE;MAClC,IAAI,CAACA,yBAAyB,CAACD,MAAM,CAAC,CAAC;IACzC;IACA,IAAI,CAACC,yBAAyB,GAAGlE,YAAY,CAAC4E,cAAc,CAC1D,IAAI,CAACC,YAAY,CAACjC,IAAI,EAAE4B,IAAI,EAAEC,aAAa,CAC7C,CAAC;IACD,OAAO,IAAI,CAACP,yBAAyB;EACvC;EAEMW,YAAYA,CAChBjC,IAAY,EACZ4B,IAAY,EACZC,aAAsB,EACL;IAAA,IAAAK,KAAA;IAAA,OAAAC,iBAAA;MACjBzE,SAAS,CAACuE,YAAY,CAACL,IAAI,CAAC;MAE5B,IAAM;QAAE7B,YAAY;QAAEqC;MAAQ,CAAC,GAAGF,KAAI,CAACnD,KAAK;MAC5C,IAAI8C,aAAa,EAAE;QACjB,IAAMpB,KAAK,MAAA/B,MAAA,CAAMsB,IAAI,EAAAtB,MAAA,CAAGkD,IAAI,CAAE;QAC9B,IAAInB,KAAK,KAAKV,YAAY,EAAE;UAC1B,IAAI;YACF,IAAMsC,YAAY,SAASD,OAAO,CAAC5D,IAAI,CAACiC,KAAK,CAAC;YAC9C,MAAM,IAAI9C,eAAe,CAAC0E,YAAY,CAAC;UACzC,CAAC,CAAC,OAAOC,CAAC,EAAE;YACV,IAAI,EAAEA,CAAC,YAAY1E,iBAAiB,CAAC,EAAE;cACrC,MAAM0E,CAAC;YACT;YACA;UACF;QACF;MACF;MAEA,OAAOV,IAAI;IAAC;EACd;EAEAV,sBAAsBA,CAAClB,IAAY,EAAEuC,OAAe,EAAQ;IAC1D,IAAI,CAACZ,oBAAoB,CAAC3B,IAAI,EAAEuC,OAAO,CAAC,CACrCC,IAAI,CAAC,MAAM;MACV,IAAI,CAAChB,QAAQ,CAAC;QAAEC,eAAe,EAAEC;MAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CACDe,KAAK,CAAC,IAAI,CAAChD,qBAAqB,CAAC,CACjCgD,KAAK,CAACpE,YAAY,CAACM,WAAW,CAAC;EACpC;EAEAU,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACqD,gBAAgB,CAAC,CAAC;EACzB;EAEAvD,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACwD,WAAW,CAAC,CAAC;EACpB;EAEApD,YAAYA,CAACqD,KAAoC,EAAQ;IACvD,IAAM;MAAEnC;IAAM,CAAC,GAAGmC,KAAK,CAACC,MAAM;IAC9B,IAAI,CAACrB,QAAQ,CAAC;MAAEf;IAAM,CAAC,CAAC;EAC1B;EAEAnB,YAAYA,CAACwD,IAAqB,EAAQ;IACxC3E,GAAG,CAAC4E,KAAK,CAAC,cAAc,EAAED,IAAI,CAAC;IAC/B,IAAIA,IAAI,CAACrE,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAAC+C,QAAQ,CAAC;QAAExB,IAAI,EAAEtC,SAAS,CAACsF,QAAQ,CAACF,IAAI,CAACG,QAAQ;MAAE,CAAC,CAAC;IAC5D,CAAC,MAAM;MACL;MACA,IAAMxC,KAAK,GAAGqC,IAAI,CAACI,QAAQ;MAC3B,IAAMlD,IAAI,GAAGtC,SAAS,CAACwC,OAAO,CAAC4C,IAAI,CAACG,QAAQ,CAAC;MAC7C,IAAI,CAACzB,QAAQ,CAAC;QAAEf,KAAK;QAAET;MAAK,CAAC,EAAE,MAAM;QACnC,IAAI,CAAC0C,gBAAgB,CAAC,CAAC;MACzB,CAAC,CAAC;IACJ;EACF;;EAEA;EACAlD,aAAaA,CAAC8C,CAAgB,EAAQ;IACpC,IAAM;MAAEa;IAAI,CAAC,GAAGb,CAAC;IACjBA,CAAC,CAACc,eAAe,CAAC,CAAC;IAEnB,QAAQD,GAAG;MACT,KAAK,OAAO;QAAE;UACZ;UACAb,CAAC,CAACe,cAAc,CAAC,CAAC;UAClB,IAAI,CAACV,WAAW,CAAC,CAAC;UAClB;QACF;MACA,KAAK,QAAQ;QAAE;UACbL,CAAC,CAACe,cAAc,CAAC,CAAC;UAClB,IAAM;YAAEC;UAAS,CAAC,GAAG,IAAI,CAACvE,KAAK;UAC/BuE,QAAQ,CAAC,CAAC;UACV;QACF;MACA;IACF;EACF;EAEA7D,qBAAqBA,CAAClB,GAAU,EAAQ;IACtC,IAAI,EAAEA,GAAG,YAAYlB,eAAe,CAAC,EAAE;MACrC,MAAMkB,GAAG;IACX;IACAJ,GAAG,CAAC4E,KAAK,CAAC,kBAAkB,EAAExE,GAAG,CAAC;IAClC,IAAI,CAACiD,QAAQ,CAAC;MAAEC,eAAe,EAAElD;IAAI,CAAC,CAAC;EACzC;EAEAmB,qBAAqBA,CAAA,EAAS;IAC5B,IAAI,CAAC8B,QAAQ,CAAC;MACZhB,kBAAkB,EAAE,KAAK;MACzBJ,YAAY,EAAE;IAChB,CAAC,CAAC;EACJ;EAEAT,sBAAsBA,CAAA,EAAS;IAC7B,IAAI,CAAC6B,QAAQ,CAAC;MAAEhB,kBAAkB,EAAE;IAAM,CAAC,CAAC;IAC5C,IAAM;MAAE+C;IAAS,CAAC,GAAG,IAAI,CAACxE,KAAK;IAC/B,IAAM;MAAEiB,IAAI;MAAES;IAAM,CAAC,GAAG,IAAI,CAACN,KAAK;IAClChC,GAAG,CAAC4E,KAAK,CAAC,wBAAwB,EAAE/C,IAAI,EAAES,KAAK,CAAC;IAEhD8C,QAAQ,IAAA7E,MAAA,CAAIsB,IAAI,EAAAtB,MAAA,CAAG+B,KAAK,GAAI,IAAI,CAAC;EACnC;EAEAb,2BAA2BA,CAAA,EAAS;IAClCzB,GAAG,CAAC4E,KAAK,CAAC,6BAA6B,CAAC;IACxC,IAAI,CAACvB,QAAQ,CAACgC,IAAA,IAA8B;MAAA,IAA7B;QAAE/C,KAAK;QAAEJ;MAAc,CAAC,GAAAmD,IAAA;MACrC,IAAMC,QAAQ,GAAG/F,SAAS,CAACgG,gBAAgB,CAACjD,KAAK,EAAEJ,aAAa,CAAC;MACjE,OAAO;QACLE,wBAAwB,EAAE,KAAK;QAC/BE,KAAK,EAAEgD;MACT,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAACd,WAAW,CAAC,IAAI,CAAC;EACxB;EAEA9C,4BAA4BA,CAAA,EAAS;IACnC1B,GAAG,CAAC4E,KAAK,CAAC,8BAA8B,CAAC;IACzC,IAAI,CAACvB,QAAQ,CAAC;MAAEjB,wBAAwB,EAAE;IAAM,CAAC,CAAC;IAClD,IAAI,CAACoC,WAAW,CAAC,IAAI,CAAC;EACxB;;EAEA;AACF;AACA;EACED,gBAAgBA,CAAA,EAAS;IACvB,IAAMiB,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACC,OAAO;IACnC,IAAIF,KAAK,EAAE;MACT,IAAM;QAAElF;MAAK,CAAC,GAAG,IAAI,CAACM,KAAK;MAC3B,IAAM;QAAE0B;MAAM,CAAC,GAAGkD,KAAK;MACvB,IAAMG,YAAY,GAChBrF,IAAI,KAAK,WAAW,GAAGgC,KAAK,CAACsB,MAAM,GAAGtB,KAAK,CAACsD,WAAW,CAAC,GAAG,CAAC;MAC9DJ,KAAK,CAACK,KAAK,CAAC,CAAC;MACbL,KAAK,CAACM,iBAAiB,CACrB,CAAC,EACDH,YAAY,GAAG,CAAC,GAAGA,YAAY,GAAGrD,KAAK,CAACsB,MAC1C,CAAC;IACH;EACF;EAEAY,WAAWA,CAAA,EAAmC;IAAA,IAAlCuB,kBAAkB,GAAApC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAJ,SAAA,GAAAI,SAAA,MAAG,KAAK;IACpC,IAAI,CAACN,QAAQ,CAAC2C,KAAA,IAAoC;MAAA,IAAnC;QAAE9D,aAAa;QAAEI,KAAK;QAAET;MAAK,CAAC,GAAAmE,KAAA;MAC3C,IAAM;QAAEC,uBAAuB;QAAE3F;MAAK,CAAC,GAAG,IAAI,CAACM,KAAK;MACpDZ,GAAG,CAAC4E,KAAK,CAAC,aAAa,EAAE1C,aAAa,EAAEI,KAAK,CAAC;MAC9C,IAAM4D,YAAY,GAAG3G,SAAS,CAAC4C,YAAY,CAACG,KAAK,CAAC;MAClD,IACE2D,uBAAuB,IACvB,CAACF,kBAAkB,IACnB7D,aAAa,KAAK,IAAI,IACtBA,aAAa,KAAKgE,YAAY,EAC9B;QACA,OAAO;UACLjE,YAAY,EAAE,KAAK;UACnBG,wBAAwB,EAAE,IAAI;UAC9B8D;QACF,CAAC;MACH;MAEA,IAAI,CAAC1C,oBAAoB,CAAC3B,IAAI,EAAES,KAAK,EAAE,IAAI,CAAC,CACzC+B,IAAI,CAAE8B,WAAmB,IAAK;QAC7B,IAAM;UAAEf;QAAS,CAAC,GAAG,IAAI,CAACxE,KAAK;QAC/BwE,QAAQ,IAAA7E,MAAA,CAAIsB,IAAI,EAAAtB,MAAA,CAAG+B,KAAK,CAAE,CAAC;MAC7B,CAAC,CAAC,CACDgC,KAAK,CAACH,CAAC,IAAI;QACV;QACA;QACA,IAAIA,CAAC,YAAY3E,eAAe,EAAE;UAChC,IAAIc,IAAI,KAAK,WAAW,IAAI6D,CAAC,CAAC9D,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE;YACvD,IAAI,CAAC+C,QAAQ,CAAC;cAAEhB,kBAAkB,EAAE;YAAK,CAAC,CAAC;YAC3C;UACF;QACF;QACA,MAAM8B,CAAC;MACT,CAAC,CAAC,CACDG,KAAK,CAACH,CAAC,IAAI;QACV,IAAIlF,YAAY,CAACwB,UAAU,CAAC0D,CAAC,CAAC,EAAE;UAC9B,IAAI,CAACd,QAAQ,CAAC;YAAEpB,YAAY,EAAE;UAAM,CAAC,CAAC;QACxC;QACA,MAAMkC,CAAC;MACT,CAAC,CAAC,CACDG,KAAK,CAAC,IAAI,CAAChD,qBAAqB,CAAC,CACjCgD,KAAK,CAACpE,YAAY,CAACM,WAAW,CAAC;MAElC,OAAO;QACLyB,YAAY,EAAE,IAAI;QAClBG,wBAAwB,EAAE,KAAK;QAC/B8D,YAAY,EAAE3C;MAChB,CAAC;IACH,CAAC,CAAC;EACJ;EAEA5B,sBAAsBA,CAACyE,aAAqB,EAAQ;IAClD,IAAI,CAAC/C,QAAQ,CAAC;MAAExB,IAAI,EAAEuE;IAAc,CAAC,CAAC;EACxC;EAEAC,iBAAiBA,CAACxE,IAAY,EAAmB;IAC/C,IAAMyE,UAAU,GAAGzE,IAAI,CAAC0E,KAAK,CAAC,GAAG,CAAC;IAClCD,UAAU,CAACE,GAAG,CAAC,CAAC;IAChB,OAAOF,UAAU,CAACG,GAAG,CAAC,CAAC1B,QAAQ,EAAE2B,KAAK,KAAK;MACzC,IAAIN,aAAa,GAAG,EAAE;MACtB,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,KAAK,EAAEC,CAAC,IAAI,CAAC,EAAE;QACjCP,aAAa,OAAA7F,MAAA,CAAO+F,UAAU,CAACK,CAAC,CAAC,MAAG;MACtC;MACAP,aAAa,OAAA7F,MAAA,CAAOwE,QAAQ,MAAG;MAE/B,oBACElF,KAAA,CAACtB,KAAK,CAACuB,QAAQ;QAAA8G,QAAA,gBACbjH,IAAA,CAACZ,MAAM;UACL8H,IAAI,EAAC,OAAO;UACZC,SAAS,EAAC,uBAAuB;UACjCC,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACpF,sBAAsB,CAACyE,aAAa,CAAE;UAC1D,cAAYM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAGnD,SAAU;UAC7CyD,IAAI,EACFN,KAAK,KAAK,CAAC,gBACT/G,IAAA,CAACN,eAAe;YAAC2H,IAAI,EAAE5H,MAAO;YAAC6H,SAAS,EAAC;UAAW,CAAE,CAAC,GACrD1D,SACL;UACD2D,OAAO,EAAER,KAAK,KAAK,CAAC,GAAG,MAAM,GAAGnD,SAAU;UAAAqD,QAAA,EAEzC7B;QAAQ,CACH,CAAC,KAEX;MAAA,GAhBqBqB,aAgBL,CAAC;IAErB,CAAC,CAAC;EACJ;EAEAe,MAAMA,CAAA,EAAoB;IACxB,IAAM;MAAElD,OAAO;MAAEtB,MAAM;MAAEwC,QAAQ;MAAEiC,WAAW;MAAEC,KAAK;MAAE/G;IAAK,CAAC,GAAG,IAAI,CAACM,KAAK;IAC1E,IAAM;MACJqB,YAAY;MACZJ,IAAI;MACJO,wBAAwB;MACxBC,kBAAkB;MAClBiB,eAAe;MACfhB,KAAK;MACLJ,aAAa;MACbgE;IACF,CAAC,GAAG,IAAI,CAAClE,KAAK;IAEd,IAAMsF,WAAW,GAAGhH,IAAI,KAAK,WAAW;IACxC,IAAMiH,iBAAiB,GAAGhI,SAAS,CAACiI,qBAAqB,CAACtF,aAAa,CAAC;IACxE,IAAMuF,gBAAgB,GAAGlI,SAAS,CAACiI,qBAAqB,CAACtB,YAAY,CAAC;IACtE,IAAMwB,cAAc,GAAGJ,WAAW,GAAG,QAAQ,GAAG,MAAM;IACtD,IAAMK,cAAc,GAAGL,WAAW,GAAG,iBAAiB,GAAG,cAAc;IAEvE,oBACEzH,KAAA,CAAAE,SAAA;MAAA6G,QAAA,gBACE/G,KAAA,CAACnB,KAAK;QACJiE,MAAM,EAAEA,MAAO;QACfiF,MAAM,EAAEzC,QAAS;QACjB0C,QAAQ,EAAE,IAAI,CAAC3G,iBAAkB;QACjC4F,SAAS,EAAC,sCAAsC;QAAAF,QAAA,gBAEhDjH,IAAA,CAACd,WAAW;UAAC+I,MAAM,EAAEzC,QAAS;UAAAyB,QAAA,EAAES;QAAK,CAAc,CAAC,eACpD1H,IAAA,CAAChB,SAAS;UAAAiI,QAAA,eACRjH,IAAA;YAAAiH,QAAA,eACE/G,KAAA;cAAKiH,SAAS,EAAC,2CAA2C;cAAAF,QAAA,gBACxD/G,KAAA;gBAAKiH,SAAS,EAAC,kBAAkB;gBAAAF,QAAA,gBAC/BjH,IAAA;kBAAOmI,OAAO,EAAC,iBAAiB;kBAAAlB,QAAA,EAAEe;gBAAc,CAAQ,CAAC,eACzDhI,IAAA;kBACEoI,EAAE,EAAC,iBAAiB;kBACpBzH,IAAI,EAAC,MAAM;kBACX0H,YAAY,EAAC,KAAK;kBAClBC,cAAc,EAAC,MAAM;kBACrBC,WAAW,EAAC,KAAK;kBACjBC,UAAU,EAAC,OAAO;kBAClBrB,SAAS,EAAErI,UAAU,CAAC,cAAc,EAAE;oBACpC,YAAY,EAAE6E;kBAChB,CAAC,CAAE;kBACHhB,KAAK,EAAEA,KAAM;kBACb8E,WAAW,EAAEA,WAAY;kBACzBgB,GAAG,EAAE,IAAI,CAAC3C,QAAS;kBACnB4C,SAAS,EAAE,IAAI,CAAChH,aAAc;kBAC9BiH,QAAQ,EAAE,IAAI,CAAClH;gBAAa,CAC7B,CAAC,EACDkC,eAAe,iBACd3D,IAAA;kBAAKmH,SAAS,EAAC,kBAAkB;kBAAAF,QAAA,EAC9B1G,YAAY,CAACC,oBAAoB,CAACmD,eAAe;gBAAC,CAChD,CACN;cAAA,CACE,CAAC,eACNzD,KAAA;gBAAKiH,SAAS,EAAC,aAAa;gBAAAF,QAAA,gBAC1BjH,IAAA;kBAAAiH,QAAA,EAAO;gBAAY,CAAO,CAAC,EAC1B,IAAI,CAACP,iBAAiB,CAACxE,IAAI,CAAC;cAAA,CAC1B,CAAC,eACNlC,IAAA;gBAAKmH,SAAS,EAAC,qCAAqC;gBAAAF,QAAA,eAClDjH,IAAA,CAACL,YAAY;kBACXiJ,QAAQ,EAAE,IAAI,CAACpH,YAAa;kBAC5B8C,OAAO,EAAEA,OAAQ;kBACjBuE,WAAW,EAAE3G;gBAAK,CACnB;cAAC,CACC,CAAC;YAAA,CACH;UAAC,CACF;QAAC,CACE,CAAC,eAEZhC,KAAA,CAACjB,WAAW;UAAAgI,QAAA,gBACVjH,IAAA,CAACZ,MAAM;YAAC8H,IAAI,EAAC,WAAW;YAACE,OAAO,EAAE5B,QAAS;YAAAyB,QAAA,EAAC;UAE5C,CAAQ,CAAC,eACTjH,IAAA,CAACZ,MAAM;YACL8H,IAAI,EAAC,SAAS;YACd4B,QAAQ,EAAExG,YAAa;YACvB8E,OAAO,EAAE,IAAI,CAAC/F,iBAAkB;YAAA4F,QAAA,EAE/Bc;UAAc,CACT,CAAC;QAAA,CACE,CAAC;MAAA,CACT,CAAC,eACR/H,IAAA,CAACb,UAAU;QACT6D,MAAM,EAAEN,kBAAmB;QAC3BqG,UAAU,EAAC,mBAAmB;QAC9BC,QAAQ,EAAC,4EAA4E;QACrFxD,QAAQ,EAAE,IAAI,CAAC5D,qBAAsB;QACrCqH,SAAS,EAAE,IAAI,CAACpH,sBAAuB;QACvCqH,gBAAgB,EAAC,QAAQ;QACzBC,iBAAiB,EAAC;MAAW,CAC9B,CAAC,eACFnJ,IAAA,CAACb,UAAU;QACT6D,MAAM,EAAEP,wBAAyB;QACjCsG,UAAU,EAAC,0BAA0B;QACrCC,QAAQ,sDAAApI,MAAA,CAAqDgH,iBAAiB,cAAAhH,MAAA,CAASkH,gBAAgB,QAAK;QAC5GtC,QAAQ,EAAE,IAAI,CAAC1D,2BAA4B;QAC3CmH,SAAS,EAAE,IAAI,CAAClH,4BAA6B;QAC7CmH,gBAAgB,YAAAtI,MAAA,CAAWgH,iBAAiB,OAAI;QAChDuB,iBAAiB,WAAAvI,MAAA,CAAUkH,gBAAgB;MAAI,CAChD,CAAC;IAAA,CACF,CAAC;EAEP;AACF;AAAC5G,eAAA,CAhdKX,YAAY,kBACM;EACpByC,MAAM,EAAE,KAAK;EACbf,YAAY,EAAE,GAAG;EACjBqE,uBAAuB,EAAE,KAAK;EAC9BmB,WAAW,EAAE,EAAE;EACfhC,QAAQ,EAAEA,CAAC3B,IAAY,EAAEsF,WAAqB,KAAWxF,SAAS;EAClE4B,QAAQ,EAAEA,CAAA,KAAY5B;AACxB,CAAC;AA0cH,eAAerD,YAAY","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"NewItemModal.js","names":["React","PureComponent","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Button","Pending","PromiseUtils","ValidationError","Log","vsHome","FontAwesomeIcon","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","NewItemModal","getValidationMessage","err","info","type","concat","handleError","isCanceled","error","constructor","props","_defineProperty","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","_this$state","resetValue","isInitialLoad","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","_ref","setState","validationError","undefined","getValidationPromise","name","checkExisting","arguments","length","makeCancelable","validateName","_this","_asyncToGenerator","_this$props","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","_this$state2","_ref2","newValue","replaceExtension","input","inputRef","current","selectionEnd","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","_ref3","_this$props2","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","children","kind","className","onClick","icon","transform","tooltip","render","_this$props3","placeholder","title","_this$state3","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","toggle","onOpened","htmlFor","id","autoComplete","autoCapitalize","autoCorrect","spellCheck","ref","onKeyDown","onChange","onSelect","focusedPath","disabled","headerText","bodyText","onConfirm","cancelButtonText","confirmButtonText","isOverwrite"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type KeyboardEvent,\n PureComponent,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n Button,\n} from '@deephaven/components';\nimport {\n type 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 { type FileStorageItem, type FileType } from './FileStorage';\nimport type FileStorage 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, isOverwrite?: boolean) => 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 defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string, isOverwrite?: boolean): 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 =\n this.handleExtensionChangeCancel.bind(this);\n this.handleExtensionChangeConfirm =\n this.handleExtensionChangeConfirm.bind(this);\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\n onSubmit(`${path}${value}`, true);\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\"\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":"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","ignoreList":[]}
|