import React, { useState, useCallback } from 'react'; import { useHistory } from 'react-router-dom'; import { AppBar, Dialog, Toolbar, Typography, IconButton, Divider, Slide, useMediaQuery, useTheme } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import { TransitionProps } from '@material-ui/core/transitions'; import CloseIcon from '@material-ui/icons/Close'; interface PropTypes { title: string; actionIcon?: JSX.Element; handleAction?: () => void; isActionDisabled?: boolean; } const useStyles = makeStyles(theme => ({ root: { backgroundColor: theme.palette.background.default }, content: { [theme.breakpoints.up('md')]: { padding: theme.spacing(4) } }, toolbar: { display: 'flex', justifyContent: 'space-between' } })); const Transition = React.forwardRef(( props: TransitionProps & { children?: React.ReactElement }, ref: React.Ref ) => ); const ModalScreen: React.FC = ({ title, actionIcon, handleAction, isActionDisabled, children }) => { const [isOpen, setIsOpen] = useState(true); const classes = useStyles(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const history = useHistory(); const handleClose = useCallback(() => setIsOpen(false), [setIsOpen]); const onExited = useCallback(() => history.goBack(), [history]); const handleClickAction = useCallback(async () => { if (handleAction) await handleAction(); return handleClose(); }, [handleAction, handleClose]); return ( { title } { actionIcon }
{ children }
); }; export default ModalScreen;