Skip to content

Commit

Permalink
Add disabled tree item demo
Browse files Browse the repository at this point in the history
  • Loading branch information
joshwooding committed Jul 27, 2020
1 parent ebca368 commit 0a6b1f1
Show file tree
Hide file tree
Showing 6 changed files with 192 additions and 24 deletions.
68 changes: 68 additions & 0 deletions docs/src/pages/components/tree-view/DisabledTreeItems.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import TreeView from '@material-ui/lab/TreeView';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import ChevronRightIcon from '@material-ui/icons/ChevronRight';
import TreeItem from '@material-ui/lab/TreeItem';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Switch from '@material-ui/core/Switch';

const useStyles = makeStyles((theme) => ({
root: {
height: 270,
flexGrow: 1,
maxWidth: 400,
},
actions: {
marginBottom: theme.spacing(1),
}
}));

export default function FileSystemNavigator() {
const classes = useStyles();
const [focusDisabledItems, setFocusDisabledItems] = React.useState(false);
const handleToggle = (event) => {
setFocusDisabledItems(event.target.checked);
}

return (
<div className={classes.root}>
<div className={classes.actions}>
<FormControlLabel
control={
<Switch
checked={focusDisabledItems}
onChange={handleToggle}
name="focusDisabledItems"
/>
}
label="Focus disabled items"
/>
</div>
<TreeView
defaultCollapseIcon={<ExpandMoreIcon />}
defaultExpandIcon={<ChevronRightIcon />}
disabledItemsFocusable={focusDisabledItems}
multiSelect
>
<TreeItem nodeId="1" label="One">
<TreeItem nodeId="2" label="Two" />
<TreeItem nodeId="3" label="Three" />
<TreeItem nodeId="4" label="Four" />
</TreeItem>
<TreeItem nodeId="5" label="Five" disabled>
<TreeItem nodeId="6" label="Six" />
</TreeItem>
<TreeItem nodeId="7" label="Seven">
<TreeItem nodeId="8" label="Eight" />
<TreeItem nodeId="9" label="Nine">
<TreeItem nodeId="10" label="Ten">
<TreeItem nodeId="11" label="Eleven" />
<TreeItem nodeId="12" label="Twelve" />
</TreeItem>
</TreeItem>
</TreeItem>
</TreeView>
</div>
);
}
70 changes: 70 additions & 0 deletions docs/src/pages/components/tree-view/DisabledTreeItems.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import React from 'react';
import { createStyles, makeStyles } from '@material-ui/core/styles';
import TreeView from '@material-ui/lab/TreeView';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import ChevronRightIcon from '@material-ui/icons/ChevronRight';
import TreeItem from '@material-ui/lab/TreeItem';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Switch from '@material-ui/core/Switch';

const useStyles = makeStyles((theme) =>
createStyles({
root: {
height: 270,
flexGrow: 1,
maxWidth: 400,
},
actions: {
marginBottom: theme.spacing(1),
},
}),
);

export default function FileSystemNavigator() {
const classes = useStyles();
const [focusDisabledItems, setFocusDisabledItems] = React.useState(false);
const handleToggle = (event: React.ChangeEvent<HTMLInputElement>) => {
setFocusDisabledItems(event.target.checked);
};

return (
<div className={classes.root}>
<div className={classes.actions}>
<FormControlLabel
control={
<Switch
checked={focusDisabledItems}
onChange={handleToggle}
name="focusDisabledItems"
/>
}
label="Focus disabled items"
/>
</div>
<TreeView
defaultCollapseIcon={<ExpandMoreIcon />}
defaultExpandIcon={<ChevronRightIcon />}
disabledItemsFocusable={focusDisabledItems}
multiSelect
>
<TreeItem nodeId="1" label="One">
<TreeItem nodeId="2" label="Two" />
<TreeItem nodeId="3" label="Three" />
<TreeItem nodeId="4" label="Four" />
</TreeItem>
<TreeItem nodeId="5" label="Five" disabled>
<TreeItem nodeId="6" label="Six" />
</TreeItem>
<TreeItem nodeId="7" label="Seven">
<TreeItem nodeId="8" label="Eight" />
<TreeItem nodeId="9" label="Nine">
<TreeItem nodeId="10" label="Ten">
<TreeItem nodeId="11" label="Eleven" />
<TreeItem nodeId="12" label="Twelve" />
</TreeItem>
</TreeItem>
</TreeItem>
</TreeView>
</div>
);
}
18 changes: 10 additions & 8 deletions docs/src/pages/components/tree-view/FileSystemNavigator.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import { createStyles, makeStyles } from '@material-ui/core/styles';
import TreeView from '@material-ui/lab/TreeView';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import ChevronRightIcon from '@material-ui/icons/ChevronRight';
import TreeItem from '@material-ui/lab/TreeItem';

const useStyles = makeStyles({
root: {
height: 240,
flexGrow: 1,
maxWidth: 400,
},
});
const useStyles = makeStyles(
createStyles({
root: {
height: 240,
flexGrow: 1,
maxWidth: 400,
},
}),
);

export default function FileSystemNavigator() {
const classes = useStyles();
Expand Down
18 changes: 10 additions & 8 deletions docs/src/pages/components/tree-view/MultiSelectTreeView.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import { createStyles, makeStyles } from '@material-ui/core/styles';
import TreeView from '@material-ui/lab/TreeView';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import ChevronRightIcon from '@material-ui/icons/ChevronRight';
import TreeItem from '@material-ui/lab/TreeItem';

const useStyles = makeStyles({
root: {
height: 216,
flexGrow: 1,
maxWidth: 400,
},
});
const useStyles = makeStyles(
createStyles({
root: {
height: 216,
flexGrow: 1,
maxWidth: 400,
},
}),
);

export default function MultiSelectTreeView() {
const classes = useStyles();
Expand Down
18 changes: 10 additions & 8 deletions docs/src/pages/components/tree-view/RecursiveTreeView.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import { createStyles, makeStyles } from '@material-ui/core/styles';
import TreeView from '@material-ui/lab/TreeView';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import ChevronRightIcon from '@material-ui/icons/ChevronRight';
Expand Down Expand Up @@ -32,13 +32,15 @@ const data: RenderTree = {
],
};

const useStyles = makeStyles({
root: {
height: 110,
flexGrow: 1,
maxWidth: 400,
},
});
const useStyles = makeStyles(
createStyles({
root: {
height: 110,
flexGrow: 1,
maxWidth: 400,
},
}),
);

export default function RecursiveTreeView() {
const classes = useStyles();
Expand Down
24 changes: 24 additions & 0 deletions docs/src/pages/components/tree-view/tree-view.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,30 @@ const data = {

{{"demo": "pages/components/tree-view/GmailTreeView.js"}}

## Disabled tree items

{{"demo": "pages/components/tree-view/DisabledTreeItems.js"}}

The behaviour of disabled tree items depends on the `disabledItemsFocusable` prop.

If it is false:

- Mouse clicks will not focus disabled items.
- Arrow keys will focus disabled items and, the next non-disabled item will be focused.
- Typing the first character of a disabled item's label will not focus the item.
- Mouse or keyboard interaction will not expand/collapse disabled items.
- Mouse or keyboard interaction will not select disabled items.
- Shift + arrow keys will skip disabled items and, the next non-disabled item will be selected.

If it is true:

- Mouse clicks will not focus disabled items.
- Arrow keys will focus disabled items.
- Typing the first character of a disabled item's label will focus the item.
- Mouse or keyboard interaction will not expand/collapse disabled items.
- Mouse or keyboard interaction will not select disabled items.
- Shift + arrow keys will not skip disabled items but, the disabled item will not be selected.

## Accessibility

(WAI-ARIA: https://www.w3.org/TR/wai-aria-practices/#TreeView)
Expand Down

0 comments on commit 0a6b1f1

Please sign in to comment.