playbook_ui 14.19.0.pre.alpha.PLAY2171advancedtable7832 → 14.19.0.pre.alpha.PLAY2172homeaddressstreetundefinedstatebug7716
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +35 -61
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +22 -36
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +19 -6
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.jsx +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +1 -3
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +19 -77
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.html.erb +10 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +0 -11
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.md +1 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +2 -33
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.md +1 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +1 -11
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +0 -5
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -3
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +2 -16
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +13 -34
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +1 -3
- data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +6 -0
- data/app/pb_kits/playbook/pb_dropdown/index.js +30 -336
- data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +12 -39
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +12 -16
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +13 -79
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +0 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +0 -1
- data/app/pb_kits/playbook/pb_form_group/_error_state_mixin.scss +2 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +12 -19
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +3 -7
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -2
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +0 -2
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.md +1 -3
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.html.erb +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.jsx +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb +11 -11
- data/app/pb_kits/playbook/pb_person/_person.tsx +2 -12
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -73
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +0 -1
- data/dist/chunks/_typeahead-BPSIWtFT.js +22 -0
- data/dist/chunks/_weekday_stacked-rph2mGIB.js +45 -0
- data/dist/chunks/lib-B20MXZcW.js +29 -0
- data/dist/chunks/{pb_form_validation-BZ2AVAi_.js → pb_form_validation-WWvUXPKD.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +2 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +7 -26
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +0 -31
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.md +0 -5
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.jsx +0 -56
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.md +0 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.jsx +0 -58
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.md +0 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.html.erb +0 -20
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.html.erb +0 -19
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.md +0 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.html.erb +0 -20
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.jsx +0 -57
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.html.erb +0 -50
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.jsx +0 -105
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.html.erb +0 -22
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.jsx +0 -67
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +0 -58
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.jsx +0 -23
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.md +0 -1
- data/dist/chunks/_typeahead-BmOWdDtp.js +0 -22
- data/dist/chunks/_weekday_stacked-CvcuQyr9.js +0 -45
- data/dist/chunks/lib-D5R1BjUn.js +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 179c2af6fd3485ed04bdcf2e4dba6c201309860e7ebab6bc27f3c5bdf78b4119
|
4
|
+
data.tar.gz: baeae47fc2895f60c94a0240255545fbd130754b0aaea296d52e06c991fa5df4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ee00f8f9f6c6a289588dff01b1b0d549287fad06a680bff17000ca5f9f69b5425fd91c6773a0466b92e94ac5c2339c01afba1177b7cf90434314363cd9f7310
|
7
|
+
data.tar.gz: 83978c3f1cc2cf665eaf15c9fc25637c67115d7956793356e72c5512f4ceac85b6354d8140d92041486abd61252caa0ac30693c1a2e61046b4af145f5b92b62e
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useEffect, useRef, useContext
|
1
|
+
import React, { useEffect, useRef, useContext } from "react";
|
2
2
|
|
3
3
|
import AdvancedTableContext from "../Context/AdvancedTableContext";
|
4
4
|
import { buildVisibilityTree } from "../Utilities/VisibilityTree";
|
@@ -7,11 +7,13 @@ import Card from "../../pb_card/_card";
|
|
7
7
|
import Caption from "../../pb_caption/_caption";
|
8
8
|
import Flex from "../../pb_flex/_flex";
|
9
9
|
import FlexItem from "../../pb_flex/_flex_item";
|
10
|
+
import Dropdown from "../../pb_dropdown/_dropdown";
|
11
|
+
import DropdownContainer from "../../pb_dropdown/subcomponents/DropdownContainer";
|
12
|
+
import DropdownTrigger from "../../pb_dropdown/subcomponents/DropdownTrigger";
|
10
13
|
import Icon from "../../pb_icon/_icon";
|
11
14
|
import Checkbox from "../../pb_checkbox/_checkbox";
|
12
15
|
import SectionSeparator from "../../pb_section_separator/_section_separator";
|
13
16
|
import Tooltip from "../../pb_tooltip/_tooltip";
|
14
|
-
import PbReactPopover from "../../pb_popover/_popover";
|
15
17
|
|
16
18
|
import {
|
17
19
|
showActionBar,
|
@@ -54,24 +56,11 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
54
56
|
const col = table.getColumn(id);
|
55
57
|
const show = col.getIsVisible();
|
56
58
|
|
57
|
-
const handleVisibilityChange = () => {
|
58
|
-
col.toggleVisibility();
|
59
|
-
if (columnVisibilityControl?.onColumnVisibilityChange) {
|
60
|
-
const updatedVisibilityState = {
|
61
|
-
...table.getAllColumns().reduce((acc: { [x: string]: any; }, col: { id: string | number; getIsVisible: () => any; }) => {
|
62
|
-
acc[col.id] = col.getIsVisible();
|
63
|
-
return acc;
|
64
|
-
}, {}),
|
65
|
-
};
|
66
|
-
columnVisibilityControl?.onColumnVisibilityChange(updatedVisibilityState);
|
67
|
-
}
|
68
|
-
};
|
69
|
-
|
70
59
|
return (
|
71
60
|
<Checkbox
|
72
61
|
checked={show}
|
73
62
|
key={id}
|
74
|
-
onChange={
|
63
|
+
onChange={() => col.toggleVisibility()}
|
75
64
|
paddingBottom="xs"
|
76
65
|
text={label}
|
77
66
|
/>
|
@@ -91,24 +80,16 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
91
80
|
const allOn = visibleArray.every(Boolean);
|
92
81
|
const someOn = visibleArray.some(Boolean);
|
93
82
|
|
94
|
-
const handleGroupVisibilityChange = () => {
|
95
|
-
leaves.forEach((id) => table.getColumn(id).toggleVisibility(!allOn));
|
96
|
-
if (columnVisibilityControl?.onColumnVisibilityChange) {
|
97
|
-
const updatedVisibilityState = {
|
98
|
-
...table.getAllColumns().reduce((acc: { [x: string]: any; }, col: { id: string | number; getIsVisible: () => any; }) => {
|
99
|
-
acc[col.id] = col.getIsVisible();
|
100
|
-
return acc;
|
101
|
-
}, {}),
|
102
|
-
};
|
103
|
-
columnVisibilityControl?.onColumnVisibilityChange(updatedVisibilityState);
|
104
|
-
}
|
105
|
-
};
|
106
83
|
return (
|
107
84
|
<>
|
108
85
|
<Checkbox
|
109
86
|
checked={allOn}
|
110
87
|
indeterminate={!allOn && someOn}
|
111
|
-
onChange={
|
88
|
+
onChange={() =>
|
89
|
+
leaves.forEach((id) =>
|
90
|
+
table.getColumn(id).toggleVisibility(!allOn),
|
91
|
+
)
|
92
|
+
}
|
112
93
|
paddingBottom="xs"
|
113
94
|
text={node.label}
|
114
95
|
/>
|
@@ -132,28 +113,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
132
113
|
hideActionBar(cardRef.current);
|
133
114
|
}
|
134
115
|
}
|
135
|
-
}, [isVisible
|
136
|
-
|
137
|
-
const [showPopover, setShowPopover] = useState(false)
|
138
|
-
|
139
|
-
const togglePopover = () => setShowPopover((prev) => !prev)
|
140
|
-
const handleShouldClose = (shouldClose: boolean) =>
|
141
|
-
setShowPopover(!shouldClose)
|
142
|
-
|
143
|
-
const popoverReference = (
|
144
|
-
<Tooltip
|
145
|
-
placement="top"
|
146
|
-
text="Column Configuration"
|
147
|
-
>
|
148
|
-
<div onClick={togglePopover}>
|
149
|
-
<Icon
|
150
|
-
color="primary"
|
151
|
-
cursor="pointer"
|
152
|
-
icon="sliders-h"
|
153
|
-
/>
|
154
|
-
</div>
|
155
|
-
</Tooltip>
|
156
|
-
)
|
116
|
+
}, [isVisible]);
|
157
117
|
|
158
118
|
return (
|
159
119
|
<Card
|
@@ -179,17 +139,30 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
179
139
|
<FlexItem>{actions}</FlexItem>
|
180
140
|
</>
|
181
141
|
) : (
|
182
|
-
<
|
183
|
-
|
184
|
-
|
185
|
-
reference={popoverReference}
|
186
|
-
shouldClosePopover={handleShouldClose}
|
187
|
-
show={showPopover}
|
188
|
-
zIndex={3}
|
142
|
+
<Dropdown
|
143
|
+
className="column-visibility-dropdown-wrapper"
|
144
|
+
options={columnDefinitions}
|
189
145
|
>
|
190
|
-
|
146
|
+
<DropdownTrigger>
|
147
|
+
<Tooltip
|
148
|
+
placement='top'
|
149
|
+
text="Column Configuration"
|
150
|
+
zIndex={10}
|
151
|
+
>
|
152
|
+
<Icon
|
153
|
+
color="primary"
|
154
|
+
cursor="pointer"
|
155
|
+
icon="sliders-h"
|
156
|
+
/>
|
157
|
+
</Tooltip>
|
158
|
+
</DropdownTrigger>
|
159
|
+
<DropdownContainer
|
160
|
+
className="column-visibility-dropdown"
|
161
|
+
paddingTop="sm"
|
162
|
+
>
|
163
|
+
<>
|
191
164
|
<Caption
|
192
|
-
|
165
|
+
paddingBottom="sm"
|
193
166
|
text="Columns Config"
|
194
167
|
textAlign="center"
|
195
168
|
/>
|
@@ -204,7 +177,8 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
204
177
|
</Flex>
|
205
178
|
))}
|
206
179
|
</>
|
207
|
-
|
180
|
+
</DropdownContainer>
|
181
|
+
</Dropdown>
|
208
182
|
)}
|
209
183
|
</Flex>
|
210
184
|
</Card>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useContext
|
1
|
+
import React, { useContext } from "react"
|
2
2
|
import classnames from "classnames"
|
3
3
|
import { flexRender, Header, Table, RowModel } from "@tanstack/react-table"
|
4
4
|
|
@@ -8,8 +8,10 @@ import { GlobalProps } from "../../utilities/globalProps"
|
|
8
8
|
|
9
9
|
import Flex from "../../pb_flex/_flex"
|
10
10
|
import Checkbox from "../../pb_checkbox/_checkbox"
|
11
|
-
import
|
12
|
-
import
|
11
|
+
import Dropdown from "../../pb_dropdown/_dropdown"
|
12
|
+
import DropdownTrigger from "../../pb_dropdown/subcomponents/DropdownTrigger"
|
13
|
+
import DropdownOption from "../../pb_dropdown/subcomponents/DropdownOption"
|
14
|
+
import DropdownContainer from "../../pb_dropdown/subcomponents/DropdownContainer"
|
13
15
|
import Icon from "../../pb_icon/_icon"
|
14
16
|
|
15
17
|
import { SortIconButton } from "./SortIconButton"
|
@@ -134,20 +136,6 @@ const isToggleExpansionEnabled =
|
|
134
136
|
justifyHeader = isLeafColumn ? "end" : "center";
|
135
137
|
}
|
136
138
|
|
137
|
-
const [showPopover, setShowPopover] = useState(false)
|
138
|
-
|
139
|
-
const togglePopover = () => setShowPopover((prev) => !prev)
|
140
|
-
const handleShouldClose = (shouldClose: boolean) =>
|
141
|
-
setShowPopover(!shouldClose)
|
142
|
-
|
143
|
-
const popoverReference = (
|
144
|
-
<div className="gray-icon toggle-all-icon"
|
145
|
-
onClick={togglePopover}
|
146
|
-
>
|
147
|
-
<Icon icon={displayIcon(toggleExpansionIcon)[0]} />
|
148
|
-
</div>
|
149
|
-
)
|
150
|
-
|
151
139
|
const handleExpandDepth = (depth: number) => {
|
152
140
|
if (onExpandByDepthClick) {
|
153
141
|
const flatRows = table?.getRowModel().flatRows
|
@@ -203,33 +191,31 @@ const isToggleExpansionEnabled =
|
|
203
191
|
<ToggleIconButton onClick={handleExpandOrCollapse} />
|
204
192
|
)}
|
205
193
|
{isToggleExpansionEnabled && hasAnySubRows && expandByDepth && (
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
194
|
+
<Dropdown className="expand-by-depth-dropdown-wrapper"
|
195
|
+
options={expandByDepth}
|
196
|
+
>
|
197
|
+
<DropdownTrigger className="gray-icon toggle-all-icon">
|
198
|
+
<Icon icon={displayIcon(toggleExpansionIcon)[0]} />
|
199
|
+
</DropdownTrigger>
|
200
|
+
<DropdownContainer className="expand-by-depth-dropdown">
|
201
|
+
{expandByDepth.map((option:{ [key: string]: any }, index: number) => (
|
202
|
+
<DropdownOption
|
203
|
+
key={index}
|
204
|
+
option={option}
|
205
|
+
padding="none"
|
214
206
|
>
|
215
|
-
{expandByDepth.map((option:{ [key: string]: any }, index: number) => (
|
216
|
-
<>
|
217
207
|
<Flex
|
218
208
|
alignItems="center"
|
219
|
-
className="pb-advanced-table-popover-option"
|
220
|
-
cursor="pointer"
|
221
209
|
htmlOptions={{onClick: () => {handleExpandDepth(option.depth)} }}
|
222
210
|
paddingX="sm"
|
223
211
|
paddingY="xs"
|
224
212
|
>
|
225
213
|
{option.label}
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
214
|
+
</Flex>
|
215
|
+
</DropdownOption>
|
216
|
+
))}
|
217
|
+
</DropdownContainer>
|
218
|
+
</Dropdown>
|
233
219
|
)}
|
234
220
|
|
235
221
|
{isToggleExpansionEnabledLoading &&(
|
@@ -53,6 +53,15 @@
|
|
53
53
|
width: 100%;
|
54
54
|
}
|
55
55
|
|
56
|
+
.column-visibility-dropdown-wrapper {
|
57
|
+
position: unset !important;
|
58
|
+
}
|
59
|
+
.column-visibility-dropdown {
|
60
|
+
width: unset !important;
|
61
|
+
right: $space_xxs;
|
62
|
+
text-align: left;
|
63
|
+
}
|
64
|
+
|
56
65
|
// Virtualized table styles
|
57
66
|
.virtualized-table-row {
|
58
67
|
display: table !important;
|
@@ -150,6 +159,13 @@
|
|
150
159
|
box-sizing: border-box !important;
|
151
160
|
}
|
152
161
|
}
|
162
|
+
.expand-by-depth-dropdown-wrapper {
|
163
|
+
position: unset !important;
|
164
|
+
}
|
165
|
+
.expand-by-depth-dropdown {
|
166
|
+
width: unset !important;
|
167
|
+
text-align: left;
|
168
|
+
}
|
153
169
|
}
|
154
170
|
|
155
171
|
.pb_advanced_table_body {
|
@@ -538,12 +554,14 @@
|
|
538
554
|
background-color: $white;
|
539
555
|
box-shadow: $shadow_deep;
|
540
556
|
}
|
541
|
-
|
542
557
|
@include advanced-table-sticky-mixin(
|
543
558
|
$border_light,
|
544
559
|
$white,
|
545
560
|
lighten($silver, $opacity_7)
|
546
561
|
);
|
562
|
+
|
563
|
+
// Apply border colors for sticky columns
|
564
|
+
@include apply-sticky-colors("light");
|
547
565
|
}
|
548
566
|
|
549
567
|
// Responsive Styles
|
@@ -809,8 +827,3 @@
|
|
809
827
|
}
|
810
828
|
}
|
811
829
|
}
|
812
|
-
|
813
|
-
// Outside of the pb_advanced_table class for popover
|
814
|
-
.pb-advanced-table-popover-option:hover {
|
815
|
-
background-color: $bg_light;
|
816
|
-
}
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md
CHANGED
@@ -1,3 +1 @@
|
|
1
|
-
The `columnVisibilityControl` prop also allows for greater control over the columnVisibility state. Devs can manage state themselves by passing in `value` and `onChange` as shown.
|
2
|
-
|
3
|
-
The additional `onColumnVisibilityChange` provides a callback with the current state as the argument if needed.
|
1
|
+
The `columnVisibilityControl` prop also allows for greater control over the columnVisibility state. Devs can manage state themselves by passing in `value` and `onChange` as shown.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle
|
1
|
+
import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from "react";
|
2
2
|
import classnames from "classnames";
|
3
3
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
|
4
4
|
import { globalProps } from "../utilities/globalProps";
|
@@ -25,7 +25,6 @@ type DropdownProps = {
|
|
25
25
|
blankSelection?: string;
|
26
26
|
children?: React.ReactChild[] | React.ReactChild | React.ReactElement[];
|
27
27
|
className?: string;
|
28
|
-
formPillProps?: GenericObject;
|
29
28
|
dark?: boolean;
|
30
29
|
data?: { [key: string]: string };
|
31
30
|
defaultValue?: GenericObject;
|
@@ -34,7 +33,6 @@ type DropdownProps = {
|
|
34
33
|
id?: string;
|
35
34
|
isClosed?: boolean;
|
36
35
|
label?: string;
|
37
|
-
multiSelect?: boolean;
|
38
36
|
onSelect?: (arg: GenericObject) => null;
|
39
37
|
options: GenericObject;
|
40
38
|
separators?: boolean;
|
@@ -63,8 +61,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
63
61
|
id,
|
64
62
|
isClosed = true,
|
65
63
|
label,
|
66
|
-
multiSelect = false,
|
67
|
-
formPillProps,
|
68
64
|
onSelect,
|
69
65
|
options,
|
70
66
|
separators = true,
|
@@ -84,20 +80,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
84
80
|
const [isDropDownClosed, setIsDropDownClosed, toggleDropdown] = useDropdown(isClosed);
|
85
81
|
|
86
82
|
const [filterItem, setFilterItem] = useState("");
|
87
|
-
const
|
88
|
-
if (multiSelect) {
|
89
|
-
if (Array.isArray(defaultValue)) return defaultValue;
|
90
|
-
return defaultValue && Object.keys(defaultValue).length
|
91
|
-
? [defaultValue]
|
92
|
-
: [];
|
93
|
-
}
|
94
|
-
return defaultValue || {};
|
95
|
-
}, [multiSelect, defaultValue]);
|
96
|
-
|
97
|
-
const [selected, setSelected] = useState<GenericObject | GenericObject[]>(
|
98
|
-
initialSelected
|
99
|
-
);
|
100
|
-
|
83
|
+
const [selected, setSelected] = useState<GenericObject>(defaultValue);
|
101
84
|
const [isInputFocused, setIsInputFocused] = useState(false);
|
102
85
|
const [hasTriggerSubcomponent, setHasTriggerSubcomponent] = useState(true);
|
103
86
|
const [hasContainerSubcomponent, setHasContainerSubcomponent] =
|
@@ -110,12 +93,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
110
93
|
const inputWrapperRef = useRef(null);
|
111
94
|
const dropdownContainerRef = useRef(null);
|
112
95
|
|
113
|
-
const selectedArray = Array.isArray(selected)
|
114
|
-
? selected
|
115
|
-
: selected && Object.keys(selected).length
|
116
|
-
? [selected]
|
117
|
-
: [];
|
118
|
-
|
119
96
|
const { trigger, container, otherChildren } =
|
120
97
|
separateChildComponents(children);
|
121
98
|
|
@@ -147,23 +124,16 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
147
124
|
|
148
125
|
const blankSelectionOption: GenericObject = blankSelection ? [{ label: blankSelection, value: "" }] : [];
|
149
126
|
const optionsWithBlankSelection = blankSelectionOption.concat(options);
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
}, [optionsWithBlankSelection, selectedArray, multiSelect]);
|
155
|
-
|
156
|
-
const filteredOptions = useMemo(() => {
|
157
|
-
return availableOptions.filter((opt: GenericObject) =>
|
158
|
-
String(opt.label).toLowerCase().includes(filterItem.toLowerCase())
|
159
|
-
);
|
160
|
-
}, [availableOptions, filterItem]);
|
127
|
+
const filteredOptions = optionsWithBlankSelection?.filter((option: GenericObject) => {
|
128
|
+
const label = typeof option.label === 'string' ? option.label.toLowerCase() : option.label;
|
129
|
+
return String(label).toLowerCase().includes(filterItem.toLowerCase());
|
130
|
+
});
|
161
131
|
|
162
132
|
// For keyboard accessibility: Set focus within dropdown to selected item if it exists
|
163
133
|
useEffect(() => {
|
164
134
|
if (!isDropDownClosed) {
|
165
135
|
let newIndex = 0;
|
166
|
-
if (selected &&
|
136
|
+
if (selected && selected?.label) {
|
167
137
|
const selectedIndex = filteredOptions.findIndex((option: GenericObject) => option.label === selected.label);
|
168
138
|
if (selectedIndex >= 0) {
|
169
139
|
newIndex = selectedIndex;
|
@@ -179,27 +149,12 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
179
149
|
setIsDropDownClosed(false);
|
180
150
|
};
|
181
151
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
const next = exists
|
189
|
-
? list.filter((option) => option.value !== clickedItem.value)
|
190
|
-
: [...list, clickedItem];
|
191
|
-
onSelect && onSelect(next);
|
192
|
-
return next;
|
193
|
-
});
|
194
|
-
setFilterItem("");
|
195
|
-
setIsDropDownClosed(true);
|
196
|
-
} else {
|
197
|
-
setSelected(clickedItem);
|
198
|
-
setFilterItem("");
|
199
|
-
setIsDropDownClosed(true);
|
200
|
-
onSelect && onSelect(clickedItem);
|
201
|
-
}
|
202
|
-
};
|
152
|
+
const handleOptionClick = (selectedItem: GenericObject) => {
|
153
|
+
setSelected(selectedItem);
|
154
|
+
setFilterItem("");
|
155
|
+
setIsDropDownClosed(true);
|
156
|
+
onSelect && onSelect(selectedItem);
|
157
|
+
};
|
203
158
|
|
204
159
|
const handleWrapperClick = () => {
|
205
160
|
autocomplete && inputRef?.current?.focus();
|
@@ -207,14 +162,9 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
207
162
|
};
|
208
163
|
|
209
164
|
const handleBackspace = () => {
|
210
|
-
if (multiSelect) {
|
211
|
-
setSelected([]);
|
212
|
-
onSelect && onSelect([]);
|
213
|
-
} else {
|
214
165
|
setSelected({});
|
215
166
|
onSelect && onSelect(null);
|
216
167
|
setFocusedOptionIndex(-1);
|
217
|
-
}
|
218
168
|
};
|
219
169
|
|
220
170
|
const componentsToRender = prepareSubcomponents({
|
@@ -228,17 +178,12 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
228
178
|
});
|
229
179
|
|
230
180
|
useImperativeHandle(ref, () => ({
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
onSelect && onSelect(null);
|
238
|
-
}
|
239
|
-
setFilterItem("");
|
240
|
-
setIsDropDownClosed(true);
|
241
|
-
},
|
181
|
+
clearSelected: () => {
|
182
|
+
setSelected({});
|
183
|
+
setFilterItem("");
|
184
|
+
setIsDropDownClosed(true);
|
185
|
+
onSelect && onSelect(null);
|
186
|
+
},
|
242
187
|
}));
|
243
188
|
|
244
189
|
return (
|
@@ -256,7 +201,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
256
201
|
filteredOptions,
|
257
202
|
filterItem,
|
258
203
|
focusedOptionIndex,
|
259
|
-
formPillProps,
|
260
204
|
handleBackspace,
|
261
205
|
handleChange,
|
262
206
|
handleOptionClick,
|
@@ -265,8 +209,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
265
209
|
inputWrapperRef,
|
266
210
|
isDropDownClosed,
|
267
211
|
isInputFocused,
|
268
|
-
multiSelect,
|
269
|
-
onSelect,
|
270
212
|
optionsWithBlankSelection,
|
271
213
|
selected,
|
272
214
|
setFocusedOptionIndex,
|
@@ -6,7 +6,6 @@ import Flex from '../../pb_flex/_flex'
|
|
6
6
|
import FlexItem from '../../pb_flex/_flex_item'
|
7
7
|
import Avatar from '../../pb_avatar/_avatar'
|
8
8
|
import User from '../../pb_user/_user'
|
9
|
-
import Body from '../../pb_body/_body'
|
10
9
|
|
11
10
|
const DropdownWithCustomDisplay = (props) => {
|
12
11
|
const [selectedOption, setSelectedOption] = useState();
|
@@ -51,20 +50,10 @@ const DropdownWithCustomDisplay = (props) => {
|
|
51
50
|
<>
|
52
51
|
{
|
53
52
|
selectedOption && (
|
54
|
-
<Flex align="center">
|
55
53
|
<Avatar
|
56
54
|
name={selectedOption.label}
|
57
55
|
size="xs"
|
58
56
|
/>
|
59
|
-
<Body
|
60
|
-
marginX="xs"
|
61
|
-
text={selectedOption.label}
|
62
|
-
/>
|
63
|
-
<Badge
|
64
|
-
text={selectedOption.status}
|
65
|
-
variant={selectedOption.status == "Offline" ? "neutral" : selectedOption.status == "Online" ? "success" : "warning"}
|
66
|
-
/>
|
67
|
-
</Flex>
|
68
57
|
)
|
69
58
|
}
|
70
59
|
</>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Optionally utilize `customDisplay` on the `Dropdown.Trigger` subcomponent to customize its content after an option is selected.
|
1
|
+
Optionally utilize `customDisplay` on the `Dropdown.Trigger` subcomponent to customize its content after an option is selected. The component passed to customDisplay will be rendered to the left of the default text-based display. In this example the Avatar kit is being used.
|
2
2
|
|
3
3
|
The `placeholder` prop can also be used to customize the placeholder text for the default `Dropdown.Trigger`.
|
4
4
|
|
@@ -38,11 +38,7 @@
|
|
38
38
|
|
39
39
|
<%
|
40
40
|
custom_display = capture do
|
41
|
-
pb_rails("
|
42
|
-
concat(pb_rails("avatar", props: { name: "", size: "xs", id: "dropdown-avatar" }))
|
43
|
-
concat(pb_rails("body", props: { text: "", size: "xs", margin_x: "xs", id: "dropdown-avatar-name" }))
|
44
|
-
concat(pb_rails("badge", props: { text: "", id: "dropdown-avatar-status" }))
|
45
|
-
end
|
41
|
+
pb_rails("avatar", props: { name: "Courtney Long", size: "xs" })
|
46
42
|
end
|
47
43
|
%>
|
48
44
|
|
@@ -66,31 +62,4 @@
|
|
66
62
|
<% end %>
|
67
63
|
<% end %>
|
68
64
|
<% end %>
|
69
|
-
<% end %>
|
70
|
-
|
71
|
-
|
72
|
-
<script>
|
73
|
-
document.addEventListener("pb:dropdown:selected", (e) => {
|
74
|
-
const option = e.detail;
|
75
|
-
const dropdown = e.target;
|
76
|
-
|
77
|
-
const display = dropdown.querySelector("#dropdown_trigger_custom_display");
|
78
|
-
if (!display) return;
|
79
|
-
|
80
|
-
const nameEl = display.querySelector("#dropdown-avatar-name");
|
81
|
-
if (nameEl) nameEl.textContent = option.label;
|
82
|
-
|
83
|
-
const avatarEl = display.querySelector("#dropdown-avatar").querySelector(".avatar_wrapper");
|
84
|
-
const initials = (option.label[0] + option.label.split(" ").pop()[0]).toUpperCase();
|
85
|
-
if (avatarEl) {
|
86
|
-
avatarEl.dataset.name = option.label;
|
87
|
-
avatarEl.setAttribute("data-initials", initials);
|
88
|
-
}
|
89
|
-
const badgeEl = display.querySelector("#dropdown-avatar-status");
|
90
|
-
const variant = option.status === "Online" ? "success" : option.status === "Offline" ? "neutral" : "warning";
|
91
|
-
if (badgeEl) {
|
92
|
-
badgeEl.querySelector("span").textContent = option.status;
|
93
|
-
badgeEl.className = 'pb_badge_kit_' + variant;
|
94
|
-
}
|
95
|
-
});
|
96
|
-
</script>
|
65
|
+
<% end %>
|
@@ -1,6 +1,4 @@
|
|
1
|
-
Optionally utilize `custom_display` on the `dropdown/dropdown_trigger` subcomponent to customize its content after an option is selected.
|
2
|
-
|
3
|
-
Make use of a script to help set the custom_display with the correct value. By using the pb:dropdown:selected event listener, you can target the kits with a querySelector and update them dynamically with the values needed to match the selected option. Make sure to add an ID to the kits being passed in.
|
1
|
+
Optionally utilize `custom_display` on the `dropdown/dropdown_trigger` subcomponent to customize its content after an option is selected. The component passed to custom_display will be rendered to the left of the default text-based display. In this example the Avatar kit is being used.
|
4
2
|
|
5
3
|
The `placeholder` prop can also be used to customize the placeholder text for the default `dropdown/dropdown_trigger`.
|
6
4
|
|