playbook_ui 14.19.0.pre.alpha.PLAY2033atactionbarrails7730 → 14.19.0.pre.alpha.PLAY2152mlssinglevariantrendersvaluebug7743
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/advanced_table.html.erb +8 -19
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +0 -9
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/index.js +55 -336
- 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 +2 -0
- 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 +3 -1
- 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/dist/chunks/{_typeahead-BPSIWtFT.js → _typeahead-B9-s4j4U.js} +1 -1
- data/dist/chunks/{_weekday_stacked-PfWrqC3z.js → _weekday_stacked-MTfbSUEo.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +4 -7
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +0 -56
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c9bb1a4ff0951660ec5d3c24c2bd747d570a70397e131feb51449e4a02afb8c
|
4
|
+
data.tar.gz: 9ee8834f0d67becd4a00c42167cbbd386a44ef23a840762fb1ced0fdec7368a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f83838fb88571a3e311c92dd51e7f9161db46b90f0573709b6f92172335d90c185c6e6fc02af5d255b6a9300486bc404be47278d270de5e392c7f7eb968c76bb
|
7
|
+
data.tar.gz: 3f7a87d7d42500ad069bdbcc0814ca8cbe5ca69b3d54166228f478184e547df3a4cd580919ad2614733533c2edbd6a6b74a58d7f4a41b7a1a75f4c129ae0f994
|
@@ -1,21 +1,10 @@
|
|
1
1
|
<%= pb_content_tag do %>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<% end %>
|
11
|
-
|
12
|
-
<%= 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 %>
|
13
|
-
<% if content.present? %>
|
14
|
-
<% content.presence %>
|
15
|
-
<% else %>
|
16
|
-
<%= 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 }) %>
|
17
|
-
<%= 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 }) %>
|
18
|
-
<% end %>
|
19
|
-
<% end %>
|
20
|
-
</div>
|
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 %>
|
21
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: false
|
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
|
@@ -15,7 +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
18
|
|
20
19
|
react:
|
21
20
|
- advanced_table_default: Default (Required Props)
|
@@ -9,131 +9,19 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
9
9
|
return ADVANCED_TABLE_SELECTOR;
|
10
10
|
}
|
11
11
|
|
12
|
-
// Track selections per table
|
13
|
-
static tableData = new Map();
|
14
|
-
|
15
|
-
// Get or initialize data for a specific table
|
16
|
-
static getTableData(tableId) {
|
17
|
-
if (!PbAdvancedTable.tableData.has(tableId)) {
|
18
|
-
PbAdvancedTable.tableData.set(tableId, {
|
19
|
-
selectedRows: new Set(),
|
20
|
-
expandedRows: new Set(),
|
21
|
-
initialized: false
|
22
|
-
});
|
23
|
-
}
|
24
|
-
return PbAdvancedTable.tableData.get(tableId);
|
25
|
-
}
|
26
|
-
|
27
|
-
// Get the table container from any element within the table
|
28
|
-
getTableContainer() {
|
29
|
-
return this.element.closest(".pb_advanced_table");
|
30
|
-
}
|
31
|
-
|
32
|
-
// Get table ID, create one if needed
|
33
|
-
getTableId() {
|
34
|
-
const tableContainer = this.getTableContainer();
|
35
|
-
if (!tableContainer) return null;
|
36
|
-
|
37
|
-
// Generate ID if none exists
|
38
|
-
if (!tableContainer.id) {
|
39
|
-
tableContainer.id = `table-${Date.now()}-${Math.floor(Math.random() * 10000)}`;
|
40
|
-
}
|
41
|
-
|
42
|
-
return tableContainer.id;
|
43
|
-
}
|
44
|
-
|
45
|
-
// Update the data attribute with selected rows
|
46
12
|
updateTableSelectedRowsAttribute() {
|
47
|
-
const
|
48
|
-
|
49
|
-
if (!tableId) return;
|
50
|
-
|
51
|
-
const tableData = PbAdvancedTable.getTableData(tableId);
|
52
|
-
const selectedRowsArray = Array.from(tableData.selectedRows);
|
53
|
-
|
54
|
-
// Update data attribute
|
55
|
-
tableContainer.dataset.selectedRows = JSON.stringify(selectedRowsArray);
|
56
|
-
|
57
|
-
// Update action bar visibility
|
58
|
-
this.updateActionBarVisibility(tableContainer, tableData.selectedRows);
|
59
|
-
}
|
60
|
-
|
61
|
-
// Update action bar visibility based on selection state
|
62
|
-
updateActionBarVisibility(tableContainer, selectedRows) {
|
63
|
-
if (!tableContainer) return;
|
64
|
-
|
65
|
-
const actionBar = tableContainer.querySelector(".row-selection-actions-card");
|
66
|
-
if (!actionBar) return;
|
67
|
-
|
68
|
-
const selectedCount = selectedRows.size;
|
69
|
-
|
70
|
-
// Update count display
|
71
|
-
const countElement = actionBar.querySelector(".selected-count");
|
72
|
-
if (countElement) {
|
73
|
-
countElement.textContent = `${selectedCount} Selected`;
|
74
|
-
}
|
75
|
-
|
76
|
-
// Show/hide based on selection
|
77
|
-
if (selectedCount > 0) {
|
78
|
-
this.showActionBar(actionBar);
|
79
|
-
} else {
|
80
|
-
this.hideActionBar(actionBar);
|
81
|
-
}
|
82
|
-
}
|
83
|
-
|
84
|
-
// Show action bar with animation
|
85
|
-
showActionBar(actionBar) {
|
86
|
-
if (!actionBar) return;
|
87
|
-
|
88
|
-
// Force display block
|
89
|
-
actionBar.style.display = "block";
|
90
|
-
|
91
|
-
// Get the height before animation
|
92
|
-
const height = actionBar.scrollHeight + "px";
|
93
|
-
|
94
|
-
// Force all style changes directly
|
95
|
-
actionBar.style.height = height;
|
96
|
-
actionBar.classList.add("is-visible");
|
97
|
-
actionBar.classList.add("show-action-card");
|
98
|
-
actionBar.style.overflow = "hidden";
|
99
|
-
|
100
|
-
// Complete animation after delay
|
101
|
-
window.setTimeout(() => {
|
102
|
-
if (actionBar.classList.contains("is-visible")) {
|
103
|
-
actionBar.style.height = "";
|
104
|
-
actionBar.style.overflow = "visible";
|
105
|
-
}
|
106
|
-
}, 300);
|
107
|
-
}
|
108
|
-
|
109
|
-
// Hide action bar with animation
|
110
|
-
hideActionBar(actionBar) {
|
111
|
-
if (!actionBar) return;
|
112
|
-
|
113
|
-
// Set exact height before animation
|
114
|
-
actionBar.style.height = actionBar.scrollHeight + "px";
|
115
|
-
actionBar.offsetHeight; // Trigger reflow
|
116
|
-
|
117
|
-
// Animate to height 0
|
118
|
-
window.setTimeout(() => {
|
119
|
-
actionBar.style.height = "0";
|
120
|
-
actionBar.style.overflow = "hidden";
|
121
|
-
}, 10);
|
122
|
-
|
123
|
-
// Remove visibility classes after animation
|
124
|
-
window.setTimeout(() => {
|
125
|
-
actionBar.classList.remove("is-visible");
|
126
|
-
actionBar.classList.remove("show-action-card");
|
127
|
-
}, 300);
|
13
|
+
const mainTable = this.element.closest(".pb_advanced_table");
|
14
|
+
mainTable.dataset.selectedRows = JSON.stringify(Array.from(PbAdvancedTable.selectedRows));
|
128
15
|
}
|
129
16
|
|
130
|
-
// Check if row is expanded
|
17
|
+
// Check if the row is expanded or collapsed
|
18
|
+
// This is used to determine the background color of the row
|
19
|
+
// when the checkbox is checked or unchecked
|
131
20
|
isRowExpanded(rowEl) {
|
132
21
|
const closeIcon = rowEl.querySelector(UP_ARROW_SELECTOR);
|
133
22
|
return closeIcon?.style.display === "none" || !closeIcon;
|
134
23
|
}
|
135
24
|
|
136
|
-
// Update parent checkboxes based on child selections
|
137
25
|
updateParentCheckboxes(checkbox) {
|
138
26
|
const rowEl = checkbox.closest("tr");
|
139
27
|
if (!rowEl) return;
|
@@ -141,11 +29,6 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
141
29
|
const table = rowEl.closest("table");
|
142
30
|
if (!table) return;
|
143
31
|
|
144
|
-
const tableId = this.getTableId();
|
145
|
-
if (!tableId) return;
|
146
|
-
|
147
|
-
const tableData = PbAdvancedTable.getTableData(tableId);
|
148
|
-
|
149
32
|
const contentTrail = rowEl.dataset.advancedTableContent;
|
150
33
|
if (!contentTrail) return;
|
151
34
|
|
@@ -188,15 +71,15 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
188
71
|
|
189
72
|
const parentCheckboxId = parentCheckbox.id;
|
190
73
|
if (allChildrenChecked) {
|
191
|
-
|
74
|
+
PbAdvancedTable.selectedRows.add(parentCheckboxId);
|
192
75
|
parentRow.classList.add("bg-row-selection");
|
193
76
|
parentRow.classList.remove("bg-white", "bg-silver");
|
194
77
|
} else {
|
195
|
-
|
78
|
+
PbAdvancedTable.selectedRows.delete(parentCheckboxId);
|
196
79
|
}
|
197
80
|
if (!allChildrenChecked) {
|
198
81
|
parentRow.classList.remove("bg-row-selection");
|
199
|
-
|
82
|
+
|
200
83
|
if (this.isRowExpanded(parentRow)) {
|
201
84
|
parentRow.classList.remove("bg-silver");
|
202
85
|
parentRow.classList.add("bg-white");
|
@@ -208,24 +91,18 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
208
91
|
});
|
209
92
|
}
|
210
93
|
|
211
|
-
// Handle row checkbox click
|
212
94
|
handleCheckboxClick(event) {
|
213
95
|
const checkbox = event.currentTarget;
|
214
96
|
const rowId = checkbox.id;
|
215
97
|
const isChecked = checkbox.checked;
|
216
98
|
const rowEl = checkbox.closest("tr");
|
217
99
|
|
218
|
-
const tableId = this.getTableId();
|
219
|
-
if (!tableId) return;
|
220
|
-
|
221
|
-
const tableData = PbAdvancedTable.getTableData(tableId);
|
222
|
-
|
223
100
|
if (isChecked) {
|
224
|
-
|
101
|
+
PbAdvancedTable.selectedRows.add(rowId);
|
225
102
|
rowEl.classList.add("bg-row-selection");
|
226
103
|
rowEl.classList.remove("bg-white", "bg-silver");
|
227
104
|
} else {
|
228
|
-
|
105
|
+
PbAdvancedTable.selectedRows.delete(rowId);
|
229
106
|
}
|
230
107
|
// Update background color on row
|
231
108
|
if (!isChecked) {
|
@@ -239,7 +116,6 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
239
116
|
rowEl.classList.add("bg-silver");
|
240
117
|
}
|
241
118
|
}
|
242
|
-
|
243
119
|
if (rowEl) {
|
244
120
|
const table = rowEl.closest("table");
|
245
121
|
const rowContent = rowEl.dataset.advancedTableContent;
|
@@ -261,11 +137,11 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
261
137
|
const childRowId = childCheckbox.id;
|
262
138
|
const childRowEl = childCheckbox.closest("tr");
|
263
139
|
if (isChecked) {
|
264
|
-
|
140
|
+
PbAdvancedTable.selectedRows.add(childRowId);
|
265
141
|
childRowEl?.classList.add("bg-row-selection");
|
266
142
|
childRowEl?.classList.remove("bg-white", "bg-silver");
|
267
143
|
} else {
|
268
|
-
|
144
|
+
PbAdvancedTable.selectedRows.delete(childRowId);
|
269
145
|
}
|
270
146
|
if (!isChecked) {
|
271
147
|
childRowEl?.classList.remove("bg-row-selection");
|
@@ -307,121 +183,43 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
307
183
|
return table.querySelectorAll(`[data-row-parent="${this.element.id}"]`);
|
308
184
|
}
|
309
185
|
|
186
|
+
static expandedRows = new Set();
|
187
|
+
static selectedRows = new Set();
|
310
188
|
static isCollapsing = false;
|
311
189
|
|
312
190
|
connect() {
|
313
|
-
// Get table container and generate ID if needed
|
314
|
-
const tableContainer = this.getTableContainer();
|
315
|
-
if (!tableContainer) return;
|
316
|
-
|
317
|
-
const tableId = this.getTableId();
|
318
|
-
if (!tableId) return;
|
319
|
-
|
320
|
-
// Get or initialize table data
|
321
|
-
const tableData = PbAdvancedTable.getTableData(tableId);
|
322
|
-
|
323
|
-
// Handle toggle click
|
324
191
|
this.element.addEventListener("click", () => {
|
325
192
|
if (!PbAdvancedTable.isCollapsing) {
|
326
193
|
const isExpanded =
|
327
194
|
this.element.querySelector(UP_ARROW_SELECTOR).style.display ===
|
328
195
|
"inline-block";
|
329
196
|
if (!isExpanded) {
|
330
|
-
|
197
|
+
PbAdvancedTable.expandedRows.add(this.element.id);
|
331
198
|
} else {
|
332
|
-
|
199
|
+
PbAdvancedTable.expandedRows.delete(this.element.id);
|
333
200
|
}
|
334
|
-
this.toggleElement(this.target
|
201
|
+
this.toggleElement(this.target);
|
335
202
|
}
|
336
203
|
});
|
337
|
-
|
204
|
+
|
338
205
|
this.hideCloseIcon();
|
339
|
-
|
206
|
+
|
340
207
|
const table = this.element.closest("table");
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
//
|
347
|
-
const actionBar = tableContainer.querySelector(".row-selection-actions-card");
|
348
|
-
if (actionBar) {
|
349
|
-
// Direct style application
|
350
|
-
Object.assign(actionBar.style, {
|
351
|
-
height: '0px',
|
352
|
-
overflow: 'hidden',
|
353
|
-
display: 'block',
|
354
|
-
opacity: '0'
|
355
|
-
});
|
356
|
-
|
357
|
-
// Remove visibility classes
|
358
|
-
actionBar.classList.remove("is-visible", "show-action-card");
|
359
|
-
|
360
|
-
// Add CSS rules
|
361
|
-
const styleId = `action-bar-styles-${tableId}`;
|
362
|
-
let styleTag = document.getElementById(styleId);
|
363
|
-
if (!styleTag) {
|
364
|
-
styleTag = document.createElement('style');
|
365
|
-
styleTag.id = styleId;
|
366
|
-
document.head.appendChild(styleTag);
|
367
|
-
}
|
368
|
-
|
369
|
-
styleTag.textContent = `
|
370
|
-
#${tableId} .row-selection-actions-card.is-visible.show-action-card {
|
371
|
-
height: auto !important;
|
372
|
-
overflow: visible !important;
|
373
|
-
display: block !important;
|
374
|
-
opacity: 1 !important;
|
375
|
-
transition: height 0.3s ease, opacity 0.3s ease !important;
|
376
|
-
}
|
377
|
-
`;
|
378
|
-
|
379
|
-
// Direct DOM event listeners for checkboxes
|
380
|
-
const checkboxes = table.querySelectorAll('input[type="checkbox"]');
|
381
|
-
checkboxes.forEach(checkbox => {
|
382
|
-
checkbox.addEventListener('change', function() {
|
383
|
-
// Count selected checkboxes
|
384
|
-
const selectedCount = Array.from(checkboxes).filter(cb => cb.checked).length;
|
385
|
-
|
386
|
-
if (selectedCount > 0) {
|
387
|
-
// Show action bar directly
|
388
|
-
actionBar.style.height = 'auto';
|
389
|
-
actionBar.style.overflow = 'visible';
|
390
|
-
actionBar.style.opacity = '1';
|
391
|
-
actionBar.classList.add("is-visible", "show-action-card");
|
392
|
-
|
393
|
-
// Update the count
|
394
|
-
const countElement = actionBar.querySelector(".selected-count");
|
395
|
-
if (countElement) {
|
396
|
-
countElement.textContent = `${selectedCount} Selected`;
|
397
|
-
}
|
398
|
-
} else {
|
399
|
-
// Hide action bar directly
|
400
|
-
actionBar.style.height = '0px';
|
401
|
-
actionBar.style.overflow = 'hidden';
|
402
|
-
actionBar.style.opacity = '0';
|
403
|
-
actionBar.classList.remove("is-visible", "show-action-card");
|
404
|
-
}
|
405
|
-
});
|
406
|
-
});
|
407
|
-
}
|
408
|
-
|
409
|
-
// Bind checkbox change handlers
|
208
|
+
|
209
|
+
// Prevent duplicate initialization
|
210
|
+
if (table.dataset.pbAdvancedTableInitialized) return;
|
211
|
+
table.dataset.pbAdvancedTableInitialized = "true";
|
212
|
+
|
213
|
+
// Bind checkbox change handlers for all row checkboxes
|
410
214
|
const checkboxLabels = table.querySelectorAll("label[data-row-id]");
|
411
215
|
checkboxLabels.forEach((label) => {
|
412
216
|
const checkbox = label.querySelector("input[type='checkbox']");
|
413
217
|
if (!checkbox) return;
|
414
|
-
|
415
|
-
// Remove any existing event listeners
|
416
|
-
const newCheckbox = checkbox.cloneNode(true);
|
417
|
-
checkbox.parentNode.replaceChild(newCheckbox, checkbox);
|
418
|
-
|
419
|
-
// Add our event listener
|
420
|
-
newCheckbox.addEventListener("change", (event) => {
|
218
|
+
checkbox.addEventListener("change", (event) => {
|
421
219
|
this.handleCheckboxClick(event);
|
422
220
|
});
|
423
221
|
});
|
424
|
-
|
222
|
+
|
425
223
|
// Bind nested row expansion logic
|
426
224
|
const nestedButtons = table.querySelectorAll("[data-advanced-table]");
|
427
225
|
nestedButtons.forEach((button) => {
|
@@ -429,61 +227,54 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
429
227
|
const isExpanded =
|
430
228
|
button.querySelector(UP_ARROW_SELECTOR).style.display === "inline-block";
|
431
229
|
if (isExpanded) {
|
432
|
-
|
230
|
+
PbAdvancedTable.expandedRows.add(button.id);
|
433
231
|
} else {
|
434
|
-
|
232
|
+
PbAdvancedTable.expandedRows.delete(button.id);
|
435
233
|
}
|
436
234
|
});
|
437
235
|
});
|
438
|
-
|
439
|
-
// Bind select-all logic
|
236
|
+
|
237
|
+
// Bind select-all logic for this table
|
440
238
|
const selectAllCheckbox = table.querySelector("#select-all-rows");
|
441
239
|
if (selectAllCheckbox) {
|
442
|
-
|
443
|
-
|
444
|
-
selectAllCheckbox.parentNode.replaceChild(newSelectAllCheckbox, selectAllCheckbox);
|
445
|
-
|
446
|
-
// Add our event listener
|
447
|
-
newSelectAllCheckbox.addEventListener("change", () => {
|
448
|
-
const checkboxInput = newSelectAllCheckbox.querySelector('input[type="checkbox"]');
|
240
|
+
selectAllCheckbox.addEventListener("change", () => {
|
241
|
+
const checkboxInput = selectAllCheckbox.querySelector('input[type="checkbox"]');
|
449
242
|
const checkAll = checkboxInput.checked;
|
450
|
-
|
243
|
+
|
451
244
|
const checkboxes = Array.from(
|
452
245
|
table.querySelectorAll("label[data-row-id] input[type='checkbox']")
|
453
246
|
);
|
454
|
-
|
247
|
+
|
455
248
|
checkboxes.forEach((cb) => {
|
456
249
|
cb.checked = checkAll;
|
457
250
|
const rowId = cb.id;
|
458
251
|
const rowEl = cb.closest("tr");
|
459
252
|
|
460
253
|
if (checkAll) {
|
461
|
-
|
254
|
+
PbAdvancedTable.selectedRows.add(rowId);
|
462
255
|
rowEl?.classList.add("bg-row-selection");
|
463
256
|
rowEl?.classList.remove("bg-white", "bg-silver");
|
464
257
|
} else {
|
465
|
-
|
258
|
+
PbAdvancedTable.selectedRows.delete(rowId);
|
466
259
|
rowEl?.classList.remove("bg-row-selection");
|
467
260
|
rowEl?.classList.add("bg-white");
|
468
261
|
}
|
469
262
|
});
|
470
|
-
|
263
|
+
|
471
264
|
checkboxes.forEach((cb) => this.updateParentCheckboxes(cb));
|
472
|
-
|
265
|
+
|
473
266
|
this.updateTableSelectedRowsAttribute();
|
474
267
|
});
|
475
268
|
}
|
476
|
-
|
477
|
-
// Mark table as initialized
|
478
|
-
tableData.initialized = true;
|
479
269
|
}
|
270
|
+
|
480
271
|
|
481
272
|
hideCloseIcon() {
|
482
273
|
const closeIcon = this.element.querySelector(UP_ARROW_SELECTOR);
|
483
274
|
closeIcon.style.display = "none";
|
484
275
|
}
|
485
276
|
|
486
|
-
showElement(elements
|
277
|
+
showElement(elements) {
|
487
278
|
elements.forEach((elem) => {
|
488
279
|
elem.style.display = "table-row";
|
489
280
|
elem.classList.add("is-visible");
|
@@ -506,7 +297,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
506
297
|
(id) => `${childRow.id}_${id}`
|
507
298
|
);
|
508
299
|
const allAncestorsExpanded = prefixedAncestorIds.every((id) =>
|
509
|
-
expandedRows.has(id)
|
300
|
+
PbAdvancedTable.expandedRows.has(id)
|
510
301
|
);
|
511
302
|
|
512
303
|
const checkIfParentIsExpanded = () => {
|
@@ -515,7 +306,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
515
306
|
const isParentVisible =
|
516
307
|
childRow.previousElementSibling.classList.contains("is-visible");
|
517
308
|
if (parentRowId) {
|
518
|
-
const isInSet = expandedRows.has(parentRowId);
|
309
|
+
const isInSet = PbAdvancedTable.expandedRows.has(parentRowId);
|
519
310
|
if (isInSet && isParentVisible) {
|
520
311
|
return true;
|
521
312
|
}
|
@@ -535,14 +326,14 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
535
326
|
});
|
536
327
|
}
|
537
328
|
|
538
|
-
hideElement(elements
|
329
|
+
hideElement(elements) {
|
539
330
|
elements.forEach((elem) => {
|
540
331
|
elem.style.display = "none";
|
541
332
|
elem.classList.remove("is-visible");
|
542
333
|
|
543
334
|
// Remove the row ID from expandedRows when this row is hidden
|
544
|
-
if (expandedRows.has(elem.id)) {
|
545
|
-
expandedRows.delete(elem.id);
|
335
|
+
if (PbAdvancedTable.expandedRows.has(elem.id)) {
|
336
|
+
PbAdvancedTable.expandedRows.delete(elem.id);
|
546
337
|
}
|
547
338
|
|
548
339
|
const childrenArray = elem.dataset.advancedTableContent.split("-");
|
@@ -563,12 +354,12 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
563
354
|
});
|
564
355
|
}
|
565
356
|
|
566
|
-
toggleElement(elements
|
357
|
+
toggleElement(elements) {
|
567
358
|
if (!elements.length) return;
|
568
359
|
|
569
360
|
const isVisible = elements[0].classList.contains("is-visible");
|
570
361
|
|
571
|
-
isVisible ? this.hideElement(elements
|
362
|
+
isVisible ? this.hideElement(elements) : this.showElement(elements);
|
572
363
|
isVisible ? this.displayDownArrow() : this.displayUpArrow();
|
573
364
|
|
574
365
|
const row = this.element.closest("tr");
|
@@ -591,12 +382,6 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
591
382
|
}
|
592
383
|
|
593
384
|
static handleToggleAllHeaders(element) {
|
594
|
-
// Get table ID
|
595
|
-
const tableContainer = element.closest(".pb_advanced_table");
|
596
|
-
if (!tableContainer || !tableContainer.id) return;
|
597
|
-
|
598
|
-
const tableData = PbAdvancedTable.getTableData(tableContainer.id);
|
599
|
-
|
600
385
|
const table = element.closest(".pb_table");
|
601
386
|
const firstLevelButtons = table.querySelectorAll(
|
602
387
|
".pb_advanced_table_body > .pb_table_tr[data-row-depth='0'] [data-advanced-table]"
|
@@ -610,17 +395,17 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
610
395
|
if (allExpanded) {
|
611
396
|
firstLevelButtons.forEach((button) => {
|
612
397
|
button.click();
|
613
|
-
|
398
|
+
PbAdvancedTable.expandedRows.delete(button.id);
|
614
399
|
});
|
615
400
|
} else {
|
616
401
|
firstLevelButtons.forEach((button) => {
|
617
|
-
if (!
|
402
|
+
if (!PbAdvancedTable.expandedRows.has(button.id)) {
|
618
403
|
button.click();
|
619
|
-
|
404
|
+
PbAdvancedTable.expandedRows.add(button.id);
|
620
405
|
}
|
621
406
|
});
|
622
407
|
|
623
|
-
|
408
|
+
PbAdvancedTable.expandedRows.forEach((rowId) => {
|
624
409
|
const nestedButton = table.querySelector(
|
625
410
|
`[data-advanced-table][id="${rowId}"]`
|
626
411
|
);
|
@@ -632,12 +417,6 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
632
417
|
}
|
633
418
|
|
634
419
|
static handleToggleAllSubRows(element, rowDepth) {
|
635
|
-
// Get table ID
|
636
|
-
const tableContainer = element.closest(".pb_advanced_table");
|
637
|
-
if (!tableContainer || !tableContainer.id) return;
|
638
|
-
|
639
|
-
const tableData = PbAdvancedTable.getTableData(tableContainer.id);
|
640
|
-
|
641
420
|
const table = element.closest(".pb_table");
|
642
421
|
const parentRow = element.closest("tr");
|
643
422
|
if (!parentRow) {
|
@@ -657,79 +436,19 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
657
436
|
if (allExpanded) {
|
658
437
|
subRowButtons.forEach((button) => {
|
659
438
|
button.click();
|
660
|
-
|
439
|
+
PbAdvancedTable.expandedRows.delete(button.id);
|
661
440
|
});
|
662
441
|
} else {
|
663
442
|
subRowButtons.forEach((button) => {
|
664
|
-
if (!
|
443
|
+
if (!PbAdvancedTable.expandedRows.has(button.id)) {
|
665
444
|
button.click();
|
666
|
-
|
445
|
+
PbAdvancedTable.expandedRows.add(button.id);
|
667
446
|
}
|
668
447
|
});
|
669
448
|
}
|
670
449
|
}
|
671
450
|
}
|
672
451
|
|
673
|
-
// Initialize on page load
|
674
|
-
document.addEventListener('DOMContentLoaded', () => {
|
675
|
-
const advancedTables = document.querySelectorAll('.pb_advanced_table');
|
676
|
-
|
677
|
-
// Initialize each table and its action bar
|
678
|
-
advancedTables.forEach(table => {
|
679
|
-
// Generate ID if needed
|
680
|
-
if (!table.id) {
|
681
|
-
table.id = `table-${Date.now()}-${Math.floor(Math.random() * 10000)}`;
|
682
|
-
}
|
683
|
-
|
684
|
-
// Initialize table data
|
685
|
-
PbAdvancedTable.getTableData(table.id);
|
686
|
-
|
687
|
-
// Initialize action bar
|
688
|
-
const actionBar = table.querySelector('.row-selection-actions-card');
|
689
|
-
if (actionBar) {
|
690
|
-
// Direct styling override
|
691
|
-
Object.assign(actionBar.style, {
|
692
|
-
height: '0px',
|
693
|
-
overflow: 'hidden',
|
694
|
-
display: 'block',
|
695
|
-
opacity: '0'
|
696
|
-
});
|
697
|
-
|
698
|
-
// Remove any visibility classes
|
699
|
-
actionBar.classList.remove("is-visible", "show-action-card");
|
700
|
-
|
701
|
-
// Direct DOM manipulation for checkboxes
|
702
|
-
const checkboxes = table.querySelectorAll('input[type="checkbox"]');
|
703
|
-
checkboxes.forEach(checkbox => {
|
704
|
-
checkbox.addEventListener('change', function() {
|
705
|
-
// Count selected checkboxes
|
706
|
-
const selectedCount = Array.from(checkboxes).filter(cb => cb.checked).length;
|
707
|
-
|
708
|
-
if (selectedCount > 0) {
|
709
|
-
// Show action bar directly
|
710
|
-
actionBar.style.height = 'auto';
|
711
|
-
actionBar.style.overflow = 'visible';
|
712
|
-
actionBar.style.opacity = '1';
|
713
|
-
actionBar.classList.add("is-visible", "show-action-card");
|
714
|
-
|
715
|
-
// Update the count
|
716
|
-
const countElement = actionBar.querySelector(".selected-count");
|
717
|
-
if (countElement) {
|
718
|
-
countElement.textContent = `${selectedCount} Selected`;
|
719
|
-
}
|
720
|
-
} else {
|
721
|
-
// Hide action bar directly
|
722
|
-
actionBar.style.height = '0px';
|
723
|
-
actionBar.style.overflow = 'hidden';
|
724
|
-
actionBar.style.opacity = '0';
|
725
|
-
actionBar.classList.remove("is-visible", "show-action-card");
|
726
|
-
}
|
727
|
-
});
|
728
|
-
});
|
729
|
-
}
|
730
|
-
});
|
731
|
-
});
|
732
|
-
|
733
452
|
window.expandAllRows = (element) => {
|
734
453
|
PbAdvancedTable.handleToggleAllHeaders(element);
|
735
454
|
};
|