Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TreeView] Add onIconClick and onLabelClick #20657

Merged
merged 4 commits into from
Apr 27, 2020
Merged

[TreeView] Add onIconClick and onLabelClick #20657

merged 4 commits into from
Apr 27, 2020

Conversation

tonyhallett
Copy link
Contributor

@tonyhallett tonyhallett commented Apr 20, 2020

This is a replacement for #20609 and #20087 and provides for issue #19953

Note:

I have also prevented an unnecessary call to onNodeToggle in expandAllSiblings
I have reversed the order onNodeToggle and setExpandedState in expandAllSiblings to be consistent with toggleExpansion

Edit @eps1lon: Closes #19953

@mui-pr-bot
Copy link

mui-pr-bot commented Apr 20, 2020

Details of bundle changes.

Comparing: cbae0f8...1fa7aef

Details of page changes
bundle Size Change Size Gzip Change Gzip
/components/popper ▲ +100 B (+0.44% ) 23 kB -- -1 B
/api-docs/tree-item ▲ +90 B (+5.03% ) 1.88 kB -- -1 B
/components/pickers ▼ -10 B (-0.17% ) 6 kB -- -1 B
/discover-more/team ▲ +10 B (+0.15% ) 6.73 kB -- -1 B
/getting-started/templates ▲ +10 B (+0.11% ) 8.72 kB -- -1 B
/getting-started/templates/blog ▲ +10 B (+0.13% ) 7.44 kB -- -1 B
/getting-started/templates/pricing ▲ +10 B (+0.13% ) 7.8 kB -- -1 B
/getting-started/templates/sign-in-side ▲ +10 B (+0.11% ) 9.29 kB -- -1 B
/getting-started/templates/sign-in ▲ +10 B (+0.11% ) 9.53 kB -- -1 B
/getting-started/templates/sign-up ▲ +10 B (+0.10% ) 9.64 kB -- -1 B
/_app -- 36.9 kB -- -1 B
/api-docs/alert-title -- 1.4 kB -- -1 B
/api-docs/alert -- 2.4 kB -- -1 B
/api-docs/app-bar -- 1.94 kB -- -1 B
/api-docs/autocomplete -- 4.55 kB -- -1 B
/api-docs/avatar-group -- 1.52 kB -- -1 B
/api-docs/avatar -- 2.09 kB -- -1 B
/api-docs/backdrop -- 1.72 kB -- -1 B
/api-docs/badge -- 2.13 kB -- -1 B
/api-docs/bottom-navigation-action -- 1.82 kB -- -1 B
/api-docs/bottom-navigation -- 1.7 kB -- -1 B
/api-docs/breadcrumbs -- 1.85 kB -- -1 B
/api-docs/button-base -- 2.34 kB -- -1 B
/api-docs/button-group -- 2.73 kB -- -1 B
/api-docs/button -- 3.44 kB -- -1 B
/api-docs/card-action-area -- 1.57 kB -- -1 B
/api-docs/card-actions -- 1.48 kB -- -1 B
/api-docs/card-content -- 1.44 kB -- -1 B
/api-docs/card-header -- 1.78 kB -- -1 B
/api-docs/card-media -- 1.68 kB -- -1 B
/api-docs/card -- 1.5 kB -- -1 B
/api-docs/checkbox -- 2.3 kB -- -1 B
/api-docs/chip -- 2.46 kB -- -1 B
/api-docs/circular-progress -- 2.07 kB -- -1 B
/api-docs/click-away-listener -- 1.37 kB -- -1 B
/api-docs/collapse -- 2.02 kB -- -1 B
/api-docs/container -- 1.98 kB -- -1 B
/api-docs/css-baseline -- 1.57 kB -- -1 B
/api-docs/dialog-actions -- 1.47 kB -- -1 B
/api-docs/dialog-content-text -- 1.49 kB -- -1 B
/api-docs/dialog-content -- 1.45 kB -- -1 B
/api-docs/dialog-title -- 1.49 kB -- -1 B
/api-docs/dialog -- 2.73 kB -- -1 B
/api-docs/divider -- 1.8 kB -- -1 B
/api-docs/drawer -- 2.87 kB -- -1 B
/api-docs/expansion-panel-actions -- 1.49 kB -- -1 B
/api-docs/expansion-panel-details -- 1.41 kB -- -1 B
/api-docs/expansion-panel-summary -- 1.71 kB -- -1 B
/api-docs/expansion-panel -- 1.97 kB -- -1 B
/api-docs/fab -- 2.1 kB -- -1 B
/api-docs/fade -- 1.39 kB -- -1 B
/api-docs/filled-input -- 2.88 kB -- -1 B
/api-docs/form-control-label -- 1.98 kB -- -1 B
/api-docs/form-control -- 2.36 kB -- -1 B
/api-docs/form-group -- 1.56 kB -- -1 B
/api-docs/form-helper-text -- 1.91 kB -- -1 B
/api-docs/form-label -- 1.84 kB -- -1 B
/api-docs/grid-list-tile-bar -- 1.79 kB -- -1 B
/api-docs/grid-list-tile -- 1.72 kB -- -1 B
/api-docs/grid-list -- 1.62 kB -- -1 B
/api-docs/grid -- 2.56 kB -- -1 B
/api-docs/grow -- 1.44 kB -- -1 B
/api-docs/hidden -- 1.53 kB -- -1 B
/api-docs/icon-button -- 2.1 kB -- -1 B
/api-docs/icon -- 3.19 kB -- -1 B
/api-docs/input-adornment -- 1.93 kB -- -1 B
/api-docs/input-base -- 2.96 kB -- -1 B
/api-docs/input-label -- 2.07 kB -- -1 B
/api-docs/input -- 3.53 kB -- -1 B
/api-docs/linear-progress -- 2.04 kB -- -1 B
/api-docs/link -- 1.93 kB -- -1 B
/api-docs/list-item-avatar -- 1.5 kB -- -1 B
/api-docs/list-item-icon -- 1.51 kB -- -1 B
/api-docs/list-item-secondary-action -- 1.47 kB -- -1 B
/api-docs/list-item-text -- 1.79 kB -- -1 B
/api-docs/list-item -- 2.26 kB -- -1 B
/api-docs/list-subheader -- 1.77 kB -- -1 B
/api-docs/list -- 2.53 kB -- -1 B
/api-docs/menu-item -- 1.74 kB -- -1 B
/api-docs/menu-list -- 1.57 kB -- -1 B
/api-docs/menu -- 2.41 kB -- -1 B
/api-docs/mobile-stepper -- 1.93 kB -- -1 B
/api-docs/modal -- 2.42 kB -- -1 B
/api-docs/native-select -- 2.09 kB -- -1 B
/api-docs/no-ssr -- 1.3 kB -- -1 B
/api-docs/outlined-input -- 2.98 kB -- -1 B
/api-docs/pagination-item -- 1.98 kB -- -1 B
/api-docs/pagination -- 3.23 kB -- -1 B
/api-docs/paper -- 1.87 kB -- -1 B
/api-docs/popover -- 2.68 kB -- -1 B
/api-docs/popper -- 1.91 kB -- -1 B
/api-docs/portal -- 1.34 kB -- -1 B
/api-docs/radio-group -- 1.44 kB -- -1 B
/api-docs/radio -- 2.12 kB -- -1 B
/api-docs/rating -- 2.49 kB -- -1 B
/api-docs/root-ref -- 1.41 kB -- -1 B
/api-docs/scoped-css-baseline -- 1.41 kB -- -1 B
/api-docs/select -- 3.16 kB -- -1 B
/api-docs/skeleton -- 1.78 kB -- -1 B
/api-docs/slide -- 1.54 kB -- -1 B
/api-docs/slider -- 3.11 kB -- -1 B
/api-docs/snackbar-content -- 1.61 kB -- -1 B
/api-docs/snackbar -- 2.72 kB -- -1 B
/api-docs/speed-dial-action -- 2.04 kB -- -1 B
/api-docs/speed-dial-icon -- 1.55 kB -- -1 B
/api-docs/speed-dial -- 2.31 kB -- -1 B
/api-docs/step-button -- 1.63 kB -- -1 B
/api-docs/step-connector -- 1.54 kB -- -1 B
/api-docs/step-content -- 1.72 kB -- -1 B
/api-docs/step-icon -- 1.56 kB -- -1 B
/api-docs/step-label -- 1.89 kB -- -1 B
/api-docs/step -- 1.64 kB -- -1 B
/api-docs/stepper -- 2.3 kB -- -1 B
/api-docs/svg-icon -- 2.25 kB -- -1 B
/api-docs/swipeable-drawer -- 2 kB -- -1 B
/api-docs/switch -- 2.46 kB -- -1 B
/api-docs/tab -- 1.99 kB -- -1 B
/api-docs/table-body -- 1.46 kB -- -1 B
/api-docs/table-cell -- 2.13 kB -- -1 B
/api-docs/table-container -- 1.48 kB -- -1 B
/api-docs/table-footer -- 1.47 kB -- -1 B
/api-docs/table-head -- 1.46 kB -- -1 B
/api-docs/table-pagination -- 2.45 kB -- -1 B
/api-docs/table-row -- 1.69 kB -- -1 B
/api-docs/table-sort-label -- 1.83 kB -- -1 B
/api-docs/table -- 1.68 kB -- -1 B
/api-docs/tabs -- 2.53 kB -- -1 B
/api-docs/text-field -- 3.18 kB -- -1 B
/api-docs/textarea-autosize -- 1.13 kB -- -1 B
/api-docs/toggle-button-group -- 1.86 kB -- -1 B
/api-docs/toggle-button -- 1.81 kB -- -1 B
/api-docs/toolbar -- 1.65 kB -- -1 B
/api-docs/tooltip -- 2.55 kB -- -1 B
/api-docs/tree-view -- 1.91 kB -- -1 B
/api-docs/typography -- 2.59 kB -- -1 B
/api-docs/zoom -- 1.41 kB -- -1 B
/blog/2019-developer-survey-results -- 6.36 kB -- -1 B
/blog/2019 -- 4.24 kB -- -1 B
/blog/2020-introducing-sketch -- 3.49 kB -- -1 B
/blog/2020-q1-update -- 4.33 kB -- -1 B
/blog/april-2019-update -- 3.13 kB -- -1 B
/blog/august-2019-update -- 2.24 kB -- -1 B
/blog/december-2019-update -- 2.37 kB -- -1 B
/blog/july-2019-update -- 2.13 kB -- -1 B
/blog/june-2019-update -- 2.01 kB -- -1 B
/blog/march-2019-update -- 2.54 kB -- -1 B
/blog/material-ui-v1-is-out -- 6.67 kB -- -1 B
/blog/material-ui-v4-is-out -- 9.69 kB -- -1 B
/blog/may-2019-update -- 2.35 kB -- -1 B
/blog/november-2019-update -- 2.75 kB -- -1 B
/blog/october-2019-update -- 2.5 kB -- -1 B
/blog/september-2019-update -- 2.68 kB -- -1 B
/company/about -- 1.74 kB -- -1 B
/company/contact -- 1.33 kB -- -1 B
/company/jobs -- 1.35 kB -- -1 B
/components/about-the-lab -- 6.09 kB -- -1 B
/components/alert -- 12.5 kB -- -1 B
/components/app-bar -- 30 kB -- -1 B
/components/autocomplete -- 101 kB -- -1 B
/components/avatars -- 8.77 kB -- -1 B
/components/backdrop -- 3.57 kB -- -1 B
/components/badges -- 15.4 kB -- -1 B
/components/bottom-navigation -- 6.27 kB -- -1 B
/components/box -- 8.05 kB -- -1 B
/components/breadcrumbs -- 14.7 kB -- -1 B
/components/button-group -- 7.45 kB -- -1 B
/components/buttons -- 26.2 kB -- -1 B
/components/cards -- 17.2 kB -- -1 B
/components/checkboxes -- 16.3 kB -- -1 B
/components/chips -- 21.8 kB -- -1 B
/components/click-away-listener -- 4.39 kB -- -1 B
/components/container -- 3.92 kB -- -1 B
/components/css-baseline -- 6.76 kB -- -1 B
/components/dialogs -- 42.8 kB -- -1 B
/components/dividers -- 12.7 kB -- -1 B
/components/drawers -- 31.5 kB -- -1 B
/components/expansion-panels -- 20.4 kB -- -1 B
/components/floating-action-button -- 10.4 kB -- -1 B
/components/grid-list -- 12.1 kB -- -1 B
/components/grid -- 32.4 kB -- -1 B
/components/hidden -- 10.6 kB -- -1 B
/components/icons -- 24.6 kB -- -1 B
/components/links -- 6.91 kB -- -1 B
/components/lists -- 26.5 kB -- -1 B
/components/material-icons -- 729 kB -- -1 B
/components/menus -- 24.9 kB -- -1 B
/components/modal -- 11.9 kB -- -1 B
/components/no-ssr -- 5.11 kB -- -1 B
/components/pagination -- 9.45 kB -- -1 B
/components/paper -- 3.49 kB -- -1 B
/components/popover -- 17.4 kB -- -1 B
/components/portal -- 2.94 kB -- -1 B
/components/progress -- 21 kB -- -1 B
/components/radio-buttons -- 14.7 kB -- -1 B
/components/rating -- 10.8 kB -- -1 B
/components/selects -- 30.8 kB -- -1 B
/components/skeleton -- 10.1 kB -- -1 B
/components/slider -- 15.3 kB -- -1 B
/components/snackbars -- 28.3 kB -- -1 B
/components/speed-dial -- 14.4 kB -- -1 B
/components/steppers -- 36.5 kB -- -1 B
/components/switches -- 16.1 kB -- -1 B
/components/tables -- 139 kB -- -1 B
/components/tabs -- 19.8 kB -- -1 B
/components/text-fields -- 54.2 kB -- -1 B
/components/textarea-autosize -- 2.89 kB -- -1 B
/components/toggle-button -- 10.3 kB -- -1 B
/components/tooltips -- 16.4 kB -- -1 B
/components/transfer-list -- 9.68 kB -- -1 B
/components/transitions -- 11.2 kB -- -1 B
/components/tree-view -- 11 kB -- -1 B
/components/typography -- 9.37 kB -- -1 B
/components/use-media-query -- 12.7 kB -- -1 B
/customization/breakpoints -- 15.4 kB -- -1 B
/customization/color -- 20.8 kB -- -1 B
/customization/components -- 38.1 kB -- -1 B
/customization/default-theme -- 8.65 kB -- -1 B
/customization/density -- 9.75 kB -- -1 B
/customization/globals -- 4.72 kB -- -1 B
/customization/palette -- 12.4 kB -- -1 B
/customization/spacing -- 2.57 kB -- -1 B
/customization/theming -- 16.7 kB -- -1 B
/customization/typography -- 11.5 kB -- -1 B
/customization/z-index -- 3.09 kB -- -1 B
/discover-more/backers -- 2.94 kB -- -1 B
/discover-more/changelog -- 1.44 kB -- -1 B
/discover-more/languages -- 3.43 kB -- -1 B
/discover-more/related-projects -- 7.41 kB -- -1 B
/discover-more/roadmap -- 3.72 kB -- -1 B
/discover-more/showcase -- 13.4 kB -- -1 B
/discover-more/vision -- 7.1 kB -- -1 B
/getting-started/example-projects -- 6.18 kB -- -1 B
/getting-started/faq -- 33.8 kB -- -1 B
/getting-started/installation -- 7.68 kB -- -1 B
/getting-started/learn -- 8.52 kB -- -1 B
/getting-started/support -- 7.94 kB -- -1 B
/getting-started/supported-components -- 6.21 kB -- -1 B
/getting-started/supported-platforms -- 5.7 kB -- -1 B
/getting-started/templates/album -- 5.58 kB -- -1 B
/getting-started/templates/checkout -- 11.2 kB -- -1 B
/getting-started/templates/dashboard -- 8.86 kB -- -1 B
/getting-started/templates/sticky-footer -- 1.54 kB -- -1 B
/getting-started/usage -- 9.49 kB -- -1 B
/guides/api -- 15.8 kB -- -1 B
/guides/composition -- 14.3 kB -- -1 B
/guides/flow -- 2.26 kB -- -1 B
/guides/interoperability -- 15.7 kB -- -1 B
/guides/localization -- 10.5 kB -- -1 B
/guides/migration-v0x -- 7.29 kB -- -1 B
/guides/migration-v3 -- 19 kB -- -1 B
/guides/minimizing-bundle-size -- 6.84 kB -- -1 B
/guides/responsive-ui -- 4.27 kB -- -1 B
/guides/right-to-left -- 6.88 kB -- -1 B
/guides/server-rendering -- 8.3 kB -- -1 B
/guides/testing -- 8.49 kB -- -1 B
/guides/typescript -- 13.4 kB -- -1 B
/performance/table-component -- 1.44 kB -- -1 B
/performance/table-emotion -- 8.49 kB -- -1 B
/performance/table-hook -- 2.23 kB -- -1 B
/performance/table-mui -- 4.48 kB -- -1 B
/performance/table-raw -- 613 B -- -1 B
/performance/table-styled-components -- 2.6 kB -- -1 B
/premium-themes/onepirate -- 7.27 kB -- -1 B
/premium-themes/onepirate/forgot-password -- 1.01 kB -- -1 B
/premium-themes/onepirate/privacy -- 4.43 kB -- -1 B
/premium-themes/onepirate/sign-in -- 1.07 kB -- -1 B
/premium-themes/onepirate/sign-up -- 1.12 kB -- -1 B
/premium-themes/onepirate/terms -- 11.8 kB -- -1 B
/premium-themes/paperbase -- 8.95 kB -- -1 B
/styles/advanced -- 32.1 kB -- -1 B
/styles/api -- 16.8 kB -- -1 B
/styles/basics -- 16.4 kB -- -1 B
/system/api -- 5.96 kB -- -1 B
/system/basics -- 27.2 kB -- -1 B
/system/borders -- 4.1 kB -- -1 B
/system/display -- 6.54 kB -- -1 B
/system/flexbox -- 5.85 kB -- -1 B
/system/palette -- 4.35 kB -- -1 B
/system/positions -- 2.53 kB -- -1 B
/system/shadows -- 3.64 kB -- -1 B
/system/sizing -- 3.53 kB -- -1 B
/system/spacing -- 6.01 kB -- -1 B
/system/typography -- 4.41 kB -- -1 B
/versions -- 23.7 kB -- -1 B
docs:chunk:shared -- 61.6 kB -- -1 B
docs:shared:chunk/commons -- 5.99 kB -- -1 B
docs:shared:chunk/framework -- 42.3 kB -- -1 B
docs:shared:runtime/main -- 6.78 kB -- -1 B
docs:shared:runtime/webpack -- 1.24 kB -- -1 B
bundle Size Change Size Gzip Change Gzip
@material-ui/lab ▲ +124 B (+0.06% ) 203 kB ▲ +41 B (+0.07% ) 60.3 kB
TreeItem ▲ +110 B (+0.14% ) 80.1 kB ▲ +48 B (+0.19% ) 25.5 kB
TreeView ▲ +14 B (+0.02% ) 73 kB ▲ +8 B (+0.03% ) 23 kB
@material-ui/core -- 372 kB -- 102 kB
@material-ui/core[umd] -- 327 kB -- 94.2 kB
@material-ui/styles -- 52 kB -- 15.6 kB
@material-ui/system -- 17.2 kB -- 4.52 kB
Alert -- 87.6 kB -- 27.8 kB
AlertTitle -- 68.9 kB -- 21.7 kB
AppBar -- 68.7 kB -- 21.6 kB
Autocomplete -- 136 kB -- 42.8 kB
Avatar -- 69.9 kB -- 21.9 kB
AvatarGroup -- 70.9 kB -- 22.5 kB
Backdrop -- 72.7 kB -- 22.5 kB
Badge -- 70 kB -- 21.9 kB
BottomNavigation -- 67.1 kB -- 21.1 kB
BottomNavigationAction -- 79.8 kB -- 25.4 kB
Box -- 73.6 kB -- 22.4 kB
Breadcrumbs -- 84.8 kB -- 26.9 kB
Button -- 84 kB -- 25.8 kB
ButtonBase -- 78.3 kB -- 24.6 kB
ButtonGroup -- 87.7 kB -- 27.1 kB
Card -- 67.6 kB -- 21.2 kB
CardActionArea -- 79.4 kB -- 25.2 kB
CardActions -- 66.8 kB -- 21 kB
CardContent -- 66.7 kB -- 20.9 kB
CardHeader -- 69.8 kB -- 22 kB
CardMedia -- 67.1 kB -- 21.1 kB
Checkbox -- 86.5 kB -- 27.4 kB
Chip -- 87 kB -- 26.8 kB
CircularProgress -- 68.8 kB -- 21.7 kB
ClickAwayListener -- 4.16 kB -- 1.66 kB
Collapse -- 77.3 kB -- 22.8 kB
colorManipulator -- 3.88 kB -- 1.52 kB
Container -- 67.9 kB -- 21.3 kB
CssBaseline -- 66.7 kB -- 21 kB
Dialog -- 87.7 kB -- 27.5 kB
DialogActions -- 66.8 kB -- 21 kB
DialogContent -- 66.9 kB -- 21 kB
DialogContentText -- 68.8 kB -- 21.6 kB
DialogTitle -- 69 kB -- 21.7 kB
Divider -- 67.4 kB -- 21.2 kB
docs:/ -- 11.7 kB -- -1 B
docs:/_app -- 36.9 kB -- -1 B
Drawer -- 89.6 kB -- 27.3 kB
ExpansionPanel -- 76.4 kB -- 24.1 kB
ExpansionPanelActions -- 66.8 kB -- 21 kB
ExpansionPanelDetails -- 66.7 kB -- 20.9 kB
ExpansionPanelSummary -- 82.4 kB -- 26.2 kB
Fab -- 81.1 kB -- 25.4 kB
Fade -- 32.6 kB -- 9.83 kB
FilledInput -- 78.3 kB -- 24.4 kB
FormControl -- 69.1 kB -- 21.6 kB
FormControlLabel -- 70.2 kB -- 22.1 kB
FormGroup -- 66.7 kB -- 20.8 kB
FormHelperText -- 68 kB -- 21.2 kB
FormLabel -- 68.2 kB -- 21.2 kB
Grid -- 69.8 kB -- 22 kB
GridList -- 67.2 kB -- 21.2 kB
GridListTile -- 68.4 kB -- 21.5 kB
GridListTileBar -- 67.9 kB -- 21.3 kB
Grow -- 33.2 kB -- 10.1 kB
Hidden -- 70.7 kB -- 22.3 kB
Icon -- 67.5 kB -- 21.2 kB
IconButton -- 80.4 kB -- 25.2 kB
Input -- 77.3 kB -- 24.2 kB
InputAdornment -- 69.8 kB -- 22.1 kB
InputBase -- 75.4 kB -- 23.7 kB
InputLabel -- 70 kB -- 21.7 kB
LinearProgress -- 70 kB -- 21.7 kB
Link -- 71.3 kB -- 22.6 kB
List -- 67 kB -- 20.9 kB
ListItem -- 81.4 kB -- 25.6 kB
ListItemAvatar -- 66.8 kB -- 21 kB
ListItemIcon -- 66.9 kB -- 21 kB
ListItemSecondaryAction -- 66.7 kB -- 21 kB
ListItemText -- 69.7 kB -- 22 kB
ListSubheader -- 67.5 kB -- 21.3 kB
Menu -- 93.3 kB -- 28.8 kB
MenuItem -- 82.5 kB -- 25.9 kB
MenuList -- 70.7 kB -- 22.2 kB
MobileStepper -- 72.5 kB -- 22.8 kB
Modal -- 15 kB -- 5.23 kB
NativeSelect -- 81.6 kB -- 25.9 kB
NoSsr -- 2.18 kB -- 1.03 kB
OutlinedInput -- 79.3 kB -- 24.8 kB
Pagination -- 88.8 kB -- 27.5 kB
PaginationItem -- 85.1 kB -- 26.3 kB
Paper -- 67.1 kB -- 20.9 kB
Popover -- 87.7 kB -- 27.2 kB
Popper -- 28.7 kB -- 10.3 kB
Portal -- 2.87 kB -- 1.29 kB
Radio -- 87.5 kB -- 27.8 kB
RadioGroup -- 68.6 kB -- 21.3 kB
Rating -- 75.3 kB -- 24.3 kB
RootRef -- 4.62 kB -- 1.76 kB
ScopedCssBaseline -- 67.5 kB -- 21.2 kB
Select -- 120 kB -- 35.9 kB
Skeleton -- 67.7 kB -- 21.4 kB
Slide -- 34.6 kB -- 10.4 kB
Slider -- 80.6 kB -- 25.8 kB
Snackbar -- 80.4 kB -- 25.3 kB
SnackbarContent -- 68.2 kB -- 21.3 kB
SpeedDial -- 90.5 kB -- 28.8 kB
SpeedDialAction -- 122 kB -- 38.9 kB
SpeedDialIcon -- 69.3 kB -- 21.8 kB
Step -- 67.4 kB -- 21.2 kB
StepButton -- 86.6 kB -- 27.4 kB
StepConnector -- 67.4 kB -- 21.3 kB
StepContent -- 73.9 kB -- 23.2 kB
StepIcon -- 69.3 kB -- 21.6 kB
StepLabel -- 73.3 kB -- 22.7 kB
Stepper -- 69.6 kB -- 22 kB
styles/createMuiTheme -- 22.2 kB -- 7.71 kB
SvgIcon -- 67.7 kB -- 21.2 kB
SwipeableDrawer -- 97 kB -- 30.5 kB
Switch -- 85.7 kB -- 27 kB
Tab -- 80.6 kB -- 25.7 kB
Table -- 67.3 kB -- 21.2 kB
TableBody -- 66.8 kB -- 21 kB
TableCell -- 68.8 kB -- 21.7 kB
TableContainer -- 66.7 kB -- 20.9 kB
TableFooter -- 66.9 kB -- 21 kB
TableHead -- 66.8 kB -- 21 kB
TablePagination -- 147 kB -- 43.2 kB
TableRow -- 67.2 kB -- 21.1 kB
TableSortLabel -- 81.7 kB -- 26 kB
Tabs -- 89.6 kB -- 28.7 kB
TextareaAutosize -- 5.23 kB -- 2.19 kB
TextField -- 129 kB -- 38 kB
ToggleButton -- 80.4 kB -- 25.6 kB
ToggleButtonGroup -- 67.9 kB -- 21.4 kB
Toolbar -- 67 kB -- 21.1 kB
Tooltip -- 106 kB -- 33.7 kB
Typography -- 68.3 kB -- 21.4 kB
useAutocomplete -- 15 kB -- 5.26 kB
useMediaQuery -- 2.56 kB -- 1.06 kB
useScrollTrigger -- 2.66 kB -- 1.08 kB
Zoom -- 32.6 kB -- 9.82 kB

Generated by 🚫 dangerJS against 1fa7aef

@oliviertassinari oliviertassinari added the component: tree view TreeView, TreeItem. This is the name of the generic UI component, not the React module! label Apr 20, 2020
@isrsen1
Copy link

isrsen1 commented Apr 21, 2020

@tonyhallett is it possible to use this already?

@tonyhallett tonyhallett changed the title Treeview oniconclick onlabelclick [TreeView] oniconclick onlabelclick Apr 21, 2020
@tonyhallett
Copy link
Contributor Author

@isren1 you could fork and merge these changes in. I am just a contributor so we will have to wait if this is accepted.

@oliviertassinari
Copy link
Member

oliviertassinari commented Apr 21, 2020

@isrsen1 You can use the version published by codesandbox-ci (check the status details).

Copy link
Member

@eps1lon eps1lon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great. Just some minor nitpicks left.

packages/material-ui-lab/src/TreeView/TreeView.js Outdated Show resolved Hide resolved
packages/material-ui-lab/src/TreeView/TreeView.test.js Outdated Show resolved Hide resolved
packages/material-ui-lab/src/TreeView/TreeView.test.js Outdated Show resolved Hide resolved
packages/material-ui-lab/src/TreeItem/TreeItem.js Outdated Show resolved Hide resolved
packages/material-ui-lab/src/TreeItem/TreeItem.js Outdated Show resolved Hide resolved
@eps1lon eps1lon added the new feature New feature or request label Apr 22, 2020
@eps1lon eps1lon changed the title [TreeView] oniconclick onlabelclick [TreeView] Add onIconClick and onLabelClick Apr 22, 2020
@Rony-Kaseyani
Copy link

Thank you everyone for working on this...

@eps1lon eps1lon merged commit 3cd277d into mui:master Apr 27, 2020
@eps1lon
Copy link
Member

eps1lon commented Apr 27, 2020

@tonyhallett Thanks!

@Rony-Kaseyani
Copy link

@tonyhallett is there sample code on how to incorporate these changes? Thanks!

@tonyhallett
Copy link
Contributor Author

@Rony-Kaseyani no sample code currently. Create a wrapper treeitem and prevent default in the appropriate handler. For instance TreeItemClickOnlyExpansion with boolean prop iconExpands. Pass through both handlers and other props. Prevent default in onLabelClick if iconExpands is true and prevent default in onIconClick if iconExpands is false. Default iconExpands to true if this is your preferred choice.

@zwang1208
Copy link

zwang1208 commented May 5, 2020

hi @tonyhallett Is there a way to prevent onNodeSelect in onIconClick? thanks

@tonyhallett
Copy link
Contributor Author

@zwang1208 the click event is passed to onNodeSelect so you can check defaultPrevented and prevent the selection

@NiroSenor
Copy link

@tonyhallett

the click event is passed to onNodeSelect so you can check defaultPrevented and prevent the selection

Sorry I'm new to coding. How would you code this within a TreeItem?

@NiroSenor
Copy link

Is there a way to prevent onNodeSelect in onIconClick? thanks

Hello @zwang1208 did you manage to solve this?

@zwang1208
Copy link

zwang1208 commented May 13, 2020

@NiroSenor I end up using a variable to control.
let selectingNode = false and inside onLabelClick call preventDefault and set selectingNode=true, inside onNodeSelect add if(!selectingNode) return at the beginning. and inside onnodeToggle add if(!selectingNode){ doing something.... and selectingNode = false}

@NiroSenor
Copy link

Hello @zwang1208,
Thank you for your response. Are you implementing this inside of both the TreeView and TreeItem components. Do you mind sharing your code snippet?

For example how would you prevent onNodeSelect in onIconClick below?

`

      <TreeView
        className={classes.root}
        defaultCollapseIcon={<ExpandMoreIcon />}
        defaultExpandIcon={<ChevronRightIcon />}
        onNodeSelect={}
        onNodeToggle={}
      >
        <TreeItem
          nodeId="1"
          label="Parent Node"
          onLabelClick={(event) =>
            event.preventDefault() && (selectingNode = true)
          }
        >
          <TreeItem nodeId="2" label="Child one" />
          <TreeItem nodeId="3" label="Child 2" />
          <TreeItem nodeId="4" label="Child 3" />
        </TreeItem>
      </TreeView>

`

@tonyhallett
Copy link
Contributor Author

tonyhallett commented May 13, 2020

@zwang1208

I think that this is what you are looking for. No need for additional selectingNode.
Code sandbox ( in typescript )

todo
a) Wrap onIconClick / onLabelClick as I did for onNodeSelect if you think it is necessary.
b) Create prop defaults for iconClickOnly / defaultPreventedPrevents

You can use the idea to create your own TreeItemX / TreeViewX that fits your common use case.

To have icon click do the toggling pass iconClickOnly as true. To have label select under these circumstances have defaultPreventedPrevent as false ( one expands the other selects).

function TreeItemX(props:TreeItemProps &{iconClickOnly:boolean}){
  // todo should call the original
  const handler:TreeItemProps['onLabelClick'] = evt => evt.preventDefault();
  const {iconClickOnly,...others} = props;
  const handledProps:TreeItemProps ={
    ...others,
    [props.iconClickOnly?'onLabelClick':'onIconClick']:handler
  }
  return <TreeItem {...handledProps} />
}
function TreeViewX(props:TreeViewProps&{defaultPreventedPrevents:boolean}){
  const {defaultPreventedPrevents,...others} = props;
  const originalOnNodeSelect = props.onNodeSelect;
  const preventingOnNodeSelect = (evt:React.ChangeEvent<{}>, nodeId:string&string[]) => {
    if(defaultPreventedPrevents){
      if(!evt.defaultPrevented){
        originalOnNodeSelect?.(evt,nodeId)
      }
    }else{
      if(evt.defaultPrevented){
        originalOnNodeSelect?.(evt,nodeId)
      }
    }
    
  }
  
  return <TreeView {...others} onNodeSelect={preventingOnNodeSelect}/> 

}

@zwang1208
Copy link

@tonyhallett Thanks for the demo. It works but the child cannot be selected anymore.

@tonyhallett
Copy link
Contributor Author

@tonyhallett Thanks for the demo. It works but the child cannot be selected anymore.

Sorry, had used a regular TreeItem as child, replacing with TreeItemX works

@tonyhallett
Copy link
Contributor Author

@NiroSenor sorry this should have been addressed to you.

@zwang1208
Copy link

zwang1208 commented May 13, 2020

@NiroSenor

let selectingNode = false

const onNodeToggle = (e, nodeIds = []) => {
    if (!selectingNode) {
      setExpanded(nodeIds)
      selectingNode = false
    }
  }
  const onNodeSelect = (e, newSelected) => {
    if (!selectingNode) return
    (doing something else...)
    }
  }

  const onLabelClick = (e) => {
    e.preventDefault()
    selectingNode = true
  }

pass onNodeToggle and onNodeSelect to TreeView
pass onLabelClick to TreeItem

You could also try Tony's solution, i think it's a better way than mine.

@NiroSenor
Copy link

Thank you very much @zwang1208 and @tonyhallett

First, I am so sorry for being a pain :( Accept my sincere apologies!

I am still trying to get this to work for me. I am trying to convert @tonyhallett 's Typescript code to React but I am having a errors in my code... Can you help with this Tony - here

@zwang1208 do you have some code demo somewhere that works for me to look at please?

Thanks again!

@NiroSenor
Copy link

@zwang1208, from your sample code, did you use the useState Hook?

@zwang1208
Copy link

@NiroSenor yes, except for selectingNode

@sblackstone
Copy link

Is there any way to get the id of the node / icon that was just clicked?

@zwang1208
Copy link

@sblackstone
Copy link

@zwang1208 Thanks! That solves my problem. I was looking at the on* functions on TreeItem rather than TreeView.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: tree view TreeView, TreeItem. This is the name of the generic UI component, not the React module! new feature New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[TreeView] Expand/collapse node only when clicking on expand/collapse icon
10 participants