playbook_ui 14.22.0.pre.rc.7 → 14.23.0.pre.alpha.PLAY2146dropdownactivestylesreact9141

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 (174) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +32 -11
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +0 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +3 -3
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +19 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +6 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +2 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.jsx +65 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.md +5 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +46 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +7 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.jsx +69 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.md +1 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.jsx +107 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.md +1 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.html.erb +51 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.md +1 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +14 -8
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +16 -1
  22. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +3 -1
  23. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +5 -1
  24. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +36 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +11 -2
  26. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -0
  27. data/app/pb_kits/playbook/pb_badge/_badge.scss +5 -6
  28. data/app/pb_kits/playbook/pb_bar_graph/barGraphTheme.ts +106 -0
  29. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_colors.jsx +33 -15
  30. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_default.jsx +33 -15
  31. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.jsx +52 -22
  32. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.md +3 -0
  33. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_horizontal.jsx +12 -16
  34. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend.jsx +31 -15
  35. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_non_clickable.jsx +39 -16
  36. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.jsx +86 -38
  37. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.md +1 -1
  38. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_negative_numbers.jsx +32 -15
  39. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.jsx +72 -22
  40. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.md +1 -1
  41. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_spline.jsx +31 -15
  42. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_stacked.jsx +37 -16
  43. data/app/pb_kits/playbook/pb_bar_graph/docs/_description.md +1 -3
  44. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -3
  45. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -2
  46. data/app/pb_kits/playbook/pb_body/docs/_body_truncate.jsx +3 -3
  47. data/app/pb_kits/playbook/pb_body/docs/_body_truncate_react.md +4 -0
  48. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +12 -1
  49. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +1 -1
  50. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate_rails.md +2 -1
  51. data/app/pb_kits/playbook/pb_checkbox/index.js +3 -1
  52. data/app/pb_kits/playbook/pb_circle_chart/circleChartTheme.ts +36 -1
  53. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.jsx +71 -26
  54. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.jsx +29 -16
  55. data/app/pb_kits/playbook/pb_circle_chart/docs/{_circle_chart_colors.md → _circle_chart_colors_rails.md} +1 -1
  56. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors_react.md +2 -0
  57. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.jsx +28 -16
  58. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.md +4 -2
  59. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.jsx +23 -15
  60. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_inner_sizes.jsx +81 -51
  61. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.jsx +103 -75
  62. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.md +4 -7
  63. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_live_data.jsx +19 -13
  64. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_rounded.jsx +30 -17
  65. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_labels.jsx +34 -20
  66. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_legend_kit.jsx +29 -20
  67. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_title.jsx +28 -20
  68. data/app/pb_kits/playbook/pb_circle_chart/docs/_description.md +1 -0
  69. data/app/pb_kits/playbook/pb_circle_chart/docs/example.yml +0 -1
  70. data/app/pb_kits/playbook/pb_circle_chart/docs/index.js +0 -1
  71. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +12 -4
  72. data/app/pb_kits/playbook/pb_draggable/context/types.ts +5 -2
  73. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +17 -1
  74. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +6 -0
  75. data/app/pb_kits/playbook/pb_dropdown/_dropdown_mixin.scss +36 -0
  76. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_active_style_options.jsx +90 -0
  77. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_active_style_options_react.md +4 -0
  78. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_radio_options.jsx +1 -0
  79. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_radio_options_react.md +1 -1
  80. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +3 -2
  81. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
  82. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +24 -0
  83. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +11 -1
  84. data/app/pb_kits/playbook/pb_gauge/docs/_description.md +1 -0
  85. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.jsx +32 -15
  86. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors_react.md +2 -0
  87. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.jsx +35 -9
  88. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex_react.md +1 -0
  89. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_default.jsx +26 -14
  90. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_disable_animation.jsx +32 -15
  91. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_full_circle.jsx +45 -17
  92. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_height.jsx +59 -22
  93. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_live_data.jsx +40 -9
  94. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_min_max.jsx +50 -18
  95. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_sizing.jsx +31 -18
  96. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_title.jsx +34 -17
  97. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units.jsx +64 -23
  98. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units_react.md +1 -0
  99. data/app/pb_kits/playbook/pb_gauge/docs/example.yml +0 -1
  100. data/app/pb_kits/playbook/pb_gauge/docs/index.js +0 -1
  101. data/app/pb_kits/playbook/pb_gauge/gaugeTheme.ts +7 -1
  102. data/app/pb_kits/playbook/pb_line_graph/docs/_description.md +1 -3
  103. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors.jsx +36 -17
  104. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors_react.md +3 -0
  105. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_default.jsx +31 -16
  106. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.jsx +63 -31
  107. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.md +3 -0
  108. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend.jsx +35 -16
  109. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_nonclickable.jsx +41 -16
  110. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.jsx +107 -62
  111. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.md +4 -7
  112. data/app/pb_kits/playbook/pb_line_graph/docs/example.yml +0 -1
  113. data/app/pb_kits/playbook/pb_line_graph/docs/index.js +0 -1
  114. data/app/pb_kits/playbook/pb_line_graph/lineGraphTheme.ts +16 -1
  115. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +30 -17
  116. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.html.erb +10 -0
  117. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.jsx +26 -0
  118. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.md +3 -0
  119. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +2 -0
  120. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  121. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  122. data/app/pb_kits/playbook/pb_table/_table.tsx +4 -4
  123. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.jsx +8 -8
  124. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_react.md +1 -1
  125. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.jsx +12 -12
  126. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_react.md +3 -3
  127. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.jsx +12 -12
  128. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_react.md +3 -3
  129. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +1 -0
  130. data/app/pb_kits/playbook/pb_title/docs/_title_truncate.jsx +3 -3
  131. data/app/pb_kits/playbook/pb_title/docs/_title_truncate_react.md +4 -0
  132. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_click_open.html.erb +14 -0
  133. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_click_open_rails.md +1 -0
  134. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +1 -0
  135. data/app/pb_kits/playbook/pb_tooltip/index.js +59 -36
  136. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +9 -2
  137. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.html.erb +18 -0
  138. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input_rails.md +1 -0
  139. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
  140. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
  141. data/dist/chunks/_line_graph-BfCo79KE.js +1 -0
  142. data/dist/chunks/_typeahead-Db4YQA5c.js +6 -0
  143. data/dist/chunks/_weekday_stacked-DVbweLBJ.js +61 -0
  144. data/dist/chunks/lib-DnQyMxO1.js +29 -0
  145. data/dist/chunks/{pb_form_validation-DqRmTS8m.js → pb_form_validation-kl-4Jv4t.js} +1 -1
  146. data/dist/chunks/vendor.js +1 -1
  147. data/dist/menu.yml +68 -8
  148. data/dist/playbook-doc.js +2 -2
  149. data/dist/playbook-rails-react-bindings.js +1 -1
  150. data/dist/playbook-rails.js +1 -1
  151. data/dist/playbook.css +1 -1
  152. data/lib/playbook/version.rb +2 -2
  153. metadata +48 -25
  154. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.jsx +0 -72
  155. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.md +0 -6
  156. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
  157. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
  158. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.jsx +0 -38
  159. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.md +0 -1
  160. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.jsx +0 -30
  161. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.md +0 -1
  162. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.jsx +0 -52
  163. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.md +0 -1
  164. data/dist/chunks/_typeahead-B7FRYVtS.js +0 -22
  165. data/dist/chunks/_weekday_stacked-B0oaGhTW.js +0 -45
  166. data/dist/chunks/lib-Carqm8Ip.js +0 -29
  167. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_row_styling.md → _advanced_table_row_styling_react.md} +0 -0
  168. /data/app/pb_kits/playbook/pb_body/docs/{_body_truncate.md → _body_truncate_rails.md} +0 -0
  169. /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_colors.md → _gauge_colors_rails.md} +0 -0
  170. /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_complex.md → _gauge_complex_rails.md} +0 -0
  171. /data/app/pb_kits/playbook/pb_line_graph/docs/{_line_graph_colors.md → _line_graph_colors_rails.md} +0 -0
  172. /data/app/pb_kits/playbook/pb_title/docs/{_title_truncate.md → _title_truncate_rails.md} +0 -0
  173. /data/app/pb_kits/playbook/pb_tooltip/docs/{_tooltip_click_open.md → _tooltip_click_open_react.md} +0 -0
  174. /data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_preserve_input.md → _typeahead_preserve_input_react.md} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41c18c0c1f4ae27ccea671a7ca29e35edfdef4a22b4cfc806cc27f90e0d63814
4
- data.tar.gz: d3b75ef1e55dd2a03b84f59fd424a1cbcc2eb7814a3f26095fb9e691a2b87597
3
+ metadata.gz: b783164512f6b5e7e98483119372bb12b40995eb3e6d26e82b404adf26a087f5
4
+ data.tar.gz: 95361abd82579e6d3ce4c721386b6939fd878d1d17c040294745b9a30ef9cf1c
5
5
  SHA512:
6
- metadata.gz: '08bb1b746b94d9a8df7bb6a2d612b5546f5634fcfdf60b95e62035850bc302d1899628d01c86f7cd3f0e11a5d69e2905b6e952cbb0ba9c505a64320a3da9502f'
7
- data.tar.gz: 0adc5454fae876ffc7bd1defcc215eda7939244cd089621ad9a2a7aa9ec52de0640fd2f93a6ab76a8ccedf0c9767f0c12b13f7408de2baf838207117cf3d0e49
6
+ metadata.gz: 1ec3ee8c3daaaa8a0efa2af68a2a25975d8c8a079b9b8da8cfe3f3e19464801cddcdf8507949cdb04d1cc24399ca29369345de0e05fc83494e515317293cb97b
7
+ data.tar.gz: 3a0e4707bfd204588fc5b5559a8d4dc3bc6f628d901b8d8f36ec626ce9f226933583e47649b80a9f7b1fef729ddefafbdc8f146a18bd2e344fd9a53ebcbd297c
@@ -7,6 +7,7 @@ import { GlobalProps } from "../../utilities/globalProps"
7
7
 
8
8
  import Flex from "../../pb_flex/_flex"
9
9
  import Caption from "../../pb_caption/_caption"
10
+ import Icon from "../../pb_icon/_icon"
10
11
 
11
12
  import { ToggleIconButton } from "./ToggleIconButton"
12
13
  import { renderCollapsibleTrail } from "./CollapsibleTrail"
@@ -32,17 +33,19 @@ export const SubRowHeaderRow = ({
32
33
  subRowHeaders,
33
34
  table,
34
35
  }: SubRowHeaderRowProps & GlobalProps) => {
35
- const { inlineRowLoading } = useContext(AdvancedTableContext)
36
+ const { inlineRowLoading, customSort, onCustomSortClick } = useContext(AdvancedTableContext)
36
37
 
37
38
  const numberOfColumns = table.getAllFlatColumns().length
38
39
  const rowHasChildren = row.original.children ? true : false
39
40
  const canExpand = inlineRowLoading ? rowHasChildren : row.getCanExpand()
41
+ const hasSubrowsToSort = row.getParentRow()?.subRows
42
+
40
43
 
41
44
  return (
42
45
  <tr className="custom-row bg-silver">
43
46
  <td
44
47
  className={`custom-row-first-column ${
45
- isChrome() ? "chrome-styles" : ""
48
+ isChrome() ? "chrome-styles" : ""
46
49
  }`}
47
50
  colSpan={1}
48
51
  >
@@ -50,21 +53,39 @@ export const SubRowHeaderRow = ({
50
53
  <div style={{ paddingLeft: `${row.depth * 1.25}em` }}>
51
54
  <Flex align="center"
52
55
  columnGap="xs"
56
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
57
+ //@ts-ignore
58
+ justifyContent={customSort && hasSubrowsToSort && hasSubrowsToSort.length > 1 ? "between" : undefined}
53
59
  >
54
- {enableToggleExpansion === "all" && canExpand ? (
55
- <ToggleIconButton onClick={onClick}
56
- row={row}
60
+ <Flex columnGap="xs">
61
+ {enableToggleExpansion === "all" && canExpand ? (
62
+ <ToggleIconButton onClick={onClick}
63
+ row={row}
64
+ />
65
+ ) : null}
66
+ <Caption
67
+ marginLeft={canExpand ? "none" : "xs"}
68
+ text={subRowHeaders[row.depth - 1]}
57
69
  />
58
- ) : null}
59
- <Caption
60
- marginLeft={canExpand ? "none" : "xs"}
61
- text={subRowHeaders[row.depth - 1]}
62
- />
70
+ </Flex>
71
+ {customSort && hasSubrowsToSort && hasSubrowsToSort.length > 1 && (
72
+ <button
73
+ aria-label="Sort this group"
74
+ className="sort-button-icon gray-icon"
75
+ onClick={() => { onCustomSortClick && onCustomSortClick(row.getParentRow()?.subRows)}}
76
+ >
77
+ <Icon
78
+ cursor="pointer"
79
+ fixedWidth
80
+ icon="sort"
81
+ />
82
+ </button>
83
+ )}
63
84
  </Flex>
64
85
  </div>
65
86
  </td>
66
87
 
67
88
  <td colSpan={numberOfColumns - 1} />
68
89
  </tr>
69
- )
90
+ );
70
91
  }
@@ -101,7 +101,6 @@ export const TableHeaderCell = ({
101
101
  if (!header) return false;
102
102
 
103
103
  if (header.colSpan > 1 && header.column.parent !== undefined) return true;
104
-
105
104
  const parent = header.column.parent;
106
105
 
107
106
  if (!parent) {
@@ -83,11 +83,11 @@ export function useTableState({
83
83
  const buildColumns = useCallback((columnDefinitions: GenericObject[], isRoot = true): any[] => {
84
84
  return columnDefinitions?.map((column, index) => {
85
85
  const isFirstColumn = isRoot && index === 0;
86
-
87
86
  // Handle grouped columns
88
87
  if (column.columns && column.columns.length > 0) {
89
88
  return {
90
- header: column.label || "",
89
+ header: column.header ?? column.label ?? "",
90
+ id: column.id ?? column.label ?? `group-${index}`,
91
91
  columns: buildColumns(column.columns, false),
92
92
  };
93
93
  }
@@ -95,7 +95,7 @@ export function useTableState({
95
95
  // Define the base column structure
96
96
  const columnStructure = {
97
97
  ...columnHelper.accessor(column.accessor, {
98
- header: column.label || "",
98
+ header: column.header ?? column.label ?? "",
99
99
  }),
100
100
  };
101
101
 
@@ -56,7 +56,7 @@
56
56
  }
57
57
 
58
58
  .bg-row-selection {
59
- background-color: $info_subtle;
59
+ background-color: #E5EEFA;
60
60
  }
61
61
 
62
62
  .full-width {
@@ -189,6 +189,11 @@
189
189
  box-sizing: border-box !important;
190
190
  }
191
191
  }
192
+ // Fixes for tooltip picking up th styling from Table kit
193
+ .pb_tooltip_kit {
194
+ font-weight: unset;
195
+ text-transform: unset;
196
+ }
192
197
  }
193
198
 
194
199
  .pb_advanced_table_body {
@@ -227,7 +232,7 @@
227
232
 
228
233
  &.bg-row-selection {
229
234
  td:first-child {
230
- background-color: $info_subtle;
235
+ background-color: #E5EEFA;
231
236
  }
232
237
  }
233
238
  }
@@ -892,6 +897,18 @@
892
897
  }
893
898
  }
894
899
  }
900
+ .bg-row-selection {
901
+ background-color: #202850;
902
+ }
903
+ .pb_advanced_table_body {
904
+ tr.virtualized-table-row {
905
+ &.bg-row-selection {
906
+ td:first-child {
907
+ background-color: #202850;
908
+ }
909
+ }
910
+ }
911
+ }
895
912
  }
896
913
  }
897
914
 
@@ -36,6 +36,7 @@ type AdvancedTableProps = {
36
36
  columnDefinitions: GenericObject[]
37
37
  columnGroupBorderColor?: "text_lt_default" | "text_lt_light" | "text_lt_lighter" | "text_dk_default" | "text_dk_light" | "text_dk_lighter"
38
38
  columnVisibilityControl?: GenericObject
39
+ customSort?:boolean;
39
40
  dark?: boolean
40
41
  data?: { [key: string]: string }
41
42
  enableToggleExpansion?: "all" | "header" | "none"
@@ -67,6 +68,7 @@ type AdvancedTableProps = {
67
68
  tableProps?: GenericObject
68
69
  toggleExpansionIcon?: string | string[]
69
70
  onRowSelectionChange?: (arg: RowSelectionState) => void
71
+ onCustomSortClick?: (arg: GenericObject[]) => void
70
72
  virtualizedRows?: boolean
71
73
  allowFullScreen?: boolean
72
74
  fullScreenControl?: (controls: FullscreenControls) => void
@@ -81,6 +83,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
81
83
  columnDefinitions,
82
84
  columnGroupBorderColor,
83
85
  columnVisibilityControl,
86
+ customSort,
84
87
  dark = false,
85
88
  data = {},
86
89
  enableToggleExpansion = "header",
@@ -95,6 +98,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
95
98
  maxHeight,
96
99
  onRowToggleClick,
97
100
  onToggleExpansionClick,
101
+ onCustomSortClick,
98
102
  pagination = false,
99
103
  paginationProps,
100
104
  pinnedRows,
@@ -325,6 +329,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
325
329
  columnDefinitions={columnDefinitions}
326
330
  columnGroupBorderColor={columnGroupBorderColor}
327
331
  columnVisibilityControl={columnVisibilityControl}
332
+ customSort={customSort}
328
333
  enableToggleExpansion={enableToggleExpansion}
329
334
  enableVirtualization={virtualizedRows}
330
335
  expandByDepth={expandByDepth}
@@ -336,6 +341,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
336
341
  isActionBarVisible={isActionBarVisible}
337
342
  isFullscreen={isFullscreen}
338
343
  loading={loading}
344
+ onCustomSortClick={onCustomSortClick}
339
345
  onExpandByDepthClick={onExpandByDepthClick}
340
346
  pinnedRows={pinnedRows}
341
347
  responsive={responsive}
@@ -12,7 +12,7 @@
12
12
  <% content.presence %>
13
13
  <% else %>
14
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 }) %>
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, row_styling: object.row_styling }) %>
16
16
  <% end %>
17
17
  <% end %>
18
18
  <% end %>
@@ -31,6 +31,8 @@ module Playbook
31
31
  default: []
32
32
  prop :scroll_bar_none, type: Playbook::Props::Boolean,
33
33
  default: false
34
+ prop :row_styling, type: Playbook::Props::Array,
35
+ default: []
34
36
 
35
37
  def classname
36
38
  additional_classes = [responsive_classname, max_height_classname, hide_scroll_bar_class]
@@ -0,0 +1,65 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import MOCK_DATA from "./advanced_table_mock_data.json"
4
+
5
+ const AdvancedTableCustomSort = (props) => {
6
+ const columnDefinitions = [
7
+ {
8
+ accessor: "year",
9
+ label: "Year",
10
+ id: "year",
11
+ cellAccessors: ["quarter", "month", "day"],
12
+ },
13
+ {
14
+ accessor: "newEnrollments",
15
+ id: "newEnrollments",
16
+ label: "New Enrollments",
17
+ },
18
+ {
19
+ accessor: "scheduledMeetings",
20
+ id: "scheduledMeetings",
21
+ label: "Scheduled Meetings",
22
+ },
23
+ {
24
+ accessor: "attendanceRate",
25
+ id: "attendanceRate",
26
+ label: "Attendance Rate",
27
+ },
28
+ {
29
+ accessor: "completedClasses",
30
+ id: "completedClasses",
31
+ label: "Completed Classes",
32
+ },
33
+ {
34
+ accessor: "classCompletionRate",
35
+ id: "classCompletionRate",
36
+ label: "Class Completion Rate",
37
+ },
38
+ {
39
+ accessor: "graduatedStudents",
40
+ id: "graduatedStudents",
41
+ label: "Graduated Students",
42
+ },
43
+ ]
44
+
45
+ //Render the subRow header rows
46
+ const subRowHeaders = ["Quarter", "Month", "Day"]
47
+
48
+ return (
49
+ <div>
50
+ <AdvancedTable
51
+ columnDefinitions={columnDefinitions}
52
+ customSort
53
+ enableToggleExpansion="all"
54
+ onCustomSortClick={(subrows)=>{console.log("Custom sort clicked", subrows)}}
55
+ tableData={MOCK_DATA}
56
+ {...props}
57
+ >
58
+ <AdvancedTable.Header enableSorting />
59
+ <AdvancedTable.Body subRowHeaders={subRowHeaders} />
60
+ </AdvancedTable>
61
+ </div>
62
+ )
63
+ }
64
+
65
+ export default AdvancedTableCustomSort
@@ -0,0 +1,5 @@
1
+ The optional `customSort` prop can be used to add a sort button within a subrow header. The button will only appear if that subrowheader has more than one subrow nested within it. This button comes with a callback function called `onCustomSortClick`.
2
+
3
+ The `onCustomSortClick` provides as an argument an array of all the subrows nested within that level of the table.
4
+
5
+ __NOTE__: `customSort` must be used in conjunction with the `subRowHeaders` prop. The `customSort` DOES NOT handle the sort logic, this must be handled on the frontend using the callback provided.
@@ -0,0 +1,46 @@
1
+ <% column_definitions = [
2
+ {
3
+ accessor: "year",
4
+ label: "Year",
5
+ cellAccessors: ["quarter", "month", "day"],
6
+ },
7
+ {
8
+ accessor: "newEnrollments",
9
+ label: "New Enrollments",
10
+ },
11
+ {
12
+ accessor: "scheduledMeetings",
13
+ label: "Scheduled Meetings",
14
+ },
15
+ {
16
+ accessor: "attendanceRate",
17
+ label: "Attendance Rate",
18
+ },
19
+ {
20
+ accessor: "completedClasses",
21
+ label: "Completed Classes",
22
+ },
23
+ {
24
+ accessor: "classCompletionRate",
25
+ label: "Class Completion Rate",
26
+ },
27
+ {
28
+ accessor: "graduatedStudents",
29
+ label: "Graduated Students",
30
+ }
31
+ ] %>
32
+
33
+ <% row_styling = [
34
+ {
35
+ row_id: "1",
36
+ background_color: "#F9BB00",
37
+ },
38
+ {
39
+ row_id: "8",
40
+ background_color: "#0056CF",
41
+ font_color: "white",
42
+ expand_button_color: "white",
43
+ },
44
+ ] %>
45
+
46
+ <%= pb_rails("advanced_table", props: { id: "row-styling", table_data: @table_data_with_id, column_definitions: column_definitions, row_styling: row_styling }) %>
@@ -0,0 +1,7 @@
1
+ The `row_styling` prop can be used in conjunction with row ids to control certain styling options on individual rows. Currently, `row_styling` gives you 3 optional controls:
2
+
3
+ - `background_color` : use this to control the background color of the row
4
+ - `font_color`: use this to control font color for each row if needed, for example if using a darker background color.
5
+ - `expand_button_color`: use this to control the color of the expand icon if needed, for example if using a darker background color.
6
+
7
+ **NOTE:** Each object within the `table_data` Array must contain a unique id in order to attach an id to all Rows for this to function.
@@ -0,0 +1,69 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import Icon from "../../pb_icon/_icon"
4
+ import Flex from "../../pb_flex/_flex"
5
+ import Caption from "../../pb_caption/_caption"
6
+ import Tooltip from "../../pb_tooltip/_tooltip"
7
+ import MOCK_DATA from "./advanced_table_mock_data.json"
8
+
9
+ const AdvancedTableWithCustomHeader = (props) => {
10
+ const columnDefinitions = [
11
+ {
12
+ accessor: "year",
13
+ label: "Year",
14
+ cellAccessors: ["quarter", "month", "day"],
15
+ },
16
+ {
17
+ accessor: "newEnrollments",
18
+ label: "New Enrollments",
19
+ header: () => (
20
+ <Flex alignItems="center"
21
+ justifyContent="center"
22
+ >
23
+ <Caption marginRight="xs">New Enrollments</Caption>
24
+ <Tooltip placement="top"
25
+ text="Whoa. I'm a Tooltip"
26
+ zIndex={10}
27
+ >
28
+ <Icon cursor="pointer"
29
+ icon="info"
30
+ size="xs"
31
+ />
32
+ </Tooltip>
33
+ </Flex>
34
+ ),
35
+ },
36
+ {
37
+ accessor: "scheduledMeetings",
38
+ label: "Scheduled Meetings",
39
+ },
40
+ {
41
+ accessor: "attendanceRate",
42
+ label: "Attendance Rate",
43
+ },
44
+ {
45
+ accessor: "completedClasses",
46
+ label: "Completed Classes",
47
+ },
48
+ {
49
+ accessor: "classCompletionRate",
50
+ label: "Class Completion Rate",
51
+ },
52
+ {
53
+ accessor: "graduatedStudents",
54
+ label: "Graduated Students",
55
+ },
56
+ ];
57
+
58
+ return (
59
+ <div>
60
+ <AdvancedTable
61
+ columnDefinitions={columnDefinitions}
62
+ tableData={MOCK_DATA}
63
+ {...props}
64
+ />
65
+ </div>
66
+ )
67
+ }
68
+
69
+ export default AdvancedTableWithCustomHeader
@@ -0,0 +1 @@
1
+ The optional `header` key/value pair can be used within `columnDefinitions` to render a custom header. This example shows an Icon and Tooltip being used but other kits can be used as well.
@@ -0,0 +1,107 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import Icon from "../../pb_icon/_icon"
4
+ import Flex from "../../pb_flex/_flex"
5
+ import Caption from "../../pb_caption/_caption"
6
+ import Tooltip from "../../pb_tooltip/_tooltip"
7
+ import MOCK_DATA from "./advanced_table_mock_data.json"
8
+
9
+ const AdvancedTableWithCustomHeaderMultiHeader = (props) => {
10
+
11
+ const columnDefinitions = [
12
+ {
13
+ accessor: "year",
14
+ label: "Year",
15
+ id: "year",
16
+ cellAccessors: ["quarter", "month", "day"],
17
+ },
18
+ {
19
+ label: "Enrollment Data",
20
+ id: "enrollmentData",
21
+ header: () => (
22
+ <Flex alignItems="center"
23
+ justifyContent="center"
24
+ >
25
+ <Caption marginRight="xs">Enrollments Data</Caption>
26
+ <Tooltip placement="top"
27
+ text="Whoa. I'm a Tooltip"
28
+ zIndex={10}
29
+ >
30
+ <Icon cursor="pointer"
31
+ icon="info"
32
+ size="xs"
33
+ />
34
+ </Tooltip>
35
+ </Flex>
36
+ ),
37
+ columns: [
38
+ {
39
+ label: "Enrollment Stats",
40
+ id: "enrollmentStats",
41
+ columns: [
42
+ {
43
+ accessor: "newEnrollments",
44
+ id: "newEnrollments",
45
+ label: "New Enrollments",
46
+ },
47
+ {
48
+ accessor: "scheduledMeetings",
49
+ id: "scheduledMeetings",
50
+ label: "Scheduled Meetings",
51
+ },
52
+ ],
53
+ },
54
+ ],
55
+ },
56
+ {
57
+ label: "Performance Data",
58
+ id: "performanceData",
59
+ columns: [
60
+ {
61
+ label: "Completion Metrics",
62
+ id: "completionMetrics",
63
+ columns: [
64
+ {
65
+ accessor: "completedClasses",
66
+ label: "Completed Classes",
67
+ id: "completedClasses",
68
+ },
69
+ {
70
+ accessor: "classCompletionRate",
71
+ label: "Class Completion Rate",
72
+ id: "classCompletionRate",
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ label: "Attendance",
78
+ id: "attendance",
79
+ columns: [
80
+ {
81
+ accessor: "attendanceRate",
82
+ label: "Attendance Rate",
83
+ id: "attendanceRate",
84
+ },
85
+ {
86
+ accessor: "scheduledMeetings",
87
+ label: "Scheduled Meetings",
88
+ id: "scheduledMeetings",
89
+ },
90
+ ],
91
+ },
92
+ ],
93
+ },
94
+ ];
95
+
96
+ return (
97
+ <div>
98
+ <AdvancedTable
99
+ columnDefinitions={columnDefinitions}
100
+ tableData={MOCK_DATA}
101
+ {...props}
102
+ />
103
+ </div>
104
+ )
105
+ }
106
+
107
+ export default AdvancedTableWithCustomHeaderMultiHeader;
@@ -0,0 +1 @@
1
+ The optional `header` key/value pair within `columnDefinitions` can also be used with multi headers as seen here.
@@ -0,0 +1,51 @@
1
+ <%
2
+ column_definitions = [
3
+ {
4
+ accessor: "year",
5
+ label: "Year",
6
+ cellAccessors: ["quarter", "month", "day"],
7
+ },
8
+ {
9
+ accessor: "newEnrollments",
10
+ label: "New Enrollments",
11
+ header: ->(cell, label) {
12
+ capture do
13
+ pb_rails("flex", props: { align_items: "center", justify_content: "center" }) do
14
+ pb_rails("caption", props: { margin_right: "xs", text: "New Enrollments" }) +
15
+ pb_rails("icon", props: { id: "tooltip-interact", icon: "info", size: "xs" }) +
16
+ pb_rails("tooltip", props: {
17
+ trigger_element_id: "tooltip-interact",
18
+ tooltip_id: "example-custom-tooltip",
19
+ position: "top",
20
+ z_index: "10"
21
+ }) do
22
+ "Whoa. I'm a Tooltip"
23
+ end
24
+ end
25
+ end
26
+ }
27
+ },
28
+ {
29
+ accessor: "scheduledMeetings",
30
+ label: "Scheduled Meetings",
31
+ },
32
+ {
33
+ accessor: "attendanceRate",
34
+ label: "Attendance Rate",
35
+ },
36
+ {
37
+ accessor: "completedClasses",
38
+ label: "Completed Classes",
39
+ },
40
+ {
41
+ accessor: "classCompletionRate",
42
+ label: "Class Completion Rate",
43
+ },
44
+ {
45
+ accessor: "graduatedStudents",
46
+ label: "Graduated Students",
47
+ }
48
+ ]
49
+ %>
50
+
51
+ <%= pb_rails("advanced_table", props: { id: "custom_header_table", table_data: @table_data, column_definitions: column_definitions }) %>
@@ -0,0 +1 @@
1
+ The optional `header` item can be used within `column_definitions` to render a custom header. This example shows an Icon and Tooltip being used but other kits can be used as well.
@@ -10,23 +10,26 @@ examples:
10
10
  - advanced_table_beta_sort: Enable Sorting
11
11
  - advanced_table_responsive: Responsive Tables
12
12
  - advanced_table_custom_cell_rails: Custom Components for Cells
13
+ - advanced_table_with_custom_header_rails: Custom Header Cell
13
14
  - advanced_table_column_headers: Multi-Header Columns
14
15
  - advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
15
- - advanced_table_column_border_color_rails: Column Group Border Color
16
16
  - advanced_table_no_subrows: Table with No Subrows or Expansion
17
17
  - advanced_table_selectable_rows_rails: Selectable Rows
18
18
  - advanced_table_selectable_rows_no_subrows_rails: Selectable Rows (No Subrows)
19
19
  - advanced_table_selectable_rows_actions_rails: Selectable Rows (With Actions)
20
20
  - advanced_table_selectable_rows_header_rails: Selectable Rows (No Actions Bar)
21
21
  - advanced_table_scrollbar_none: Advanced Table Scrollbar None
22
- # - advanced_table_column_styling_rails: Column Styling
23
- # - advanced_table_column_styling_column_headers_rails: Column Styling with Multiple Headers
22
+ - advanced_table_row_styling: Row Styling
23
+ - advanced_table_column_styling_rails: Column Styling
24
+ - advanced_table_column_styling_column_headers_rails: Column Styling with Multiple Headers
25
+ - advanced_table_column_border_color_rails: Column Group Border Color
26
+
24
27
 
25
28
  react:
26
29
  - advanced_table_default: Default (Required Props)
27
- - advanced_table_loading: Loading State
28
30
  - advanced_table_sort: Enable Sorting
29
31
  - advanced_table_sort_control: Sort Control
32
+ - advanced_table_custom_sort: Custom Sort
30
33
  - advanced_table_expanded_control: Expanded Control
31
34
  - advanced_table_expand_by_depth: Expand by Depth
32
35
  - advanced_table_subrow_headers: SubRow Headers
@@ -37,29 +40,32 @@ examples:
37
40
  - advanced_table_table_props_sticky_header: Sticky Header for Responsive Table
38
41
  - advanced_table_sticky_columns: Sticky Columns
39
42
  - advanced_table_sticky_columns_and_header: Sticky Columns with Sticky Header
40
- - advanced_table_inline_row_loading: Inline Row Loading
41
43
  - advanced_table_responsive: Responsive Tables
42
44
  - advanced_table_custom_cell: Custom Components for Cells
45
+ - advanced_table_with_custom_header: Custom Header Cell
46
+ - advanced_table_with_custom_header_multi_header: Custom Header with Multiple Headers
43
47
  - advanced_table_pagination: Pagination
44
48
  - advanced_table_pagination_with_props: Pagination Props
49
+ - advanced_table_loading: Loading State
50
+ - advanced_table_inline_row_loading: Inline Row Loading
45
51
  - advanced_table_column_headers: Multi-Header Columns
46
52
  - advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
47
53
  - advanced_table_column_headers_custom_cell: Multi-Header Columns with Custom Cells
48
- - advanced_table_column_border_color: Column Group Border Color
49
54
  - advanced_table_no_subrows: Table with No Subrows or Expansion
55
+ - advanced_table_pinned_rows: Pinned Rows
50
56
  - advanced_table_selectable_rows: Selectable Rows
51
57
  - advanced_table_selectable_rows_no_subrows_react: Selectable Rows (No Subrows)
52
58
  - advanced_table_selectable_rows_actions: Selectable Rows (With Actions)
53
59
  - advanced_table_selectable_rows_header: Selectable Rows (No Actions Bar)
54
60
  - advanced_table_inline_editing: Inline Cell Editing
55
- - advanced_table_fullscreen: Fullscreen
56
61
  - advanced_table_column_visibility: Column Visibility Control
57
62
  - advanced_table_column_visibility_with_state: Column Visibility Control With State
58
63
  - advanced_table_column_visibility_custom: Column Visibility Control with Custom Dropdown
59
64
  - advanced_table_column_visibility_multi: Column Visibility Control with Multi-Header Columns
60
- - advanced_table_pinned_rows: Pinned Rows
61
65
  - advanced_table_scrollbar_none: Advanced Table Scrollbar None
62
66
  - advanced_table_row_styling: Row Styling
63
67
  - advanced_table_column_styling: Column Styling
64
68
  - advanced_table_column_styling_column_headers: Column Styling with Multiple Headers
69
+ - advanced_table_column_border_color: Column Group Border Color
70
+ - advanced_table_fullscreen: Fullscreen
65
71
  - advanced_table_infinite_scroll: Infinite Scroll