playbook_ui 14.4.0 → 14.5.0.pre.alpha.PBNTR606multilevelselectreset4035

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/SortIconButton.tsx +23 -4
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_button/_button.tsx +6 -2
  6. data/app/pb_kits/playbook/pb_contact/_contact.tsx +17 -5
  7. data/app/pb_kits/playbook/pb_contact/contact.html.erb +14 -6
  8. data/app/pb_kits/playbook/pb_contact/contact.rb +4 -0
  9. data/app/pb_kits/playbook/pb_contact/contact.test.js +1 -1
  10. data/app/pb_kits/playbook/pb_dashboard/pbChartsDarkTheme.ts +2 -6
  11. data/app/pb_kits/playbook/pb_dashboard/pbChartsLightTheme.ts +2 -7
  12. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +4 -3
  13. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -1
  14. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +4 -0
  15. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +6 -3
  16. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +1 -1
  17. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss +6 -2
  18. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +2 -0
  19. data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +25 -0
  21. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +465 -0
  22. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +195 -0
  23. data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +3 -0
  24. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +117 -0
  25. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +43 -0
  26. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +1 -0
  27. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +63 -0
  28. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +55 -0
  29. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +113 -0
  30. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +12 -0
  31. data/app/pb_kits/playbook/pb_drawer/docs/index.js +5 -0
  32. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +12 -0
  33. data/app/pb_kits/playbook/pb_drawer/drawer.rb +8 -0
  34. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +77 -0
  35. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +10 -2
  36. data/app/pb_kits/playbook/pb_filter/docs/_filter_max_height.html.erb +5 -1
  37. data/app/pb_kits/playbook/pb_filter/docs/_filter_max_width.html.erb +5 -1
  38. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.html.erb +5 -1
  39. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.html.erb +5 -1
  40. data/app/pb_kits/playbook/pb_filter/docs/_filter_only.html.erb +5 -1
  41. data/app/pb_kits/playbook/pb_filter/docs/_filter_placement.html.erb +5 -1
  42. data/app/pb_kits/playbook/pb_filter/docs/_filter_single.html.erb +5 -1
  43. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +9 -1
  44. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.html.erb +19 -0
  45. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.jsx +27 -0
  46. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.md +1 -0
  47. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  48. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  49. data/app/pb_kits/playbook/pb_map/_map_controls.tsx +7 -1
  50. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +226 -231
  51. data/app/pb_kits/playbook/pb_multi_level_select/context/index.tsx +5 -0
  52. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +1 -1
  53. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +93 -0
  54. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +105 -0
  55. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.md +1 -0
  56. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +106 -0
  57. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.md +1 -0
  58. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +4 -0
  59. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -0
  60. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +149 -0
  61. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_page_change.jsx +12 -1
  62. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_page_change_react.md +3 -1
  63. data/app/pb_kits/playbook/pb_passphrase/_passphrase.tsx +10 -2
  64. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.html.erb +14 -13
  65. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +4 -4
  66. data/app/pb_kits/playbook/pb_radio/_radio.tsx +92 -33
  67. data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_children.html.erb +2 -0
  68. data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_children.jsx +62 -0
  69. data/app/pb_kits/playbook/pb_radio/docs/example.yml +1 -0
  70. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  71. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx +12 -5
  72. data/app/pb_kits/playbook/pb_select/_select.tsx +5 -2
  73. data/app/pb_kits/playbook/pb_select/select.html.erb +1 -1
  74. data/app/pb_kits/playbook/pb_select/select.rb +4 -0
  75. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +0 -1
  76. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +17 -13
  77. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +0 -1
  78. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +14 -0
  79. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +7 -1
  80. data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +6 -5
  81. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +3 -1
  82. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_margin_bottom.html.erb +88 -0
  83. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_margin_bottom.jsx +60 -0
  84. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  85. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  86. data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -1
  87. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +9 -2
  88. data/app/pb_kits/playbook/utilities/icons/allicons.tsx +136 -13
  89. data/app/pb_kits/playbook/utilities/icons/angle-down.svg +3 -0
  90. data/app/pb_kits/playbook/utilities/icons/envelope.svg +3 -0
  91. data/dist/chunks/_typeahead-C9g4qCcE.js +22 -0
  92. data/dist/chunks/_weekday_stacked-Div3Fpd3.js +45 -0
  93. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  94. data/dist/chunks/lib-CEpcaI8y.js +29 -0
  95. data/dist/chunks/{pb_form_validation-zV9OpdSt.js → pb_form_validation-D9zkwt2b.js} +1 -1
  96. data/dist/chunks/vendor.js +1 -1
  97. data/dist/menu.yml +3 -1
  98. data/dist/playbook-doc.js +1 -1
  99. data/dist/playbook-rails-react-bindings.js +1 -1
  100. data/dist/playbook-rails.js +1 -1
  101. data/dist/playbook.css +1 -1
  102. data/lib/playbook/pagination_renderer.rb +10 -2
  103. data/lib/playbook/pb_doc_helper.rb +5 -5
  104. data/lib/playbook/version.rb +2 -2
  105. metadata +40 -10
  106. data/dist/chunks/_typeahead-B2zRxReA.js +0 -22
  107. data/dist/chunks/_weekday_stacked-BIfZDNDm.js +0 -45
  108. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  109. data/dist/chunks/lib-D2U4I1U6.js +0 -16
@@ -0,0 +1,5 @@
1
+ import { createContext } from "react";
2
+
3
+ const MultiLevelSelectContext = createContext<any>({});
4
+
5
+ export default MultiLevelSelectContext;
@@ -87,4 +87,4 @@ const MultiLevelSelectDefault = (props) => {
87
87
  )
88
88
  };
89
89
 
90
- export default MultiLevelSelectDefault;
90
+ export default MultiLevelSelectDefault;
@@ -0,0 +1,93 @@
1
+ <% treeData = [{
2
+ label: "Power Home Remodeling",
3
+ value: "Power Home Remodeling",
4
+ id: "100",
5
+ expanded: true,
6
+ children: [
7
+ {
8
+ label: "People",
9
+ value: "People",
10
+ id: "101",
11
+ expanded: true,
12
+ children: [
13
+ {
14
+ label: "Talent Acquisition",
15
+ value: "Talent Acquisition",
16
+ id: "102",
17
+ },
18
+ {
19
+ label: "Business Affairs",
20
+ value: "Business Affairs",
21
+ id: "103",
22
+ children: [
23
+ {
24
+ label: "Initiatives",
25
+ value: "Initiatives",
26
+ id: "104",
27
+ },
28
+ {
29
+ label: "Learning & Development",
30
+ value: "Learning & Development",
31
+ id: "105",
32
+ },
33
+ ],
34
+ },
35
+ {
36
+ label: "People Experience",
37
+ value: "People Experience",
38
+ id: "106",
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ label: "Contact Center",
44
+ value: "Contact Center",
45
+ id: "107",
46
+ children: [
47
+ {
48
+ label: "Appointment Management",
49
+ value: "Appointment Management",
50
+ id: "108",
51
+ },
52
+ {
53
+ label: "Customer Service",
54
+ value: "Customer Service",
55
+ id: "109",
56
+ },
57
+ {
58
+ label: "Energy",
59
+ value: "Energy",
60
+ id: "110",
61
+ },
62
+ ],
63
+ },
64
+ ],
65
+ }] %>
66
+
67
+ <%= pb_rails("multi_level_select", props: {
68
+ id: "multi-level-select-reset-example",
69
+ name: "my_array",
70
+ tree_data: treeData,
71
+ return_all_selected: true
72
+ }) %>
73
+
74
+ <%= pb_rails("button", props: { text: "Reset", margin_top: "lg", id:"multilevelselect-reset-button" }) %>
75
+
76
+
77
+ <script>
78
+ window.addEventListener('DOMContentLoaded', () => {
79
+ const exampleResetButton = document.querySelector("#multilevelselect-reset-button");
80
+
81
+ exampleResetButton.addEventListener("click", () => {
82
+ clearMultiLevelSelectById('multi-level-select-reset-example');
83
+ });
84
+ function clearMultiLevelSelectById(id) {
85
+ const clearFunction = window[`clearMultiLevelSelect_${id}`];
86
+ if (clearFunction) {
87
+ clearFunction();
88
+ } else {
89
+ console.warn(`No clear function found for MultiLevelSelect with id: ${id}`);
90
+ }
91
+ }
92
+ })
93
+ </script>
@@ -0,0 +1,105 @@
1
+ import React from "react";
2
+ import MultiLevelSelect from "../_multi_level_select";
3
+ import Badge from "../../pb_badge/_badge";
4
+
5
+ const treeData = [
6
+ {
7
+ label: "Power Home Remodeling",
8
+ value: "Power Home Remodeling",
9
+ id: "powerhome1",
10
+ expanded: true,
11
+ children: [
12
+ {
13
+ label: "People",
14
+ value: "People",
15
+ id: "people1",
16
+ expanded: true,
17
+ status: "active",
18
+ children: [
19
+ {
20
+ label: "Talent Acquisition",
21
+ value: "Talent Acquisition",
22
+ id: "talent1",
23
+ },
24
+ {
25
+ label: "Business Affairs",
26
+ value: "Business Affairs",
27
+ id: "business1",
28
+ status: "active",
29
+ variant: "primary",
30
+
31
+ children: [
32
+ {
33
+ label: "Initiatives",
34
+ value: "Initiatives",
35
+ id: "initiative1",
36
+ },
37
+ {
38
+ label: "Learning & Development",
39
+ value: "Learning & Development",
40
+ id: "development1",
41
+ status: "Inactive",
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: "People Experience",
47
+ value: "People Experience",
48
+ id: "experience1",
49
+ },
50
+ ],
51
+ },
52
+ {
53
+ label: "Contact Center",
54
+ value: "Contact Center",
55
+ id: "contact1",
56
+ status: "Inactive",
57
+ variant: "error",
58
+ children: [
59
+ {
60
+ label: "Appointment Management",
61
+ value: "Appointment Management",
62
+ id: "appointment1",
63
+ },
64
+ {
65
+ label: "Customer Service",
66
+ value: "Customer Service",
67
+ id: "customer1",
68
+ },
69
+ {
70
+ label: "Energy",
71
+ value: "Energy",
72
+ id: "energy1",
73
+ },
74
+ ],
75
+ },
76
+ ],
77
+ },
78
+ ];
79
+
80
+ const MultiLevelSelectWithChildren = (props) => {
81
+ return (
82
+ <div>
83
+ <MultiLevelSelect
84
+ id="multiselect-with-children"
85
+ onSelect={(selectedNodes) =>
86
+ console.log("Selected Items", selectedNodes)
87
+ }
88
+ treeData={treeData}
89
+ {...props}
90
+ >
91
+ <MultiLevelSelect.Options>
92
+ {(item) => (
93
+ <Badge
94
+ marginLeft="sm"
95
+ text={item.status}
96
+ variant={item.status === "active" ? "success" : "warning"}
97
+ />
98
+ )}
99
+ </MultiLevelSelect.Options>
100
+ </MultiLevelSelect>
101
+ </div>
102
+ );
103
+ };
104
+
105
+ export default MultiLevelSelectWithChildren;
@@ -0,0 +1 @@
1
+ The MultiLevelSelect also provides a subcomponent structure which can be used to render children to the right of the Checkboxes and their labels. As seen in the code snippet below, these children have access to the current item being iterated over which can be used for conditional rendering.
@@ -0,0 +1,106 @@
1
+ import React from "react";
2
+ import MultiLevelSelect from "../_multi_level_select";
3
+ import Badge from "../../pb_badge/_badge";
4
+
5
+ const treeData = [
6
+ {
7
+ label: "Power Home Remodeling",
8
+ value: "Power Home Remodeling",
9
+ id: "powerhome1",
10
+ expanded: true,
11
+ children: [
12
+ {
13
+ label: "People",
14
+ value: "People",
15
+ id: "people1",
16
+ expanded: true,
17
+ status: "active",
18
+ children: [
19
+ {
20
+ label: "Talent Acquisition",
21
+ value: "Talent Acquisition",
22
+ id: "talent1",
23
+ },
24
+ {
25
+ label: "Business Affairs",
26
+ value: "Business Affairs",
27
+ id: "business1",
28
+ status: "active",
29
+ variant: "primary",
30
+
31
+ children: [
32
+ {
33
+ label: "Initiatives",
34
+ value: "Initiatives",
35
+ id: "initiative1",
36
+ },
37
+ {
38
+ label: "Learning & Development",
39
+ value: "Learning & Development",
40
+ id: "development1",
41
+ status: "Inactive",
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: "People Experience",
47
+ value: "People Experience",
48
+ id: "experience1",
49
+ },
50
+ ],
51
+ },
52
+ {
53
+ label: "Contact Center",
54
+ value: "Contact Center",
55
+ id: "contact1",
56
+ status: "Inactive",
57
+ variant: "error",
58
+ children: [
59
+ {
60
+ label: "Appointment Management",
61
+ value: "Appointment Management",
62
+ id: "appointment1",
63
+ },
64
+ {
65
+ label: "Customer Service",
66
+ value: "Customer Service",
67
+ id: "customer1",
68
+ },
69
+ {
70
+ label: "Energy",
71
+ value: "Energy",
72
+ id: "energy1",
73
+ },
74
+ ],
75
+ },
76
+ ],
77
+ },
78
+ ];
79
+
80
+ const MultiLevelSelectWithChildrenWithRadios = (props) => {
81
+ return (
82
+ <div>
83
+ <MultiLevelSelect
84
+ id="multiselect-with-children"
85
+ onSelect={(selectedNodes) =>
86
+ console.log("Selected Items", selectedNodes)
87
+ }
88
+ treeData={treeData}
89
+ variant="single"
90
+ {...props}
91
+ >
92
+ <MultiLevelSelect.Options>
93
+ {(item) => (
94
+ <Badge
95
+ marginLeft="sm"
96
+ text={item.status}
97
+ variant={item.status === "active" ? "success" : "warning"}
98
+ />
99
+ )}
100
+ </MultiLevelSelect.Options>
101
+ </MultiLevelSelect>
102
+ </div>
103
+ );
104
+ };
105
+
106
+ export default MultiLevelSelectWithChildrenWithRadios;
@@ -0,0 +1 @@
1
+ The MultiLevelSelect subcomponent structure is also available in the 'Single Select' variant. In this variant, the children will be rendered to the right of the Radios and their labels.
@@ -7,6 +7,7 @@ examples:
7
7
  - multi_level_select_selected_ids: Selected Ids
8
8
  - multi_level_select_with_form: With Form
9
9
  - multi_level_select_color: With Pills (Custom Color)
10
+ - multi_level_select_reset: Reset Selection
10
11
 
11
12
  react:
12
13
  - multi_level_select_default: Default
@@ -15,3 +16,6 @@ examples:
15
16
  - multi_level_select_return_all_selected: Return All Selected
16
17
  - multi_level_select_selected_ids_react: Selected Ids
17
18
  - multi_level_select_color: With Pills (Custom Color)
19
+ - multi_level_select_with_children: Checkboxes With Children
20
+ - multi_level_select_with_children_with_radios: Single Select With Children
21
+
@@ -4,3 +4,5 @@ export { default as MultiLevelSelectSingleChildrenOnly } from './_multi_level_se
4
4
  export { default as MultiLevelSelectReturnAllSelected } from './_multi_level_select_return_all_selected.jsx'
5
5
  export { default as MultiLevelSelectSelectedIdsReact } from "./_multi_level_select_selected_ids_react.jsx"
6
6
  export { default as MultiLevelSelectColor } from './_multi_level_select_color.jsx'
7
+ export { default as MultiLevelSelectWithChildren } from './_multi_level_select_with_children.jsx'
8
+ export { default as MultiLevelSelectWithChildrenWithRadios } from './_multi_level_select_with_children_with_radios.jsx'
@@ -0,0 +1,149 @@
1
+ import React, {useContext} from "react";
2
+ import classnames from "classnames";
3
+ import MultiLevelSelectContext from "./context";
4
+ import { globalProps, GlobalProps } from "../utilities/globalProps";
5
+ import {
6
+ buildAriaProps,
7
+ buildCss,
8
+ buildDataProps,
9
+ buildHtmlProps,
10
+ } from "../utilities/props";
11
+ import Checkbox from "../pb_checkbox/_checkbox";
12
+ import Radio from "../pb_radio/_radio";
13
+ import CircleIconButton from "../pb_circle_icon_button/_circle_icon_button";
14
+ import Body from "../pb_body/_body";
15
+
16
+ type MultiLevelSelectOptionsProps = {
17
+ aria?: { [key: string]: string },
18
+ children?: React.ReactNode | ((item: any) => React.ReactNode),
19
+ className?: string,
20
+ dark?: boolean,
21
+ data?: { [key: string]: string },
22
+ htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
23
+ } & GlobalProps;
24
+
25
+ const MultiLevelSelectOptions = ({
26
+ children,
27
+ items,
28
+ ...props
29
+ }: MultiLevelSelectOptionsProps) => {
30
+ const {
31
+ variant,
32
+ inputName,
33
+ renderNestedOptions,
34
+ isTreeRowExpanded,
35
+ handleToggleClick,
36
+ handleRadioButtonClick,
37
+ handledropdownItemClick,
38
+ filterItem,
39
+ } = useContext(MultiLevelSelectContext)
40
+
41
+ const {
42
+ aria = {},
43
+ className,
44
+ data = {},
45
+ htmlOptions = {},
46
+ } = props;
47
+
48
+ const ariaProps = buildAriaProps(aria);
49
+ const dataProps = buildDataProps(data);
50
+ const htmlProps = buildHtmlProps(htmlOptions);
51
+ const classes = classnames(
52
+ buildCss("pb_multi_level_select_options"),
53
+ globalProps(props),
54
+ className
55
+ );
56
+
57
+ return (
58
+ <ul
59
+ {...ariaProps}
60
+ {...dataProps}
61
+ {...htmlProps}
62
+ className={classes}
63
+ >
64
+ {Array.isArray(items) &&
65
+ items.map((item: { [key: string]: any }) => {
66
+ return (
67
+ <div key={item.id}>
68
+ <li className={"dropdown_item"}
69
+ data-name={item.id}
70
+ >
71
+ <div className="dropdown_item_checkbox_row">
72
+ {!item.parent_id && !item.children ? null : (
73
+ <div
74
+ key={
75
+ isTreeRowExpanded(item)
76
+ ? "chevron-down"
77
+ : "chevron-right"
78
+ }
79
+ >
80
+ <CircleIconButton
81
+ className={
82
+ item.children && item.children.length > 0
83
+ ? ""
84
+ : "toggle_icon"
85
+ }
86
+ icon={
87
+ isTreeRowExpanded(item)
88
+ ? "chevron-down"
89
+ : "chevron-right"
90
+ }
91
+ onClick={(event: React.MouseEvent) =>
92
+ handleToggleClick(item.id, event)
93
+ }
94
+ variant="link"
95
+ />
96
+ </div>
97
+ )}
98
+ {variant === "single" ? (
99
+ item.hideRadio ? (
100
+ <Body>{item.label}</Body>
101
+ ) : (
102
+ <Radio
103
+ checked={item.checked}
104
+ id={`${item.id}-${item.label}`}
105
+ label={item.label}
106
+ name={inputName}
107
+ onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
108
+ handleRadioButtonClick(e)
109
+ }
110
+ padding={item.children ? "none" : "xs"}
111
+ type="radio"
112
+ value={item.label}
113
+ />
114
+ )
115
+ ) : (
116
+ <Checkbox id={item.id}
117
+ text={item.label}
118
+ >
119
+ <input
120
+ checked={item.checked}
121
+ name={item.label}
122
+ onChange={(e) => {
123
+ handledropdownItemClick(e, !item.checked);
124
+ }}
125
+ type="checkbox"
126
+ value={item.label}
127
+ />
128
+ </Checkbox>
129
+ )}
130
+ {/* Render children next to the checkbox */}
131
+ {children && (
132
+ typeof children === "function" ? children(item) : children
133
+ )}
134
+ </div>
135
+ {isTreeRowExpanded(item) &&
136
+ item.children &&
137
+ item.children.length > 0 &&
138
+ (variant === "single" || !filterItem) && (
139
+ <div>{renderNestedOptions(item.children)}</div>
140
+ )}
141
+ </li>
142
+ </div>
143
+ );
144
+ })}
145
+ </ul>
146
+ );
147
+ };
148
+
149
+ export default MultiLevelSelectOptions;
@@ -22,6 +22,16 @@ const PaginationPageChange = (props) => {
22
22
 
23
23
  return (
24
24
  <div className="App">
25
+ <Pagination
26
+ current={activePage}
27
+ key={`pagination-top-${activePage}`}
28
+ marginBottom="xs"
29
+ onChange={onPageChange}
30
+ range={5}
31
+ total={totalPages}
32
+ {...props}
33
+ />
34
+
25
35
  <Table
26
36
  marginBottom="xs"
27
37
  responsive="none"
@@ -49,7 +59,8 @@ const PaginationPageChange = (props) => {
49
59
  </Table>
50
60
 
51
61
  <Pagination
52
- current={1}
62
+ current={activePage}
63
+ key={`pagination-bottom-${activePage}`}
53
64
  onChange={onPageChange}
54
65
  range={5}
55
66
  total={totalPages}
@@ -1 +1,3 @@
1
- You can use the `onChange` prop to control the data of your table. This prop is callback function that will allow you control the state.
1
+ You can use the `onChange` prop to control the data of your table. This prop is callback function that will allow you control the state.
2
+
3
+ To ensure synchronization between multiple pagination components on a single page, use unique, dynamic keys for each pagination instance. Each Pagination component should have its own dynamic key that reflects the current active page: this example uses `pagination-top-${activePage}` and `pagination-bottom-${activePage}`.
@@ -12,6 +12,7 @@ import Icon from '../pb_icon/_icon'
12
12
  import PbReactPopover from '../pb_popover/_popover'
13
13
  import TextInput from '../pb_text_input/_text_input'
14
14
  import { GenericObject } from "../types"
15
+ import { getAllIcons } from "../utilities/icons/allicons"
15
16
 
16
17
  type PassphraseProps = {
17
18
  aria?: { [key: string]: string },
@@ -96,6 +97,9 @@ const Passphrase = (props: PassphraseProps): React.ReactElement => {
96
97
  />
97
98
  )
98
99
 
100
+ const shieldIcon = getAllIcons()["shieldCheck"]
101
+ const eyeIcon = getAllIcons()["eye"]
102
+
99
103
  return (
100
104
  <div
101
105
  {...ariaProps}
@@ -135,7 +139,8 @@ const Passphrase = (props: PassphraseProps): React.ReactElement => {
135
139
  size="xs"
136
140
  >
137
141
  <Icon
138
- icon="shield-check"
142
+ className="svg-inline--fa"
143
+ customIcon={shieldIcon.icon as unknown as { [key: string]: SVGElement }}
139
144
  marginRight="xs"
140
145
  />
141
146
  {tip}
@@ -173,7 +178,10 @@ const Passphrase = (props: PassphraseProps): React.ReactElement => {
173
178
  color="light"
174
179
  dark={dark}
175
180
  >
176
- <Icon icon="eye" />
181
+ <Icon
182
+ className="svg-inline--fa"
183
+ customIcon={eyeIcon.icon as unknown as { [key: string]: SVGElement }}
184
+ />
177
185
  </Body>
178
186
  </span>
179
187
  </div>
@@ -1,8 +1,10 @@
1
1
  <%= pb_rails("button", props: { variant: "secondary", id: 'list' }) do %>
2
2
  <%= pb_rails("flex", props: {align: "center"}) do %>
3
- Filter By
3
+ Filter By
4
4
  <%= pb_rails("flex/flex_item", props: {margin_left: "xxs"}) do %>
5
- <div id="arrow-icon" style="display: flex"></div>
5
+ <div id="arrow-icon" style="display: flex">
6
+ <%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true }) %>
7
+ </div>
6
8
  <% end %>
7
9
  <% end %>
8
10
  <% end %>
@@ -18,18 +20,17 @@
18
20
 
19
21
 
20
22
  <script type="text/javascript">
21
- const button = document.querySelector("#list")
22
- let buttonClicked = false
23
+ const popoverButton = document.querySelector("#list")
24
+ let buttonClicked = false
23
25
 
24
- const arrowDiv = document.querySelector("#arrow-icon")
25
- arrowDiv.innerHTML = '<i class="far fa-angle-down"></i>'
26
+ const arrowDiv = document.querySelector("#arrow-icon")
26
27
 
27
- button.onclick = () => {
28
- buttonClicked = !buttonClicked
29
- if (buttonClicked) {
30
- arrowDiv.innerHTML = '<i class="far fa-angle-up"></i>'
31
- } else {
32
- arrowDiv.innerHTML = '<i class="far fa-angle-down"></i>'
28
+ popoverButton.onclick = () => {
29
+ buttonClicked = !buttonClicked
30
+ if (buttonClicked) {
31
+ arrowDiv.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="auto" height="auto" viewBox="0 0 31 25" fill="none" class="pb_custom_icon svg-inline--fa pb_icon_kit svg_fw" id="" data="{}" aria="{}" tabindex=""><path d="M14.2031 5.70312C14.625 5.28125 15.3281 5.28125 15.75 5.70312L24.7969 14.7031C25.2188 15.1719 25.2188 15.875 24.7969 16.2969C24.3281 16.7656 23.625 16.7656 23.2031 16.2969L15 8.09375L6.79688 16.2969C6.32812 16.7656 5.625 16.7656 5.20312 16.2969C4.73438 15.875 4.73438 15.1719 5.20312 14.75L14.2031 5.70312Z" fill="currentColor"/></svg>'
32
+ } else {
33
+ arrowDiv.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="auto" height="auto" viewBox="0 0 31 25" fill="none" class="pb_custom_icon svg-inline--fa pb_icon_kit svg_fw" id="" data="{}" aria="{}" tabindex=""><path d="M14.2031 19.2969L5.20312 10.2969C4.73438 9.875 4.73438 9.17188 5.20312 8.70312C5.625 8.28125 6.32812 8.28125 6.79688 8.70312L15 16.9531L23.2031 8.75C23.625 8.28125 24.3281 8.28125 24.7969 8.75C25.2188 9.17188 25.2188 9.875 24.7969 10.2969L15.75 19.2969C15.3281 19.7656 14.625 19.7656 14.2031 19.2969Z" fill="currentColor"/></svg>'
34
+ }
33
35
  }
34
- }
35
36
  </script>
@@ -26,10 +26,10 @@ const PopoverWithButton = (props) => {
26
26
  className={showPopover ? "fa-flip-vertical" : ""}
27
27
  display="inline_flex"
28
28
  >
29
- <Icon
30
- fixedWidth
31
- icon="angle-down"
32
- margin-left="xxs"
29
+ <Icon
30
+ fixedWidth
31
+ icon="angle-down"
32
+ margin-left="xxs"
33
33
  />
34
34
  </Flex>
35
35
  </Flex>