diff --git a/docs/src/pages/components/click-away-listener/ClickAway.js b/docs/src/pages/components/click-away-listener/ClickAway.js
index 23fdf1c85c4fe0..4db72e123faae1 100644
--- a/docs/src/pages/components/click-away-listener/ClickAway.js
+++ b/docs/src/pages/components/click-away-listener/ClickAway.js
@@ -1,12 +1,11 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { withStyles } from '@material-ui/core/styles';
+import { makeStyles } from '@material-ui/core/styles';
import ClickAwayListener from '@material-ui/core/ClickAwayListener';
import Button from '@material-ui/core/Button';
import Paper from '@material-ui/core/Paper';
import { grey } from '@material-ui/core/colors';
-const styles = theme => ({
+const useStyles = makeStyles(theme => ({
root: {
position: 'relative',
},
@@ -25,53 +24,38 @@ const styles = theme => ({
marginRight: theme.spacing(3),
},
},
-});
+}));
-class ClickAway extends React.Component {
- state = {
- open: false,
- };
+export default function ClickAway() {
+ const [open, setOpen] = React.useState(false);
+ const classes = useStyles();
- handleClick = () => {
- this.setState(state => ({
- open: !state.open,
- }));
+ const handleClick = () => {
+ setOpen(prev => !prev);
};
- handleClickAway = () => {
- this.setState({
- open: false,
- });
+ const handleClickAway = () => {
+ setOpen(false);
};
- render() {
- const { classes } = this.props;
- const { open } = this.state;
- const fake =
;
-
- return (
-
-
-
-
Open menu
- {open ? (
-
- {fake}
- {fake}
- {fake}
- {fake}
- {fake}
-
- ) : null}
-
-
-
- );
- }
+ const fake =
;
+
+ return (
+
+
+
+
Open menu
+ {open ? (
+
+ {fake}
+ {fake}
+ {fake}
+ {fake}
+ {fake}
+
+ ) : null}
+
+
+
+ );
}
-
-ClickAway.propTypes = {
- classes: PropTypes.object.isRequired,
-};
-
-export default withStyles(styles)(ClickAway);
diff --git a/docs/src/pages/components/click-away-listener/ClickAway.tsx b/docs/src/pages/components/click-away-listener/ClickAway.tsx
new file mode 100644
index 00000000000000..f310fdea759a2c
--- /dev/null
+++ b/docs/src/pages/components/click-away-listener/ClickAway.tsx
@@ -0,0 +1,63 @@
+import React from 'react';
+import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';
+import ClickAwayListener from '@material-ui/core/ClickAwayListener';
+import Button from '@material-ui/core/Button';
+import Paper from '@material-ui/core/Paper';
+import { grey } from '@material-ui/core/colors';
+
+const useStyles = makeStyles((theme: Theme) =>
+ createStyles({
+ root: {
+ position: 'relative',
+ },
+ paper: {
+ position: 'absolute',
+ top: 36,
+ right: 0,
+ left: 0,
+ },
+ fake: {
+ backgroundColor: grey[200],
+ height: theme.spacing(1),
+ margin: theme.spacing(2),
+ // Selects every two elements among any group of siblings.
+ '&:nth-child(2n)': {
+ marginRight: theme.spacing(3),
+ },
+ },
+ }),
+);
+
+export default function ClickAway() {
+ const [open, setOpen] = React.useState(false);
+ const classes = useStyles();
+
+ const handleClick = () => {
+ setOpen(prev => !prev);
+ };
+
+ const handleClickAway = () => {
+ setOpen(false);
+ };
+
+ const fake =
;
+
+ return (
+
+
+
+
Open menu
+ {open ? (
+
+ {fake}
+ {fake}
+ {fake}
+ {fake}
+ {fake}
+
+ ) : null}
+
+
+
+ );
+}
diff --git a/docs/src/pages/components/container/FixedContainer.js b/docs/src/pages/components/container/FixedContainer.js
index 9c22ba42d954e2..4aeda75ba0d03b 100644
--- a/docs/src/pages/components/container/FixedContainer.js
+++ b/docs/src/pages/components/container/FixedContainer.js
@@ -3,7 +3,7 @@ import CssBaseline from '@material-ui/core/CssBaseline';
import Typography from '@material-ui/core/Typography';
import Container from '@material-ui/core/Container';
-function FixedContainer() {
+export default function FixedContainer() {
return (
@@ -13,5 +13,3 @@ function FixedContainer() {
);
}
-
-export default FixedContainer;
diff --git a/docs/src/pages/components/container/FixedContainer.tsx b/docs/src/pages/components/container/FixedContainer.tsx
new file mode 100644
index 00000000000000..4aeda75ba0d03b
--- /dev/null
+++ b/docs/src/pages/components/container/FixedContainer.tsx
@@ -0,0 +1,15 @@
+import React from 'react';
+import CssBaseline from '@material-ui/core/CssBaseline';
+import Typography from '@material-ui/core/Typography';
+import Container from '@material-ui/core/Container';
+
+export default function FixedContainer() {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/docs/src/pages/components/container/SimpleContainer.js b/docs/src/pages/components/container/SimpleContainer.js
index 89cf16bf0bf5f7..dea58d8e902ac1 100644
--- a/docs/src/pages/components/container/SimpleContainer.js
+++ b/docs/src/pages/components/container/SimpleContainer.js
@@ -3,7 +3,7 @@ import CssBaseline from '@material-ui/core/CssBaseline';
import Typography from '@material-ui/core/Typography';
import Container from '@material-ui/core/Container';
-function SimpleContainer() {
+export default function SimpleContainer() {
return (
@@ -13,5 +13,3 @@ function SimpleContainer() {
);
}
-
-export default SimpleContainer;
diff --git a/docs/src/pages/components/container/SimpleContainer.tsx b/docs/src/pages/components/container/SimpleContainer.tsx
new file mode 100644
index 00000000000000..dea58d8e902ac1
--- /dev/null
+++ b/docs/src/pages/components/container/SimpleContainer.tsx
@@ -0,0 +1,15 @@
+import React from 'react';
+import CssBaseline from '@material-ui/core/CssBaseline';
+import Typography from '@material-ui/core/Typography';
+import Container from '@material-ui/core/Container';
+
+export default function SimpleContainer() {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/docs/src/pages/components/popover/MouseOverPopover.js b/docs/src/pages/components/popover/MouseOverPopover.js
index 6e02fd098f655d..7d440d8b595c54 100644
--- a/docs/src/pages/components/popover/MouseOverPopover.js
+++ b/docs/src/pages/components/popover/MouseOverPopover.js
@@ -12,7 +12,7 @@ const useStyles = makeStyles(theme => ({
},
}));
-function MouseOverPopover() {
+export default function MouseOverPopover() {
const classes = useStyles();
const [anchorEl, setAnchorEl] = React.useState(null);
@@ -60,5 +60,3 @@ function MouseOverPopover() {
);
}
-
-export default MouseOverPopover;
diff --git a/docs/src/pages/components/popover/MouseOverPopover.tsx b/docs/src/pages/components/popover/MouseOverPopover.tsx
new file mode 100644
index 00000000000000..1ea427d3a4d973
--- /dev/null
+++ b/docs/src/pages/components/popover/MouseOverPopover.tsx
@@ -0,0 +1,64 @@
+import React from 'react';
+import Popover from '@material-ui/core/Popover';
+import Typography from '@material-ui/core/Typography';
+import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';
+
+const useStyles = makeStyles((theme: Theme) =>
+ createStyles({
+ popover: {
+ pointerEvents: 'none',
+ },
+ paper: {
+ padding: theme.spacing(1),
+ },
+ }),
+);
+
+export default function MouseOverPopover() {
+ const classes = useStyles();
+ const [anchorEl, setAnchorEl] = React.useState(null);
+
+ function handlePopoverOpen(event: React.MouseEvent) {
+ setAnchorEl(event.currentTarget);
+ }
+
+ function handlePopoverClose() {
+ setAnchorEl(null);
+ }
+
+ const open = Boolean(anchorEl);
+
+ return (
+
+
+ Hover with a Popover.
+
+
+ I use Popover.
+
+
+ );
+}
diff --git a/docs/src/pages/components/popover/PopoverPopupState.js b/docs/src/pages/components/popover/PopoverPopupState.js
index 23f8a958467947..9017ebfeae3f46 100644
--- a/docs/src/pages/components/popover/PopoverPopupState.js
+++ b/docs/src/pages/components/popover/PopoverPopupState.js
@@ -1,19 +1,18 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { withStyles } from '@material-ui/core/styles';
+import { makeStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';
import Popover from '@material-ui/core/Popover';
import PopupState, { bindTrigger, bindPopover } from 'material-ui-popup-state';
-const styles = theme => ({
+const useStyles = makeStyles(theme => ({
typography: {
margin: theme.spacing(2),
},
-});
+}));
-function PopoverPopupState(props) {
- const { classes } = props;
+export default function PopoverPopupState() {
+ const classes = useStyles();
return (
@@ -40,9 +39,3 @@ function PopoverPopupState(props) {
);
}
-
-PopoverPopupState.propTypes = {
- classes: PropTypes.object.isRequired,
-};
-
-export default withStyles(styles)(PopoverPopupState);
diff --git a/docs/src/pages/components/popover/SimplePopover.js b/docs/src/pages/components/popover/SimplePopover.js
index 459d16db167f40..5e21df890126a9 100644
--- a/docs/src/pages/components/popover/SimplePopover.js
+++ b/docs/src/pages/components/popover/SimplePopover.js
@@ -10,7 +10,7 @@ const useStyles = makeStyles(theme => ({
},
}));
-function SimplePopover() {
+export default function SimplePopover() {
const classes = useStyles();
const [anchorEl, setAnchorEl] = React.useState(null);
@@ -23,7 +23,7 @@ function SimplePopover() {
}
const open = Boolean(anchorEl);
- const id = open ? 'simple-popover' : null;
+ const id = open ? 'simple-popover' : undefined;
return (
@@ -49,5 +49,3 @@ function SimplePopover() {
);
}
-
-export default SimplePopover;
diff --git a/docs/src/pages/components/popover/SimplePopover.tsx b/docs/src/pages/components/popover/SimplePopover.tsx
new file mode 100644
index 00000000000000..4158676d6a2da0
--- /dev/null
+++ b/docs/src/pages/components/popover/SimplePopover.tsx
@@ -0,0 +1,53 @@
+import React from 'react';
+import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';
+import Popover from '@material-ui/core/Popover';
+import Typography from '@material-ui/core/Typography';
+import Button from '@material-ui/core/Button';
+
+const useStyles = makeStyles((theme: Theme) =>
+ createStyles({
+ typography: {
+ padding: theme.spacing(2),
+ },
+ }),
+);
+
+export default function SimplePopover() {
+ const classes = useStyles();
+ const [anchorEl, setAnchorEl] = React.useState(null);
+
+ function handleClick(event: React.MouseEvent) {
+ setAnchorEl(event.currentTarget);
+ }
+
+ function handleClose() {
+ setAnchorEl(null);
+ }
+
+ const open = Boolean(anchorEl);
+ const id = open ? 'simple-popover' : undefined;
+
+ return (
+
+
+ Open Popover
+
+
+ The content of the Popover.
+
+
+ );
+}
diff --git a/docs/src/pages/components/popper/FakedReferencePopper.js b/docs/src/pages/components/popper/FakedReferencePopper.js
index 46f78579d7cf4b..5378ccf0bbafe5 100644
--- a/docs/src/pages/components/popper/FakedReferencePopper.js
+++ b/docs/src/pages/components/popper/FakedReferencePopper.js
@@ -1,84 +1,66 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { withStyles } from '@material-ui/core/styles';
+import { makeStyles } from '@material-ui/core/styles';
import Popper from '@material-ui/core/Popper';
import Typography from '@material-ui/core/Typography';
import Fade from '@material-ui/core/Fade';
import Paper from '@material-ui/core/Paper';
-const styles = theme => ({
+const useStyles = makeStyles(theme => ({
typography: {
padding: theme.spacing(2),
},
-});
+}));
-class FakedReferencePopper extends React.Component {
- state = {
- anchorEl: null,
- open: false,
+export default function FakedReferencePopper() {
+ const [open, setOpen] = React.useState(false);
+ const [anchorEl, setAnchorEl] = React.useState(null);
+ const classes = useStyles();
+
+ const handleClose = () => {
+ setOpen(false);
};
- handleMouseUp = () => {
+ const handleMouseUp = () => {
const selection = window.getSelection();
// Resets when the selection has a length of 0
if (!selection || selection.anchorOffset === selection.focusOffset) {
- this.handleClose();
+ handleClose();
return;
}
const getBoundingClientRect = () => selection.getRangeAt(0).getBoundingClientRect();
- this.setState({
- open: true,
- anchorEl: {
- clientWidth: getBoundingClientRect().width,
- clientHeight: getBoundingClientRect().height,
- getBoundingClientRect,
- },
+ setOpen(true);
+ setAnchorEl({
+ clientWidth: getBoundingClientRect().width,
+ clientHeight: getBoundingClientRect().height,
+ getBoundingClientRect,
});
};
- handleClose = () => {
- if (!this.state.open) {
- return;
- }
-
- this.setState({ open: false });
- };
-
- render() {
- const { classes } = this.props;
- const { anchorEl, open } = this.state;
- const id = open ? 'faked-reference-popper' : null;
+ const id = open ? 'faked-reference-popper' : undefined;
- return (
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ipsum purus, bibendum sit
- amet vulputate eget, porta semper ligula. Donec bibendum vulputate erat, ac fringilla mi
- finibus nec. Donec ac dolor sed dolor porttitor blandit vel vel purus. Fusce vel malesuada
- ligula. Nam quis vehicula ante, eu finibus est. Proin ullamcorper fermentum orci, quis
- finibus massa. Nunc lobortis, massa ut rutrum ultrices, metus metus finibus ex, sit amet
- facilisis neque enim sed neque. Quisque accumsan metus vel maximus consequat. Suspendisse
- lacinia tellus a libero volutpat maximus.
-
-
- {({ TransitionProps }) => (
-
-
- The content of the Popper.
-
-
- )}
-
-
- );
- }
+ return (
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ipsum purus, bibendum sit
+ amet vulputate eget, porta semper ligula. Donec bibendum vulputate erat, ac fringilla mi
+ finibus nec. Donec ac dolor sed dolor porttitor blandit vel vel purus. Fusce vel malesuada
+ ligula. Nam quis vehicula ante, eu finibus est. Proin ullamcorper fermentum orci, quis
+ finibus massa. Nunc lobortis, massa ut rutrum ultrices, metus metus finibus ex, sit amet
+ facilisis neque enim sed neque. Quisque accumsan metus vel maximus consequat. Suspendisse
+ lacinia tellus a libero volutpat maximus.
+
+
+ {({ TransitionProps }) => (
+
+
+ The content of the Popper.
+
+
+ )}
+
+
+ );
}
-
-FakedReferencePopper.propTypes = {
- classes: PropTypes.object.isRequired,
-};
-
-export default withStyles(styles)(FakedReferencePopper);
diff --git a/docs/src/pages/components/popper/FakedReferencePopper.tsx b/docs/src/pages/components/popper/FakedReferencePopper.tsx
new file mode 100644
index 00000000000000..19d92e54d623eb
--- /dev/null
+++ b/docs/src/pages/components/popper/FakedReferencePopper.tsx
@@ -0,0 +1,68 @@
+import React from 'react';
+import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';
+import Popper, { PopperProps } from '@material-ui/core/Popper';
+import Typography from '@material-ui/core/Typography';
+import Fade from '@material-ui/core/Fade';
+import Paper from '@material-ui/core/Paper';
+
+const useStyles = makeStyles((theme: Theme) =>
+ createStyles({
+ typography: {
+ padding: theme.spacing(2),
+ },
+ }),
+);
+
+export default function FakedReferencePopper() {
+ const [open, setOpen] = React.useState(false);
+ const [anchorEl, setAnchorEl] = React.useState(null);
+ const classes = useStyles();
+
+ const handleClose = () => {
+ setOpen(false);
+ };
+
+ const handleMouseUp = () => {
+ const selection = window.getSelection();
+
+ // Resets when the selection has a length of 0
+ if (!selection || selection.anchorOffset === selection.focusOffset) {
+ handleClose();
+ return;
+ }
+
+ const getBoundingClientRect = () => selection.getRangeAt(0).getBoundingClientRect();
+
+ setOpen(true);
+ setAnchorEl({
+ clientWidth: getBoundingClientRect().width,
+ clientHeight: getBoundingClientRect().height,
+ getBoundingClientRect,
+ });
+ };
+
+ const id = open ? 'faked-reference-popper' : undefined;
+
+ return (
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ipsum purus, bibendum sit
+ amet vulputate eget, porta semper ligula. Donec bibendum vulputate erat, ac fringilla mi
+ finibus nec. Donec ac dolor sed dolor porttitor blandit vel vel purus. Fusce vel malesuada
+ ligula. Nam quis vehicula ante, eu finibus est. Proin ullamcorper fermentum orci, quis
+ finibus massa. Nunc lobortis, massa ut rutrum ultrices, metus metus finibus ex, sit amet
+ facilisis neque enim sed neque. Quisque accumsan metus vel maximus consequat. Suspendisse
+ lacinia tellus a libero volutpat maximus.
+
+
+ {({ TransitionProps }) => (
+
+
+ The content of the Popper.
+
+
+ )}
+
+
+ );
+}
diff --git a/docs/src/pages/components/popper/MinimalPopper.js b/docs/src/pages/components/popper/MinimalPopper.js
index 347edbe1796c83..6cbf70b82ce6e9 100644
--- a/docs/src/pages/components/popper/MinimalPopper.js
+++ b/docs/src/pages/components/popper/MinimalPopper.js
@@ -1,7 +1,7 @@
import React from 'react';
import Popper from '@material-ui/core/Popper';
-function MinimalPopper() {
+export default function MinimalPopper() {
const [anchorEl, setAnchorEl] = React.useState(null);
function handleClick(event) {
@@ -9,7 +9,7 @@ function MinimalPopper() {
}
const open = Boolean(anchorEl);
- const id = open ? 'simple-popper' : null;
+ const id = open ? 'simple-popper' : undefined;
return (
@@ -22,5 +22,3 @@ function MinimalPopper() {
);
}
-
-export default MinimalPopper;
diff --git a/docs/src/pages/components/popper/MinimalPopper.tsx b/docs/src/pages/components/popper/MinimalPopper.tsx
new file mode 100644
index 00000000000000..6675aa2452534b
--- /dev/null
+++ b/docs/src/pages/components/popper/MinimalPopper.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import Popper from '@material-ui/core/Popper';
+
+export default function MinimalPopper() {
+ const [anchorEl, setAnchorEl] = React.useState(null);
+
+ function handleClick(event: React.MouseEvent) {
+ setAnchorEl(anchorEl ? null : event.currentTarget);
+ }
+
+ const open = Boolean(anchorEl);
+ const id = open ? 'simple-popper' : undefined;
+
+ return (
+
+
+ Toggle Popper
+
+
+ The content of the Popper.
+
+
+ );
+}
diff --git a/docs/src/pages/components/popper/NoTransitionPopper.js b/docs/src/pages/components/popper/NoTransitionPopper.js
index def43f3a33858d..cdc6d5aa0e6771 100644
--- a/docs/src/pages/components/popper/NoTransitionPopper.js
+++ b/docs/src/pages/components/popper/NoTransitionPopper.js
@@ -1,52 +1,37 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { withStyles } from '@material-ui/core/styles';
+import { makeStyles } from '@material-ui/core/styles';
import Popper from '@material-ui/core/Popper';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';
import Paper from '@material-ui/core/Paper';
-const styles = theme => ({
+const useStyles = makeStyles(theme => ({
typography: {
padding: theme.spacing(2),
},
-});
+}));
-class NoTransitionPopper extends React.Component {
- state = {
- anchorEl: null,
- };
+export default function NoTransitionPopper() {
+ const [anchorEl, setAnchorEl] = React.useState(null);
+ const classes = useStyles();
- handleClick = event => {
- const { currentTarget } = event;
- this.setState(state => ({
- anchorEl: state.anchorEl ? null : currentTarget,
- }));
+ const handleClick = event => {
+ setAnchorEl(prev => (prev ? null : event.currentTarget));
};
- render() {
- const { classes } = this.props;
- const { anchorEl } = this.state;
- const open = Boolean(anchorEl);
- const id = open ? 'no-transition-popper' : null;
+ const open = Boolean(anchorEl);
+ const id = open ? 'no-transition-popper' : undefined;
- return (
-
-
- Toggle Popper
-
-
-
- The content of the Popper.
-
-
-
- );
- }
+ return (
+
+
+ Toggle Popper
+
+
+
+ The content of the Popper.
+
+
+
+ );
}
-
-NoTransitionPopper.propTypes = {
- classes: PropTypes.object.isRequired,
-};
-
-export default withStyles(styles)(NoTransitionPopper);
diff --git a/docs/src/pages/components/popper/NoTransitionPopper.tsx b/docs/src/pages/components/popper/NoTransitionPopper.tsx
new file mode 100644
index 00000000000000..3a8a21cc117ab4
--- /dev/null
+++ b/docs/src/pages/components/popper/NoTransitionPopper.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';
+import Popper from '@material-ui/core/Popper';
+import Typography from '@material-ui/core/Typography';
+import Button from '@material-ui/core/Button';
+import Paper from '@material-ui/core/Paper';
+
+const useStyles = makeStyles((theme: Theme) =>
+ createStyles({
+ typography: {
+ padding: theme.spacing(2),
+ },
+ }),
+);
+
+export default function NoTransitionPopper() {
+ const [anchorEl, setAnchorEl] = React.useState(null);
+ const classes = useStyles();
+
+ const handleClick = (event: React.MouseEvent) => {
+ setAnchorEl(prev => (prev ? null : event.currentTarget));
+ };
+
+ const open = Boolean(anchorEl);
+ const id = open ? 'no-transition-popper' : undefined;
+
+ return (
+
+
+ Toggle Popper
+
+
+
+ The content of the Popper.
+
+
+
+ );
+}
diff --git a/docs/src/pages/components/popper/PopperPopupState.js b/docs/src/pages/components/popper/PopperPopupState.js
index baf5cc049eda26..5d44f0b1a70c3a 100644
--- a/docs/src/pages/components/popper/PopperPopupState.js
+++ b/docs/src/pages/components/popper/PopperPopupState.js
@@ -1,6 +1,5 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { withStyles } from '@material-ui/core/styles';
+import { makeStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';
import Popper from '@material-ui/core/Popper';
@@ -8,14 +7,14 @@ import PopupState, { bindToggle, bindPopper } from 'material-ui-popup-state';
import Fade from '@material-ui/core/Fade';
import Paper from '@material-ui/core/Paper';
-const styles = theme => ({
+const useStyles = makeStyles(theme => ({
typography: {
padding: theme.spacing(2),
},
-});
+}));
-function PopperPopupState(props) {
- const { classes } = props;
+export default function PopperPopupState() {
+ const classes = useStyles();
return (
@@ -38,9 +37,3 @@ function PopperPopupState(props) {
);
}
-
-PopperPopupState.propTypes = {
- classes: PropTypes.object.isRequired,
-};
-
-export default withStyles(styles)(PopperPopupState);
diff --git a/docs/src/pages/components/popper/PositionedPopper.js b/docs/src/pages/components/popper/PositionedPopper.js
index fb2c5a6bc6b55d..51f11095d3ca2f 100644
--- a/docs/src/pages/components/popper/PositionedPopper.js
+++ b/docs/src/pages/components/popper/PositionedPopper.js
@@ -1,6 +1,5 @@
import React from 'react';
-import PropTypes from 'prop-types';
-import { withStyles } from '@material-ui/core/styles';
+import { makeStyles } from '@material-ui/core/styles';
import Popper from '@material-ui/core/Popper';
import Typography from '@material-ui/core/Typography';
import Grid from '@material-ui/core/Grid';
@@ -8,87 +7,72 @@ import Button from '@material-ui/core/Button';
import Fade from '@material-ui/core/Fade';
import Paper from '@material-ui/core/Paper';
-const styles = theme => ({
+const useStyles = makeStyles(theme => ({
root: {
width: 500,
},
typography: {
padding: theme.spacing(2),
},
-});
+}));
-class PositionedPopper extends React.Component {
- state = {
- anchorEl: null,
- open: false,
- placement: null,
- };
+export default function PositionedPopper() {
+ const [anchorEl, setAnchorEl] = React.useState(null);
+ const [open, setOpen] = React.useState(false);
+ const [placement, setPlacement] = React.useState();
+ const classes = useStyles();
- handleClick = placement => event => {
- const { currentTarget } = event;
- this.setState(state => ({
- anchorEl: currentTarget,
- open: state.placement !== placement || !state.open,
- placement,
- }));
+ const handleClick = newPlacement => event => {
+ setAnchorEl(event.currentTarget);
+ setOpen(prev => placement !== newPlacement || !prev);
+ setPlacement(newPlacement);
};
- render() {
- const { classes } = this.props;
- const { anchorEl, open, placement } = this.state;
-
- return (
-
-
- {({ TransitionProps }) => (
-
-
- The content of the Popper.
-
-
- )}
-
-
-
- top-start
- top
- top-end
-
+ return (
+
+
+ {({ TransitionProps }) => (
+
+
+ The content of the Popper.
+
+
+ )}
+
+
+
+ top-start
+ top
+ top-end
+
+
+
+
+ left-start
+
+ left
+
+ left-end
-
-
- left-start
-
- left
-
- left-end
+
+
+ right-start
-
-
- right-start
-
-
- right
-
-
- right-end
-
+
+ right
-
-
- bottom-start
- bottom
- bottom-end
+ right-end
-
- );
- }
+
+
+
+ bottom-start
+ bottom
+ bottom-end
+
+
+
+ );
}
-
-PositionedPopper.propTypes = {
- classes: PropTypes.object.isRequired,
-};
-
-export default withStyles(styles)(PositionedPopper);
diff --git a/docs/src/pages/components/popper/PositionedPopper.tsx b/docs/src/pages/components/popper/PositionedPopper.tsx
new file mode 100644
index 00000000000000..7c5c4b9e41fc5c
--- /dev/null
+++ b/docs/src/pages/components/popper/PositionedPopper.tsx
@@ -0,0 +1,82 @@
+import React from 'react';
+import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';
+import Popper, { PopperPlacementType } from '@material-ui/core/Popper';
+import Typography from '@material-ui/core/Typography';
+import Grid from '@material-ui/core/Grid';
+import Button from '@material-ui/core/Button';
+import Fade from '@material-ui/core/Fade';
+import Paper from '@material-ui/core/Paper';
+
+const useStyles = makeStyles((theme: Theme) =>
+ createStyles({
+ root: {
+ width: 500,
+ },
+ typography: {
+ padding: theme.spacing(2),
+ },
+ }),
+);
+
+export default function PositionedPopper() {
+ const [anchorEl, setAnchorEl] = React.useState(null);
+ const [open, setOpen] = React.useState(false);
+ const [placement, setPlacement] = React.useState();
+ const classes = useStyles();
+
+ const handleClick = (newPlacement: PopperPlacementType) => (
+ event: React.MouseEvent,
+ ) => {
+ setAnchorEl(event.currentTarget);
+ setOpen(prev => placement !== newPlacement || !prev);
+ setPlacement(newPlacement);
+ };
+
+ return (
+
+
+ {({ TransitionProps }) => (
+
+
+ The content of the Popper.
+
+
+ )}
+
+
+
+ top-start
+ top
+ top-end
+
+
+
+
+ left-start
+
+ left
+
+ left-end
+
+
+
+ right-start
+
+
+ right
+
+
+ right-end
+
+
+
+
+
+ bottom-start
+ bottom
+ bottom-end
+
+
+
+ );
+}