@deephaven/file-explorer 0.5.1 → 0.5.2-allpackages.16

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,"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","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","prevProps","prevState","isOpen","prevIsOpen","resetValue","updateValidationStatus","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","name","checkExisting","makeCancelable","validateName","storage","info","existingFile","newName","getValidationPromise","then","handleError","focusRenameInput","submitModal","event","target","item","debug","type","makePath","filename","basename","e","key","stopPropagation","preventDefault","onCancel","err","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","isCanceled","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","getValidationMessage","error","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 { 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"}
@@ -2,278 +2,125 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
2
2
 
3
3
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
4
 
5
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
-
7
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
8
-
9
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
10
-
11
5
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
6
 
13
7
  /* eslint-disable class-methods-use-this */
14
8
  import throttle from 'lodash.throttle';
15
- import FileNotFoundError from './FileNotFoundError';
16
- import FileUtils from './FileUtils';
17
- import WebdavFileStorageTable from './WebdavFileStorageTable';
18
- export var WebdavFileStorage = /*#__PURE__*/function () {
19
- function WebdavFileStorage(client) {
20
- var _this = this;
21
-
22
- _classCallCheck(this, WebdavFileStorage);
23
-
9
+ import FileNotFoundError from "./FileNotFoundError.js";
10
+ import FileUtils from "./FileUtils.js";
11
+ import WebdavFileStorageTable from "./WebdavFileStorageTable.js";
12
+ export class WebdavFileStorage {
13
+ constructor(client) {
24
14
  _defineProperty(this, "client", void 0);
25
15
 
26
16
  _defineProperty(this, "tables", []);
27
17
 
28
- _defineProperty(this, "refreshTables", throttle(function () {
29
- _this.tables.every(function (table) {
30
- return table.refresh()["catch"](function () {
31
- return undefined;
32
- });
33
- });
18
+ _defineProperty(this, "refreshTables", throttle(() => {
19
+ this.tables.every(table => table.refresh().catch(() => undefined));
34
20
  }, WebdavFileStorage.REFRESH_THROTTLE));
35
21
 
36
22
  this.client = client;
37
23
  }
38
24
 
39
- _createClass(WebdavFileStorage, [{
40
- key: "createDirectory",
41
- value: function () {
42
- var _createDirectory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(path) {
43
- return regeneratorRuntime.wrap(function _callee$(_context) {
44
- while (1) {
45
- switch (_context.prev = _context.next) {
46
- case 0:
47
- _context.next = 2;
48
- return this.client.createDirectory(path);
49
-
50
- case 2:
51
- this.refreshTables();
52
- return _context.abrupt("return", {
53
- type: 'directory',
54
- id: path,
55
- filename: path,
56
- basename: FileUtils.getBaseName(path)
57
- });
58
-
59
- case 4:
60
- case "end":
61
- return _context.stop();
62
- }
63
- }
64
- }, _callee, this);
65
- }));
66
-
67
- function createDirectory(_x) {
68
- return _createDirectory.apply(this, arguments);
69
- }
25
+ createDirectory(path) {
26
+ var _this = this;
70
27
 
71
- return createDirectory;
72
- }()
73
- }, {
74
- key: "getTable",
75
- value: function () {
76
- var _getTable = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
77
- var table;
78
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
79
- while (1) {
80
- switch (_context2.prev = _context2.next) {
81
- case 0:
82
- table = new WebdavFileStorageTable(this.client);
83
- this.tables.push(table);
84
- return _context2.abrupt("return", table);
85
-
86
- case 3:
87
- case "end":
88
- return _context2.stop();
89
- }
90
- }
91
- }, _callee2, this);
92
- }));
93
-
94
- function getTable() {
95
- return _getTable.apply(this, arguments);
96
- }
28
+ return _asyncToGenerator(function* () {
29
+ yield _this.client.createDirectory(path);
97
30
 
98
- return getTable;
99
- }()
100
- }, {
101
- key: "saveFile",
102
- value: function () {
103
- var _saveFile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(file) {
104
- var success;
105
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
106
- while (1) {
107
- switch (_context3.prev = _context3.next) {
108
- case 0:
109
- _context3.next = 2;
110
- return this.client.putFileContents(file.filename, file.content);
111
-
112
- case 2:
113
- success = _context3.sent;
114
-
115
- if (success) {
116
- _context3.next = 5;
117
- break;
118
- }
119
-
120
- throw new Error('Unable to write file');
121
-
122
- case 5:
123
- this.refreshTables();
124
- return _context3.abrupt("return", file);
125
-
126
- case 7:
127
- case "end":
128
- return _context3.stop();
129
- }
130
- }
131
- }, _callee3, this);
132
- }));
133
-
134
- function saveFile(_x2) {
135
- return _saveFile.apply(this, arguments);
136
- }
31
+ _this.refreshTables();
137
32
 
138
- return saveFile;
139
- }()
140
- }, {
141
- key: "loadFile",
142
- value: function () {
143
- var _loadFile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(name) {
144
- var content;
145
- return regeneratorRuntime.wrap(function _callee4$(_context4) {
146
- while (1) {
147
- switch (_context4.prev = _context4.next) {
148
- case 0:
149
- _context4.next = 2;
150
- return this.client.getFileContents(name, {
151
- format: 'text'
152
- });
153
-
154
- case 2:
155
- content = _context4.sent;
156
- return _context4.abrupt("return", {
157
- filename: name,
158
- basename: FileUtils.getBaseName(name),
159
- content: content
160
- });
161
-
162
- case 4:
163
- case "end":
164
- return _context4.stop();
165
- }
166
- }
167
- }, _callee4, this);
168
- }));
169
-
170
- function loadFile(_x3) {
171
- return _loadFile.apply(this, arguments);
172
- }
33
+ return {
34
+ type: 'directory',
35
+ id: path,
36
+ filename: path,
37
+ basename: FileUtils.getBaseName(path)
38
+ };
39
+ })();
40
+ }
173
41
 
174
- return loadFile;
175
- }()
176
- }, {
177
- key: "deleteFile",
178
- value: function () {
179
- var _deleteFile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(name) {
180
- return regeneratorRuntime.wrap(function _callee5$(_context5) {
181
- while (1) {
182
- switch (_context5.prev = _context5.next) {
183
- case 0:
184
- _context5.next = 2;
185
- return this.client.deleteFile(name);
186
-
187
- case 2:
188
- this.refreshTables();
189
-
190
- case 3:
191
- case "end":
192
- return _context5.stop();
193
- }
194
- }
195
- }, _callee5, this);
196
- }));
197
-
198
- function deleteFile(_x4) {
199
- return _deleteFile.apply(this, arguments);
200
- }
42
+ getTable() {
43
+ var _this2 = this;
201
44
 
202
- return deleteFile;
203
- }()
204
- }, {
205
- key: "moveFile",
206
- value: function () {
207
- var _moveFile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6(name, newName) {
208
- return regeneratorRuntime.wrap(function _callee6$(_context6) {
209
- while (1) {
210
- switch (_context6.prev = _context6.next) {
211
- case 0:
212
- _context6.next = 2;
213
- return this.client.moveFile(name, newName);
214
-
215
- case 2:
216
- this.refreshTables();
217
-
218
- case 3:
219
- case "end":
220
- return _context6.stop();
221
- }
222
- }
223
- }, _callee6, this);
224
- }));
225
-
226
- function moveFile(_x5, _x6) {
227
- return _moveFile.apply(this, arguments);
228
- }
45
+ return _asyncToGenerator(function* () {
46
+ var table = new WebdavFileStorageTable(_this2.client);
47
+
48
+ _this2.tables.push(table);
49
+
50
+ return table;
51
+ })();
52
+ }
53
+
54
+ saveFile(file) {
55
+ var _this3 = this;
229
56
 
230
- return moveFile;
231
- }()
232
- }, {
233
- key: "info",
234
- value: function () {
235
- var _info = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7(name) {
236
- var stat;
237
- return regeneratorRuntime.wrap(function _callee7$(_context7) {
238
- while (1) {
239
- switch (_context7.prev = _context7.next) {
240
- case 0:
241
- _context7.prev = 0;
242
- _context7.next = 3;
243
- return this.client.stat(name);
244
-
245
- case 3:
246
- stat = _context7.sent;
247
- return _context7.abrupt("return", {
248
- filename: stat.filename,
249
- basename: stat.basename,
250
- id: stat.filename,
251
- type: stat.type
252
- });
253
-
254
- case 7:
255
- _context7.prev = 7;
256
- _context7.t0 = _context7["catch"](0);
257
- throw new FileNotFoundError();
258
-
259
- case 10:
260
- case "end":
261
- return _context7.stop();
262
- }
263
- }
264
- }, _callee7, this, [[0, 7]]);
265
- }));
266
-
267
- function info(_x7) {
268
- return _info.apply(this, arguments);
57
+ return _asyncToGenerator(function* () {
58
+ var success = yield _this3.client.putFileContents(file.filename, file.content);
59
+
60
+ if (!success) {
61
+ throw new Error('Unable to write file');
269
62
  }
270
63
 
271
- return info;
272
- }()
273
- }]);
64
+ _this3.refreshTables();
65
+
66
+ return file;
67
+ })();
68
+ }
69
+
70
+ loadFile(name) {
71
+ var _this4 = this;
72
+
73
+ return _asyncToGenerator(function* () {
74
+ var content = yield _this4.client.getFileContents(name, {
75
+ format: 'text'
76
+ });
77
+ return {
78
+ filename: name,
79
+ basename: FileUtils.getBaseName(name),
80
+ content
81
+ };
82
+ })();
83
+ }
84
+
85
+ deleteFile(name) {
86
+ var _this5 = this;
87
+
88
+ return _asyncToGenerator(function* () {
89
+ yield _this5.client.deleteFile(name);
90
+
91
+ _this5.refreshTables();
92
+ })();
93
+ }
94
+
95
+ moveFile(name, newName) {
96
+ var _this6 = this;
97
+
98
+ return _asyncToGenerator(function* () {
99
+ yield _this6.client.moveFile(name, newName);
100
+
101
+ _this6.refreshTables();
102
+ })();
103
+ }
104
+
105
+ info(name) {
106
+ var _this7 = this;
107
+
108
+ return _asyncToGenerator(function* () {
109
+ try {
110
+ var stat = yield _this7.client.stat(name);
111
+ return {
112
+ filename: stat.filename,
113
+ basename: stat.basename,
114
+ id: stat.filename,
115
+ type: stat.type
116
+ };
117
+ } catch (e) {
118
+ throw new FileNotFoundError();
119
+ }
120
+ })();
121
+ }
274
122
 
275
- return WebdavFileStorage;
276
- }();
123
+ }
277
124
 
278
125
  _defineProperty(WebdavFileStorage, "REFRESH_THROTTLE", 150);
279
126
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/WebdavFileStorage.ts"],"names":["throttle","FileNotFoundError","FileUtils","WebdavFileStorageTable","WebdavFileStorage","client","tables","every","table","refresh","undefined","REFRESH_THROTTLE","path","createDirectory","refreshTables","type","id","filename","basename","getBaseName","push","file","putFileContents","content","success","Error","name","getFileContents","format","deleteFile","newName","moveFile","stat"],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\n\nimport { FileStat, WebDAVClient } from 'webdav/web';\nimport throttle from 'lodash.throttle';\nimport FileNotFoundError from './FileNotFoundError';\nimport FileStorage, {\n File,\n FileStorageItem,\n FileStorageTable,\n} from './FileStorage';\nimport FileUtils from './FileUtils';\nimport WebdavFileStorageTable from './WebdavFileStorageTable';\n\nexport class WebdavFileStorage implements FileStorage {\n private static readonly REFRESH_THROTTLE = 150;\n\n readonly client;\n\n private tables = [] as WebdavFileStorageTable[];\n\n constructor(client: WebDAVClient) {\n this.client = client;\n }\n\n async createDirectory(path: string): Promise<FileStorageItem> {\n await this.client.createDirectory(path);\n this.refreshTables();\n return {\n type: 'directory',\n id: path,\n filename: path,\n basename: FileUtils.getBaseName(path),\n };\n }\n\n async getTable(): Promise<FileStorageTable> {\n const table = new WebdavFileStorageTable(this.client);\n this.tables.push(table);\n return table;\n }\n\n async saveFile(file: File): Promise<File> {\n const success = await this.client.putFileContents(\n file.filename,\n file.content\n );\n if (!success) {\n throw new Error('Unable to write file');\n }\n this.refreshTables();\n return file;\n }\n\n async loadFile(name: string): Promise<File> {\n const content = (await this.client.getFileContents(name, {\n format: 'text',\n })) as string;\n return {\n filename: name,\n basename: FileUtils.getBaseName(name),\n content,\n };\n }\n\n async deleteFile(name: string): Promise<void> {\n await this.client.deleteFile(name);\n this.refreshTables();\n }\n\n async moveFile(name: string, newName: string): Promise<void> {\n await this.client.moveFile(name, newName);\n this.refreshTables();\n }\n\n async info(name: string): Promise<FileStorageItem> {\n try {\n const stat = (await this.client.stat(name)) as FileStat;\n return {\n filename: stat.filename,\n basename: stat.basename,\n id: stat.filename,\n type: stat.type,\n };\n } catch (e) {\n throw new FileNotFoundError();\n }\n }\n\n private refreshTables = throttle(() => {\n this.tables.every(table => table.refresh().catch(() => undefined));\n }, WebdavFileStorage.REFRESH_THROTTLE);\n}\n\nexport default WebdavFileStorage;\n"],"file":"WebdavFileStorage.js"}
1
+ {"version":3,"sources":["../src/WebdavFileStorage.ts"],"names":["throttle","FileNotFoundError","FileUtils","WebdavFileStorageTable","WebdavFileStorage","constructor","client","tables","every","table","refresh","catch","undefined","REFRESH_THROTTLE","createDirectory","path","refreshTables","type","id","filename","basename","getBaseName","getTable","push","saveFile","file","success","putFileContents","content","Error","loadFile","name","getFileContents","format","deleteFile","moveFile","newName","info","stat","e"],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\n\nimport { FileStat, WebDAVClient } from 'webdav/web';\nimport throttle from 'lodash.throttle';\nimport FileNotFoundError from './FileNotFoundError';\nimport FileStorage, {\n File,\n FileStorageItem,\n FileStorageTable,\n} from './FileStorage';\nimport FileUtils from './FileUtils';\nimport WebdavFileStorageTable from './WebdavFileStorageTable';\n\nexport class WebdavFileStorage implements FileStorage {\n private static readonly REFRESH_THROTTLE = 150;\n\n readonly client;\n\n private tables = [] as WebdavFileStorageTable[];\n\n constructor(client: WebDAVClient) {\n this.client = client;\n }\n\n async createDirectory(path: string): Promise<FileStorageItem> {\n await this.client.createDirectory(path);\n this.refreshTables();\n return {\n type: 'directory',\n id: path,\n filename: path,\n basename: FileUtils.getBaseName(path),\n };\n }\n\n async getTable(): Promise<FileStorageTable> {\n const table = new WebdavFileStorageTable(this.client);\n this.tables.push(table);\n return table;\n }\n\n async saveFile(file: File): Promise<File> {\n const success = await this.client.putFileContents(\n file.filename,\n file.content\n );\n if (!success) {\n throw new Error('Unable to write file');\n }\n this.refreshTables();\n return file;\n }\n\n async loadFile(name: string): Promise<File> {\n const content = (await this.client.getFileContents(name, {\n format: 'text',\n })) as string;\n return {\n filename: name,\n basename: FileUtils.getBaseName(name),\n content,\n };\n }\n\n async deleteFile(name: string): Promise<void> {\n await this.client.deleteFile(name);\n this.refreshTables();\n }\n\n async moveFile(name: string, newName: string): Promise<void> {\n await this.client.moveFile(name, newName);\n this.refreshTables();\n }\n\n async info(name: string): Promise<FileStorageItem> {\n try {\n const stat = (await this.client.stat(name)) as FileStat;\n return {\n filename: stat.filename,\n basename: stat.basename,\n id: stat.filename,\n type: stat.type,\n };\n } catch (e) {\n throw new FileNotFoundError();\n }\n }\n\n private refreshTables = throttle(() => {\n this.tables.every(table => table.refresh().catch(() => undefined));\n }, WebdavFileStorage.REFRESH_THROTTLE);\n}\n\nexport default WebdavFileStorage;\n"],"file":"WebdavFileStorage.js"}