UNPKG

mirador

Version:

An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.

89 lines (83 loc) 2.46 kB
import { useId, useState } from 'react'; import DialogTitle from '@mui/material/DialogTitle'; import PropTypes from 'prop-types'; import { DialogActions, TextField, } from '@mui/material'; import Button from '@mui/material/Button'; import { useTranslation } from 'react-i18next'; import { WorkspaceDialog } from './WorkspaceDialog'; import ScrollIndicatedDialogContent from '../containers/ScrollIndicatedDialogContent'; /** */ export function WorkspaceImport({ addError, container = null, id = undefined, importConfig, classes = {}, handleClose, open = false, }) { const { t } = useTranslation(); const [configImportValue, setConfigImportValue] = useState(''); const titleId = useId(); /** */ const handleChange = (event) => { event.preventDefault(); setConfigImportValue(event.target.value); }; /** */ const handleImportConfig = (_event) => { try { const configJSON = JSON.parse(configImportValue); importConfig(configJSON); handleClose(); } catch (ex) { addError(ex.toString()); } }; return ( <WorkspaceDialog aria-labelledby={titleId} container={container} id={id} onClose={handleClose} open={open} fullWidth maxWidth="sm" > <DialogTitle id={titleId}> {t('importWorkspace')} </DialogTitle> <ScrollIndicatedDialogContent> <TextField className={classes.textField} id="workspace-import-input" multiline onChange={handleChange} minRows={15} variant="filled" sx={{ '& .MuiInputBase-input': { fontFamily: 'monospace' }, width: '100%', }} inputProps={{ autoFocus: 'autofocus' }} helperText={t('importWorkspaceHint')} /> </ScrollIndicatedDialogContent> <DialogActions> <Button onClick={handleClose}> {t('cancel')} </Button> <Button color="primary" onClick={handleImportConfig} variant="contained"> {t('import')} </Button> </DialogActions> </WorkspaceDialog> ); } WorkspaceImport.propTypes = { addError: PropTypes.func.isRequired, classes: PropTypes.objectOf(PropTypes.string), container: PropTypes.object, // eslint-disable-line react/forbid-prop-types handleClose: PropTypes.func.isRequired, id: PropTypes.string, importConfig: PropTypes.func.isRequired, open: PropTypes.bool, };