import { Button, Modal } from 'react-bootstrap'
import { Trans, useTranslation } from 'react-i18next'
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
import {
InvalidFilenameError,
BlockedFilenameError,
DuplicateFilenameError,
DuplicateFilenameMoveError,
} from '../../errors'
function FileTreeModalError() {
const { t } = useTranslation()
const { isRenaming, isMoving, cancel, error } = useFileTreeActionable()
// the modal will not be rendered; return early
if (!error) return null
if (!isRenaming && !isMoving) return null
function handleHide() {
cancel()
}
function errorTitle() {
switch (error.constructor) {
case DuplicateFilenameError:
case DuplicateFilenameMoveError:
return t('duplicate_file')
case InvalidFilenameError:
case BlockedFilenameError:
return t('invalid_file_name')
default:
return t('error')
}
}
function errorMessage() {
switch (error.constructor) {
case DuplicateFilenameError:
return t('file_already_exists')
case DuplicateFilenameMoveError:
return (
]} // eslint-disable-line react/jsx-key
values={{ fileName: error.entityName }}
/>
)
case InvalidFilenameError:
return t('files_cannot_include_invalid_characters')
case BlockedFilenameError:
return t('blocked_filename')
default:
return t('generic_something_went_wrong')
}
}
return (
{errorTitle()}
{errorMessage()}
)
}
export default FileTreeModalError