@deephaven/file-explorer 0.14.0 → 0.14.1-beta.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewItemModal.d.ts","sourceRoot":"","sources":["../src/NewItemModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,SAAS,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"NewItemModal.d.ts","sourceRoot":"","sources":["../src/NewItemModal.tsx"],"names":[],"mappings":"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"}
|
package/dist/NewItemModal.js
CHANGED
|
@@ -7,8 +7,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
7
7
|
import React, { PureComponent } from 'react';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
9
|
import classNames from 'classnames';
|
|
10
|
-
import { Modal, ModalBody, ModalFooter, ModalHeader } from '
|
|
11
|
-
import { BasicModal } from '@deephaven/components';
|
|
10
|
+
import { Modal, ModalBody, ModalFooter, ModalHeader, BasicModal } from '@deephaven/components';
|
|
12
11
|
import { Pending, PromiseUtils, ValidationError } from '@deephaven/utils';
|
|
13
12
|
import Log from '@deephaven/log';
|
|
14
13
|
import FileExplorer from "./FileExplorer.js";
|
package/dist/NewItemModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/NewItemModal.tsx"],"names":["React","PureComponent","PropTypes","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Pending","PromiseUtils","ValidationError","Log","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","log","module","NewItemModal","getValidationMessage","err","info","type","handleError","isCanceled","error","constructor","props","createRef","Map","handleModalSubmit","bind","handleModalOpened","handleSelect","handleChange","handleKeyDown","handleValidationError","handleOverwriteCancel","handleOverwriteConfirm","handleExtensionChangeCancel","handleExtensionChangeConfirm","defaultValue","path","hasPath","getPath","state","isSubmitting","prevExtension","getExtension","showExtensionChangeModal","showOverwriteModal","value","getBaseName","componentDidUpdate","prevProps","prevState","isOpen","prevIsOpen","resetValue","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","getValidationPromise","name","checkExisting","makeCancelable","validateName","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","bool","string","isRequired","oneOf","func","shape"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, KeyboardEvent, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\nimport { BasicModal } from '@deephaven/components';\nimport {\n CancelablePromise,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport FileExplorer from './FileExplorer';\nimport FileStorage, { FileStorageItem, FileType } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nimport './NewItemModal.scss';\nimport FileExistsError from './FileExistsError';\nimport FileNotFoundError from './FileNotFoundError';\n\nconst log = Log.module('NewItemModal');\n\nexport type NewItemModalProps = typeof NewItemModal.defaultProps & {\n isOpen: boolean;\n title: string;\n defaultValue: string;\n type: FileType;\n onSubmit: (name: string) => void;\n onCancel: () => void;\n placeholder: string;\n storage: FileStorage;\n notifyOnExtensionChange?: boolean;\n};\n\nexport type NewItemModalState = {\n path: string;\n isSubmitting: boolean;\n showExtensionChangeModal: boolean;\n showOverwriteModal: boolean;\n validationError?: ValidationError;\n value: string;\n prevExtension?: string;\n newExtension?: string;\n};\n\nclass NewItemModal extends PureComponent<NewItemModalProps, NewItemModalState> {\n static propTypes = {\n isOpen: PropTypes.bool,\n title: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n type: PropTypes.oneOf(['file', 'directory']).isRequired,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n placeholder: PropTypes.string,\n storage: PropTypes.shape({}).isRequired,\n notifyOnExtensionChange: PropTypes.bool,\n };\n\n static defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static getValidationMessage(err: Error): string {\n if (err instanceof FileExistsError && err.info.type === 'directory') {\n return 'Error: Cannot overwrite existing directory';\n }\n return `${err}`;\n }\n\n static handleError(err: Error): void {\n if (!PromiseUtils.isCanceled(err)) {\n log.error(err);\n }\n }\n\n constructor(props: NewItemModalProps) {\n super(props);\n this.handleModalSubmit = this.handleModalSubmit.bind(this);\n this.handleModalOpened = this.handleModalOpened.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleValidationError = this.handleValidationError.bind(this);\n this.handleOverwriteCancel = this.handleOverwriteCancel.bind(this);\n this.handleOverwriteConfirm = this.handleOverwriteConfirm.bind(this);\n this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(\n this\n );\n this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(\n this\n );\n\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 }\n if (path !== prevState.path || value !== prevState.value) {\n this.updateValidationStatus(path, value);\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 resetValue(): void {\n const { defaultValue } = this.props as NewItemModalProps;\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n this.setState({\n path,\n value: FileUtils.getBaseName(defaultValue),\n validationError: undefined,\n prevExtension: FileUtils.getExtension(defaultValue),\n isSubmitting: false,\n });\n }\n\n getValidationPromise(\n path: string,\n name: string,\n checkExisting = false\n ): CancelablePromise<string> {\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n this.cancelableValidatePromise = PromiseUtils.makeCancelable(\n this.validateName(path, name, checkExisting)\n );\n return this.cancelableValidatePromise;\n }\n\n async validateName(\n path: string,\n name: string,\n checkExisting: boolean\n ): Promise<string> {\n FileUtils.validateName(name);\n\n const { defaultValue, storage } = this.props;\n if (checkExisting) {\n const value = `${path}${name}`;\n if (value !== defaultValue) {\n try {\n const existingFile = await storage.info(value);\n throw new FileExistsError(existingFile);\n } catch (e) {\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n // There is no existing file, ignore\n }\n }\n }\n\n return name;\n }\n\n updateValidationStatus(path: string, newName: string): void {\n this.getValidationPromise(path, newName)\n .then(() => {\n this.setState({ validationError: undefined });\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n }\n\n handleModalOpened(): void {\n this.focusRenameInput();\n }\n\n handleModalSubmit(): void {\n this.submitModal();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value });\n }\n\n handleSelect(item: FileStorageItem): void {\n log.debug('handleSelect', item);\n if (item.type === 'directory') {\n this.setState({ path: FileUtils.makePath(item.filename) });\n } else {\n // Use selected item name and folder and focus the input\n const value = item.basename;\n const path = FileUtils.getPath(item.filename);\n this.setState({ value, path }, () => {\n this.focusRenameInput();\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleKeyDown(e: KeyboardEvent): void {\n const { key } = e;\n e.stopPropagation();\n\n switch (key) {\n case 'Enter': {\n // Prevent form submit event\n e.preventDefault();\n this.submitModal();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n const { onCancel } = this.props;\n onCancel();\n break;\n }\n default:\n }\n }\n\n handleValidationError(err: Error): void {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n log.debug('Validation error', err);\n this.setState({ validationError: err });\n }\n\n handleOverwriteCancel(): void {\n this.setState({\n showOverwriteModal: false,\n isSubmitting: false,\n });\n }\n\n handleOverwriteConfirm(): void {\n this.setState({ showOverwriteModal: false });\n const { onSubmit } = this.props;\n const { path, value } = this.state;\n log.debug('handleOverwriteConfirm', path, value);\n onSubmit(`${path}${value}`);\n }\n\n handleExtensionChangeCancel(): void {\n log.debug('handleExtensionChangeCancel');\n this.setState(({ value, prevExtension }) => {\n const newValue = FileUtils.replaceExtension(value, prevExtension);\n return {\n showExtensionChangeModal: false,\n value: newValue,\n };\n });\n\n this.submitModal(true);\n }\n\n handleExtensionChangeConfirm(): void {\n log.debug('handleExtensionChangeConfirm');\n this.setState({ showExtensionChangeModal: false });\n this.submitModal(true);\n }\n\n /**\n * Focus rename input and select name part for files, select all text for folders\n */\n focusRenameInput(): void {\n const input = this.inputRef.current;\n if (input) {\n const { type } = this.props;\n const { value } = input;\n const selectionEnd =\n type === 'directory' ? value.length : value.lastIndexOf('.');\n input.focus();\n input.setSelectionRange(\n 0,\n selectionEnd > 0 ? selectionEnd : value.length\n );\n }\n }\n\n submitModal(skipExtensionCheck = false): void {\n this.setState(({ prevExtension, value, path }) => {\n const { notifyOnExtensionChange, type } = this.props;\n log.debug('submitModal', prevExtension, value);\n const newExtension = FileUtils.getExtension(value);\n if (\n notifyOnExtensionChange &&\n !skipExtensionCheck &&\n prevExtension !== null &&\n prevExtension !== newExtension\n ) {\n return {\n isSubmitting: false,\n showExtensionChangeModal: true,\n newExtension,\n };\n }\n\n this.getValidationPromise(path, value, true)\n .then((newItemName: string) => {\n const { onSubmit } = this.props;\n onSubmit(`${path}${value}`);\n })\n .catch(e => {\n // Don't allow using existing names for folders\n // For files, prompt if they want to overwrite existing file\n if (e instanceof FileExistsError) {\n if (type !== 'directory' && e.info.type !== 'directory') {\n this.setState({ showOverwriteModal: true });\n return;\n }\n }\n throw e;\n })\n .catch(e => {\n if (PromiseUtils.isCanceled(e)) {\n this.setState({ isSubmitting: false });\n }\n throw e;\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n\n return {\n isSubmitting: true,\n showExtensionChangeModal: false,\n newExtension: undefined,\n };\n });\n }\n\n render(): React.ReactNode {\n const { storage, isOpen, onCancel, placeholder, title, type } = this.props;\n const {\n isSubmitting,\n path,\n showExtensionChangeModal,\n showOverwriteModal,\n validationError,\n value,\n prevExtension,\n newExtension,\n } = this.state;\n\n const isDirectory = type === 'directory';\n const prevExtensionText = FileUtils.fileExtensionToString(prevExtension);\n const newExtensionText = FileUtils.fileExtensionToString(newExtension);\n const submitBtnLabel = isDirectory ? 'Create' : 'Save';\n const nameInputLabel = isDirectory ? 'New folder name' : 'Save file as';\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n toggle={onCancel}\n onOpened={this.handleModalOpened}\n className=\"modal-dialog-centered new-file-modal theme-bg-dark\"\n >\n <ModalHeader toggle={onCancel}>{title}</ModalHeader>\n <ModalBody>\n <form>\n <div className=\"d-flex flex-column new-file-modal-content\">\n <div className=\"flex-grow-0 mb-4\">\n <label htmlFor=\"file-name-input\">{nameInputLabel}</label>\n <input\n id=\"file-name-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n className={classNames('form-control', {\n 'is-invalid': validationError,\n })}\n value={value}\n placeholder={placeholder}\n ref={this.inputRef}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n />\n {validationError && (\n <div className=\"invalid-feedback\">\n {NewItemModal.getValidationMessage(validationError)}\n </div>\n )}\n </div>\n <div className=\"flex-grow-0\">\n <label>\n Directory: <span className=\"new-item-parentId\">{path}</span>\n </label>\n </div>\n <div className=\"flex-grow-1 file-explorer-container\">\n <FileExplorer\n onSelect={this.handleSelect}\n storage={storage}\n />\n </div>\n </div>\n </form>\n </ModalBody>\n\n <ModalFooter>\n <button\n className=\"btn btn-outline-primary\"\n onClick={onCancel}\n type=\"button\"\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n disabled={isSubmitting}\n onClick={this.handleModalSubmit}\n type=\"button\"\n >\n {submitBtnLabel}\n </button>\n </ModalFooter>\n </Modal>\n <BasicModal\n isOpen={showOverwriteModal}\n headerText=\"Confirm overwrite\"\n bodyText=\"File with this name already exists, are you sure you want to overwrite it?\"\n onCancel={this.handleOverwriteCancel}\n onConfirm={this.handleOverwriteConfirm}\n cancelButtonText=\"Cancel\"\n confirmButtonText=\"Overwrite\"\n />\n <BasicModal\n isOpen={showExtensionChangeModal}\n headerText=\"Confirm extension change\"\n bodyText={`Are you sure you want to change extension from \"${prevExtensionText}\" to \"${newExtensionText}\"?`}\n onCancel={this.handleExtensionChangeCancel}\n onConfirm={this.handleExtensionChangeConfirm}\n cancelButtonText={`Keep \"${prevExtensionText}\"`}\n confirmButtonText={`Use \"${newExtensionText}\"`}\n />\n </>\n );\n }\n}\n\nexport default NewItemModal;\n"],"file":"NewItemModal.js"}
|
|
1
|
+
{"version":3,"sources":["../src/NewItemModal.tsx"],"names":["React","PureComponent","PropTypes","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Pending","PromiseUtils","ValidationError","Log","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","log","module","NewItemModal","getValidationMessage","err","info","type","handleError","isCanceled","error","constructor","props","createRef","Map","handleModalSubmit","bind","handleModalOpened","handleSelect","handleChange","handleKeyDown","handleValidationError","handleOverwriteCancel","handleOverwriteConfirm","handleExtensionChangeCancel","handleExtensionChangeConfirm","defaultValue","path","hasPath","getPath","state","isSubmitting","prevExtension","getExtension","showExtensionChangeModal","showOverwriteModal","value","getBaseName","componentDidUpdate","prevProps","prevState","isOpen","prevIsOpen","resetValue","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","getValidationPromise","name","checkExisting","makeCancelable","validateName","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","bool","string","isRequired","oneOf","func","shape"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, KeyboardEvent, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n} from '@deephaven/components';\nimport {\n CancelablePromise,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport FileExplorer from './FileExplorer';\nimport FileStorage, { FileStorageItem, FileType } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nimport './NewItemModal.scss';\nimport FileExistsError from './FileExistsError';\nimport FileNotFoundError from './FileNotFoundError';\n\nconst log = Log.module('NewItemModal');\n\nexport type NewItemModalProps = typeof NewItemModal.defaultProps & {\n isOpen: boolean;\n title: string;\n defaultValue: string;\n type: FileType;\n onSubmit: (name: string) => void;\n onCancel: () => void;\n placeholder: string;\n storage: FileStorage;\n notifyOnExtensionChange?: boolean;\n};\n\nexport type NewItemModalState = {\n path: string;\n isSubmitting: boolean;\n showExtensionChangeModal: boolean;\n showOverwriteModal: boolean;\n validationError?: ValidationError;\n value: string;\n prevExtension?: string;\n newExtension?: string;\n};\n\nclass NewItemModal extends PureComponent<NewItemModalProps, NewItemModalState> {\n static propTypes = {\n isOpen: PropTypes.bool,\n title: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n type: PropTypes.oneOf(['file', 'directory']).isRequired,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n placeholder: PropTypes.string,\n storage: PropTypes.shape({}).isRequired,\n notifyOnExtensionChange: PropTypes.bool,\n };\n\n static defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static getValidationMessage(err: Error): string {\n if (err instanceof FileExistsError && err.info.type === 'directory') {\n return 'Error: Cannot overwrite existing directory';\n }\n return `${err}`;\n }\n\n static handleError(err: Error): void {\n if (!PromiseUtils.isCanceled(err)) {\n log.error(err);\n }\n }\n\n constructor(props: NewItemModalProps) {\n super(props);\n this.handleModalSubmit = this.handleModalSubmit.bind(this);\n this.handleModalOpened = this.handleModalOpened.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleValidationError = this.handleValidationError.bind(this);\n this.handleOverwriteCancel = this.handleOverwriteCancel.bind(this);\n this.handleOverwriteConfirm = this.handleOverwriteConfirm.bind(this);\n this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(\n this\n );\n this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(\n this\n );\n\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 }\n if (path !== prevState.path || value !== prevState.value) {\n this.updateValidationStatus(path, value);\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 resetValue(): void {\n const { defaultValue } = this.props as NewItemModalProps;\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n this.setState({\n path,\n value: FileUtils.getBaseName(defaultValue),\n validationError: undefined,\n prevExtension: FileUtils.getExtension(defaultValue),\n isSubmitting: false,\n });\n }\n\n getValidationPromise(\n path: string,\n name: string,\n checkExisting = false\n ): CancelablePromise<string> {\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n this.cancelableValidatePromise = PromiseUtils.makeCancelable(\n this.validateName(path, name, checkExisting)\n );\n return this.cancelableValidatePromise;\n }\n\n async validateName(\n path: string,\n name: string,\n checkExisting: boolean\n ): Promise<string> {\n FileUtils.validateName(name);\n\n const { defaultValue, storage } = this.props;\n if (checkExisting) {\n const value = `${path}${name}`;\n if (value !== defaultValue) {\n try {\n const existingFile = await storage.info(value);\n throw new FileExistsError(existingFile);\n } catch (e) {\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n // There is no existing file, ignore\n }\n }\n }\n\n return name;\n }\n\n updateValidationStatus(path: string, newName: string): void {\n this.getValidationPromise(path, newName)\n .then(() => {\n this.setState({ validationError: undefined });\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n }\n\n handleModalOpened(): void {\n this.focusRenameInput();\n }\n\n handleModalSubmit(): void {\n this.submitModal();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value });\n }\n\n handleSelect(item: FileStorageItem): void {\n log.debug('handleSelect', item);\n if (item.type === 'directory') {\n this.setState({ path: FileUtils.makePath(item.filename) });\n } else {\n // Use selected item name and folder and focus the input\n const value = item.basename;\n const path = FileUtils.getPath(item.filename);\n this.setState({ value, path }, () => {\n this.focusRenameInput();\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleKeyDown(e: KeyboardEvent): void {\n const { key } = e;\n e.stopPropagation();\n\n switch (key) {\n case 'Enter': {\n // Prevent form submit event\n e.preventDefault();\n this.submitModal();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n const { onCancel } = this.props;\n onCancel();\n break;\n }\n default:\n }\n }\n\n handleValidationError(err: Error): void {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n log.debug('Validation error', err);\n this.setState({ validationError: err });\n }\n\n handleOverwriteCancel(): void {\n this.setState({\n showOverwriteModal: false,\n isSubmitting: false,\n });\n }\n\n handleOverwriteConfirm(): void {\n this.setState({ showOverwriteModal: false });\n const { onSubmit } = this.props;\n const { path, value } = this.state;\n log.debug('handleOverwriteConfirm', path, value);\n onSubmit(`${path}${value}`);\n }\n\n handleExtensionChangeCancel(): void {\n log.debug('handleExtensionChangeCancel');\n this.setState(({ value, prevExtension }) => {\n const newValue = FileUtils.replaceExtension(value, prevExtension);\n return {\n showExtensionChangeModal: false,\n value: newValue,\n };\n });\n\n this.submitModal(true);\n }\n\n handleExtensionChangeConfirm(): void {\n log.debug('handleExtensionChangeConfirm');\n this.setState({ showExtensionChangeModal: false });\n this.submitModal(true);\n }\n\n /**\n * Focus rename input and select name part for files, select all text for folders\n */\n focusRenameInput(): void {\n const input = this.inputRef.current;\n if (input) {\n const { type } = this.props;\n const { value } = input;\n const selectionEnd =\n type === 'directory' ? value.length : value.lastIndexOf('.');\n input.focus();\n input.setSelectionRange(\n 0,\n selectionEnd > 0 ? selectionEnd : value.length\n );\n }\n }\n\n submitModal(skipExtensionCheck = false): void {\n this.setState(({ prevExtension, value, path }) => {\n const { notifyOnExtensionChange, type } = this.props;\n log.debug('submitModal', prevExtension, value);\n const newExtension = FileUtils.getExtension(value);\n if (\n notifyOnExtensionChange &&\n !skipExtensionCheck &&\n prevExtension !== null &&\n prevExtension !== newExtension\n ) {\n return {\n isSubmitting: false,\n showExtensionChangeModal: true,\n newExtension,\n };\n }\n\n this.getValidationPromise(path, value, true)\n .then((newItemName: string) => {\n const { onSubmit } = this.props;\n onSubmit(`${path}${value}`);\n })\n .catch(e => {\n // Don't allow using existing names for folders\n // For files, prompt if they want to overwrite existing file\n if (e instanceof FileExistsError) {\n if (type !== 'directory' && e.info.type !== 'directory') {\n this.setState({ showOverwriteModal: true });\n return;\n }\n }\n throw e;\n })\n .catch(e => {\n if (PromiseUtils.isCanceled(e)) {\n this.setState({ isSubmitting: false });\n }\n throw e;\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n\n return {\n isSubmitting: true,\n showExtensionChangeModal: false,\n newExtension: undefined,\n };\n });\n }\n\n render(): React.ReactNode {\n const { storage, isOpen, onCancel, placeholder, title, type } = this.props;\n const {\n isSubmitting,\n path,\n showExtensionChangeModal,\n showOverwriteModal,\n validationError,\n value,\n prevExtension,\n newExtension,\n } = this.state;\n\n const isDirectory = type === 'directory';\n const prevExtensionText = FileUtils.fileExtensionToString(prevExtension);\n const newExtensionText = FileUtils.fileExtensionToString(newExtension);\n const submitBtnLabel = isDirectory ? 'Create' : 'Save';\n const nameInputLabel = isDirectory ? 'New folder name' : 'Save file as';\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n toggle={onCancel}\n onOpened={this.handleModalOpened}\n className=\"modal-dialog-centered new-file-modal theme-bg-dark\"\n >\n <ModalHeader toggle={onCancel}>{title}</ModalHeader>\n <ModalBody>\n <form>\n <div className=\"d-flex flex-column new-file-modal-content\">\n <div className=\"flex-grow-0 mb-4\">\n <label htmlFor=\"file-name-input\">{nameInputLabel}</label>\n <input\n id=\"file-name-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n className={classNames('form-control', {\n 'is-invalid': validationError,\n })}\n value={value}\n placeholder={placeholder}\n ref={this.inputRef}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n />\n {validationError && (\n <div className=\"invalid-feedback\">\n {NewItemModal.getValidationMessage(validationError)}\n </div>\n )}\n </div>\n <div className=\"flex-grow-0\">\n <label>\n Directory: <span className=\"new-item-parentId\">{path}</span>\n </label>\n </div>\n <div className=\"flex-grow-1 file-explorer-container\">\n <FileExplorer\n onSelect={this.handleSelect}\n storage={storage}\n />\n </div>\n </div>\n </form>\n </ModalBody>\n\n <ModalFooter>\n <button\n className=\"btn btn-outline-primary\"\n onClick={onCancel}\n type=\"button\"\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n disabled={isSubmitting}\n onClick={this.handleModalSubmit}\n type=\"button\"\n >\n {submitBtnLabel}\n </button>\n </ModalFooter>\n </Modal>\n <BasicModal\n isOpen={showOverwriteModal}\n headerText=\"Confirm overwrite\"\n bodyText=\"File with this name already exists, are you sure you want to overwrite it?\"\n onCancel={this.handleOverwriteCancel}\n onConfirm={this.handleOverwriteConfirm}\n cancelButtonText=\"Cancel\"\n confirmButtonText=\"Overwrite\"\n />\n <BasicModal\n isOpen={showExtensionChangeModal}\n headerText=\"Confirm extension change\"\n bodyText={`Are you sure you want to change extension from \"${prevExtensionText}\" to \"${newExtensionText}\"?`}\n onCancel={this.handleExtensionChangeCancel}\n onConfirm={this.handleExtensionChangeConfirm}\n cancelButtonText={`Keep \"${prevExtensionText}\"`}\n confirmButtonText={`Use \"${newExtensionText}\"`}\n />\n </>\n );\n }\n}\n\nexport default NewItemModal;\n"],"file":"NewItemModal.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/file-explorer",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.1-beta.1+ae071bb",
|
|
4
4
|
"description": "Deephaven File Explorer React component",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@deephaven/components": "^0.14.
|
|
34
|
-
"@deephaven/icons": "^0.14.
|
|
35
|
-
"@deephaven/log": "^0.14.
|
|
36
|
-
"@deephaven/storage": "^0.14.
|
|
37
|
-
"@deephaven/utils": "^0.14.
|
|
33
|
+
"@deephaven/components": "^0.14.1-beta.1+ae071bb",
|
|
34
|
+
"@deephaven/icons": "^0.14.1-beta.1+ae071bb",
|
|
35
|
+
"@deephaven/log": "^0.14.1-beta.1+ae071bb",
|
|
36
|
+
"@deephaven/storage": "^0.14.1-beta.1+ae071bb",
|
|
37
|
+
"@deephaven/utils": "^0.14.1-beta.1+ae071bb",
|
|
38
38
|
"@fortawesome/fontawesome-svg-core": "^6.1.1",
|
|
39
39
|
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
40
40
|
"classnames": "^2.3.1",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"react": "^17.0.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@deephaven/tsconfig": "^0.14.
|
|
50
|
+
"@deephaven/tsconfig": "^0.14.1-beta.1+ae071bb"
|
|
51
51
|
},
|
|
52
52
|
"files": [
|
|
53
53
|
"dist"
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"publishConfig": {
|
|
56
56
|
"access": "public"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "ae071bbc7922b6e1c0ae2f9a729c246a10c09a3b"
|
|
59
59
|
}
|