diff --git a/docs/src/pages/components/toggle-button/ToggleButtonNotEmpty.js b/docs/src/pages/components/toggle-button/ToggleButtonNotEmpty.js new file mode 100644 index 00000000000000..2e89be3feb47d1 --- /dev/null +++ b/docs/src/pages/components/toggle-button/ToggleButtonNotEmpty.js @@ -0,0 +1,80 @@ +import React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import FormatAlignLeftIcon from '@material-ui/icons/FormatAlignLeft'; +import FormatAlignCenterIcon from '@material-ui/icons/FormatAlignCenter'; +import FormatAlignRightIcon from '@material-ui/icons/FormatAlignRight'; +import FormatAlignJustifyIcon from '@material-ui/icons/FormatAlignJustify'; +import LaptopIcon from '@material-ui/icons/Laptop'; +import TvIcon from '@material-ui/icons/Tv'; +import PhoneAndroidIcon from '@material-ui/icons/PhoneAndroid'; +import Grid from '@material-ui/core/Grid'; +import ToggleButton from '@material-ui/lab/ToggleButton'; +import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; + +const useStyles = makeStyles(theme => ({ + toggleContainer: { + margin: theme.spacing(2, 0), + }, +})); + +export default function ToggleButtonNotEmpty() { + const [alignment, setAlignment] = React.useState('left'); + const [formats, setFormats] = React.useState(() => ['phone']); + + const handleFormat = (event, newFormats) => { + if (newFormats.length) { + setFormats(newFormats); + } + }; + + const handleAlignment = (event, newAlignment) => { + if (newAlignment !== null) { + setAlignment(newAlignment); + } + }; + + const classes = useStyles(); + + return ( + + +
+ + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + +
+
+
+ ); +} diff --git a/docs/src/pages/components/toggle-button/ToggleButtonNotEmpty.tsx b/docs/src/pages/components/toggle-button/ToggleButtonNotEmpty.tsx new file mode 100644 index 00000000000000..84d4f742cfef01 --- /dev/null +++ b/docs/src/pages/components/toggle-button/ToggleButtonNotEmpty.tsx @@ -0,0 +1,80 @@ +import React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import FormatAlignLeftIcon from '@material-ui/icons/FormatAlignLeft'; +import FormatAlignCenterIcon from '@material-ui/icons/FormatAlignCenter'; +import FormatAlignRightIcon from '@material-ui/icons/FormatAlignRight'; +import FormatAlignJustifyIcon from '@material-ui/icons/FormatAlignJustify'; +import LaptopIcon from '@material-ui/icons/Laptop'; +import TvIcon from '@material-ui/icons/Tv'; +import PhoneAndroidIcon from '@material-ui/icons/PhoneAndroid'; +import Grid from '@material-ui/core/Grid'; +import ToggleButton from '@material-ui/lab/ToggleButton'; +import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; + +const useStyles = makeStyles(theme => ({ + toggleContainer: { + margin: theme.spacing(2, 0), + }, +})); + +export default function ToggleButtonNotEmpty() { + const [alignment, setAlignment] = React.useState('left'); + const [formats, setFormats] = React.useState(() => ['phone']); + + const handleFormat = (event: React.MouseEvent, newFormats: string[]) => { + if (newFormats.length) { + setFormats(newFormats); + } + }; + + const handleAlignment = (event: React.MouseEvent, newAlignment: string | null) => { + if (newAlignment !== null) { + setAlignment(newAlignment); + } + }; + + const classes = useStyles(); + + return ( + + +
+ + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + +
+
+
+ ); +} diff --git a/docs/src/pages/components/toggle-button/ToggleButtons.tsx b/docs/src/pages/components/toggle-button/ToggleButtons.tsx index 7aac56329b171c..909552f11abd2b 100644 --- a/docs/src/pages/components/toggle-button/ToggleButtons.tsx +++ b/docs/src/pages/components/toggle-button/ToggleButtons.tsx @@ -21,14 +21,14 @@ const useStyles = makeStyles(theme => ({ })); export default function ToggleButtons() { - const [alignment, setAlignment] = React.useState('left'); + const [alignment, setAlignment] = React.useState('left'); const [formats, setFormats] = React.useState(() => ['bold']); const handleFormat = (event: React.MouseEvent, newFormats: string[]) => { setFormats(newFormats); }; - const handleAlignment = (event: React.MouseEvent, newAlignment: string) => { + const handleAlignment = (event: React.MouseEvent, newAlignment: string | null) => { setAlignment(newAlignment); }; diff --git a/docs/src/pages/components/toggle-button/toggle-button.md b/docs/src/pages/components/toggle-button/toggle-button.md index 669b1ad9635a0e..264f54a44b8e34 100644 --- a/docs/src/pages/components/toggle-button/toggle-button.md +++ b/docs/src/pages/components/toggle-button/toggle-button.md @@ -21,6 +21,27 @@ Fancy larger or smaller buttons? Use the `size` property. {{"demo": "pages/components/toggle-button/ToggleButtonSizes.js"}} +## Enforce value set + +If you want to enforce at least one button to be active, you can adapt your handleChange +function. + +```jsx +const handleFormat = (event, newFormats) => { + if (newFormats.length) { + setFormats(newFormats); + } +}; + +const handleAlignment = (event, newAlignment) => { + if (newAlignment !== null) { + setAlignment(newAlignment); + } +}; +``` + +{{"demo": "pages/components/toggle-button/ToggleButtonNotEmpty.js"}} + ## Standalone toggle button {{"demo": "pages/components/toggle-button/StandaloneToggleButton.js"}}