@patternfly/react-core 5.0.0-alpha.44 → 5.0.0-alpha.45

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/components/DualListSelector/DualListSelector.d.ts +13 -13
  3. package/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  4. package/components/DualListSelector/DualListSelector.js +59 -59
  5. package/components/DualListSelector/DualListSelector.js.map +1 -1
  6. package/components/DualListSelector/DualListSelectorPane.d.ts +3 -3
  7. package/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -1
  8. package/components/DualListSelector/DualListSelectorPane.js +13 -13
  9. package/components/DualListSelector/DualListSelectorPane.js.map +1 -1
  10. package/dist/esm/components/DualListSelector/DualListSelector.d.ts +13 -13
  11. package/dist/esm/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  12. package/dist/esm/components/DualListSelector/DualListSelector.js +59 -59
  13. package/dist/esm/components/DualListSelector/DualListSelector.js.map +1 -1
  14. package/dist/esm/components/DualListSelector/DualListSelectorPane.d.ts +3 -3
  15. package/dist/esm/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -1
  16. package/dist/esm/components/DualListSelector/DualListSelectorPane.js +13 -13
  17. package/dist/esm/components/DualListSelector/DualListSelectorPane.js.map +1 -1
  18. package/dist/js/components/DualListSelector/DualListSelector.d.ts +13 -13
  19. package/dist/js/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  20. package/dist/js/components/DualListSelector/DualListSelector.js +59 -59
  21. package/dist/js/components/DualListSelector/DualListSelector.js.map +1 -1
  22. package/dist/js/components/DualListSelector/DualListSelectorPane.d.ts +3 -3
  23. package/dist/js/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -1
  24. package/dist/js/components/DualListSelector/DualListSelectorPane.js +13 -13
  25. package/dist/js/components/DualListSelector/DualListSelectorPane.js.map +1 -1
  26. package/dist/umd/react-core.min.js +1 -1
  27. package/package.json +2 -2
  28. package/src/components/DualListSelector/DualListSelector.tsx +94 -89
  29. package/src/components/DualListSelector/DualListSelectorPane.tsx +21 -21
  30. package/src/components/DualListSelector/examples/DualListSelectorBasic.tsx +5 -1
  31. package/src/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +5 -1
  32. package/src/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +5 -1
  33. package/src/components/DualListSelector/examples/DualListSelectorTreeExample.tsx +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "5.0.0-alpha.44",
3
+ "version": "5.0.0-alpha.45",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -70,5 +70,5 @@
70
70
  "react": "^17 || ^18",
71
71
  "react-dom": "^17 || ^18"
72
72
  },
73
- "gitHead": "ef868c4616df0389439d42b9f573f724c172e076"
73
+ "gitHead": "b4d34f7a9978200a95142d099115f91bf4170497"
74
74
  }
@@ -62,7 +62,11 @@ export interface DualListSelectorProps {
62
62
  /** Additonal tooltip properties for the dynamically built add selected tooltip */
63
63
  addSelectedTooltipProps?: any;
64
64
  /** Callback fired every time dynamically built options are chosen or removed */
65
- onListChange?: (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void;
65
+ onListChange?: (
66
+ event: React.MouseEvent<HTMLElement>,
67
+ newAvailableOptions: React.ReactNode[],
68
+ newChosenOptions: React.ReactNode[]
69
+ ) => void;
66
70
  /** Optional callback for the dynamically built add all button */
67
71
  addAll?: (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void;
68
72
  /** Accessible label for the dynamically built add all button */
@@ -89,7 +93,7 @@ export interface DualListSelectorProps {
89
93
  removeAllTooltipProps?: any;
90
94
  /** Optional callback fired when a dynamically built option is selected */
91
95
  onOptionSelect?: (
92
- e: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent,
96
+ event: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent,
93
97
  index: number,
94
98
  isChosen: boolean,
95
99
  id: string,
@@ -98,7 +102,7 @@ export interface DualListSelectorProps {
98
102
  ) => void;
99
103
  /** Optional callback fired when a dynamically built option is checked */
100
104
  onOptionCheck?: (
101
- e: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent,
105
+ event: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent,
102
106
  checked: boolean,
103
107
  checkedId: string,
104
108
  newCheckedItems: string[]
@@ -108,11 +112,11 @@ export interface DualListSelectorProps {
108
112
  /** Accessible label for the search input on the dynamically built available options pane. */
109
113
  availableOptionsSearchAriaLabel?: string;
110
114
  /** A callback for when the search input value for the dynamically built available options changes. */
111
- onAvailableOptionsSearchInputChanged?: (value: string, event: React.FormEvent<HTMLInputElement>) => void;
115
+ onAvailableOptionsSearchInputChanged?: (event: React.FormEvent<HTMLInputElement>, value: string) => void;
112
116
  /** Accessible label for the search input on the dynamically built chosen options pane. */
113
117
  chosenOptionsSearchAriaLabel?: string;
114
118
  /** A callback for when the search input value for the dynamically built chosen options changes. */
115
- onChosenOptionsSearchInputChanged?: (value: string, event: React.FormEvent<HTMLInputElement>) => void;
119
+ onChosenOptionsSearchInputChanged?: (event: React.FormEvent<HTMLInputElement>, value: string) => void;
116
120
  /** Optional filter function for custom filtering based on search string. Used with a dynamically built search input. */
117
121
  filterOption?: (option: React.ReactNode, input: string) => boolean;
118
122
  }
@@ -230,7 +234,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
230
234
  if (isTree) {
231
235
  this.setState({
232
236
  availableTreeFilteredOptions: flattenTreeWithFolders(
233
- (newFilteredOptions as unknown) as DualListSelectorTreeItemData[]
237
+ newFilteredOptions as unknown as DualListSelectorTreeItemData[]
234
238
  )
235
239
  });
236
240
  } else {
@@ -249,7 +253,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
249
253
  if (isTree) {
250
254
  this.setState({
251
255
  chosenTreeFilteredOptions: flattenTreeWithFolders(
252
- (newFilteredOptions as unknown) as DualListSelectorTreeItemData[]
256
+ newFilteredOptions as unknown as DualListSelectorTreeItemData[]
253
257
  )
254
258
  });
255
259
  } else {
@@ -260,12 +264,12 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
260
264
  }
261
265
  };
262
266
 
263
- addAllVisible = () => {
264
- this.setState(prevState => {
267
+ addAllVisible = (event: React.MouseEvent<HTMLElement>) => {
268
+ this.setState((prevState) => {
265
269
  const itemsToRemove = [] as React.ReactNode[];
266
270
  const newAvailable = [] as React.ReactNode[];
267
271
  const movedOptions = prevState.availableFilteredOptions || prevState.availableOptions;
268
- prevState.availableOptions.forEach(value => {
272
+ prevState.availableOptions.forEach((value) => {
269
273
  if (movedOptions.indexOf(value) !== -1) {
270
274
  itemsToRemove.push(value);
271
275
  } else {
@@ -275,7 +279,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
275
279
 
276
280
  const newChosen = [...prevState.chosenOptions, ...itemsToRemove];
277
281
  this.props.addAll && this.props.addAll(newAvailable, newChosen);
278
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
282
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
279
283
 
280
284
  return {
281
285
  chosenOptions: newChosen,
@@ -288,27 +292,27 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
288
292
  });
289
293
  };
290
294
 
291
- addAllTreeVisible = () => {
292
- this.setState(prevState => {
295
+ addAllTreeVisible = (event: React.MouseEvent<HTMLElement>) => {
296
+ this.setState((prevState) => {
293
297
  const movedOptions =
294
298
  prevState.availableTreeFilteredOptions ||
295
- flattenTreeWithFolders((prevState.availableOptions as unknown) as DualListSelectorTreeItemData[]);
299
+ flattenTreeWithFolders(prevState.availableOptions as unknown as DualListSelectorTreeItemData[]);
296
300
  const newAvailable = prevState.availableOptions
297
- .map(opt => Object.assign({}, opt))
298
- .filter(item =>
299
- filterRestTreeItems((item as unknown) as DualListSelectorTreeItemData, movedOptions)
301
+ .map((opt) => Object.assign({}, opt))
302
+ .filter((item) =>
303
+ filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, movedOptions)
300
304
  ) as React.ReactNode[];
301
305
 
302
- const currChosen = flattenTree((prevState.chosenOptions as unknown) as DualListSelectorTreeItemData[]);
306
+ const currChosen = flattenTree(prevState.chosenOptions as unknown as DualListSelectorTreeItemData[]);
303
307
  const nextChosenOptions = currChosen.concat(movedOptions);
304
308
  const newChosen = this.createMergedCopy()
305
- .map(opt => Object.assign({}, opt))
306
- .filter(item =>
309
+ .map((opt) => Object.assign({}, opt))
310
+ .filter((item) =>
307
311
  filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextChosenOptions)
308
312
  ) as React.ReactNode[];
309
313
 
310
314
  this.props.addAll && this.props.addAll(newAvailable, newChosen);
311
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
315
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
312
316
 
313
317
  return {
314
318
  chosenOptions: newChosen,
@@ -321,8 +325,8 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
321
325
  });
322
326
  };
323
327
 
324
- addSelected = () => {
325
- this.setState(prevState => {
328
+ addSelected = (event: React.MouseEvent<HTMLElement>) => {
329
+ this.setState((prevState) => {
326
330
  const itemsToRemove = [] as React.ReactNode[];
327
331
  const newAvailable = [] as React.ReactNode[];
328
332
  prevState.availableOptions.forEach((value, index) => {
@@ -335,7 +339,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
335
339
 
336
340
  const newChosen = [...prevState.chosenOptions, ...itemsToRemove];
337
341
  this.props.addSelected && this.props.addSelected(newAvailable, newChosen);
338
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
342
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
339
343
 
340
344
  return {
341
345
  chosenOptionsSelected: [],
@@ -348,26 +352,26 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
348
352
  });
349
353
  };
350
354
 
351
- addTreeSelected = () => {
352
- this.setState(prevState => {
355
+ addTreeSelected = (event: React.MouseEvent<HTMLElement>) => {
356
+ this.setState((prevState) => {
353
357
  // Remove selected available nodes from current available nodes
354
358
  const newAvailable = prevState.availableOptions
355
- .map(opt => Object.assign({}, opt))
356
- .filter(item =>
357
- filterRestTreeItems((item as unknown) as DualListSelectorTreeItemData, prevState.availableTreeOptionsChecked)
359
+ .map((opt) => Object.assign({}, opt))
360
+ .filter((item) =>
361
+ filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, prevState.availableTreeOptionsChecked)
358
362
  );
359
363
 
360
364
  // Get next chosen options from current + new nodes and remap from base
361
- const currChosen = flattenTree((prevState.chosenOptions as unknown) as DualListSelectorTreeItemData[]);
365
+ const currChosen = flattenTree(prevState.chosenOptions as unknown as DualListSelectorTreeItemData[]);
362
366
  const nextChosenOptions = currChosen.concat(prevState.availableTreeOptionsChecked);
363
367
  const newChosen = this.createMergedCopy()
364
- .map(opt => Object.assign({}, opt))
365
- .filter(item =>
368
+ .map((opt) => Object.assign({}, opt))
369
+ .filter((item) =>
366
370
  filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextChosenOptions)
367
371
  ) as React.ReactNode[];
368
372
 
369
373
  this.props.addSelected && this.props.addSelected(newAvailable, newChosen);
370
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
374
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
371
375
 
372
376
  return {
373
377
  availableTreeOptionsChecked: [],
@@ -378,12 +382,12 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
378
382
  });
379
383
  };
380
384
 
381
- removeAllVisible = () => {
382
- this.setState(prevState => {
385
+ removeAllVisible = (event: React.MouseEvent<HTMLElement>) => {
386
+ this.setState((prevState) => {
383
387
  const itemsToRemove = [] as React.ReactNode[];
384
388
  const newChosen = [] as React.ReactNode[];
385
389
  const movedOptions = prevState.chosenFilteredOptions || prevState.chosenOptions;
386
- prevState.chosenOptions.forEach(value => {
390
+ prevState.chosenOptions.forEach((value) => {
387
391
  if (movedOptions.indexOf(value) !== -1) {
388
392
  itemsToRemove.push(value);
389
393
  } else {
@@ -393,7 +397,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
393
397
 
394
398
  const newAvailable = [...prevState.availableOptions, ...itemsToRemove];
395
399
  this.props.removeAll && this.props.removeAll(newAvailable, newChosen);
396
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
400
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
397
401
 
398
402
  return {
399
403
  chosenOptions: newChosen,
@@ -406,25 +410,25 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
406
410
  });
407
411
  };
408
412
 
409
- removeAllTreeVisible = () => {
410
- this.setState(prevState => {
413
+ removeAllTreeVisible = (event: React.MouseEvent<HTMLElement>) => {
414
+ this.setState((prevState) => {
411
415
  const movedOptions =
412
416
  prevState.chosenTreeFilteredOptions ||
413
- flattenTreeWithFolders((prevState.chosenOptions as unknown) as DualListSelectorTreeItemData[]);
417
+ flattenTreeWithFolders(prevState.chosenOptions as unknown as DualListSelectorTreeItemData[]);
414
418
 
415
419
  const newChosen = prevState.chosenOptions
416
- .map(opt => Object.assign({}, opt))
417
- .filter(item => filterRestTreeItems((item as unknown) as DualListSelectorTreeItemData, movedOptions));
418
- const currAvailable = flattenTree((prevState.availableOptions as unknown) as DualListSelectorTreeItemData[]);
420
+ .map((opt) => Object.assign({}, opt))
421
+ .filter((item) => filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, movedOptions));
422
+ const currAvailable = flattenTree(prevState.availableOptions as unknown as DualListSelectorTreeItemData[]);
419
423
  const nextAvailableOptions = currAvailable.concat(movedOptions);
420
424
  const newAvailable = this.createMergedCopy()
421
- .map(opt => Object.assign({}, opt))
422
- .filter(item =>
425
+ .map((opt) => Object.assign({}, opt))
426
+ .filter((item) =>
423
427
  filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextAvailableOptions)
424
428
  ) as React.ReactNode[];
425
429
 
426
430
  this.props.removeAll && this.props.removeAll(newAvailable, newChosen);
427
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
431
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
428
432
 
429
433
  return {
430
434
  chosenOptions: newChosen,
@@ -435,8 +439,8 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
435
439
  });
436
440
  };
437
441
 
438
- removeSelected = () => {
439
- this.setState(prevState => {
442
+ removeSelected = (event: React.MouseEvent<HTMLElement>) => {
443
+ this.setState((prevState) => {
440
444
  const itemsToRemove = [] as React.ReactNode[];
441
445
  const newChosen = [] as React.ReactNode[];
442
446
  prevState.chosenOptions.forEach((value, index) => {
@@ -449,7 +453,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
449
453
 
450
454
  const newAvailable = [...prevState.availableOptions, ...itemsToRemove];
451
455
  this.props.removeSelected && this.props.removeSelected(newAvailable, newChosen);
452
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
456
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
453
457
 
454
458
  return {
455
459
  chosenOptionsSelected: [],
@@ -462,26 +466,26 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
462
466
  });
463
467
  };
464
468
 
465
- removeTreeSelected = () => {
466
- this.setState(prevState => {
469
+ removeTreeSelected = (event: React.MouseEvent<HTMLElement>) => {
470
+ this.setState((prevState) => {
467
471
  // Remove selected chosen nodes from current chosen nodes
468
472
  const newChosen = prevState.chosenOptions
469
- .map(opt => Object.assign({}, opt))
470
- .filter(item =>
471
- filterRestTreeItems((item as unknown) as DualListSelectorTreeItemData, prevState.chosenTreeOptionsChecked)
473
+ .map((opt) => Object.assign({}, opt))
474
+ .filter((item) =>
475
+ filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, prevState.chosenTreeOptionsChecked)
472
476
  );
473
477
 
474
478
  // Get next chosen options from current and remap from base
475
- const currAvailable = flattenTree((prevState.availableOptions as unknown) as DualListSelectorTreeItemData[]);
479
+ const currAvailable = flattenTree(prevState.availableOptions as unknown as DualListSelectorTreeItemData[]);
476
480
  const nextAvailableOptions = currAvailable.concat(prevState.chosenTreeOptionsChecked);
477
481
  const newAvailable = this.createMergedCopy()
478
- .map(opt => Object.assign({}, opt))
479
- .filter(item =>
482
+ .map((opt) => Object.assign({}, opt))
483
+ .filter((item) =>
480
484
  filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextAvailableOptions)
481
485
  ) as React.ReactNode[];
482
486
 
483
487
  this.props.removeSelected && this.props.removeSelected(newAvailable, newChosen);
484
- this.props.onListChange && this.props.onListChange(newAvailable, newChosen);
488
+ this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
485
489
 
486
490
  return {
487
491
  availableTreeOptionsChecked: [],
@@ -502,12 +506,12 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
502
506
  parentData?: any
503
507
  /* eslint-enable @typescript-eslint/no-unused-vars */
504
508
  ) => {
505
- this.setState(prevState => {
509
+ this.setState((prevState) => {
506
510
  const originalArray = isChosen ? prevState.chosenOptionsSelected : prevState.availableOptionsSelected;
507
511
 
508
512
  let updatedArray = null;
509
513
  if (originalArray.indexOf(index) !== -1) {
510
- updatedArray = originalArray.filter(value => value !== index);
514
+ updatedArray = originalArray.filter((value) => value !== index);
511
515
  } else {
512
516
  updatedArray = [...originalArray, index];
513
517
  }
@@ -527,11 +531,11 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
527
531
  : this.state.availableTreeOptionsChecked.includes(treeItem.id);
528
532
  areAllDescendantsChecked = (treeItem: DualListSelectorTreeItemData, isChosen: boolean): boolean =>
529
533
  treeItem.children
530
- ? treeItem.children.every(child => this.areAllDescendantsChecked(child, isChosen))
534
+ ? treeItem.children.every((child) => this.areAllDescendantsChecked(child, isChosen))
531
535
  : this.isChecked(treeItem, isChosen);
532
536
  areSomeDescendantsChecked = (treeItem: DualListSelectorTreeItemData, isChosen: boolean): boolean =>
533
537
  treeItem.children
534
- ? treeItem.children.some(child => this.areSomeDescendantsChecked(child, isChosen))
538
+ ? treeItem.children.some((child) => this.areSomeDescendantsChecked(child, isChosen))
535
539
  : this.isChecked(treeItem, isChosen);
536
540
 
537
541
  mapChecked = (item: DualListSelectorTreeItemData, isChosen: boolean): DualListSelectorTreeItemData => {
@@ -550,7 +554,7 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
550
554
  if (item.children) {
551
555
  return {
552
556
  ...item,
553
- children: item.children.map(child => this.mapChecked(child, isChosen))
557
+ children: item.children.map((child) => this.mapChecked(child, isChosen))
554
558
  };
555
559
  }
556
560
  return item;
@@ -567,9 +571,9 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
567
571
  if (isChosen) {
568
572
  if (chosenTreeFilteredOptions) {
569
573
  panelOptions = chosenOptions
570
- .map(opt => Object.assign({}, opt))
571
- .filter(item =>
572
- filterTreeItemsWithoutFolders((item as unknown) as DualListSelectorTreeItemData, chosenTreeFilteredOptions)
574
+ .map((opt) => Object.assign({}, opt))
575
+ .filter((item) =>
576
+ filterTreeItemsWithoutFolders(item as unknown as DualListSelectorTreeItemData, chosenTreeFilteredOptions)
573
577
  );
574
578
  } else {
575
579
  panelOptions = chosenOptions;
@@ -577,32 +581,29 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
577
581
  } else {
578
582
  if (availableTreeFilteredOptions) {
579
583
  panelOptions = availableOptions
580
- .map(opt => Object.assign({}, opt))
581
- .filter(item =>
582
- filterTreeItemsWithoutFolders(
583
- (item as unknown) as DualListSelectorTreeItemData,
584
- availableTreeFilteredOptions
585
- )
584
+ .map((opt) => Object.assign({}, opt))
585
+ .filter((item) =>
586
+ filterTreeItemsWithoutFolders(item as unknown as DualListSelectorTreeItemData, availableTreeFilteredOptions)
586
587
  );
587
588
  } else {
588
589
  panelOptions = availableOptions;
589
590
  }
590
591
  }
591
592
  const checkedOptionTree = panelOptions
592
- .map(opt => Object.assign({}, opt))
593
- .filter(item => filterTreeItems((item as unknown) as DualListSelectorTreeItemData, [itemData.id]));
594
- const flatTree = flattenTreeWithFolders((checkedOptionTree as unknown) as DualListSelectorTreeItemData[]);
593
+ .map((opt) => Object.assign({}, opt))
594
+ .filter((item) => filterTreeItems(item as unknown as DualListSelectorTreeItemData, [itemData.id]));
595
+ const flatTree = flattenTreeWithFolders(checkedOptionTree as unknown as DualListSelectorTreeItemData[]);
595
596
 
596
597
  const prevChecked = isChosen ? this.state.chosenTreeOptionsChecked : this.state.availableTreeOptionsChecked;
597
598
  let updatedChecked = [] as string[];
598
599
  if (isChecked) {
599
- updatedChecked = prevChecked.concat(flatTree.filter(id => !prevChecked.includes(id)));
600
+ updatedChecked = prevChecked.concat(flatTree.filter((id) => !prevChecked.includes(id)));
600
601
  } else {
601
- updatedChecked = prevChecked.filter(id => !flatTree.includes(id));
602
+ updatedChecked = prevChecked.filter((id) => !flatTree.includes(id));
602
603
  }
603
604
 
604
605
  this.setState(
605
- prevState => ({
606
+ (prevState) => ({
606
607
  availableTreeOptionsChecked: isChosen ? prevState.availableTreeOptionsChecked : updatedChecked,
607
608
  chosenTreeOptionsChecked: isChosen ? updatedChecked : prevState.chosenTreeOptionsChecked
608
609
  }),
@@ -668,29 +669,33 @@ export class DualListSelector extends React.Component<DualListSelectorProps, Dua
668
669
  availableOptionsStatus ||
669
670
  (isTree
670
671
  ? `${
671
- filterFolders((availableOptions as unknown) as DualListSelectorTreeItemData[], availableTreeOptionsChecked)
672
+ filterFolders(availableOptions as unknown as DualListSelectorTreeItemData[], availableTreeOptionsChecked)
672
673
  .length
673
- } of ${flattenTree((availableOptions as unknown) as DualListSelectorTreeItemData[]).length} items selected`
674
+ } of ${flattenTree(availableOptions as unknown as DualListSelectorTreeItemData[]).length} items selected`
674
675
  : `${availableOptionsSelected.length} of ${availableOptions.length} items selected`);
675
676
  const chosenOptionsStatusToDisplay =
676
677
  chosenOptionsStatus ||
677
678
  (isTree
678
679
  ? `${
679
- filterFolders((chosenOptions as unknown) as DualListSelectorTreeItemData[], chosenTreeOptionsChecked).length
680
- } of ${flattenTree((chosenOptions as unknown) as DualListSelectorTreeItemData[]).length} items selected`
680
+ filterFolders(chosenOptions as unknown as DualListSelectorTreeItemData[], chosenTreeOptionsChecked).length
681
+ } of ${flattenTree(chosenOptions as unknown as DualListSelectorTreeItemData[]).length} items selected`
681
682
  : `${chosenOptionsSelected.length} of ${chosenOptions.length} items selected`);
682
683
 
683
- const available = (isTree
684
- ? availableOptions.map(item => this.mapChecked((item as unknown) as DualListSelectorTreeItemData, false))
685
- : availableOptions) as React.ReactNode[];
686
- const chosen = (isTree
687
- ? chosenOptions.map(item => this.mapChecked((item as unknown) as DualListSelectorTreeItemData, true))
688
- : chosenOptions) as React.ReactNode[];
684
+ const available = (
685
+ isTree
686
+ ? availableOptions.map((item) => this.mapChecked(item as unknown as DualListSelectorTreeItemData, false))
687
+ : availableOptions
688
+ ) as React.ReactNode[];
689
+ const chosen = (
690
+ isTree
691
+ ? chosenOptions.map((item) => this.mapChecked(item as unknown as DualListSelectorTreeItemData, true))
692
+ : chosenOptions
693
+ ) as React.ReactNode[];
689
694
 
690
695
  return (
691
696
  <DualListSelectorContext.Provider value={{ isTree }}>
692
697
  <GenerateId>
693
- {randomId => (
698
+ {(randomId) => (
694
699
  <div className={css(styles.dualListSelector, className)} id={id || randomId} {...props}>
695
700
  {children === '' ? (
696
701
  <>
@@ -36,7 +36,7 @@ export interface DualListSelectorPaneProps extends Omit<React.HTMLProps<HTMLDivE
36
36
  selectedOptions?: string[] | number[];
37
37
  /** @hide Callback for when an option is selected. Optionally used only when options prop is provided. */
38
38
  onOptionSelect?: (
39
- e: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent,
39
+ event: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent,
40
40
  index: number,
41
41
  isChosen: boolean,
42
42
  id?: string,
@@ -45,7 +45,7 @@ export interface DualListSelectorPaneProps extends Omit<React.HTMLProps<HTMLDivE
45
45
  ) => void;
46
46
  /** @hide Callback for when a tree option is checked. Optionally used only when options prop is provided. */
47
47
  onOptionCheck?: (
48
- evt: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent,
48
+ event: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent,
49
49
  isChecked: boolean,
50
50
  itemData: DualListSelectorTreeItemData
51
51
  ) => void;
@@ -56,7 +56,7 @@ export interface DualListSelectorPaneProps extends Omit<React.HTMLProps<HTMLDivE
56
56
  /** Callback for search input. To be used when isSearchable is true. */
57
57
  onSearch?: (event: React.ChangeEvent<HTMLInputElement>) => void;
58
58
  /** @hide A callback for when the search input value for changes. To be used when isSearchable is true. */
59
- onSearchInputChanged?: (value: string, event: React.FormEvent<HTMLInputElement>) => void;
59
+ onSearchInputChanged?: (event: React.FormEvent<HTMLInputElement>, value: string) => void;
60
60
  /** @hide Callback for search input clear button */
61
61
  onSearchInputClear?: (event: React.SyntheticEvent<HTMLButtonElement>) => void;
62
62
  /** @hide Filter function for custom filtering based on search string. To be used when isSearchable is true. */
@@ -100,10 +100,10 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
100
100
  let filtered: React.ReactNode[];
101
101
  if (isTree) {
102
102
  filtered = options
103
- .map(opt => Object.assign({}, opt))
104
- .filter(item => filterInput((item as unknown) as DualListSelectorTreeItemData, newValue));
103
+ .map((opt) => Object.assign({}, opt))
104
+ .filter((item) => filterInput(item as unknown as DualListSelectorTreeItemData, newValue));
105
105
  } else {
106
- filtered = options.filter(option => {
106
+ filtered = options.filter((option) => {
107
107
  if (displayOption(option)) {
108
108
  return option;
109
109
  }
@@ -112,7 +112,7 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
112
112
  onFilterUpdate(filtered, isChosen ? 'chosen' : 'available', newValue === '');
113
113
 
114
114
  if (onSearchInputChanged) {
115
- onSearchInputChanged(newValue, e);
115
+ onSearchInputChanged(e, newValue);
116
116
  }
117
117
  setInput(newValue);
118
118
  };
@@ -120,7 +120,7 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
120
120
  // only called when options are passed via options prop and isTree === true
121
121
  const filterInput = (item: DualListSelectorTreeItemData, input: string): boolean => {
122
122
  if (filterOption) {
123
- return filterOption((item as unknown) as React.ReactNode, input);
123
+ return filterOption(item as unknown as React.ReactNode, input);
124
124
  } else {
125
125
  if (item.text.toLowerCase().includes(input.toLowerCase()) || input === '') {
126
126
  return true;
@@ -128,8 +128,9 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
128
128
  }
129
129
  if (item.children) {
130
130
  return (
131
- (item.children = item.children.map(opt => Object.assign({}, opt)).filter(child => filterInput(child, input)))
132
- .length > 0
131
+ (item.children = item.children
132
+ .map((opt) => Object.assign({}, opt))
133
+ .filter((child) => filterInput(child, input))).length > 0
133
134
  );
134
135
  }
135
136
  };
@@ -139,10 +140,7 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
139
140
  if (filterOption) {
140
141
  return filterOption(option, input);
141
142
  } else {
142
- return option
143
- .toString()
144
- .toLowerCase()
145
- .includes(input.toLowerCase());
143
+ return option.toString().toLowerCase().includes(input.toLowerCase());
146
144
  }
147
145
  };
148
146
 
@@ -168,7 +166,9 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
168
166
  <SearchInput
169
167
  onChange={isDisabled ? undefined : onChange}
170
168
  onClear={
171
- onSearchInputClear ? onSearchInputClear : e => onChange(e as React.FormEvent<HTMLInputElement>, '')
169
+ onSearchInputClear
170
+ ? onSearchInputClear
171
+ : (e) => onChange(e as React.FormEvent<HTMLInputElement>, '')
172
172
  }
173
173
  isDisabled={isDisabled}
174
174
  aria-label={searchInputAriaLabel}
@@ -221,12 +221,12 @@ export const DualListSelectorPane: React.FunctionComponent<DualListSelectorPaneP
221
221
  <DualListSelectorTree
222
222
  data={
223
223
  isSearchable
224
- ? ((options
225
- .map(opt => Object.assign({}, opt))
226
- .filter(item =>
227
- filterInput((item as unknown) as DualListSelectorTreeItemData, input)
228
- ) as unknown) as DualListSelectorTreeItemData[])
229
- : ((options as unknown) as DualListSelectorTreeItemData[])
224
+ ? (options
225
+ .map((opt) => Object.assign({}, opt))
226
+ .filter((item) =>
227
+ filterInput(item as unknown as DualListSelectorTreeItemData, input)
228
+ ) as unknown as DualListSelectorTreeItemData[])
229
+ : (options as unknown as DualListSelectorTreeItemData[])
230
230
  }
231
231
  onOptionCheck={onOptionCheck}
232
232
  id={`${id}-tree`}
@@ -10,7 +10,11 @@ export const DualListSelectorBasic: React.FunctionComponent = () => {
10
10
  ]);
11
11
  const [chosenOptions, setChosenOptions] = React.useState<React.ReactNode[]>([]);
12
12
 
13
- const onListChange = (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => {
13
+ const onListChange = (
14
+ event: React.MouseEvent<HTMLElement>,
15
+ newAvailableOptions: React.ReactNode[],
16
+ newChosenOptions: React.ReactNode[]
17
+ ) => {
14
18
  setAvailableOptions(newAvailableOptions.sort());
15
19
  setChosenOptions(newChosenOptions.sort());
16
20
  };
@@ -10,7 +10,11 @@ export const DualListSelectorBasicSearch: React.FunctionComponent = () => {
10
10
  ]);
11
11
  const [chosenOptions, setChosenOptions] = React.useState<React.ReactNode[]>([]);
12
12
 
13
- const onListChange = (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => {
13
+ const onListChange = (
14
+ event: React.MouseEvent<HTMLElement>,
15
+ newAvailableOptions: React.ReactNode[],
16
+ newChosenOptions: React.ReactNode[]
17
+ ) => {
14
18
  setAvailableOptions(newAvailableOptions.sort());
15
19
  setChosenOptions(newChosenOptions.sort());
16
20
  };
@@ -10,7 +10,11 @@ export const DualListSelectorBasicTooltips: React.FunctionComponent = () => {
10
10
  ]);
11
11
  const [chosenOptions, setChosenOptions] = React.useState<React.ReactNode[]>([]);
12
12
 
13
- const onListChange = (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => {
13
+ const onListChange = (
14
+ event: React.MouseEvent<HTMLElement>,
15
+ newAvailableOptions: React.ReactNode[],
16
+ newChosenOptions: React.ReactNode[]
17
+ ) => {
14
18
  setAvailableOptions(newAvailableOptions.sort());
15
19
  setChosenOptions(newChosenOptions.sort());
16
20
  };
@@ -74,6 +74,7 @@ export const DualListSelectorTreeExample: React.FunctionComponent = () => {
74
74
  ]);
75
75
 
76
76
  const onListChange = (
77
+ event: React.MouseEvent<HTMLElement>,
77
78
  newAvailableOptions: DualListSelectorTreeItemData[],
78
79
  newChosenOptions: DualListSelectorTreeItemData[]
79
80
  ) => {