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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +8 -19
  3. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +0 -9
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/index.js +55 -336
  6. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -2
  7. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb +11 -11
  8. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx +11 -11
  9. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb +11 -11
  10. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +11 -11
  11. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +11 -11
  12. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +11 -11
  13. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +11 -11
  14. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +11 -11
  15. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +11 -11
  16. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +11 -11
  17. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +11 -11
  18. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +11 -11
  19. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +11 -11
  20. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +11 -11
  21. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +11 -11
  22. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +11 -11
  23. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +11 -11
  24. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +11 -11
  25. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +11 -11
  26. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +11 -11
  27. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb +11 -11
  28. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx +11 -11
  29. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +11 -11
  30. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +2 -0
  31. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.jsx +11 -11
  32. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.md +3 -1
  33. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.html.erb +22 -22
  34. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.jsx +22 -22
  35. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb +22 -22
  36. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx +22 -22
  37. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +11 -11
  38. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +11 -11
  39. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb +11 -11
  40. data/dist/chunks/{_typeahead-BPSIWtFT.js → _typeahead-B9-s4j4U.js} +1 -1
  41. data/dist/chunks/{_weekday_stacked-PfWrqC3z.js → _weekday_stacked-MTfbSUEo.js} +1 -1
  42. data/dist/chunks/vendor.js +1 -1
  43. data/dist/playbook-doc.js +1 -1
  44. data/dist/playbook-rails-react-bindings.js +1 -1
  45. data/dist/playbook-rails.js +1 -1
  46. data/lib/playbook/version.rb +1 -1
  47. metadata +4 -7
  48. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +0 -56
  49. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.html.erb +0 -23
  50. 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: 654590a50901aacde66d35bd4be201e411e132b400b2914cc5e037d3429caded
4
- data.tar.gz: 8d0e41a47e517cf306c76815921ff9aa1f994491a7596b3f259fedd4e0d6e865
3
+ metadata.gz: 0c9bb1a4ff0951660ec5d3c24c2bd747d570a70397e131feb51449e4a02afb8c
4
+ data.tar.gz: 9ee8834f0d67becd4a00c42167cbbd386a44ef23a840762fb1ced0fdec7368a2
5
5
  SHA512:
6
- metadata.gz: e2016cd384a81cd7d9f3d4f93e474f4bb5843d3f199b9e1989dfefd41eaa2cd943aee4823e70fde27d2c503f2e4c90e7a3503f176b5d7d5e07f0fa194d866454
7
- data.tar.gz: 7be919bf509875aeb4beb91b4f25f6b163c2b2c5a20a7a510df6204216592e33c6d512991c2c73eec9a5c462b40bd29417c335c497269b13b582db3938445a52
6
+ metadata.gz: f83838fb88571a3e311c92dd51e7f9161db46b90f0573709b6f92172335d90c185c6e6fc02af5d255b6a9300486bc404be47278d270de5e392c7f7eb968c76bb
7
+ data.tar.gz: 3f7a87d7d42500ad069bdbcc0814ca8cbe5ca69b3d54166228f478184e547df3a4cd580919ad2614733533c2edbd6a6b74a58d7f4a41b7a1a75f4c129ae0f994
@@ -1,21 +1,10 @@
1
1
  <%= pb_content_tag do %>
2
- <% table_id = object.id || "table-#{SecureRandom.hex(8)}" %>
3
- <div id="<%= table_id %>" class="<%= object.classname %>">
4
- <% if object.selectable_rows && object.show_actions_bar %>
5
- <%= pb_rails("advanced_table/table_action_bar", props: {
6
- actions: object.actions,
7
- is_visible: false,
8
- selected_count: 0
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 tableContainer = this.getTableContainer();
48
- const tableId = this.getTableId();
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
- tableData.selectedRows.add(parentCheckboxId);
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
- tableData.selectedRows.delete(parentCheckboxId);
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
- tableData.selectedRows.add(rowId);
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
- tableData.selectedRows.delete(rowId);
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
- tableData.selectedRows.add(childRowId);
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
- tableData.selectedRows.delete(childRowId);
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
- tableData.expandedRows.add(this.element.id);
197
+ PbAdvancedTable.expandedRows.add(this.element.id);
331
198
  } else {
332
- tableData.expandedRows.delete(this.element.id);
199
+ PbAdvancedTable.expandedRows.delete(this.element.id);
333
200
  }
334
- this.toggleElement(this.target, tableData.expandedRows);
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
- if (!table) return;
342
-
343
- // Skip if this table is already initialized
344
- if (tableData.initialized) return;
345
-
346
- // Initialize the action bar
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
- tableData.expandedRows.add(button.id);
230
+ PbAdvancedTable.expandedRows.add(button.id);
433
231
  } else {
434
- tableData.expandedRows.delete(button.id);
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
- // Remove any existing event listeners
443
- const newSelectAllCheckbox = selectAllCheckbox.cloneNode(true);
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
- tableData.selectedRows.add(rowId);
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
- tableData.selectedRows.delete(rowId);
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, expandedRows) {
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, expandedRows) {
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, expandedRows) {
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, expandedRows) : this.showElement(elements, expandedRows);
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
- tableData.expandedRows.delete(button.id);
398
+ PbAdvancedTable.expandedRows.delete(button.id);
614
399
  });
615
400
  } else {
616
401
  firstLevelButtons.forEach((button) => {
617
- if (!tableData.expandedRows.has(button.id)) {
402
+ if (!PbAdvancedTable.expandedRows.has(button.id)) {
618
403
  button.click();
619
- tableData.expandedRows.add(button.id);
404
+ PbAdvancedTable.expandedRows.add(button.id);
620
405
  }
621
406
  });
622
407
 
623
- tableData.expandedRows.forEach((rowId) => {
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
- tableData.expandedRows.delete(button.id);
439
+ PbAdvancedTable.expandedRows.delete(button.id);
661
440
  });
662
441
  } else {
663
442
  subRowButtons.forEach((button) => {
664
- if (!tableData.expandedRows.has(button.id)) {
443
+ if (!PbAdvancedTable.expandedRows.has(button.id)) {
665
444
  button.click();
666
- tableData.expandedRows.add(button.id);
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
  };