playbook_ui 14.20.0.pre.alpha.revert4637revert4621PLAY2033atactionbarrails7855 → 14.20.0.pre.rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/advanced_table.html.erb +8 -16
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +0 -9
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +2 -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_advanced_table/docs/_advanced_table_default.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_advanced_table/index.js +12 -155
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +0 -4
- 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 +7 -13
- 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-PfWrqC3z.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/kit_base.rb +3 -3
- data/lib/playbook/version.rb +2 -2
- metadata +7 -32
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +0 -137
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.md +0 -3
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.html.erb +0 -40
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.md +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.html.erb +0 -23
- data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.rb +0 -19
- 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: 8fa79ee278fc38b79bf8ba0d013868027d1b9b26029ccb1cf2f173b2a7797c83
|
4
|
+
data.tar.gz: 9e914077f1ad480c8f7ffa9bb65a6828a7b9a887d7b8b3e536bacfa5ab7c5a6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ef970a5758c8caf8a18b1d242eaf93c406318aaa676c2515200ed8e35fb8391de2acb7c2bc22f9350d6dd8555e26707fcdae48d0b779ee50372d35606364f86
|
7
|
+
data.tar.gz: 1b0da522bd01978c4087c086cc6ec8d0066296696a7c8ff82d26e74d6d126694c83f2b3fa7d39b2cafb97678a9f66a4a175864a8c534d273590a763c03b18171
|
@@ -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
|
-
}
|
@@ -1,18 +1,10 @@
|
|
1
1
|
<%= pb_content_tag do %>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<%= pb_rails("table", props: { size: "sm", data_table: true, number_spacing:"tabular", responsive:"none", dark: dark, classname: object.loading ? "content-loading" : "" }.merge(object.table_props)) do %>
|
11
|
-
<% if content.present? %>
|
12
|
-
<% content.presence %>
|
13
|
-
<% else %>
|
14
|
-
<%= pb_rails("advanced_table/table_header", props: { column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, show_actions_bar: object.show_actions_bar }) %>
|
15
|
-
<%= pb_rails("advanced_table/table_body", props: { id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, enable_toggle_expansion: object.enable_toggle_expansion }) %>
|
16
|
-
<% end %>
|
17
|
-
<% end %>
|
2
|
+
<%= pb_rails("table", props: { size: "sm", data_table: true, number_spacing:"tabular", responsive:"none", dark: dark, classname: object.loading ? "content-loading" : "" }.merge(object.table_props)) do %>
|
3
|
+
<% if content.present? %>
|
4
|
+
<% content.presence %>
|
5
|
+
<% else %>
|
6
|
+
<%= pb_rails("advanced_table/table_header", props: { column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows }) %>
|
7
|
+
<%= pb_rails("advanced_table/table_body", props: { id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, enable_toggle_expansion: object.enable_toggle_expansion }) %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
18
10
|
<% end %>
|
@@ -25,10 +25,6 @@ module Playbook
|
|
25
25
|
default: "auto"
|
26
26
|
prop :selectable_rows, type: Playbook::Props::Boolean,
|
27
27
|
default: false
|
28
|
-
prop :show_actions_bar, type: Playbook::Props::Boolean,
|
29
|
-
default: true
|
30
|
-
prop :actions, type: Playbook::Props::Array,
|
31
|
-
default: []
|
32
28
|
|
33
29
|
def classname
|
34
30
|
additional_classes = [responsive_classname, max_height_classname]
|
@@ -51,11 +47,6 @@ module Playbook
|
|
51
47
|
def selected_rows_length
|
52
48
|
selected_rows.length
|
53
49
|
end
|
54
|
-
|
55
|
-
def is_action_bar_visible
|
56
|
-
# Action bar visibility is controlled by JS based on selection
|
57
|
-
false
|
58
|
-
end
|
59
50
|
end
|
60
51
|
end
|
61
52
|
end
|
@@ -1,8 +1,4 @@
|
|
1
|
-
The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has
|
2
|
-
|
3
|
-
### id
|
4
|
-
|
5
|
-
A unique `id` is required to allow the table functionality to work properly. Without it, certain functions like the action bar will not be able to properly reference the correct table.
|
1
|
+
The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
|
6
2
|
|
7
3
|
### table_data
|
8
4
|
|
@@ -17,6 +13,6 @@ Column definitions are the single most important part of building a table as the
|
|
17
13
|
- `accessor`: this is the key from your data for the value you want rendered in that column
|
18
14
|
- `label`: this is what will be rendered as the column header label
|
19
15
|
|
20
|
-
There is also one optional item that is only required if the table has nested data:
|
16
|
+
There is also one optional item that is only required if the table has nested data:
|
21
17
|
|
22
18
|
- `cellAccessors`: This is an array of strings that represent keys from your data object. This is only required for the first column in case of nested data. If you have nested data, the AdvancedTable needs to know what to render in that first column for nested items. This array represents the nested data in the order you want it rendered.
|
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.
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<br />
|
4
4
|
<br />
|
5
5
|
|
6
|
-
The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
|
6
|
+
The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
|
7
7
|
|
8
8
|
### tableData
|
9
9
|
|
@@ -15,8 +15,6 @@ examples:
|
|
15
15
|
- advanced_table_column_border_color_rails: Column Group Border Color
|
16
16
|
- advanced_table_selectable_rows_rails: Selectable Rows
|
17
17
|
- advanced_table_selectable_rows_no_subrows_rails: Selectable Rows (No Subrows)
|
18
|
-
- advanced_table_selectable_rows_actions_rails: Selectable Rows (With Actions)
|
19
|
-
- advanced_table_selectable_rows_header_rails: Selectable Rows (No Actions Bar)
|
20
18
|
|
21
19
|
react:
|
22
20
|
- advanced_table_default: Default (Required Props)
|
@@ -79,7 +79,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
79
79
|
}
|
80
80
|
if (!allChildrenChecked) {
|
81
81
|
parentRow.classList.remove("bg-row-selection");
|
82
|
-
|
82
|
+
|
83
83
|
if (this.isRowExpanded(parentRow)) {
|
84
84
|
parentRow.classList.remove("bg-silver");
|
85
85
|
parentRow.classList.add("bg-white");
|
@@ -201,15 +201,15 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
201
201
|
this.toggleElement(this.target);
|
202
202
|
}
|
203
203
|
});
|
204
|
-
|
204
|
+
|
205
205
|
this.hideCloseIcon();
|
206
|
-
|
206
|
+
|
207
207
|
const table = this.element.closest("table");
|
208
|
-
|
208
|
+
|
209
209
|
// Prevent duplicate initialization
|
210
210
|
if (table.dataset.pbAdvancedTableInitialized) return;
|
211
211
|
table.dataset.pbAdvancedTableInitialized = "true";
|
212
|
-
|
212
|
+
|
213
213
|
// Bind checkbox change handlers for all row checkboxes
|
214
214
|
const checkboxLabels = table.querySelectorAll("label[data-row-id]");
|
215
215
|
checkboxLabels.forEach((label) => {
|
@@ -219,7 +219,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
219
219
|
this.handleCheckboxClick(event);
|
220
220
|
});
|
221
221
|
});
|
222
|
-
|
222
|
+
|
223
223
|
// Bind nested row expansion logic
|
224
224
|
const nestedButtons = table.querySelectorAll("[data-advanced-table]");
|
225
225
|
nestedButtons.forEach((button) => {
|
@@ -233,18 +233,18 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
233
233
|
}
|
234
234
|
});
|
235
235
|
});
|
236
|
-
|
236
|
+
|
237
237
|
// Bind select-all logic for this table
|
238
238
|
const selectAllCheckbox = table.querySelector("#select-all-rows");
|
239
239
|
if (selectAllCheckbox) {
|
240
240
|
selectAllCheckbox.addEventListener("change", () => {
|
241
241
|
const checkboxInput = selectAllCheckbox.querySelector('input[type="checkbox"]');
|
242
242
|
const checkAll = checkboxInput.checked;
|
243
|
-
|
243
|
+
|
244
244
|
const checkboxes = Array.from(
|
245
245
|
table.querySelectorAll("label[data-row-id] input[type='checkbox']")
|
246
246
|
);
|
247
|
-
|
247
|
+
|
248
248
|
checkboxes.forEach((cb) => {
|
249
249
|
cb.checked = checkAll;
|
250
250
|
const rowId = cb.id;
|
@@ -260,14 +260,14 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
260
260
|
rowEl?.classList.add("bg-white");
|
261
261
|
}
|
262
262
|
});
|
263
|
-
|
263
|
+
|
264
264
|
checkboxes.forEach((cb) => this.updateParentCheckboxes(cb));
|
265
|
-
|
265
|
+
|
266
266
|
this.updateTableSelectedRowsAttribute();
|
267
267
|
});
|
268
268
|
}
|
269
269
|
}
|
270
|
-
|
270
|
+
|
271
271
|
|
272
272
|
hideCloseIcon() {
|
273
273
|
const closeIcon = this.element.querySelector(UP_ARROW_SELECTOR);
|
@@ -449,149 +449,6 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
449
449
|
}
|
450
450
|
}
|
451
451
|
|
452
|
-
// Isolate action bar functionality so it doesn't mix with existing functionality
|
453
|
-
class PbAdvancedTableActionBar {
|
454
|
-
constructor() {
|
455
|
-
this.init();
|
456
|
-
}
|
457
|
-
|
458
|
-
init() {
|
459
|
-
// Initialize action bars for all advanced tables with action bars
|
460
|
-
document.addEventListener('DOMContentLoaded', () => {
|
461
|
-
this.setupActionBars();
|
462
|
-
});
|
463
|
-
|
464
|
-
// Also run immediately in case DOM is already loaded
|
465
|
-
if (document.readyState === 'loading') {
|
466
|
-
// DOM is still loading
|
467
|
-
} else {
|
468
|
-
// DOM is already loaded
|
469
|
-
this.setupActionBars();
|
470
|
-
}
|
471
|
-
}
|
472
|
-
|
473
|
-
setupActionBars() {
|
474
|
-
const advancedTables = document.querySelectorAll('.pb_advanced_table');
|
475
|
-
|
476
|
-
advancedTables.forEach(table => {
|
477
|
-
// Only proceed if this table has both selectable rows AND an action bar
|
478
|
-
if (!this.shouldEnableActionBar(table)) return;
|
479
|
-
|
480
|
-
const actionBar = table.querySelector('.row-selection-actions-card');
|
481
|
-
if (!actionBar) return; // Skip tables without action bars
|
482
|
-
|
483
|
-
// Initialize action bar styles
|
484
|
-
this.initializeActionBar(actionBar);
|
485
|
-
|
486
|
-
// Set up checkbox listeners for this table
|
487
|
-
this.setupCheckboxListeners(table, actionBar);
|
488
|
-
});
|
489
|
-
}
|
490
|
-
|
491
|
-
shouldEnableActionBar(table) {
|
492
|
-
// Check if the table has selectable rows
|
493
|
-
const hasSelectableRows = table.querySelector('input[type="checkbox"]') !== null;
|
494
|
-
|
495
|
-
// Check if the table has a row selection action bar (not other types of action bars)
|
496
|
-
const hasRowSelectionActionBar = table.querySelector('.row-selection-actions-card') !== null;
|
497
|
-
|
498
|
-
// Additional check: look for the presence of row checkboxes with data-row-id
|
499
|
-
const hasRowCheckboxes = table.querySelector('label[data-row-id] input[type="checkbox"]') !== null;
|
500
|
-
|
501
|
-
// Only enable if ALL conditions are met:
|
502
|
-
// 1. Has selectable checkboxes
|
503
|
-
// 2. Has the specific row selection action bar
|
504
|
-
// 3. Has row checkboxes (not just other types of checkboxes)
|
505
|
-
return hasSelectableRows && hasRowSelectionActionBar && hasRowCheckboxes;
|
506
|
-
}
|
507
|
-
|
508
|
-
initializeActionBar(actionBar) {
|
509
|
-
// Set initial hidden state
|
510
|
-
Object.assign(actionBar.style, {
|
511
|
-
height: '0px',
|
512
|
-
overflow: 'hidden',
|
513
|
-
display: 'block',
|
514
|
-
opacity: '0'
|
515
|
-
});
|
516
|
-
|
517
|
-
// Remove any visibility classes
|
518
|
-
actionBar.classList.remove("p_xs", "is-visible", "show-action-card");
|
519
|
-
actionBar.classList.add("p_none");
|
520
|
-
}
|
521
|
-
|
522
|
-
setupCheckboxListeners(table, actionBar) {
|
523
|
-
// Only listen to row checkboxes (those with data-row-id), not all checkboxes
|
524
|
-
const rowCheckboxes = table.querySelectorAll('label[data-row-id] input[type="checkbox"]');
|
525
|
-
|
526
|
-
rowCheckboxes.forEach(checkbox => {
|
527
|
-
checkbox.addEventListener('change', () => {
|
528
|
-
// Use setTimeout to ensure this runs after the main checkbox logic
|
529
|
-
setTimeout(() => {
|
530
|
-
this.updateActionBarVisibility(table, actionBar);
|
531
|
-
}, 0);
|
532
|
-
});
|
533
|
-
});
|
534
|
-
|
535
|
-
// Special handling for select-all checkbox (only if it exists)
|
536
|
-
const selectAllCheckbox = table.querySelector("#select-all-rows");
|
537
|
-
if (selectAllCheckbox) {
|
538
|
-
const selectAllInput = selectAllCheckbox.querySelector('input[type="checkbox"]');
|
539
|
-
if (selectAllInput) {
|
540
|
-
selectAllInput.addEventListener('change', () => {
|
541
|
-
// Use setTimeout to ensure this runs after the main select-all logic
|
542
|
-
setTimeout(() => {
|
543
|
-
this.updateActionBarVisibility(table, actionBar);
|
544
|
-
}, 10); // Slightly longer delay for select-all to ensure all row checkboxes are updated
|
545
|
-
});
|
546
|
-
}
|
547
|
-
}
|
548
|
-
}
|
549
|
-
|
550
|
-
updateActionBarVisibility(table, actionBar) {
|
551
|
-
// Only count row checkboxes (those with data-row-id), not all checkboxes
|
552
|
-
const rowCheckboxes = table.querySelectorAll('label[data-row-id] input[type="checkbox"]');
|
553
|
-
|
554
|
-
// Get all checked row checkboxes
|
555
|
-
const selectedRowCheckboxes = Array.from(rowCheckboxes).filter(cb => cb.checked);
|
556
|
-
|
557
|
-
// Get the selected count
|
558
|
-
const selectedCount = selectedRowCheckboxes.length;
|
559
|
-
|
560
|
-
if (selectedCount > 0) {
|
561
|
-
this.showActionBar(actionBar, selectedCount);
|
562
|
-
} else {
|
563
|
-
this.hideActionBar(actionBar);
|
564
|
-
}
|
565
|
-
}
|
566
|
-
|
567
|
-
showActionBar(actionBar, selectedCount) {
|
568
|
-
// Show action bar directly
|
569
|
-
actionBar.style.height = 'auto';
|
570
|
-
actionBar.style.overflow = 'visible';
|
571
|
-
actionBar.style.opacity = '1';
|
572
|
-
actionBar.classList.remove("p_none");
|
573
|
-
actionBar.classList.add("p_xs", "is-visible", "show-action-card");
|
574
|
-
|
575
|
-
// Update the count
|
576
|
-
const countElement = actionBar.querySelector(".selected-count");
|
577
|
-
if (countElement) {
|
578
|
-
countElement.textContent = `${selectedCount} Selected`;
|
579
|
-
}
|
580
|
-
}
|
581
|
-
|
582
|
-
hideActionBar(actionBar) {
|
583
|
-
// Hide action bar directly
|
584
|
-
actionBar.style.height = '0px';
|
585
|
-
actionBar.style.overflow = 'hidden';
|
586
|
-
actionBar.style.opacity = '0';
|
587
|
-
actionBar.classList.add("p_none");
|
588
|
-
actionBar.classList.remove("p_xs", "is-visible", "show-action-card");
|
589
|
-
}
|
590
|
-
}
|
591
|
-
|
592
|
-
// Initialize the isolated action bar functionality
|
593
|
-
new PbAdvancedTableActionBar();
|
594
|
-
|
595
452
|
window.expandAllRows = (element) => {
|
596
453
|
PbAdvancedTable.handleToggleAllHeaders(element);
|
597
454
|
};
|
@@ -15,8 +15,6 @@ module Playbook
|
|
15
15
|
default: "scroll"
|
16
16
|
prop :selectable_rows, type: Playbook::Props::Boolean,
|
17
17
|
default: false
|
18
|
-
prop :show_actions_bar, type: Playbook::Props::Boolean,
|
19
|
-
default: true
|
20
18
|
|
21
19
|
def classname
|
22
20
|
additional_classes = []
|
@@ -29,7 +27,6 @@ module Playbook
|
|
29
27
|
def th_classname(is_first_column: false)
|
30
28
|
additional_classes = []
|
31
29
|
additional_classes << "pinned-left" if is_first_column && responsive == "scroll" && !selectable_rows
|
32
|
-
additional_classes << "header-cells-with-actions" if selectable_rows && show_actions_bar
|
33
30
|
|
34
31
|
generate_classname("table-header-cells", *additional_classes, separator: " ")
|
35
32
|
end
|
@@ -49,7 +46,6 @@ module Playbook
|
|
49
46
|
if selectable_rows
|
50
47
|
additional_classes = []
|
51
48
|
additional_classes << "table-header-cells-custom"
|
52
|
-
additional_classes << "header-cells-with-actions" if show_actions_bar
|
53
49
|
additional_classes << "checkbox-cell-header"
|
54
50
|
additional_classes << "pinned-left" if responsive == "scroll"
|
55
51
|
pb_rails("table/table_header", props: {
|