diff options
Diffstat (limited to 'frontend/src/components/modals/filepicker/FilePickerError.tsx')
| -rw-r--r-- | frontend/src/components/modals/filepicker/FilePickerError.tsx | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/frontend/src/components/modals/filepicker/FilePickerError.tsx b/frontend/src/components/modals/filepicker/FilePickerError.tsx new file mode 100644 index 00000000..bf75afae --- /dev/null +++ b/frontend/src/components/modals/filepicker/FilePickerError.tsx @@ -0,0 +1,51 @@ +import { FC, useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { IconContext } from 'react-icons'; +import { FaExclamationTriangle, FaQuestionCircle } from 'react-icons/fa'; + +export enum FileErrorTypes { + FileNotFound, + Unknown, + None, +} + +interface FilePickerErrorProps { + error: FileErrorTypes; + rawError?: string; +} + +const FilePickerError: FC<FilePickerErrorProps> = ({ error, rawError = null }) => { + const [icon, setIcon] = useState<JSX.Element>(<FaQuestionCircle />); + const [text, setText] = useState<string | null>(null); + const { t } = useTranslation(); + + useEffect(() => { + switch (error) { + case FileErrorTypes.FileNotFound: + setText(t('FilePickerError.errors.file_not_found')); + setIcon(<FaExclamationTriangle />); + break; + case FileErrorTypes.Unknown: + setText(t('FilePickerError.errors.unknown', { raw_error: rawError })); + setIcon(<FaQuestionCircle />); + break; + case FileErrorTypes.None: + setText(null); + setIcon(<div></div>); + break; + } + }, [error]); + + return ( + <> + <div style={{ paddingTop: '50px', textAlign: 'center', height: '100%' }}> + <IconContext.Provider value={{ className: 'fileError', size: '128px' }}> + <div style={{ alignSelf: 'center', alignContent: 'center' }}>{icon}</div> + </IconContext.Provider> + <p style={{ height: '32px', paddingTop: '25px', alignSelf: 'flex-start', textAlign: 'center' }}>{text}</p> + </div> + </> + ); +}; + +export default FilePickerError; |
