@deephaven/file-explorer 1.22.1-alpha-pivot-builder.0 → 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.
@@ -27,21 +27,19 @@ function getItemIcon(item) {
27
27
  }
28
28
  export function FileListItem(props) {
29
29
  var _draggedItems$some;
30
- var {
31
- children,
32
- draggedItems,
33
- isDragInProgress,
34
- isDropTargetValid,
35
- isSelected,
36
- item,
37
- itemIndex,
38
- dropTargetItem,
39
- onDragStart: _onDragStart,
40
- onDragOver: _onDragOver,
41
- onDragEnd: _onDragEnd,
42
- onDragExit,
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;
@@ -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,IAAM;IACJC,QAAQ;IACRC,YAAY;IACZC,gBAAgB;IAChBC,iBAAiB;IACjBC,UAAU;IACVb,IAAI;IACJc,SAAS;IACTC,cAAc;IACdC,WAAW,EAAXA,YAAW;IACXC,UAAU,EAAVA,WAAU;IACVC,SAAS,EAATA,UAAS;IACTC,UAAU;IACVC,MAAM,EAANA;EACF,CAAC,GAAGb,KAAK;EAET,IAAMc,SAAS,IAAAb,kBAAA,GACbE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEY,IAAI,CAACC,WAAW,IAAIA,WAAW,CAACC,EAAE,KAAKxB,IAAI,CAACwB,EAAE,CAAC,cAAAhB,kBAAA,cAAAA,kBAAA,GAAI,KAAK;EACxE,IAAMiB,QAAQ,GAAGjC,eAAe,CAACQ,IAAI,CAAC;EACtC,IAAM0B,cAAc,GAClBf,gBAAgB,IAAII,cAAc,GAAGvB,eAAe,CAACuB,cAAc,CAAC,GAAG,IAAI;EAE7E,IAAMY,iBAAiB,GACrBhB,gBAAgB,IAChBC,iBAAiB,IACjBvB,WAAW,CAACW,IAAI,CAAC,IACjB0B,cAAc,KAAKD,QAAQ;EAC7B,IAAMG,cAAc,GAClBjB,gBAAgB,IAAIC,iBAAiB,IAAIc,cAAc,KAAKD,QAAQ;EACtE,IAAMI,mBAAmB,GACvBlB,gBAAgB,IAAI,CAACC,iBAAiB,IAAIc,cAAc,KAAKD,QAAQ;EAEvE,IAAMK,IAAI,GAAG/B,WAAW,CAACC,IAAI,CAAC;EAC9B,IAAM+B,KAAK,GAAGzC,SAAS,CAAC0C,QAAQ,CAAChC,IAAI,CAACiC,QAAQ,CAAC;EAC/C,IAAMC,UAAU,GAAGC,KAAK,CAACJ,KAAK,CAAC,CAC5BK,IAAI,CAAC,IAAI,CAAC,CACVC,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK;EAAA;EAChB;EACA7C,IAAA;IAAM8C,SAAS,EAAC;EAAsB,GAAMD,KAAQ,CACrD,CAAC;EAEJ,oBACEzC,KAAA;IACE0C,SAAS,EAAEpD,UAAU,CACnB,iCAAiC,EACjC,gBAAgB,EAChB;MACE,YAAY,EAAEiC,SAAS;MACvB,sBAAsB,EAAEM,iBAAiB;MACzC,mBAAmB,EAAEC,cAAc;MACnC,wBAAwB,EAAEC,mBAAmB;MAC7C,aAAa,EAAEhB;IACjB,CACF,CAAE;IACFG,WAAW,EAAEyB,CAAC,IAAIzB,YAAW,CAACF,SAAS,EAAE2B,CAAC,CAAE;IAC5CxB,UAAU,EAAEwB,CAAC,IAAIxB,WAAU,CAACH,SAAS,EAAE2B,CAAC,CAAE;IAC1CvB,SAAS,EAAEuB,CAAC,IAAIvB,UAAS,CAACJ,SAAS,EAAE2B,CAAC,CAAE;IACxCtB,UAAU,EAAEA,UAAW;IACvBC,MAAM,EAAEqB,CAAC,IAAIrB,OAAM,CAACN,SAAS,EAAE2B,CAAC,CAAE;IAClCC,SAAS;IACTC,IAAI,EAAC,cAAc;IACnB,cAAY3C,IAAI,CAACI,QAAS;IAAAK,QAAA,GAEzByB,UAAU,EAAE,GAAG,eAChBxC,IAAA,CAACP,eAAe;MAAC2C,IAAI,EAAEA,IAAK;MAACU,SAAS,EAAC,WAAW;MAACI,UAAU;IAAA,CAAE,CAAC,EAAC,GAAG,eACpElD,IAAA;MAAM8C,SAAS,EAAC,oBAAoB;MAAA/B,QAAA,EACjCA,QAAQ,aAARA,QAAQ,cAARA,QAAQ,gBACPX,KAAA,CAAAF,SAAA;QAAAa,QAAA,GACGT,IAAI,CAACI,QAAQ,eACdV,IAAA,CAACZ,OAAO;UAAA2B,QAAA,EAAET,IAAI,CAACI;QAAQ,CAAU,CAAC;MAAA,CAClC;IAAC,CAED,CAAC;EAAA,CACJ,CAAC;AAEV;AAEA,eAAeE,YAAY","ignoreList":[]}
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
- item,
12
- onCancel,
13
- onSubmit,
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 [value, setValue] = useState(item.basename);
18
- var [validationError, setValidationError] = useState();
19
- var [validationPromise, setValidationPromise] = useState(Promise.resolve());
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","basename","validationError","setValidationError","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":[]}
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":[]}
@@ -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,IAAC;MAAET;IAAS,CAAC,GAAAS,IAAA;IAAA,OAAKd,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":[]}
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":[]}
@@ -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
- isOpen
67
- } = this.props;
68
- var {
69
- isOpen: prevIsOpen
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
- onSubmit
228
- } = this.props;
229
- var {
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(_ref => {
239
- var {
240
- value,
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
- type
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(_ref2 => {
279
- var {
280
- prevExtension,
281
- value,
282
- path
283
- } = _ref2;
284
- var {
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
- } = this.props;
368
- var {
369
- isSubmitting,
370
- path,
371
- showExtensionChangeModal,
372
- showOverwriteModal,
373
- validationError,
374
- value,
375
- prevExtension,
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);
@@ -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":"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","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":[]}