@@ -56,258 +56,8 @@ import { rows, columns } from '../examples/Data.jsx';
5656
5757### Bulk select
5858
59- ``` js isFullscreen
60- import React from ' react' ;
61- import {
62- Dropdown ,
63- DropdownItem ,
64- DropdownList ,
65- MenuToggle ,
66- MenuToggleCheckbox ,
67- PageSection ,
68- Pagination ,
69- Title ,
70- Toolbar ,
71- ToolbarContent ,
72- ToolbarGroup ,
73- ToolbarItem
74- } from ' @patternfly/react-core' ;
75- import { Table as TableDeprecated , TableHeader , TableBody } from ' @patternfly/react-table/deprecated' ;
76- import DashboardWrapper from ' @patternfly/react-core/src/demos/examples/DashboardWrapper' ;
77-
78- class BulkSelectTableDemo extends React .Component {
79- constructor (props ) {
80- super (props);
81- this .state = {
82- res: [],
83- perPage: 20 ,
84- page: 1 ,
85- error: null ,
86- loading: true ,
87- selectedItems: [],
88- numSelected: 0 ,
89- isDropDownOpen: false ,
90- isKebabOpen: false ,
91- searchValue: ' '
92- };
93-
94- this .onSelect = (event , isSelected , rowId ) => {
95- const { selectedItems } = this .state ;
96- const rows = [... this .state .res ];
97- const id = rows[rowId].id ;
98- rows[rowId].selected = isSelected;
99- this .setState ((prevState , props ) => {
100- return {
101- res: rows,
102- selectedItems: isSelected
103- ? [... prevState .selectedItems , id]
104- : prevState .selectedItems .filter ((itemId ) => itemId !== id)
105- };
106- });
107- };
108-
109- this .updateSelected = () => {
110- const { res , selectedItems } = this .state ;
111- let rows = res .map ((post ) => {
112- post .selected = selectedItems .includes (post .id );
113- return post;
114- });
115-
116- this .setState ({
117- res: rows
118- });
119- };
120-
121- this .handleSelectClick = (newState ) => {
122- if (newState === ' none' ) {
123- this .setState (
124- {
125- selectedItems: []
126- },
127- this .updateSelected
128- );
129- } else if (newState === ' page' ) {
130- let newRows = [];
131- let rows = this .state .res .map ((post ) => {
132- const isSelected = post .selected ;
133- newRows = isSelected ? [... newRows] : [... newRows, post .id ];
134- post .selected = true ;
135- return post;
136- });
137-
138- this .setState ((prevState , props ) => {
139- return {
140- selectedItems: prevState .selectedItems .concat (newRows)
141- };
142- }, this .updateSelected );
143- } else {
144- let newRows = [];
145- for (var i = 1 ; i <= 100 ; i++ ) newRows = [... newRows, i];
146-
147- this .setState (
148- {
149- selectedItems: newRows
150- },
151- this .updateSelected
152- );
153- }
154- };
155-
156- this .onDropDownToggle = (isOpen ) => {
157- this .setState ({
158- isDropDownOpen: isOpen
159- });
160- };
161-
162- this .onDropDownSelect = (event ) => {
163- this .setState ((prevState , props ) => {
164- return { isDropDownOpen: ! prevState .isDropDownOpen };
165- });
166- };
167- }
59+ ``` js isFullscreen file="./table-demos/BulkSelect.jsx"
16860
169- fetch (page , perPage ) {
170- this .setState ({ loading: true });
171- fetch (` https://jsonplaceholder.typicode.com/posts?_page=${ page} &_limit=${ perPage} ` )
172- .then ((resp ) => resp .json ())
173- .then ((resp ) => this .setState ({ res: resp, perPage, page, loading: false }))
174- .then (() => this .updateSelected ())
175- .catch ((err ) => this .setState ({ error: err, loading: false }));
176- }
177-
178- componentDidMount () {
179- this .fetch (this .state .page , this .state .perPage );
180- }
181-
182- renderPagination (variant ) {
183- const { page , perPage } = this .state ;
184- return (
185- < Pagination
186- isCompact
187- itemCount= {100 }
188- page= {page}
189- perPage= {perPage}
190- onSetPage= {(_evt , value ) => {
191- this .fetch (value, perPage);
192- }}
193- onPerPageSelect= {(_evt , value ) => {
194- this .fetch (1 , value);
195- }}
196- variant= {variant}
197- titles= {{
198- paginationAriaLabel: ` ${ variant} pagination`
199- }}
200- / >
201- );
202- }
203-
204- buildSelectDropdown () {
205- const { isDropDownOpen , selectedItems } = this .state ;
206- const numSelected = selectedItems .length ;
207- const allSelected = numSelected === 100 ;
208- const anySelected = numSelected > 0 ;
209- const someChecked = anySelected ? null : false ;
210- const isChecked = allSelected ? true : someChecked;
211-
212- const items = (
213- <>
214- < DropdownItem key= " item-1" onClick= {() => this .handleSelectClick (' none' )}>
215- Select none (0 items)
216- < / DropdownItem>
217- < DropdownItem key= " item-2" onClick= {() => this .handleSelectClick (' page' )}>
218- Select page ({this .state .perPage } items)
219- < / DropdownItem>
220- < DropdownItem key= " item-3" onClick= {() => this .handleSelectClick (' all' )}>
221- Select all (100 items)
222- < / DropdownItem>
223- < / >
224- );
225- return (
226- < Dropdown
227- onSelect= {this .onDropDownSelect }
228- isOpen= {isDropDownOpen}
229- onOpenChange= {(isOpen ) => this .setState ({ isDropDownOpen: isOpen })}
230- toggle= {(toggleRef ) => (
231- < MenuToggle
232- ref= {toggleRef}
233- isExpanded= {isDropDownOpen}
234- onClick= {this .onDropDownToggle }
235- aria- label= " Select cards"
236- splitButtonOptions= {{
237- items: [
238- < MenuToggleCheckbox
239- id= " split-dropdown-checkbox"
240- key= " split-dropdown-checkbox"
241- aria- label= {anySelected ? ' Deselect all cards' : ' Select all cards' }
242- isChecked= {allSelected}
243- onClick= {() => {
244- anySelected ? this .handleSelectClick (' none' ) : this .handleSelectClick (' all' );
245- }}
246- >
247- {numSelected !== 0 && ` ${ numSelected} selected` }
248- < / MenuToggleCheckbox>
249- ]
250- }}
251- >< / MenuToggle>
252- )}
253- >
254- < DropdownList> {items}< / DropdownList>
255- < / Dropdown>
256- );
257- }
258-
259- renderToolbar () {
260- return (
261- < React .Fragment >
262- < Toolbar>
263- < ToolbarContent>
264- < ToolbarGroup>
265- < ToolbarItem variant= " bulk-select" > {this .buildSelectDropdown ()}< / ToolbarItem>
266- < / ToolbarGroup>
267- < ToolbarItem variant= " pagination" > {this .renderPagination (' top' )}< / ToolbarItem>
268- < / ToolbarContent>
269- < / Toolbar>
270- < / React .Fragment >
271- );
272- }
273-
274- render () {
275- const { loading , res } = this .state ;
276- const rows = res .map ((post ) => ({
277- cells: [post .title , post .body ],
278- selected: post .selected
279- }));
280-
281- return (
282- < DashboardWrapper hasPageTemplateTitle>
283- < PageSection isWidthLimited>
284- {this .renderToolbar ()}
285- {! loading && (
286- < TableDeprecated
287- aria- label= " Bulk Select Table Demo"
288- cells= {[' Title' , ' Body' ]}
289- rows= {rows}
290- onSelect= {this .onSelect }
291- canSelectAll= {false }
292- >
293- < TableHeader / >
294- < TableBody / >
295- < / TableDeprecated>
296- )}
297-
298- {loading && (
299- < div className= " pf-v5-l-bullseye" >
300- < Title headingLevel= " h2" size= " 3xl" >
301- Please wait while loading data
302- < / Title>
303- < / div>
304- )}
305- {this .renderPagination (' bottom' )}
306- < / PageSection>
307- < / DashboardWrapper>
308- );
309- }
310- }
31161```
31262
31363### Expand/collapse all
0 commit comments