@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.
- package/dist/FileExistsError.js +7 -35
- package/dist/FileExistsError.js.map +1 -1
- package/dist/FileExplorer.js +62 -139
- package/dist/FileExplorer.js.map +1 -1
- package/dist/FileExplorerShortcuts.js +1 -1
- package/dist/FileExplorerShortcuts.js.map +1 -1
- package/dist/FileExplorerToolbar.js +7 -6
- package/dist/FileExplorerToolbar.js.map +1 -1
- package/dist/FileList.js +103 -172
- package/dist/FileList.js.map +1 -1
- package/dist/FileListContainer.js +38 -68
- package/dist/FileListContainer.js.map +1 -1
- package/dist/FileListItemEditor.js +28 -58
- package/dist/FileListItemEditor.js.map +1 -1
- package/dist/FileNotFoundError.js +5 -40
- package/dist/FileNotFoundError.js.map +1 -1
- package/dist/FileUtils.js +208 -258
- package/dist/FileUtils.js.map +1 -1
- package/dist/NewItemModal.js +397 -464
- package/dist/NewItemModal.js.map +1 -1
- package/dist/WebdavFileStorage.js +97 -250
- package/dist/WebdavFileStorage.js.map +1 -1
- package/dist/WebdavFileStorageTable.js +196 -346
- package/dist/WebdavFileStorageTable.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -13
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","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":";;;;;;AAAA,OAAOA,KAAP,IAA4CC,aAA5C,QAAiE,OAAjE;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,KAAT,EAAgBC,SAAhB,EAA2BC,WAA3B,EAAwCC,WAAxC,QAA2D,YAA3D;AACA,SAASC,UAAT,QAA2B,uBAA3B;AACA,SAEEC,OAFF,EAGEC,YAHF,EAIEC,eAJF,QAKO,kBALP;AAMA,OAAOC,GAAP,MAAgB,gBAAhB;OACOC,Y;OAEAC,S;;OAGAC,e;OACAC,iB;AAEP,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAJ,CAAW,cAAX,CAAZ;;AAyBA,MAAMC,YAAN,SAA2BlB,aAA3B,CAA+E;AAsBlD,SAApBmB,oBAAoB,CAACC,GAAD,EAAqB;AAC9C,QAAIA,GAAG,YAAYN,eAAf,IAAkCM,GAAG,CAACC,IAAJ,CAASC,IAAT,KAAkB,WAAxD,EAAqE;AACnE,aAAO,4CAAP;AACD;;AACD,qBAAUF,GAAV;AACD;;AAEiB,SAAXG,WAAW,CAACH,GAAD,EAAmB;AACnC,QAAI,CAACX,YAAY,CAACe,UAAb,CAAwBJ,GAAxB,CAAL,EAAmC;AACjCJ,MAAAA,GAAG,CAACS,KAAJ,CAAUL,GAAV;AACD;AACF;;AAEDM,EAAAA,WAAW,CAACC,KAAD,EAA2B;AACpC,UAAMA,KAAN;;AADoC,mDA0DnB5B,KAAK,CAAC6B,SAAN,EA1DmB;;AAAA;;AAAA;;AAAA,qCAgEpB,IAAIpB,OAAJ,EAhEoB;;AAAA,qCAkEpB,IAAIqB,GAAJ,EAlEoB;;AAEpC,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBD,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKG,YAAL,GAAoB,KAAKA,YAAL,CAAkBH,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKK,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BL,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKM,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BN,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKO,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BP,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKQ,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCR,IAAjC,CACjC,IADiC,CAAnC;AAGA,SAAKS,4BAAL,GAAoC,KAAKA,4BAAL,CAAkCT,IAAlC,CAClC,IADkC,CAApC;AAIA,QAAM;AAAEU,MAAAA;AAAF,QAAmBd,KAAzB;AAEA,QAAMe,IAAI,GAAG7B,SAAS,CAAC8B,OAAV,CAAkBF,YAAlB,IACT5B,SAAS,CAAC+B,OAAV,CAAkBH,YAAlB,CADS,GAET,GAFJ;AAIA,SAAKI,KAAL,GAAa;AACXC,MAAAA,YAAY,EAAE,KADH;AAEXJ,MAAAA,IAFW;AAGXK,MAAAA,aAAa,EAAElC,SAAS,CAACmC,YAAV,CAAuBP,YAAvB,CAHJ;AAIXQ,MAAAA,wBAAwB,EAAE,KAJf;AAKXC,MAAAA,kBAAkB,EAAE,KALT;AAMXC,MAAAA,KAAK,EAAEtC,SAAS,CAACuC,WAAV,CAAsBX,YAAtB;AANI,KAAb;AAQD;;AAEDY,EAAAA,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGV;AACN,QAAM;AAAEC,MAAAA;AAAF,QAAa,KAAK7B,KAAxB;AACA,QAAM;AAAE6B,MAAAA,MAAM,EAAEC;AAAV,QAAyBH,SAA/B;AACA,QAAM;AAAEH,MAAAA,KAAF;AAAST,MAAAA;AAAT,QAAkB,KAAKG,KAA7B;;AACA,QAAI,CAACY,UAAD,IAAeD,MAAnB,EAA2B;AACzB,WAAKE,UAAL;AACD;;AACD,QAAIhB,IAAI,KAAKa,SAAS,CAACb,IAAnB,IAA2BS,KAAK,KAAKI,SAAS,CAACJ,KAAnD,EAA0D;AACxD,WAAKQ,sBAAL,CAA4BjB,IAA5B,EAAkCS,KAAlC;AACD;AACF;;AAEDS,EAAAA,oBAAoB,GAAS;AAC3B,SAAKC,OAAL,CAAaC,MAAb;;AACA,QAAI,KAAKC,yBAAT,EAAoC;AAClC,WAAKA,yBAAL,CAA+BD,MAA/B;AACD;;AACD,QAAI,KAAKE,6BAAT,EAAwC;AACtC,WAAKA,6BAAL,CAAmCF,MAAnC;AACD;AACF;;AAYDJ,EAAAA,UAAU,GAAS;AACjB,QAAM;AAAEjB,MAAAA;AAAF,QAAmB,KAAKd,KAA9B;AACA,QAAMe,IAAI,GAAG7B,SAAS,CAAC8B,OAAV,CAAkBF,YAAlB,IACT5B,SAAS,CAAC+B,OAAV,CAAkBH,YAAlB,CADS,GAET,GAFJ;AAGA,SAAKwB,QAAL,CAAc;AACZvB,MAAAA,IADY;AAEZS,MAAAA,KAAK,EAAEtC,SAAS,CAACuC,WAAV,CAAsBX,YAAtB,CAFK;AAGZyB,MAAAA,eAAe,EAAEC,SAHL;AAIZpB,MAAAA,aAAa,EAAElC,SAAS,CAACmC,YAAV,CAAuBP,YAAvB,CAJH;AAKZK,MAAAA,YAAY,EAAE;AALF,KAAd;AAOD;;AAEDsB,EAAAA,oBAAoB,CAClB1B,IADkB,EAElB2B,IAFkB,EAIS;AAAA,QAD3BC,aAC2B,uEADX,KACW;;AAC3B,QAAI,KAAKP,yBAAT,EAAoC;AAClC,WAAKA,yBAAL,CAA+BD,MAA/B;AACD;;AACD,SAAKC,yBAAL,GAAiCtD,YAAY,CAAC8D,cAAb,CAC/B,KAAKC,YAAL,CAAkB9B,IAAlB,EAAwB2B,IAAxB,EAA8BC,aAA9B,CAD+B,CAAjC;AAGA,WAAO,KAAKP,yBAAZ;AACD;;AAEKS,EAAAA,YAAY,CAChB9B,IADgB,EAEhB2B,IAFgB,EAGhBC,aAHgB,EAIC;AAAA;;AAAA;AACjBzD,MAAAA,SAAS,CAAC2D,YAAV,CAAuBH,IAAvB;AAEA,UAAM;AAAE5B,QAAAA,YAAF;AAAgBgC,QAAAA;AAAhB,UAA4B,KAAI,CAAC9C,KAAvC;;AACA,UAAI2C,aAAJ,EAAmB;AACjB,YAAMnB,KAAK,aAAMT,IAAN,SAAa2B,IAAb,CAAX;;AACA,YAAIlB,KAAK,KAAKV,YAAd,EAA4B;AAC1B,cAAI;AACF,gBAAMiC,YAAY,SAASD,OAAO,CAACpD,IAAR,CAAa8B,KAAb,CAA3B;AACA,kBAAM,IAAIrC,eAAJ,CAAoB4D,YAApB,CAAN;AACD,WAHD,CAGE,OAAOC,CAAP,EAAU;AACV,gBAAI,EAAEA,CAAC,YAAY5D,iBAAf,CAAJ,EAAuC;AACrC,oBAAM4D,CAAN;AACD,aAHS,CAIV;;AACD;AACF;AACF;;AAED,aAAON,IAAP;AAnBiB;AAoBlB;;AAEDV,EAAAA,sBAAsB,CAACjB,IAAD,EAAekC,OAAf,EAAsC;AAC1D,SAAKR,oBAAL,CAA0B1B,IAA1B,EAAgCkC,OAAhC,EACGC,IADH,CACQ,MAAM;AACV,WAAKZ,QAAL,CAAc;AAAEC,QAAAA,eAAe,EAAEC;AAAnB,OAAd;AACD,KAHH,EAIGW,KAJH,CAIS,KAAK1C,qBAJd,EAKG0C,KALH,CAKS5D,YAAY,CAACK,WALtB;AAMD;;AAEDS,EAAAA,iBAAiB,GAAS;AACxB,SAAK+C,gBAAL;AACD;;AAEDjD,EAAAA,iBAAiB,GAAS;AACxB,SAAKkD,WAAL;AACD;;AAED9C,EAAAA,YAAY,CAAC+C,KAAD,EAA6C;AACvD,QAAM;AAAE9B,MAAAA;AAAF,QAAY8B,KAAK,CAACC,MAAxB;AACA,SAAKjB,QAAL,CAAc;AAAEd,MAAAA;AAAF,KAAd;AACD;;AAEDlB,EAAAA,YAAY,CAACkD,IAAD,EAA8B;AACxCnE,IAAAA,GAAG,CAACoE,KAAJ,CAAU,cAAV,EAA0BD,IAA1B;;AACA,QAAIA,IAAI,CAAC7D,IAAL,KAAc,WAAlB,EAA+B;AAC7B,WAAK2C,QAAL,CAAc;AAAEvB,QAAAA,IAAI,EAAE7B,SAAS,CAACwE,QAAV,CAAmBF,IAAI,CAACG,QAAxB;AAAR,OAAd;AACD,KAFD,MAEO;AACL;AACA,UAAMnC,KAAK,GAAGgC,IAAI,CAACI,QAAnB;AACA,UAAM7C,IAAI,GAAG7B,SAAS,CAAC+B,OAAV,CAAkBuC,IAAI,CAACG,QAAvB,CAAb;AACA,WAAKrB,QAAL,CAAc;AAAEd,QAAAA,KAAF;AAAST,QAAAA;AAAT,OAAd,EAA+B,MAAM;AACnC,aAAKqC,gBAAL;AACD,OAFD;AAGD;AACF,GA/L4E,CAiM7E;;;AACA5C,EAAAA,aAAa,CAACwC,CAAD,EAAyB;AACpC,QAAM;AAAEa,MAAAA;AAAF,QAAUb,CAAhB;AACAA,IAAAA,CAAC,CAACc,eAAF;;AAEA,YAAQD,GAAR;AACE,WAAK,OAAL;AAAc;AACZ;AACAb,UAAAA,CAAC,CAACe,cAAF;AACA,eAAKV,WAAL;AACA;AACD;;AACD,WAAK,QAAL;AAAe;AACbL,UAAAA,CAAC,CAACe,cAAF;AACA,cAAM;AAAEC,YAAAA;AAAF,cAAe,KAAKhE,KAA1B;AACAgE,UAAAA,QAAQ;AACR;AACD;;AACD;AAbF;AAeD;;AAEDvD,EAAAA,qBAAqB,CAAChB,GAAD,EAAmB;AACtC,QAAI,EAAEA,GAAG,YAAYV,eAAjB,CAAJ,EAAuC;AACrC,YAAMU,GAAN;AACD;;AACDJ,IAAAA,GAAG,CAACoE,KAAJ,CAAU,kBAAV,EAA8BhE,GAA9B;AACA,SAAK6C,QAAL,CAAc;AAAEC,MAAAA,eAAe,EAAE9C;AAAnB,KAAd;AACD;;AAEDiB,EAAAA,qBAAqB,GAAS;AAC5B,SAAK4B,QAAL,CAAc;AACZf,MAAAA,kBAAkB,EAAE,KADR;AAEZJ,MAAAA,YAAY,EAAE;AAFF,KAAd;AAID;;AAEDR,EAAAA,sBAAsB,GAAS;AAC7B,SAAK2B,QAAL,CAAc;AAAEf,MAAAA,kBAAkB,EAAE;AAAtB,KAAd;AACA,QAAM;AAAE0C,MAAAA;AAAF,QAAe,KAAKjE,KAA1B;AACA,QAAM;AAAEe,MAAAA,IAAF;AAAQS,MAAAA;AAAR,QAAkB,KAAKN,KAA7B;AACA7B,IAAAA,GAAG,CAACoE,KAAJ,CAAU,wBAAV,EAAoC1C,IAApC,EAA0CS,KAA1C;AACAyC,IAAAA,QAAQ,WAAIlD,IAAJ,SAAWS,KAAX,EAAR;AACD;;AAEDZ,EAAAA,2BAA2B,GAAS;AAClCvB,IAAAA,GAAG,CAACoE,KAAJ,CAAU,6BAAV;AACA,SAAKnB,QAAL,CAAc,UAA8B;AAAA,UAA7B;AAAEd,QAAAA,KAAF;AAASJ,QAAAA;AAAT,OAA6B;AAC1C,UAAM8C,QAAQ,GAAGhF,SAAS,CAACiF,gBAAV,CAA2B3C,KAA3B,EAAkCJ,aAAlC,CAAjB;AACA,aAAO;AACLE,QAAAA,wBAAwB,EAAE,KADrB;AAELE,QAAAA,KAAK,EAAE0C;AAFF,OAAP;AAID,KAND;AAQA,SAAKb,WAAL,CAAiB,IAAjB;AACD;;AAEDxC,EAAAA,4BAA4B,GAAS;AACnCxB,IAAAA,GAAG,CAACoE,KAAJ,CAAU,8BAAV;AACA,SAAKnB,QAAL,CAAc;AAAEhB,MAAAA,wBAAwB,EAAE;AAA5B,KAAd;AACA,SAAK+B,WAAL,CAAiB,IAAjB;AACD;AAED;AACF;AACA;;;AACED,EAAAA,gBAAgB,GAAS;AACvB,QAAMgB,KAAK,GAAG,KAAKC,QAAL,CAAcC,OAA5B;;AACA,QAAIF,KAAJ,EAAW;AACT,UAAM;AAAEzE,QAAAA;AAAF,UAAW,KAAKK,KAAtB;AACA,UAAM;AAAEwB,QAAAA;AAAF,UAAY4C,KAAlB;AACA,UAAMG,YAAY,GAChB5E,IAAI,KAAK,WAAT,GAAuB6B,KAAK,CAACgD,MAA7B,GAAsChD,KAAK,CAACiD,WAAN,CAAkB,GAAlB,CADxC;AAEAL,MAAAA,KAAK,CAACM,KAAN;AACAN,MAAAA,KAAK,CAACO,iBAAN,CACE,CADF,EAEEJ,YAAY,GAAG,CAAf,GAAmBA,YAAnB,GAAkC/C,KAAK,CAACgD,MAF1C;AAID;AACF;;AAEDnB,EAAAA,WAAW,GAAmC;AAAA,QAAlCuB,kBAAkC,uEAAb,KAAa;AAC5C,SAAKtC,QAAL,CAAc,WAAoC;AAAA,UAAnC;AAAElB,QAAAA,aAAF;AAAiBI,QAAAA,KAAjB;AAAwBT,QAAAA;AAAxB,OAAmC;AAChD,UAAM;AAAE8D,QAAAA,uBAAF;AAA2BlF,QAAAA;AAA3B,UAAoC,KAAKK,KAA/C;AACAX,MAAAA,GAAG,CAACoE,KAAJ,CAAU,aAAV,EAAyBrC,aAAzB,EAAwCI,KAAxC;AACA,UAAMsD,YAAY,GAAG5F,SAAS,CAACmC,YAAV,CAAuBG,KAAvB,CAArB;;AACA,UACEqD,uBAAuB,IACvB,CAACD,kBADD,IAEAxD,aAAa,KAAK,IAFlB,IAGAA,aAAa,KAAK0D,YAJpB,EAKE;AACA,eAAO;AACL3D,UAAAA,YAAY,EAAE,KADT;AAELG,UAAAA,wBAAwB,EAAE,IAFrB;AAGLwD,UAAAA;AAHK,SAAP;AAKD;;AAED,WAAKrC,oBAAL,CAA0B1B,IAA1B,EAAgCS,KAAhC,EAAuC,IAAvC,EACG0B,IADH,CACS6B,WAAD,IAAyB;AAC7B,YAAM;AAAEd,UAAAA;AAAF,YAAe,KAAKjE,KAA1B;AACAiE,QAAAA,QAAQ,WAAIlD,IAAJ,SAAWS,KAAX,EAAR;AACD,OAJH,EAKG2B,KALH,CAKSH,CAAC,IAAI;AACV;AACA;AACA,YAAIA,CAAC,YAAY7D,eAAjB,EAAkC;AAChC,cAAIQ,IAAI,KAAK,WAAT,IAAwBqD,CAAC,CAACtD,IAAF,CAAOC,IAAP,KAAgB,WAA5C,EAAyD;AACvD,iBAAK2C,QAAL,CAAc;AAAEf,cAAAA,kBAAkB,EAAE;AAAtB,aAAd;AACA;AACD;AACF;;AACD,cAAMyB,CAAN;AACD,OAfH,EAgBGG,KAhBH,CAgBSH,CAAC,IAAI;AACV,YAAIlE,YAAY,CAACe,UAAb,CAAwBmD,CAAxB,CAAJ,EAAgC;AAC9B,eAAKV,QAAL,CAAc;AAAEnB,YAAAA,YAAY,EAAE;AAAhB,WAAd;AACD;;AACD,cAAM6B,CAAN;AACD,OArBH,EAsBGG,KAtBH,CAsBS,KAAK1C,qBAtBd,EAuBG0C,KAvBH,CAuBS5D,YAAY,CAACK,WAvBtB;AAyBA,aAAO;AACLuB,QAAAA,YAAY,EAAE,IADT;AAELG,QAAAA,wBAAwB,EAAE,KAFrB;AAGLwD,QAAAA,YAAY,EAAEtC;AAHT,OAAP;AAKD,KA/CD;AAgDD;;AAEDwC,EAAAA,MAAM,GAAoB;AACxB,QAAM;AAAElC,MAAAA,OAAF;AAAWjB,MAAAA,MAAX;AAAmBmC,MAAAA,QAAnB;AAA6BiB,MAAAA,WAA7B;AAA0CC,MAAAA,KAA1C;AAAiDvF,MAAAA;AAAjD,QAA0D,KAAKK,KAArE;AACA,QAAM;AACJmB,MAAAA,YADI;AAEJJ,MAAAA,IAFI;AAGJO,MAAAA,wBAHI;AAIJC,MAAAA,kBAJI;AAKJgB,MAAAA,eALI;AAMJf,MAAAA,KANI;AAOJJ,MAAAA,aAPI;AAQJ0D,MAAAA;AARI,QASF,KAAK5D,KATT;AAWA,QAAMiE,WAAW,GAAGxF,IAAI,KAAK,WAA7B;AACA,QAAMyF,iBAAiB,GAAGlG,SAAS,CAACmG,qBAAV,CAAgCjE,aAAhC,CAA1B;AACA,QAAMkE,gBAAgB,GAAGpG,SAAS,CAACmG,qBAAV,CAAgCP,YAAhC,CAAzB;AACA,QAAMS,cAAc,GAAGJ,WAAW,GAAG,QAAH,GAAc,MAAhD;AACA,QAAMK,cAAc,GAAGL,WAAW,GAAG,iBAAH,GAAuB,cAAzD;AAEA,wBACE,uDACE,oBAAC,KAAD;AACE,MAAA,MAAM,EAAEtD,MADV;AAEE,MAAA,MAAM,EAAEmC,QAFV;AAGE,MAAA,QAAQ,EAAE,KAAK3D,iBAHjB;AAIE,MAAA,SAAS,EAAC;AAJZ,oBAME,oBAAC,WAAD;AAAa,MAAA,MAAM,EAAE2D;AAArB,OAAgCkB,KAAhC,CANF,eAOE,oBAAC,SAAD,qBACE,+CACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAO,MAAA,OAAO,EAAC;AAAf,OAAkCM,cAAlC,CADF,eAEE;AACE,MAAA,EAAE,EAAC,iBADL;AAEE,MAAA,IAAI,EAAC,MAFP;AAGE,MAAA,YAAY,EAAC,KAHf;AAIE,MAAA,cAAc,EAAC,MAJjB;AAKE,MAAA,WAAW,EAAC,KALd;AAME,MAAA,UAAU,EAAC,OANb;AAOE,MAAA,SAAS,EAAEjH,UAAU,CAAC,cAAD,EAAiB;AACpC,sBAAcgE;AADsB,OAAjB,CAPvB;AAUE,MAAA,KAAK,EAAEf,KAVT;AAWE,MAAA,WAAW,EAAEyD,WAXf;AAYE,MAAA,GAAG,EAAE,KAAKZ,QAZZ;AAaE,MAAA,SAAS,EAAE,KAAK7D,aAblB;AAcE,MAAA,QAAQ,EAAE,KAAKD;AAdjB,MAFF,EAkBGgC,eAAe,iBACd;AAAK,MAAA,SAAS,EAAC;AAAf,OACGhD,YAAY,CAACC,oBAAb,CAAkC+C,eAAlC,CADH,CAnBJ,CADF,eAyBE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,+DACa;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAqCxB,IAArC,CADb,CADF,CAzBF,eA8BE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,oBAAC,YAAD;AACE,MAAA,QAAQ,EAAE,KAAKT,YADjB;AAEE,MAAA,OAAO,EAAEwC;AAFX,MADF,CA9BF,CADF,CADF,CAPF,eAiDE,oBAAC,WAAD,qBACE;AACE,MAAA,SAAS,EAAC,yBADZ;AAEE,MAAA,OAAO,EAAEkB,QAFX;AAGE,MAAA,IAAI,EAAC;AAHP,gBADF,eAQE;AACE,MAAA,SAAS,EAAC,iBADZ;AAEE,MAAA,QAAQ,EAAE7C,YAFZ;AAGE,MAAA,OAAO,EAAE,KAAKhB,iBAHhB;AAIE,MAAA,IAAI,EAAC;AAJP,OAMGoF,cANH,CARF,CAjDF,CADF,eAoEE,oBAAC,UAAD;AACE,MAAA,MAAM,EAAEhE,kBADV;AAEE,MAAA,UAAU,EAAC,mBAFb;AAGE,MAAA,QAAQ,EAAC,4EAHX;AAIE,MAAA,QAAQ,EAAE,KAAKb,qBAJjB;AAKE,MAAA,SAAS,EAAE,KAAKC,sBALlB;AAME,MAAA,gBAAgB,EAAC,QANnB;AAOE,MAAA,iBAAiB,EAAC;AAPpB,MApEF,eA6EE,oBAAC,UAAD;AACE,MAAA,MAAM,EAAEW,wBADV;AAEE,MAAA,UAAU,EAAC,0BAFb;AAGE,MAAA,QAAQ,6DAAqD8D,iBAArD,qBAA+EE,gBAA/E,QAHV;AAIE,MAAA,QAAQ,EAAE,KAAK1E,2BAJjB;AAKE,MAAA,SAAS,EAAE,KAAKC,4BALlB;AAME,MAAA,gBAAgB,mBAAWuE,iBAAX,OANlB;AAOE,MAAA,iBAAiB,kBAAUE,gBAAV;AAPnB,MA7EF,CADF;AAyFD;;AAlb4E;;gBAAzE/F,Y,eACe;AACjBsC,EAAAA,MAAM,EAAEvD,SAAS,CAACmH,IADD;AAEjBP,EAAAA,KAAK,EAAE5G,SAAS,CAACoH,MAAV,CAAiBC,UAFP;AAGjB7E,EAAAA,YAAY,EAAExC,SAAS,CAACoH,MAHP;AAIjB/F,EAAAA,IAAI,EAAErB,SAAS,CAACsH,KAAV,CAAgB,CAAC,MAAD,EAAS,WAAT,CAAhB,EAAuCD,UAJ5B;AAKjB1B,EAAAA,QAAQ,EAAE3F,SAAS,CAACuH,IALH;AAMjB7B,EAAAA,QAAQ,EAAE1F,SAAS,CAACuH,IANH;AAOjBZ,EAAAA,WAAW,EAAE3G,SAAS,CAACoH,MAPN;AAQjB5C,EAAAA,OAAO,EAAExE,SAAS,CAACwH,KAAV,CAAgB,EAAhB,EAAoBH,UARZ;AASjBd,EAAAA,uBAAuB,EAAEvG,SAAS,CAACmH;AATlB,C;;gBADflG,Y,kBAakB;AACpBsC,EAAAA,MAAM,EAAE,KADY;AAEpBf,EAAAA,YAAY,EAAE,GAFM;AAGpB+D,EAAAA,uBAAuB,EAAE,KAHL;AAIpBI,EAAAA,WAAW,EAAE,EAJO;AAKpBhB,EAAAA,QAAQ,EAAGvB,IAAD,IAAwBF,SALd;AAMpBwB,EAAAA,QAAQ,EAAE,MAAYxB;AANF,C;;AAwaxB,eAAejD,YAAf","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
|
|
16
|
-
import FileUtils from
|
|
17
|
-
import WebdavFileStorageTable from
|
|
18
|
-
export
|
|
19
|
-
|
|
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(
|
|
29
|
-
|
|
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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","
|
|
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"}
|