@mui/x-tree-view 7.7.1 → 7.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +166 -1
- package/RichTreeView/RichTreeView.js +12 -5
- package/SimpleTreeView/SimpleTreeView.js +12 -5
- package/TreeItem/TreeItem.js +19 -4
- package/TreeItem/TreeItemContent.js +5 -2
- package/TreeItem/useTreeItemState.d.ts +1 -0
- package/TreeItem/useTreeItemState.js +21 -4
- package/TreeItem2/TreeItem2.d.ts +3 -3
- package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -1
- package/TreeView/TreeView.js +12 -5
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
- package/index.js +1 -1
- package/internals/hooks/useInstanceEventHandler.d.ts +2 -2
- package/internals/models/plugin.d.ts +5 -1
- package/internals/models/treeView.d.ts +1 -3
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +17 -7
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -2
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +10 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +7 -1
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +25 -16
- package/internals/useTreeView/useTreeViewModels.d.ts +1 -1
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -1
- package/internals/utils/publishTreeViewEvent.d.ts +1 -1
- package/internals/utils/warning.d.ts +1 -1
- package/modern/RichTreeView/RichTreeView.js +12 -5
- package/modern/SimpleTreeView/SimpleTreeView.js +12 -5
- package/modern/TreeItem/TreeItem.js +19 -4
- package/modern/TreeItem/TreeItemContent.js +5 -2
- package/modern/TreeItem/useTreeItemState.js +21 -4
- package/modern/TreeView/TreeView.js +12 -5
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
- package/modern/index.js +1 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +10 -1
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
- package/modern/useTreeItem2/useTreeItem2.js +18 -2
- package/node/RichTreeView/RichTreeView.js +12 -5
- package/node/SimpleTreeView/SimpleTreeView.js +12 -5
- package/node/TreeItem/TreeItem.js +19 -4
- package/node/TreeItem/TreeItemContent.js +5 -2
- package/node/TreeItem/useTreeItemState.js +21 -4
- package/node/TreeView/TreeView.js +12 -5
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
- package/node/index.js +1 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +10 -1
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
- package/node/useTreeItem2/useTreeItem2.js +18 -2
- package/package.json +3 -3
- package/useTreeItem2/useTreeItem2.d.ts +2 -2
- package/useTreeItem2/useTreeItem2.js +18 -2
- package/useTreeItem2/useTreeItem2.types.d.ts +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,171 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 7.9.0
|
|
7
|
+
|
|
8
|
+
_Jul 5, 2024_
|
|
9
|
+
|
|
10
|
+
We'd like to offer a big thanks to the 7 contributors who made this release possible. Here are some highlights ✨:
|
|
11
|
+
|
|
12
|
+
- 🔄 Add loading overlay variants, including a skeleton loader option to the Data Grid component. See [Loading overlay docs](https://mui.com/x/react-data-grid/overlays/#loading-overlay) for more details.
|
|
13
|
+
- 🌳 Add `selectItem` and `getItemDOMElement` methods to the TreeView component public API
|
|
14
|
+
- ⛏️ Make the `usePickersTranslations` hook public in the pickers component
|
|
15
|
+
- 🐞 Bugfixes
|
|
16
|
+
|
|
17
|
+
<!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
|
|
18
|
+
|
|
19
|
+
### Data Grid
|
|
20
|
+
|
|
21
|
+
#### `@mui/x-data-grid@7.9.0`
|
|
22
|
+
|
|
23
|
+
- [DataGrid] Add skeleton loading overlay support (#13293) @KenanYusuf
|
|
24
|
+
- [DataGrid] Fix pagination when `pagination={undefined}` (#13349) @sai6855
|
|
25
|
+
|
|
26
|
+
#### `@mui/x-data-grid-pro@7.9.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
27
|
+
|
|
28
|
+
Same changes as in `@mui/x-data-grid@7.9.0`.
|
|
29
|
+
|
|
30
|
+
#### `@mui/x-data-grid-premium@7.9.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
31
|
+
|
|
32
|
+
Same changes as in `@mui/x-data-grid-pro@7.9.0`.
|
|
33
|
+
|
|
34
|
+
### Date and Time Pickers
|
|
35
|
+
|
|
36
|
+
#### `@mui/x-date-pickers@7.9.0`
|
|
37
|
+
|
|
38
|
+
- [pickers] Make the `usePickersTranslations` hook public (#13657) @flaviendelangle
|
|
39
|
+
|
|
40
|
+
#### `@mui/x-date-pickers-pro@7.9.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
41
|
+
|
|
42
|
+
Same changes as in `@mui/x-date-pickers@7.9.0`.
|
|
43
|
+
|
|
44
|
+
### Charts
|
|
45
|
+
|
|
46
|
+
#### `@mui/x-charts@7.9.0`
|
|
47
|
+
|
|
48
|
+
- [charts] Add Heatmap (unreleased) (#13209) @alexfauquette
|
|
49
|
+
- [charts] Add initial `Zoom&Pan` to the Pro charts (unreleased) (#13405) @JCQuintas
|
|
50
|
+
- [charts] Fix Axis Highlight on horizontal bar charts regression (#13717) @JCQuintas
|
|
51
|
+
- [charts] Improve charts interaction for mobile users (#13692) @JCQuintas
|
|
52
|
+
- [charts] Add documentation on how to disable the tooltip on charts (#13724) @JCQuintas
|
|
53
|
+
|
|
54
|
+
### Tree View
|
|
55
|
+
|
|
56
|
+
#### `@mui/x-tree-view@7.9.0`
|
|
57
|
+
|
|
58
|
+
- [TreeView] Add `selectItem` and `getItemDOMElement` methods to the public API (#13485) @flaviendelangle
|
|
59
|
+
|
|
60
|
+
### Docs
|
|
61
|
+
|
|
62
|
+
- [docs] Fix custom "no results overlay" demo in dark mode (#13715) @KenanYusuf
|
|
63
|
+
|
|
64
|
+
### Core
|
|
65
|
+
|
|
66
|
+
- [core] Add `react_next` workflow in CircleCI (#13360) @cherniavskii
|
|
67
|
+
- [core] Create a new package to share utils across X packages (#13528) @flaviendelangle
|
|
68
|
+
- [core] Fix dependency setup (#13684) @LukasTy
|
|
69
|
+
- [core] Remove `jscodeshift-add-imports` package (#13720) @LukasTy
|
|
70
|
+
- [code-infra] Cleanup monorepo and `@mui/docs` usage (#13713) @LukasTy
|
|
71
|
+
|
|
72
|
+
## 7.8.0
|
|
73
|
+
|
|
74
|
+
_Jun 28, 2024_
|
|
75
|
+
|
|
76
|
+
We'd like to offer a big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
|
|
77
|
+
|
|
78
|
+
- 🛰 Introduce server-side data source for improved server integration in the Data Grid.
|
|
79
|
+
|
|
80
|
+
Supports server-side pagination, sorting and filtering on plain and tree data, and automatic caching.
|
|
81
|
+
|
|
82
|
+
To enable, provide a `getRows` function to the `unstable_dataSource` prop on the Data Grid component.
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
const dataSource = {
|
|
86
|
+
getRows: async (params: GridServerGetRowsParams) => {
|
|
87
|
+
const data = await fetch(
|
|
88
|
+
`https://api.example.com/data?${new URLSearchParams({
|
|
89
|
+
page: params.page,
|
|
90
|
+
pageSize: params.pageSize,
|
|
91
|
+
sortModel: JSON.stringify(params.sortModel),
|
|
92
|
+
filterModel: JSON.stringify(params.filterModel),
|
|
93
|
+
}).toString()}`,
|
|
94
|
+
);
|
|
95
|
+
return {
|
|
96
|
+
rows: data.rows,
|
|
97
|
+
totalRows: data.totalRows,
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
<DataGridPro
|
|
102
|
+
unstable_dataSource={dataSource}
|
|
103
|
+
{...otherProps}
|
|
104
|
+
/>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
See [server-side data documentation](https://mui.com/x/react-data-grid/server-side-data/) for more details.
|
|
108
|
+
|
|
109
|
+
- 📈 Support Date data on the BarChart component
|
|
110
|
+
- ↕️ Support custom column sort icons on the Data Grid
|
|
111
|
+
- 🖱️ Support modifying the expansion trigger on the Tree View components
|
|
112
|
+
|
|
113
|
+
<!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
|
|
114
|
+
|
|
115
|
+
### Data Grid
|
|
116
|
+
|
|
117
|
+
#### `@mui/x-data-grid@7.8.0`
|
|
118
|
+
|
|
119
|
+
- [DataGrid] Add `columnHeaderSortIcon` slot (#13563) @arminmeh
|
|
120
|
+
- [DataGrid] Fix dimensions lag issue after autosize (#13587) @MBilalShafi
|
|
121
|
+
- [DataGrid] Fix print export failure when `hideFooter` option is set (#13034) @tarunrajput
|
|
122
|
+
|
|
123
|
+
#### `@mui/x-data-grid-pro@7.8.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
124
|
+
|
|
125
|
+
Same changes as in `@mui/x-data-grid@7.8.0`, plus:
|
|
126
|
+
|
|
127
|
+
- [DataGridPro] Fix multi-sorting indicator being cut off (#13625) @KenanYusuf
|
|
128
|
+
- [DataGridPro] Server-side tree data support (#12317) @MBilalShafi
|
|
129
|
+
|
|
130
|
+
#### `@mui/x-data-grid-premium@7.8.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
131
|
+
|
|
132
|
+
Same changes as in `@mui/x-data-grid-pro@7.8.0`.
|
|
133
|
+
|
|
134
|
+
### Date and Time Pickers
|
|
135
|
+
|
|
136
|
+
#### `@mui/x-date-pickers@7.8.0`
|
|
137
|
+
|
|
138
|
+
- [fields] Fix section clearing behavior on Android (#13652) @LukasTy
|
|
139
|
+
|
|
140
|
+
#### `@mui/x-date-pickers-pro@7.8.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
141
|
+
|
|
142
|
+
Same changes as in `@mui/x-date-pickers@7.8.0`.
|
|
143
|
+
|
|
144
|
+
### Charts
|
|
145
|
+
|
|
146
|
+
#### `@mui/x-charts@7.8.0`
|
|
147
|
+
|
|
148
|
+
- [charts] Fix line chart props not passing correct event handlers (#13609) @JCQuintas
|
|
149
|
+
- [charts] Support BarChart with `Date` data (#13471) @alexfauquette
|
|
150
|
+
- [charts] Support RTL for y-axis (#13614) @alexfauquette
|
|
151
|
+
- [charts] Use default values instead of non-null assertion to prevent error being thrown (#13637) @JCQuintas
|
|
152
|
+
|
|
153
|
+
### Tree View
|
|
154
|
+
|
|
155
|
+
#### `@mui/x-tree-view@7.8.0`
|
|
156
|
+
|
|
157
|
+
- [TreeView] Add `expansionTrigger` prop (#13533) @noraleonte
|
|
158
|
+
- [TreeView] Support experimental features from plugin's dependencies (#13632) @flaviendelangle
|
|
159
|
+
|
|
160
|
+
### Docs
|
|
161
|
+
|
|
162
|
+
- [docs] Add callout for `Luxon` `throwOnInvalid` support (#13621) @LukasTy
|
|
163
|
+
- [docs] Add "Overlays" section to the Data Grid documentation (#13624) @KenanYusuf
|
|
164
|
+
|
|
165
|
+
### Core
|
|
166
|
+
|
|
167
|
+
- [core] Add eslint rule to restrict import from `../internals` root (#13633) @JCQuintas
|
|
168
|
+
- [docs-infra] Sync `\_app` folder with monorepo (#13582) @Janpot
|
|
169
|
+
- [license] Allow usage of charts and tree view pro package for old premium licenses (#13619) @flaviendelangle
|
|
170
|
+
|
|
6
171
|
## 7.7.1
|
|
7
172
|
|
|
8
173
|
_Jun 21, 2024_
|
|
@@ -44,7 +209,7 @@ Same changes as in `@mui/x-data-grid-pro@7.7.1`.
|
|
|
44
209
|
- [pickers] Always use the same timezone in the field, the view and the layout components (#13481) @flaviendelangle
|
|
45
210
|
- [pickers] Fix `AdapterDateFnsV3` generated method types (#13464) @alexey-kozlenkov
|
|
46
211
|
- [pickers] Fix controlled `view` behavior (#13552) @LukasTy
|
|
47
|
-
- [TimePicker] Improves RTL verification for the time pickers default views
|
|
212
|
+
- [TimePicker] Improves RTL verification for the time pickers default views (#13447) @arthurbalduini
|
|
48
213
|
|
|
49
214
|
#### `@mui/x-date-pickers-pro@7.7.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
50
215
|
|
|
@@ -137,6 +137,8 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
137
137
|
current: PropTypes.shape({
|
|
138
138
|
focusItem: PropTypes.func.isRequired,
|
|
139
139
|
getItem: PropTypes.func.isRequired,
|
|
140
|
+
getItemDOMElement: PropTypes.func.isRequired,
|
|
141
|
+
selectItem: PropTypes.func.isRequired,
|
|
140
142
|
setItemExpansion: PropTypes.func.isRequired
|
|
141
143
|
})
|
|
142
144
|
}),
|
|
@@ -177,6 +179,11 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
177
179
|
* Used when the item's expansion is controlled.
|
|
178
180
|
*/
|
|
179
181
|
expandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
182
|
+
/**
|
|
183
|
+
* The slot that triggers the item's expansion when clicked.
|
|
184
|
+
* @default 'content'
|
|
185
|
+
*/
|
|
186
|
+
expansionTrigger: PropTypes.oneOf(['content', 'iconContainer']),
|
|
180
187
|
/**
|
|
181
188
|
* Unstable features, breaking changes might be introduced.
|
|
182
189
|
* For each feature, if the flag is not explicitly set to `true`,
|
|
@@ -229,34 +236,34 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
229
236
|
multiSelect: PropTypes.bool,
|
|
230
237
|
/**
|
|
231
238
|
* Callback fired when tree items are expanded/collapsed.
|
|
232
|
-
* @param {React.SyntheticEvent} event The event
|
|
239
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
233
240
|
* @param {array} itemIds The ids of the expanded items.
|
|
234
241
|
*/
|
|
235
242
|
onExpandedItemsChange: PropTypes.func,
|
|
236
243
|
/**
|
|
237
244
|
* Callback fired when a tree item is expanded or collapsed.
|
|
238
|
-
* @param {React.SyntheticEvent} event The event
|
|
245
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
239
246
|
* @param {array} itemId The itemId of the modified item.
|
|
240
247
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
241
248
|
*/
|
|
242
249
|
onItemExpansionToggle: PropTypes.func,
|
|
243
250
|
/**
|
|
244
251
|
* Callback fired when tree items are focused.
|
|
245
|
-
* @param {React.SyntheticEvent} event The event
|
|
252
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
246
253
|
* @param {string} itemId The id of the focused item.
|
|
247
254
|
* @param {string} value of the focused item.
|
|
248
255
|
*/
|
|
249
256
|
onItemFocus: PropTypes.func,
|
|
250
257
|
/**
|
|
251
258
|
* Callback fired when a tree item is selected or deselected.
|
|
252
|
-
* @param {React.SyntheticEvent} event The event
|
|
259
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
253
260
|
* @param {array} itemId The itemId of the modified item.
|
|
254
261
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
255
262
|
*/
|
|
256
263
|
onItemSelectionToggle: PropTypes.func,
|
|
257
264
|
/**
|
|
258
265
|
* Callback fired when tree items are selected/deselected.
|
|
259
|
-
* @param {React.SyntheticEvent} event The event
|
|
266
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
260
267
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
261
268
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
262
269
|
*/
|
|
@@ -95,6 +95,8 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
95
95
|
current: PropTypes.shape({
|
|
96
96
|
focusItem: PropTypes.func.isRequired,
|
|
97
97
|
getItem: PropTypes.func.isRequired,
|
|
98
|
+
getItemDOMElement: PropTypes.func.isRequired,
|
|
99
|
+
selectItem: PropTypes.func.isRequired,
|
|
98
100
|
setItemExpansion: PropTypes.func.isRequired
|
|
99
101
|
})
|
|
100
102
|
}),
|
|
@@ -139,6 +141,11 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
139
141
|
* Used when the item's expansion is controlled.
|
|
140
142
|
*/
|
|
141
143
|
expandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
144
|
+
/**
|
|
145
|
+
* The slot that triggers the item's expansion when clicked.
|
|
146
|
+
* @default 'content'
|
|
147
|
+
*/
|
|
148
|
+
expansionTrigger: PropTypes.oneOf(['content', 'iconContainer']),
|
|
142
149
|
/**
|
|
143
150
|
* Unstable features, breaking changes might be introduced.
|
|
144
151
|
* For each feature, if the flag is not explicitly set to `true`,
|
|
@@ -165,34 +172,34 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
165
172
|
multiSelect: PropTypes.bool,
|
|
166
173
|
/**
|
|
167
174
|
* Callback fired when tree items are expanded/collapsed.
|
|
168
|
-
* @param {React.SyntheticEvent} event The event
|
|
175
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
169
176
|
* @param {array} itemIds The ids of the expanded items.
|
|
170
177
|
*/
|
|
171
178
|
onExpandedItemsChange: PropTypes.func,
|
|
172
179
|
/**
|
|
173
180
|
* Callback fired when a tree item is expanded or collapsed.
|
|
174
|
-
* @param {React.SyntheticEvent} event The event
|
|
181
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
175
182
|
* @param {array} itemId The itemId of the modified item.
|
|
176
183
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
177
184
|
*/
|
|
178
185
|
onItemExpansionToggle: PropTypes.func,
|
|
179
186
|
/**
|
|
180
187
|
* Callback fired when tree items are focused.
|
|
181
|
-
* @param {React.SyntheticEvent} event The event
|
|
188
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
182
189
|
* @param {string} itemId The id of the focused item.
|
|
183
190
|
* @param {string} value of the focused item.
|
|
184
191
|
*/
|
|
185
192
|
onItemFocus: PropTypes.func,
|
|
186
193
|
/**
|
|
187
194
|
* Callback fired when a tree item is selected or deselected.
|
|
188
|
-
* @param {React.SyntheticEvent} event The event
|
|
195
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
189
196
|
* @param {array} itemId The itemId of the modified item.
|
|
190
197
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
191
198
|
*/
|
|
192
199
|
onItemSelectionToggle: PropTypes.func,
|
|
193
200
|
/**
|
|
194
201
|
* Callback fired when tree items are selected/deselected.
|
|
195
|
-
* @param {React.SyntheticEvent} event The event
|
|
202
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
196
203
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
197
204
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
198
205
|
*/
|
package/TreeItem/TreeItem.js
CHANGED
|
@@ -22,6 +22,7 @@ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewCon
|
|
|
22
22
|
import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
|
|
23
23
|
import { TreeItem2Provider } from '../TreeItem2Provider';
|
|
24
24
|
import { TreeViewItemDepthContext } from '../internals/TreeViewItemDepthContext';
|
|
25
|
+
import { useTreeItemState } from './useTreeItemState';
|
|
25
26
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
27
|
const useThemeProps = createUseThemeProps('MuiTreeItem');
|
|
27
28
|
const useUtilityClasses = ownerState => {
|
|
@@ -168,6 +169,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
168
169
|
selection: {
|
|
169
170
|
multiSelect
|
|
170
171
|
},
|
|
172
|
+
expansion: {
|
|
173
|
+
expansionTrigger
|
|
174
|
+
},
|
|
171
175
|
disabledItemsFocusable,
|
|
172
176
|
indentationAtItemLevel,
|
|
173
177
|
instance
|
|
@@ -193,6 +197,13 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
193
197
|
onKeyDown
|
|
194
198
|
} = props,
|
|
195
199
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
200
|
+
const {
|
|
201
|
+
expanded,
|
|
202
|
+
focused,
|
|
203
|
+
selected,
|
|
204
|
+
disabled,
|
|
205
|
+
handleExpansion
|
|
206
|
+
} = useTreeItemState(itemId);
|
|
196
207
|
const {
|
|
197
208
|
contentRef,
|
|
198
209
|
rootRef
|
|
@@ -213,10 +224,6 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
213
224
|
return Boolean(reactChildren);
|
|
214
225
|
};
|
|
215
226
|
const expandable = isExpandable(children);
|
|
216
|
-
const expanded = instance.isItemExpanded(itemId);
|
|
217
|
-
const focused = instance.isItemFocused(itemId);
|
|
218
|
-
const selected = instance.isItemSelected(itemId);
|
|
219
|
-
const disabled = instance.isItemDisabled(itemId);
|
|
220
227
|
const ownerState = _extends({}, props, {
|
|
221
228
|
expanded,
|
|
222
229
|
focused,
|
|
@@ -240,6 +247,11 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
240
247
|
} : {}),
|
|
241
248
|
className: classes.groupTransition
|
|
242
249
|
});
|
|
250
|
+
const handleIconContainerClick = event => {
|
|
251
|
+
if (expansionTrigger === 'iconContainer') {
|
|
252
|
+
handleExpansion(event);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
243
255
|
const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
|
|
244
256
|
const _useSlotProps = useSlotProps({
|
|
245
257
|
elementType: ExpansionIcon,
|
|
@@ -249,6 +261,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
|
|
|
249
261
|
return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps?.collapseIcon, tempOwnerState));
|
|
250
262
|
}
|
|
251
263
|
return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps?.expandIcon, tempOwnerState));
|
|
264
|
+
},
|
|
265
|
+
additionalProps: {
|
|
266
|
+
onClick: handleIconContainerClick
|
|
252
267
|
}
|
|
253
268
|
}),
|
|
254
269
|
expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
@@ -33,7 +33,8 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
|
|
|
33
33
|
handleExpansion,
|
|
34
34
|
handleSelection,
|
|
35
35
|
handleCheckboxSelection,
|
|
36
|
-
preventSelection
|
|
36
|
+
preventSelection,
|
|
37
|
+
expansionTrigger
|
|
37
38
|
} = useTreeItemState(itemId);
|
|
38
39
|
const icon = iconProp || expansionIcon || displayIcon;
|
|
39
40
|
const checkboxRef = React.useRef(null);
|
|
@@ -47,7 +48,9 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
|
|
|
47
48
|
if (checkboxRef.current?.contains(event.target)) {
|
|
48
49
|
return;
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
+
if (expansionTrigger === 'content') {
|
|
52
|
+
handleExpansion(event);
|
|
53
|
+
}
|
|
51
54
|
if (!checkboxSelection) {
|
|
52
55
|
handleSelection(event);
|
|
53
56
|
}
|
|
@@ -10,4 +10,5 @@ export declare function useTreeItemState(itemId: string): {
|
|
|
10
10
|
handleSelection: (event: React.MouseEvent) => void;
|
|
11
11
|
handleCheckboxSelection: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
12
12
|
preventSelection: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
13
|
+
expansionTrigger: "content" | "iconContainer" | undefined;
|
|
13
14
|
};
|
|
@@ -6,6 +6,9 @@ export function useTreeItemState(itemId) {
|
|
|
6
6
|
multiSelect,
|
|
7
7
|
checkboxSelection,
|
|
8
8
|
disableSelection
|
|
9
|
+
},
|
|
10
|
+
expansion: {
|
|
11
|
+
expansionTrigger
|
|
9
12
|
}
|
|
10
13
|
} = useTreeViewContext();
|
|
11
14
|
const expandable = instance.isItemExpandable(itemId);
|
|
@@ -36,10 +39,18 @@ export function useTreeItemState(itemId) {
|
|
|
36
39
|
if (event.shiftKey) {
|
|
37
40
|
instance.expandSelectionRange(event, itemId);
|
|
38
41
|
} else {
|
|
39
|
-
instance.selectItem(
|
|
42
|
+
instance.selectItem({
|
|
43
|
+
event,
|
|
44
|
+
itemId,
|
|
45
|
+
keepExistingSelection: true
|
|
46
|
+
});
|
|
40
47
|
}
|
|
41
48
|
} else {
|
|
42
|
-
instance.selectItem(
|
|
49
|
+
instance.selectItem({
|
|
50
|
+
event,
|
|
51
|
+
itemId,
|
|
52
|
+
shouldBeSelected: true
|
|
53
|
+
});
|
|
43
54
|
}
|
|
44
55
|
}
|
|
45
56
|
};
|
|
@@ -51,7 +62,12 @@ export function useTreeItemState(itemId) {
|
|
|
51
62
|
if (multiSelect && hasShift) {
|
|
52
63
|
instance.expandSelectionRange(event, itemId);
|
|
53
64
|
} else {
|
|
54
|
-
instance.selectItem(
|
|
65
|
+
instance.selectItem({
|
|
66
|
+
event,
|
|
67
|
+
itemId,
|
|
68
|
+
keepExistingSelection: multiSelect,
|
|
69
|
+
shouldBeSelected: event.target.checked
|
|
70
|
+
});
|
|
55
71
|
}
|
|
56
72
|
};
|
|
57
73
|
const preventSelection = event => {
|
|
@@ -70,6 +86,7 @@ export function useTreeItemState(itemId) {
|
|
|
70
86
|
handleExpansion,
|
|
71
87
|
handleSelection,
|
|
72
88
|
handleCheckboxSelection,
|
|
73
|
-
preventSelection
|
|
89
|
+
preventSelection,
|
|
90
|
+
expansionTrigger
|
|
74
91
|
};
|
|
75
92
|
}
|
package/TreeItem2/TreeItem2.d.ts
CHANGED
|
@@ -5,16 +5,16 @@ import { UseTreeItem2Status } from '../useTreeItem2';
|
|
|
5
5
|
export declare const TreeItem2Root: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, keyof React.ClassAttributes<HTMLLIElement> | keyof React.LiHTMLAttributes<HTMLLIElement>>, {}>;
|
|
6
6
|
export declare const TreeItem2Content: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
|
|
7
7
|
status: UseTreeItem2Status;
|
|
8
|
-
indentationAtItemLevel?: true
|
|
8
|
+
indentationAtItemLevel?: true;
|
|
9
9
|
}, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
10
10
|
export declare const TreeItem2Label: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
|
|
11
11
|
export declare const TreeItem2IconContainer: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
|
|
12
12
|
export declare const TreeItem2GroupTransition: import("@emotion/styled").StyledComponent<import("@mui/material/Collapse").CollapseProps & import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
|
|
13
|
-
indentationAtItemLevel?: true
|
|
13
|
+
indentationAtItemLevel?: true;
|
|
14
14
|
}, {}, {}>;
|
|
15
15
|
export declare const TreeItem2Checkbox: import("@emotion/styled").StyledComponent<Pick<Omit<CheckboxProps & {
|
|
16
16
|
visible: boolean;
|
|
17
|
-
}, "ref"> & React.RefAttributes<HTMLButtonElement>, "hidden" | "visible" | "color" | "content" | "size" | "style" | "icon" | "translate" | "disabled" | "form" | "slot" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "name" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "
|
|
17
|
+
}, "ref"> & React.RefAttributes<HTMLButtonElement>, "hidden" | "visible" | "color" | "content" | "size" | "style" | "icon" | "translate" | "disabled" | "form" | "slot" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "name" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value" | "readOnly" | "required" | "action" | "checked" | "component" | "sx" | "classes" | "onFocusVisible" | "inputRef" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "checkedIcon" | "inputProps" | "indeterminate" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
|
|
18
18
|
type TreeItem2Component = ((props: TreeItem2Props & React.RefAttributes<HTMLLIElement>) => React.JSX.Element) & {
|
|
19
19
|
propTypes?: any;
|
|
20
20
|
};
|
package/TreeView/TreeView.js
CHANGED
|
@@ -72,6 +72,8 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
72
72
|
current: PropTypes.shape({
|
|
73
73
|
focusItem: PropTypes.func.isRequired,
|
|
74
74
|
getItem: PropTypes.func.isRequired,
|
|
75
|
+
getItemDOMElement: PropTypes.func.isRequired,
|
|
76
|
+
selectItem: PropTypes.func.isRequired,
|
|
75
77
|
setItemExpansion: PropTypes.func.isRequired
|
|
76
78
|
})
|
|
77
79
|
}),
|
|
@@ -116,6 +118,11 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
116
118
|
* Used when the item's expansion is controlled.
|
|
117
119
|
*/
|
|
118
120
|
expandedItems: PropTypes.arrayOf(PropTypes.string),
|
|
121
|
+
/**
|
|
122
|
+
* The slot that triggers the item's expansion when clicked.
|
|
123
|
+
* @default 'content'
|
|
124
|
+
*/
|
|
125
|
+
expansionTrigger: PropTypes.oneOf(['content', 'iconContainer']),
|
|
119
126
|
/**
|
|
120
127
|
* Unstable features, breaking changes might be introduced.
|
|
121
128
|
* For each feature, if the flag is not explicitly set to `true`,
|
|
@@ -142,34 +149,34 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
142
149
|
multiSelect: PropTypes.bool,
|
|
143
150
|
/**
|
|
144
151
|
* Callback fired when tree items are expanded/collapsed.
|
|
145
|
-
* @param {React.SyntheticEvent} event The event
|
|
152
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
146
153
|
* @param {array} itemIds The ids of the expanded items.
|
|
147
154
|
*/
|
|
148
155
|
onExpandedItemsChange: PropTypes.func,
|
|
149
156
|
/**
|
|
150
157
|
* Callback fired when a tree item is expanded or collapsed.
|
|
151
|
-
* @param {React.SyntheticEvent} event The event
|
|
158
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
152
159
|
* @param {array} itemId The itemId of the modified item.
|
|
153
160
|
* @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
|
|
154
161
|
*/
|
|
155
162
|
onItemExpansionToggle: PropTypes.func,
|
|
156
163
|
/**
|
|
157
164
|
* Callback fired when tree items are focused.
|
|
158
|
-
* @param {React.SyntheticEvent} event The event
|
|
165
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
|
|
159
166
|
* @param {string} itemId The id of the focused item.
|
|
160
167
|
* @param {string} value of the focused item.
|
|
161
168
|
*/
|
|
162
169
|
onItemFocus: PropTypes.func,
|
|
163
170
|
/**
|
|
164
171
|
* Callback fired when a tree item is selected or deselected.
|
|
165
|
-
* @param {React.SyntheticEvent} event The event
|
|
172
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
166
173
|
* @param {array} itemId The itemId of the modified item.
|
|
167
174
|
* @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
|
|
168
175
|
*/
|
|
169
176
|
onItemSelectionToggle: PropTypes.func,
|
|
170
177
|
/**
|
|
171
178
|
* Callback fired when tree items are selected/deselected.
|
|
172
|
-
* @param {React.SyntheticEvent} event The event
|
|
179
|
+
* @param {React.SyntheticEvent} event The DOM event that triggered the change.
|
|
173
180
|
* @param {string[] | string} itemIds The ids of the selected items.
|
|
174
181
|
* When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
|
|
175
182
|
*/
|
|
@@ -57,10 +57,18 @@ export const useTreeItem2Utils = ({
|
|
|
57
57
|
if (event.shiftKey) {
|
|
58
58
|
instance.expandSelectionRange(event, itemId);
|
|
59
59
|
} else {
|
|
60
|
-
instance.selectItem(
|
|
60
|
+
instance.selectItem({
|
|
61
|
+
event,
|
|
62
|
+
itemId,
|
|
63
|
+
keepExistingSelection: true
|
|
64
|
+
});
|
|
61
65
|
}
|
|
62
66
|
} else {
|
|
63
|
-
instance.selectItem(
|
|
67
|
+
instance.selectItem({
|
|
68
|
+
event,
|
|
69
|
+
itemId,
|
|
70
|
+
shouldBeSelected: true
|
|
71
|
+
});
|
|
64
72
|
}
|
|
65
73
|
};
|
|
66
74
|
const handleCheckboxSelection = event => {
|
|
@@ -68,7 +76,12 @@ export const useTreeItem2Utils = ({
|
|
|
68
76
|
if (multiSelect && hasShift) {
|
|
69
77
|
instance.expandSelectionRange(event, itemId);
|
|
70
78
|
} else {
|
|
71
|
-
instance.selectItem(
|
|
79
|
+
instance.selectItem({
|
|
80
|
+
event,
|
|
81
|
+
itemId,
|
|
82
|
+
keepExistingSelection: multiSelect,
|
|
83
|
+
shouldBeSelected: event.target.checked
|
|
84
|
+
});
|
|
72
85
|
}
|
|
73
86
|
};
|
|
74
87
|
const interactions = {
|
package/index.js
CHANGED
|
@@ -7,9 +7,9 @@ interface RegistryContainer {
|
|
|
7
7
|
}
|
|
8
8
|
export declare function createUseInstanceEventHandler(registryContainer: RegistryContainer): <Instance extends UseTreeViewInstanceEventsInstance & {
|
|
9
9
|
$$signature: TreeViewAnyPluginSignature;
|
|
10
|
-
}, E extends keyof
|
|
10
|
+
}, E extends keyof TreeViewUsedEvents<Instance["$$signature"]>>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
|
|
11
11
|
export declare const unstable_resetCleanupTracking: () => void;
|
|
12
12
|
export declare const useInstanceEventHandler: <Instance extends UseTreeViewInstanceEventsInstance & {
|
|
13
13
|
$$signature: TreeViewAnyPluginSignature;
|
|
14
|
-
}, E extends keyof
|
|
14
|
+
}, E extends keyof TreeViewUsedEvents<Instance["$$signature"]>>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
|
|
15
15
|
export {};
|
|
@@ -78,7 +78,11 @@ export type TreeViewPluginSignature<T extends {
|
|
|
78
78
|
} ? {
|
|
79
79
|
[TControlled in T['modelNames']]-?: TreeViewModel<Exclude<T['defaultizedParams'][TControlled], undefined>>;
|
|
80
80
|
} : {};
|
|
81
|
-
experimentalFeatures: T
|
|
81
|
+
experimentalFeatures: T extends {
|
|
82
|
+
experimentalFeatures: string;
|
|
83
|
+
} ? {
|
|
84
|
+
[key in T['experimentalFeatures']]?: boolean;
|
|
85
|
+
} : {};
|
|
82
86
|
dependencies: T extends {
|
|
83
87
|
dependencies: Array<any>;
|
|
84
88
|
} ? T['dependencies'] : [];
|
|
@@ -23,6 +23,4 @@ export interface TreeViewModel<TValue> {
|
|
|
23
23
|
}
|
|
24
24
|
export type TreeViewInstance<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'instance'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'instance'>>;
|
|
25
25
|
export type TreeViewPublicAPI<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'publicAPI'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'instance'>>;
|
|
26
|
-
export type TreeViewExperimentalFeatures<TSignatures extends readonly TreeViewAnyPluginSignature[]> =
|
|
27
|
-
[key in MergeSignaturesProperty<TSignatures, 'experimentalFeatures'>]?: boolean;
|
|
28
|
-
};
|
|
26
|
+
export type TreeViewExperimentalFeatures<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TSignatures, ...TOptionalSignatures], 'experimentalFeatures'>;
|