aboutsummaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/Fab/Fab.tsx23
-rw-r--r--src/components/ModalScreen/ModalScreen.tsx80
2 files changed, 90 insertions, 13 deletions
diff --git a/src/components/Fab/Fab.tsx b/src/components/Fab/Fab.tsx
index 7ca2893..f6b85e5 100644
--- a/src/components/Fab/Fab.tsx
+++ b/src/components/Fab/Fab.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { useHistory } from 'react-router-dom';
+import { useLocation, Link } from 'react-router-dom';
import { Fab as FabBase, Slide, useScrollTrigger } from '@material-ui/core/';
import { makeStyles } from '@material-ui/core/styles';
import PlusIcon from '@material-ui/icons/Add';
@@ -26,22 +26,19 @@ const useStyles = makeStyles(theme => ({
const Fab: React.FC<PropTypes> = ({ hideOnScroll = false }) => {
const classes = useStyles();
- const history = useHistory();
+ const location = useLocation();
const trigger = useScrollTrigger();
- const handleClick = () => {
- history.push('/new');
- };
-
return (
<Slide appear={false} direction="up" in={(!hideOnScroll) || !trigger}>
- <FabBase
- onClick={handleClick}
- className={classes.root}
- color="secondary"
- >
- <PlusIcon />
- </FabBase>
+ <Link to={{ pathname: '/new', state: { background: location } }}>
+ <FabBase
+ className={classes.root}
+ color="secondary"
+ >
+ <PlusIcon />
+ </FabBase>
+ </Link>
</Slide>
);
};
diff --git a/src/components/ModalScreen/ModalScreen.tsx b/src/components/ModalScreen/ModalScreen.tsx
new file mode 100644
index 0000000..81e5c5a
--- /dev/null
+++ b/src/components/ModalScreen/ModalScreen.tsx
@@ -0,0 +1,80 @@
+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 CloseIcon from '@material-ui/icons/Close';
+import { TransitionProps } from '@material-ui/core/transitions';
+
+interface PropTypes {
+ title: string;
+}
+
+const useStyles = makeStyles(theme => ({
+ root: {
+ backgroundColor: theme.palette.background.default
+ },
+ content: {
+ padding: theme.spacing(3, 0, 0, 0)
+ },
+ toolbar: {
+ display: 'flex',
+ justifyContent: 'space-between'
+ }
+}));
+
+const Transition = React.forwardRef((
+ props: TransitionProps & { children?: React.ReactElement },
+ ref: React.Ref<unknown>
+) => <Slide direction="left" ref={ref} {...props} />);
+
+const ModalScreen: React.FC<PropTypes> = ({ title, children }) => {
+ const [isOpen, setIsOpen] = useState<boolean>(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]);
+
+ return (
+ <Dialog
+ open={isOpen}
+ onExited={onExited}
+ TransitionComponent={Transition}
+ PaperProps={{ className: classes.root }}
+ fullScreen={isMobile}
+ fullWidth
+ >
+ <AppBar position="static">
+ <Toolbar className={classes.toolbar}>
+ <IconButton onClick={handleClose}>
+ <CloseIcon />
+ </IconButton>
+ <Typography variant="h6">
+ { title }
+ </Typography>
+ <IconButton style={{ opacity: 0, pointerEvents: 'none' }}>
+ <CloseIcon />
+ </IconButton>
+ </Toolbar>
+ </AppBar>
+ <Divider />
+ <div className={classes.content}>
+ { children }
+ </div>
+ </Dialog>
+ );
+};
+
+export default ModalScreen;