playbook_ui 13.20.0 → 13.21.0.pre.alpha.PBNTR224letuserresetrowexpansion2466

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 (221) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +1 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CollapsibleTrail.tsx +6 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +23 -17
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/SortIconButton.tsx +6 -3
  6. data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +12 -8
  7. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +14 -9
  8. data/app/pb_kits/playbook/pb_advanced_table/Components/ToggleIconButton.tsx +9 -5
  9. data/app/pb_kits/playbook/pb_advanced_table/README.md +2 -2
  10. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +16 -10
  11. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +14 -8
  12. data/app/pb_kits/playbook/pb_advanced_table/Utilities/ExpansionControlHelpers.tsx +3 -2
  13. data/app/pb_kits/playbook/pb_advanced_table/Utilities/types.ts +0 -2
  14. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +50 -7
  15. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +86 -78
  16. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +14 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +19 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +54 -54
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail.jsx +7 -7
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.jsx +7 -7
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_expanded_control.jsx +12 -7
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx +7 -7
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.md +1 -1
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.jsx +7 -7
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.jsx +7 -7
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.jsx +7 -7
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_subrow_headers.jsx +7 -7
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_options.jsx +7 -7
  29. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +7 -7
  30. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data.js +1 -1
  31. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading.js +1 -1
  32. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  33. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/_chrome_styles.scss +13 -0
  34. data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +9 -0
  35. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +30 -0
  36. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +20 -0
  37. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +21 -0
  38. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +37 -0
  39. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +32 -0
  40. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +2 -1
  41. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +2 -1
  42. data/app/pb_kits/playbook/pb_background/background.html.erb +2 -1
  43. data/app/pb_kits/playbook/pb_badge/badge.html.erb +2 -1
  44. data/app/pb_kits/playbook/pb_body/body.html.erb +2 -1
  45. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +0 -7
  46. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumb_item.html.erb +2 -1
  47. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumbs.html.erb +2 -1
  48. data/app/pb_kits/playbook/pb_button/button.html.erb +2 -1
  49. data/app/pb_kits/playbook/pb_button/button.rb +2 -3
  50. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.html.erb +2 -1
  51. data/app/pb_kits/playbook/pb_caption/caption.html.erb +2 -1
  52. data/app/pb_kits/playbook/pb_card/card.html.erb +2 -1
  53. data/app/pb_kits/playbook/pb_card/card_body.html.erb +2 -1
  54. data/app/pb_kits/playbook/pb_card/card_header.html.erb +2 -1
  55. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +3 -1
  56. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +2 -1
  57. data/app/pb_kits/playbook/pb_collapsible/collapsible.html.erb +2 -1
  58. data/app/pb_kits/playbook/pb_collapsible/collapsible_content.html.erb +2 -1
  59. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +2 -1
  60. data/app/pb_kits/playbook/pb_contact/contact.html.erb +2 -1
  61. data/app/pb_kits/playbook/pb_currency/currency.html.erb +2 -1
  62. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.html.erb +2 -1
  63. data/app/pb_kits/playbook/pb_date/date.html.erb +2 -1
  64. data/app/pb_kits/playbook/pb_date/docs/_date_alignment_swift.md +26 -6
  65. data/app/pb_kits/playbook/pb_date/docs/_date_default_swift.md +27 -8
  66. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -2
  67. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +3 -0
  68. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -2
  69. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -1
  70. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +1 -1
  71. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +9 -7
  72. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_margin_bottom.html.erb +7 -0
  73. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_margin_bottom.jsx +41 -0
  74. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +2 -0
  75. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  76. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +1 -2
  77. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.html.erb +2 -1
  78. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.html.erb +2 -1
  79. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +2 -1
  80. data/app/pb_kits/playbook/pb_date_time/date_time.html.erb +2 -1
  81. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +3 -2
  82. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.html.erb +2 -1
  83. data/app/pb_kits/playbook/pb_detail/detail.html.erb +2 -1
  84. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +2 -1
  85. data/app/pb_kits/playbook/pb_dialog/dialog_body.html.erb +3 -2
  86. data/app/pb_kits/playbook/pb_dialog/dialog_footer.html.erb +2 -1
  87. data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +3 -2
  88. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +2 -1
  89. data/app/pb_kits/playbook/pb_filter/filter.html.erb +2 -1
  90. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +8 -3
  91. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -0
  92. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.html.erb +51 -1
  93. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.jsx +62 -11
  94. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_positions.html.erb +7 -2
  95. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.html.erb +4 -3
  96. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.html.erb +0 -4
  97. data/app/pb_kits/playbook/pb_flex/flex.html.erb +2 -1
  98. data/app/pb_kits/playbook/pb_flex/flex_item.html.erb +2 -1
  99. data/app/pb_kits/playbook/pb_form_group/form_group.html.erb +2 -1
  100. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +2 -2
  101. data/app/pb_kits/playbook/pb_hashtag/hashtag.html.erb +2 -1
  102. data/app/pb_kits/playbook/pb_highlight/highlight.html.erb +2 -1
  103. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.html.erb +2 -1
  104. data/app/pb_kits/playbook/pb_icon/_icon.tsx +1 -0
  105. data/app/pb_kits/playbook/pb_icon/icon.html.erb +2 -1
  106. data/app/pb_kits/playbook/pb_icon/icon.rb +3 -3
  107. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.html.erb +2 -1
  108. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +2 -1
  109. data/app/pb_kits/playbook/pb_icon_value/icon_value.html.erb +2 -1
  110. data/app/pb_kits/playbook/pb_image/image.html.erb +2 -1
  111. data/app/pb_kits/playbook/pb_label_pill/label_pill.html.erb +2 -1
  112. data/app/pb_kits/playbook/pb_label_value/label_value.html.erb +3 -2
  113. data/app/pb_kits/playbook/pb_layout/body.html.erb +2 -1
  114. data/app/pb_kits/playbook/pb_layout/footer.html.erb +2 -1
  115. data/app/pb_kits/playbook/pb_layout/header.html.erb +2 -1
  116. data/app/pb_kits/playbook/pb_layout/item.html.erb +2 -1
  117. data/app/pb_kits/playbook/pb_layout/layout.html.erb +2 -1
  118. data/app/pb_kits/playbook/pb_layout/sidebar.html.erb +2 -1
  119. data/app/pb_kits/playbook/pb_legend/legend.html.erb +2 -1
  120. data/app/pb_kits/playbook/pb_list/item.html.erb +2 -1
  121. data/app/pb_kits/playbook/pb_list/list.html.erb +2 -1
  122. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.html.erb +2 -1
  123. data/app/pb_kits/playbook/pb_message/docs/_description.md +1 -1
  124. data/app/pb_kits/playbook/pb_message/message.html.erb +2 -1
  125. data/app/pb_kits/playbook/pb_message/message_mention.html.erb +3 -2
  126. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +2 -1
  127. data/app/pb_kits/playbook/pb_multiple_users/multiple_users.html.erb +2 -1
  128. data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.html.erb +2 -1
  129. data/app/pb_kits/playbook/pb_nav/_subtle_mixin.scss +4 -0
  130. data/app/pb_kits/playbook/pb_nav/item.html.erb +4 -2
  131. data/app/pb_kits/playbook/pb_nav/nav.html.erb +2 -1
  132. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +2 -1
  133. data/app/pb_kits/playbook/pb_pagination/pagination.html.erb +2 -1
  134. data/app/pb_kits/playbook/pb_passphrase/passphrase.html.erb +1 -1
  135. data/app/pb_kits/playbook/pb_person/person.html.erb +2 -1
  136. data/app/pb_kits/playbook/pb_person_contact/person_contact.html.erb +2 -1
  137. data/app/pb_kits/playbook/pb_pill/pill.html.erb +2 -1
  138. data/app/pb_kits/playbook/pb_popover/popover.html.erb +2 -1
  139. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +2 -1
  140. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +2 -1
  141. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +2 -1
  142. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +2 -1
  143. data/app/pb_kits/playbook/pb_radio/radio.html.erb +2 -1
  144. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +2 -1
  145. data/app/pb_kits/playbook/pb_select/select.html.erb +2 -1
  146. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +2 -1
  147. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +2 -1
  148. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +2 -1
  149. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.html.erb +2 -1
  150. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -1
  151. data/app/pb_kits/playbook/pb_source/source.html.erb +2 -1
  152. data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +2 -1
  153. data/app/pb_kits/playbook/pb_stat_change/stat_change.html.erb +2 -1
  154. data/app/pb_kits/playbook/pb_stat_value/stat_value.html.erb +2 -1
  155. data/app/pb_kits/playbook/pb_table/_table.tsx +13 -0
  156. data/app/pb_kits/playbook/pb_table/docs/_table_side_highlight.jsx +24 -25
  157. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.jsx +47 -0
  158. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.md +7 -0
  159. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_as_divs.html.erb +34 -0
  160. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_as_divs.jsx +48 -0
  161. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_as_divs.md +3 -0
  162. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_rails.html.erb +34 -0
  163. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_rails.md +7 -0
  164. data/app/pb_kits/playbook/pb_table/docs/example.yml +6 -2
  165. data/app/pb_kits/playbook/pb_table/docs/index.js +2 -0
  166. data/app/pb_kits/playbook/pb_table/styles/_striped.scss +2 -2
  167. data/app/pb_kits/playbook/pb_table/styles/_structure.scss +4 -2
  168. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +64 -0
  169. data/app/pb_kits/playbook/pb_table/subcomponents/_table_cell.tsx +66 -0
  170. data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +64 -0
  171. data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +66 -0
  172. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +74 -0
  173. data/app/pb_kits/playbook/pb_table/subcomponents/index.tsx +5 -0
  174. data/app/pb_kits/playbook/pb_table/table.html.erb +4 -2
  175. data/app/pb_kits/playbook/pb_table/table.test.js +142 -1
  176. data/app/pb_kits/playbook/pb_table/table_body.html.erb +19 -0
  177. data/app/pb_kits/playbook/pb_table/table_body.rb +15 -0
  178. data/app/pb_kits/playbook/pb_table/table_cell.html.erb +19 -0
  179. data/app/pb_kits/playbook/pb_table/table_cell.rb +17 -0
  180. data/app/pb_kits/playbook/pb_table/table_head.html.erb +19 -0
  181. data/app/pb_kits/playbook/pb_table/table_head.rb +15 -0
  182. data/app/pb_kits/playbook/pb_table/table_header.html.erb +50 -38
  183. data/app/pb_kits/playbook/pb_table/table_header.rb +8 -1
  184. data/app/pb_kits/playbook/pb_table/table_row.html.erb +18 -6
  185. data/app/pb_kits/playbook/pb_table/table_row.rb +8 -1
  186. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +0 -1
  187. data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +9 -5
  188. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_add_on.jsx +20 -0
  189. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +2 -1
  190. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -1
  191. data/app/pb_kits/playbook/pb_textarea/textarea.html.erb +2 -1
  192. data/app/pb_kits/playbook/pb_time/time.html.erb +2 -1
  193. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.html.erb +3 -2
  194. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.html.erb +2 -1
  195. data/app/pb_kits/playbook/pb_timeline/item.html.erb +2 -1
  196. data/app/pb_kits/playbook/pb_timeline/timeline.html.erb +2 -1
  197. data/app/pb_kits/playbook/pb_timestamp/timestamp.html.erb +2 -1
  198. data/app/pb_kits/playbook/pb_title/title.html.erb +3 -2
  199. data/app/pb_kits/playbook/pb_title_count/title_count.html.erb +2 -1
  200. data/app/pb_kits/playbook/pb_title_detail/title_detail.html.erb +2 -1
  201. data/app/pb_kits/playbook/pb_toggle/toggle.html.erb +2 -1
  202. data/app/pb_kits/playbook/pb_tooltip/tooltip.html.erb +2 -1
  203. data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -1
  204. data/app/pb_kits/playbook/pb_user/docs/_user_presence_indicator_swift.md +30 -0
  205. data/app/pb_kits/playbook/pb_user/docs/_user_props_table.md +2 -1
  206. data/app/pb_kits/playbook/pb_user/docs/example.yml +1 -0
  207. data/app/pb_kits/playbook/pb_user/user.html.erb +2 -1
  208. data/app/pb_kits/playbook/pb_user_badge/user_badge.html.erb +2 -1
  209. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.html.erb +2 -1
  210. data/app/pb_kits/playbook/utilities/_positioning.scss +48 -7
  211. data/app/pb_kits/playbook/utilities/globalProps.ts +23 -1
  212. data/dist/playbook-rails.js +6 -6
  213. data/lib/playbook/bottom.rb +33 -0
  214. data/lib/playbook/classnames.rb +4 -0
  215. data/lib/playbook/kit_base.rb +26 -0
  216. data/lib/playbook/left.rb +33 -0
  217. data/lib/playbook/right.rb +33 -0
  218. data/lib/playbook/top.rb +33 -0
  219. data/lib/playbook/version.rb +2 -2
  220. metadata +41 -7
  221. data/app/pb_kits/playbook/pb_table/_table_row.tsx +0 -47
@@ -1,8 +1,8 @@
1
- import React, { useState, useEffect, useCallback } from "react";
2
- import classnames from "classnames";
3
- import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
4
- import { globalProps, GlobalProps } from "../utilities/globalProps";
5
- import Table from "../pb_table/_table";
1
+ import React, { useState, useEffect, useCallback } from "react"
2
+ import classnames from "classnames"
3
+
4
+ import { GenericObject } from "../types"
5
+
6
6
  import {
7
7
  createColumnHelper,
8
8
  getCoreRowModel,
@@ -11,38 +11,43 @@ import {
11
11
  Row,
12
12
  useReactTable,
13
13
  Getter,
14
- } from "@tanstack/react-table";
14
+ } from "@tanstack/react-table"
15
+
16
+ import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props"
17
+ import { globalProps, GlobalProps } from "../utilities/globalProps"
15
18
 
16
- import { updateExpandAndCollapseState } from "./Utilities/ExpansionControlHelpers";
19
+ import Table from "../pb_table/_table"
17
20
 
18
- import { CustomCell } from "./Components/CustomCell";
19
- import AdvancedTableContext from "./Context/AdvancedTableContext";
20
- import { TableHeader } from "./SubKits/TableHeader";
21
- import { TableBody } from "./SubKits/TableBody";
21
+ import AdvancedTableContext from "./Context/AdvancedTableContext"
22
22
 
23
- import { DataType } from "./Utilities/types";
23
+ import { updateExpandAndCollapseState } from "./Utilities/ExpansionControlHelpers"
24
+
25
+ import { CustomCell } from "./Components/CustomCell"
26
+ import { TableHeader } from "./SubKits/TableHeader"
27
+ import { TableBody } from "./SubKits/TableBody"
24
28
 
25
29
  type AdvancedTableProps = {
26
- aria?: { [key: string]: string };
27
- children?: React.ReactNode | React.ReactNode[];
28
- className?: string;
29
- columnDefinitions: DataType[];
30
- data?: { [key: string]: string };
31
- enableToggleExpansion?: "all" | "header" | "none";
32
- expandedControl?: DataType;
30
+ aria?: { [key: string]: string }
31
+ children?: React.ReactNode | React.ReactNode[]
32
+ className?: string
33
+ columnDefinitions: GenericObject[]
34
+ dark?: boolean
35
+ data?: { [key: string]: string }
36
+ enableToggleExpansion?: "all" | "header" | "none"
37
+ expandedControl?: GenericObject
33
38
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
34
- id?: string;
35
- initialLoadingRowsCount?: number;
36
- inlineRowLoading?: boolean;
37
- loading?: boolean | string;
38
- onRowToggleClick?: (arg: Row<DataType>) => void;
39
- onToggleExpansionClick?: (arg: Row<DataType>) => void;
40
- sortControl?: DataType;
41
- tableData: DataType[];
42
- tableOptions?: DataType;
43
- tableProps?: DataType;
44
- toggleExpansionIcon?: string | string[];
45
- } & GlobalProps;
39
+ id?: string
40
+ initialLoadingRowsCount?: number
41
+ inlineRowLoading?: boolean
42
+ loading?: boolean | string
43
+ onRowToggleClick?: (arg: Row<GenericObject>) => void
44
+ onToggleExpansionClick?: (arg: Row<GenericObject>) => void
45
+ sortControl?: GenericObject
46
+ tableData: GenericObject[]
47
+ tableOptions?: GenericObject
48
+ tableProps?: GenericObject
49
+ toggleExpansionIcon?: string | string[]
50
+ } & GlobalProps
46
51
 
47
52
  const AdvancedTable = (props: AdvancedTableProps) => {
48
53
  const {
@@ -50,6 +55,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
50
55
  children,
51
56
  className,
52
57
  columnDefinitions,
58
+ dark = false,
53
59
  data = {},
54
60
  enableToggleExpansion = "header",
55
61
  expandedControl,
@@ -65,22 +71,22 @@ const AdvancedTable = (props: AdvancedTableProps) => {
65
71
  tableOptions,
66
72
  tableProps,
67
73
  toggleExpansionIcon = "arrows-from-line",
68
- } = props;
74
+ } = props
69
75
 
70
76
  const [loadingStateRowCount, setLoadingStateRowCount] = useState(
71
77
  initialLoadingRowsCount
72
- );
78
+ )
73
79
 
74
80
  // Create a local state for expanded and setExpanded if expandedControl not used
75
- const [localExpanded, setLocalExpanded] = useState({});
81
+ const [localExpanded, setLocalExpanded] = useState({})
76
82
 
77
83
  // Determine whether to use the prop or the local state
78
- const expanded = expandedControl ? expandedControl.value : localExpanded;
84
+ const expanded = expandedControl ? expandedControl.value : localExpanded
79
85
  const setExpanded = expandedControl
80
86
  ? expandedControl.onChange
81
- : setLocalExpanded;
87
+ : setLocalExpanded
82
88
 
83
- const columnHelper = createColumnHelper();
89
+ const columnHelper = createColumnHelper()
84
90
 
85
91
  //Create cells for first columns
86
92
  const createCellFunction = (cellAccessors: string[]) => {
@@ -88,10 +94,10 @@ const AdvancedTable = (props: AdvancedTableProps) => {
88
94
  row,
89
95
  getValue,
90
96
  }: {
91
- row: Row<DataType>;
92
- getValue: Getter<string>;
97
+ row: Row<GenericObject>
98
+ getValue: Getter<string>
93
99
  }) => {
94
- const rowData = row.original;
100
+ const rowData = row.original
95
101
 
96
102
  switch (row.depth) {
97
103
  case 0: {
@@ -101,12 +107,12 @@ const AdvancedTable = (props: AdvancedTableProps) => {
101
107
  onRowToggleClick={onRowToggleClick}
102
108
  row={row}
103
109
  />
104
- );
110
+ )
105
111
  }
106
112
  default: {
107
113
  // Handle other depths based on cellAccessors
108
- const depthAccessor = cellAccessors[row.depth - 1]; // Adjust index for depth
109
- const accessorValue = rowData[depthAccessor];
114
+ const depthAccessor = cellAccessors[row.depth - 1] // Adjust index for depth
115
+ const accessorValue = rowData[depthAccessor]
110
116
  return accessorValue ? (
111
117
  <CustomCell
112
118
  onRowToggleClick={onRowToggleClick}
@@ -115,13 +121,13 @@ const AdvancedTable = (props: AdvancedTableProps) => {
115
121
  />
116
122
  ) : (
117
123
  "N/A"
118
- );
124
+ )
119
125
  }
120
126
  }
121
- };
127
+ }
122
128
 
123
- return columnCells;
124
- };
129
+ return columnCells
130
+ }
125
131
 
126
132
  //Create column array in format needed by Tanstack
127
133
  const columns =
@@ -132,12 +138,12 @@ const AdvancedTable = (props: AdvancedTableProps) => {
132
138
  ...columnHelper.accessor(column.accessor, {
133
139
  header: column.label,
134
140
  }),
135
- };
141
+ }
136
142
  if (column.cellAccessors) {
137
- columnStructure.cell = createCellFunction(column.cellAccessors);
143
+ columnStructure.cell = createCellFunction(column.cellAccessors)
138
144
  }
139
- return columnStructure;
140
- });
145
+ return columnStructure
146
+ })
141
147
 
142
148
  //Syntax for sorting Array if we want to manage state ourselves
143
149
  const sorting = [
@@ -148,22 +154,22 @@ const AdvancedTable = (props: AdvancedTableProps) => {
148
154
  ? !sortControl.value.desc
149
155
  : false,
150
156
  },
151
- ];
157
+ ]
152
158
 
153
159
  const expandAndSortState = () => {
154
160
  if (sortControl) {
155
- return { state: { expanded, sorting } };
161
+ return { state: { expanded, sorting } }
156
162
  } else {
157
- return { state: { expanded } };
163
+ return { state: { expanded } }
158
164
  }
159
- };
165
+ }
160
166
 
161
167
  //initialize table
162
168
  const table = useReactTable({
163
169
  data: loading ? Array(loadingStateRowCount).fill({}) : tableData,
164
170
  columns,
165
171
  onExpandedChange: setExpanded,
166
- getSubRows: (row: DataType) => row.children,
172
+ getSubRows: (row: GenericObject) => row.children,
167
173
  getCoreRowModel: getCoreRowModel(),
168
174
  getExpandedRowModel: getExpandedRowModel(),
169
175
  getSortedRowModel: getSortedRowModel(),
@@ -171,42 +177,42 @@ const AdvancedTable = (props: AdvancedTableProps) => {
171
177
  sortDescFirst: true,
172
178
  ...expandAndSortState(),
173
179
  ...tableOptions,
174
- });
180
+ })
175
181
 
176
- const tableRows = table.getRowModel();
182
+ const tableRows = table.getRowModel()
177
183
 
178
184
  // Set table row count for loading state
179
185
  const updateLoadingStateRowCount = useCallback(() => {
180
- const rowsCount = table.getRowModel().rows.length;
186
+ const rowsCount = table.getRowModel().rows.length
181
187
  if (rowsCount !== loadingStateRowCount && rowsCount !== 0) {
182
- setLoadingStateRowCount(rowsCount);
188
+ setLoadingStateRowCount(rowsCount)
183
189
  }
184
- }, [tableData, loadingStateRowCount]);
190
+ }, [tableData, loadingStateRowCount])
185
191
 
186
192
  useEffect(() => {
187
193
  if (!loading) {
188
- updateLoadingStateRowCount();
194
+ updateLoadingStateRowCount()
189
195
  }
190
- }, [loading, updateLoadingStateRowCount]);
196
+ }, [loading, updateLoadingStateRowCount])
191
197
 
192
- const handleExpandOrCollapse = (row: Row<DataType>) => {
193
- onToggleExpansionClick && onToggleExpansionClick(row);
198
+ const handleExpandOrCollapse = (row: Row<GenericObject>) => {
199
+ onToggleExpansionClick && onToggleExpansionClick(row)
194
200
 
195
- const expandedState = expanded;
196
- const targetParent = row?.parentId;
201
+ const expandedState = expanded
202
+ const targetParent = row?.parentId
197
203
  return setExpanded(
198
204
  updateExpandAndCollapseState(tableRows, expandedState, targetParent)
199
- );
200
- };
205
+ )
206
+ }
201
207
 
202
- const ariaProps = buildAriaProps(aria);
203
- const dataProps = buildDataProps(data);
204
- const htmlProps = buildHtmlProps(htmlOptions);
208
+ const ariaProps = buildAriaProps(aria)
209
+ const dataProps = buildDataProps(data)
210
+ const htmlProps = buildHtmlProps(htmlOptions)
205
211
  const classes = classnames(
206
212
  buildCss("pb_advanced_table"),
207
213
  globalProps(props),
208
214
  className
209
- );
215
+ )
210
216
 
211
217
  return (
212
218
  <div {...ariaProps}
@@ -220,6 +226,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
220
226
  columnDefinitions,
221
227
  enableToggleExpansion,
222
228
  expanded,
229
+ expandedControl,
223
230
  handleExpandOrCollapse,
224
231
  inlineRowLoading,
225
232
  loading,
@@ -231,6 +238,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
231
238
  >
232
239
  <Table
233
240
  className={`${loading ? "content-loading" : ""}`}
241
+ dark={dark}
234
242
  dataTable
235
243
  numberSpacing="tabular"
236
244
  responsive="none"
@@ -247,10 +255,10 @@ const AdvancedTable = (props: AdvancedTableProps) => {
247
255
  </Table>
248
256
  </AdvancedTableContext.Provider>
249
257
  </div>
250
- );
251
- };
258
+ )
259
+ }
252
260
 
253
- AdvancedTable.Header = TableHeader;
254
- AdvancedTable.Body = TableBody;
261
+ AdvancedTable.Header = TableHeader
262
+ AdvancedTable.Body = TableBody
255
263
 
256
- export default AdvancedTable;
264
+ export default AdvancedTable
@@ -0,0 +1,14 @@
1
+ <%= content_tag(:div,
2
+ aria: object.aria,
3
+ class: object.classname,
4
+ data: object.data,
5
+ id: object.id) do %>
6
+ <%= pb_rails("table", props: { size: "sm", tag:"div", data_table: true, number_spacing:"tabular", responsive:"none" }) do %>
7
+ <% if content.present? %>
8
+ <% content.presence %>
9
+ <% else %>
10
+ <%= pb_rails("advanced_table/table_header", props: {column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion }) %>
11
+ <%= pb_rails("advanced_table/table_body", props: {table_data: object.table_data, column_definitions: object.column_definitions}) %>
12
+ <% end %>
13
+ <% end %>
14
+ <% end %>
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbAdvancedTable
5
+ class AdvancedTable < Playbook::KitBase
6
+ prop :table_data, type: Playbook::Props::Array,
7
+ default: []
8
+ prop :column_definitions, type: Playbook::Props::Array,
9
+ default: []
10
+ prop :enable_toggle_expansion, type: Playbook::Props::Enum,
11
+ values: %w[all header none],
12
+ default: "header"
13
+
14
+ def classname
15
+ generate_classname("pb_advanced_table")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,7 @@
1
- import React, {useState} from "react";
2
- import { render, screen } from "../utilities/test-utils";
1
+ import React, {useState} from "react"
2
+ import { render, screen } from "../utilities/test-utils"
3
3
 
4
- import { AdvancedTable } from "../";
4
+ import { AdvancedTable } from "../"
5
5
 
6
6
  const MOCK_DATA = [
7
7
  {
@@ -40,7 +40,7 @@ const MOCK_DATA = [
40
40
  },
41
41
  ],
42
42
  },
43
- ];
43
+ ]
44
44
 
45
45
  const MOCK_DATA_LOADING = [
46
46
  {
@@ -70,7 +70,7 @@ const MOCK_DATA_LOADING = [
70
70
  },
71
71
  ],
72
72
  },
73
- ];
73
+ ]
74
74
 
75
75
  const columnDefinitions = [
76
76
  {
@@ -86,11 +86,11 @@ const columnDefinitions = [
86
86
  accessor: "scheduledMeetings",
87
87
  label: "Scheduled Meetings",
88
88
  },
89
- ];
89
+ ]
90
90
 
91
91
  const subRowHeaders = ["Quarter"]
92
92
 
93
- const testId = "advanced_table";
93
+ const testId = "advanced_table"
94
94
 
95
95
  const AdvancedTableExpandControl = () => {
96
96
  const [expanded, setExpanded] = useState({'0': true})
@@ -109,7 +109,7 @@ return (
109
109
  tableData={MOCK_DATA}
110
110
  />
111
111
  </div>
112
- );
112
+ )
113
113
  }
114
114
 
115
115
  const AdvancedTableSortControl = () => {
@@ -132,7 +132,7 @@ return (
132
132
  <AdvancedTable.Body />
133
133
  </AdvancedTable>
134
134
  </div>
135
- );
135
+ )
136
136
  }
137
137
 
138
138
  const tableOptions = {
@@ -158,12 +158,12 @@ test("Generates default kit and classname", () => {
158
158
  data={{ testid: testId }}
159
159
  tableData={MOCK_DATA}
160
160
  />
161
- );
161
+ )
162
162
 
163
- const kit = screen.getByTestId(testId);
164
- expect(kit).toBeInTheDocument();
163
+ const kit = screen.getByTestId(testId)
164
+ expect(kit).toBeInTheDocument()
165
165
  expect(kit).toHaveClass('pb_advanced_table')
166
- });
166
+ })
167
167
 
168
168
  test("Generates aria label", () => {
169
169
  render(
@@ -173,11 +173,11 @@ test("Generates aria label", () => {
173
173
  data={{ testid: testId }}
174
174
  tableData={MOCK_DATA}
175
175
  />
176
- );
176
+ )
177
177
 
178
- const kit = screen.getByTestId(testId);
178
+ const kit = screen.getByTestId(testId)
179
179
  expect(kit).toHaveAttribute('aria-label', testId)
180
- });
180
+ })
181
181
 
182
182
  test("Row toggle button exists and toggles subrows open and closed", () => {
183
183
  render(
@@ -186,9 +186,9 @@ test("Row toggle button exists and toggles subrows open and closed", () => {
186
186
  data={{ testid: testId }}
187
187
  tableData={MOCK_DATA}
188
188
  />
189
- );
189
+ )
190
190
 
191
- const kit = screen.getByTestId(testId);
191
+ const kit = screen.getByTestId(testId)
192
192
  const rowButton = kit.querySelector(".gray-icon.expand-toggle-icon")
193
193
  expect(rowButton).toBeInTheDocument()
194
194
  const subRow1 = kit.querySelector(".bg-white.depth-sub-row-1")
@@ -196,7 +196,7 @@ test("Row toggle button exists and toggles subrows open and closed", () => {
196
196
  rowButton.click()
197
197
  const subRow = kit.querySelector(".bg-white.depth-sub-row-1")
198
198
  expect(subRow).toBeInTheDocument()
199
- });
199
+ })
200
200
 
201
201
  test("toggleExpansionAll button exists and toggles subrows open and closed", () => {
202
202
  render(
@@ -205,9 +205,9 @@ test("toggleExpansionAll button exists and toggles subrows open and closed", ()
205
205
  data={{ testid: testId }}
206
206
  tableData={MOCK_DATA}
207
207
  />
208
- );
208
+ )
209
209
 
210
- const kit = screen.getByTestId(testId);
210
+ const kit = screen.getByTestId(testId)
211
211
  const toggleButton = kit.querySelector(".gray-icon.toggle-all-icon")
212
212
  expect(toggleButton).toBeInTheDocument()
213
213
  const subRow1 = kit.querySelector(".bg-white.depth-sub-row-1")
@@ -215,7 +215,7 @@ test("toggleExpansionAll button exists and toggles subrows open and closed", ()
215
215
  toggleButton.click()
216
216
  const subRow = kit.querySelector(".bg-white.depth-sub-row-1")
217
217
  expect(subRow).toBeInTheDocument()
218
- });
218
+ })
219
219
 
220
220
  test("loading state + initialLoadingRowCount prop", () => {
221
221
  render(
@@ -226,16 +226,16 @@ test("loading state + initialLoadingRowCount prop", () => {
226
226
  loading
227
227
  tableData={MOCK_DATA}
228
228
  />
229
- );
229
+ )
230
230
 
231
- const kit = screen.getByTestId(testId);
231
+ const kit = screen.getByTestId(testId)
232
232
  const table = kit.querySelector('table')
233
233
  expect(table).toHaveClass('pb_table table-sm table-responsive-none table-card data_table ns_tabular content-loading')
234
234
 
235
235
  const tableBody = kit.querySelector('tbody')
236
236
  const tableRows = tableBody.getElementsByTagName('tr')
237
237
  expect(tableRows).toHaveLength(13)
238
- });
238
+ })
239
239
 
240
240
  test("subRowHeaders are rendered", () => {
241
241
  render(
@@ -247,21 +247,21 @@ test("subRowHeaders are rendered", () => {
247
247
  <AdvancedTable.Header />
248
248
  <AdvancedTable.Body subRowHeaders={subRowHeaders}/>
249
249
  </AdvancedTable>
250
- );
250
+ )
251
251
 
252
- const kit = screen.getByTestId(testId);
252
+ const kit = screen.getByTestId(testId)
253
253
 
254
254
  const rowButton = kit.querySelector(".gray-icon.expand-toggle-icon")
255
255
  rowButton.click()
256
256
 
257
257
  const subRowHeader = kit.querySelector(".custom-row.bg-silver")
258
258
  expect(subRowHeader).toBeInTheDocument()
259
- });
259
+ })
260
260
 
261
261
  test("expandControl prop works as expected", () => {
262
262
  render (<AdvancedTableExpandControl/>)
263
263
 
264
- const kit = screen.getByTestId(testId);
264
+ const kit = screen.getByTestId(testId)
265
265
  const subRow = kit.querySelector(".bg-white.depth-sub-row-1")
266
266
  expect(subRow).toBeInTheDocument()
267
267
  })
@@ -274,13 +274,13 @@ test("tableOptions prop functions as expected", () => {
274
274
  tableData={MOCK_DATA}
275
275
  tableOptions={tableOptions}
276
276
  />
277
- );
277
+ )
278
278
 
279
- const kit = screen.getByTestId(testId);
279
+ const kit = screen.getByTestId(testId)
280
280
  const row1 = kit.getElementsByTagName('tr')[1]
281
281
 
282
282
  expect(row1.id).toBe("1-1-0-row")
283
- });
283
+ })
284
284
 
285
285
  test("tableProps prop functions as expected", () => {
286
286
  render(
@@ -290,12 +290,12 @@ test("tableProps prop functions as expected", () => {
290
290
  tableData={MOCK_DATA}
291
291
  tableProps={tableProps}
292
292
  />
293
- );
293
+ )
294
294
 
295
- const kit = screen.getByTestId(testId);
295
+ const kit = screen.getByTestId(testId)
296
296
  const table = kit.querySelector('table')
297
297
  expect(table).toHaveClass("pb_table table-sm table-responsive-none data_table sticky-header ns_tabular")
298
- });
298
+ })
299
299
 
300
300
  test("enableExpansionIcon changes icon", () => {
301
301
  render(
@@ -306,13 +306,13 @@ test("enableExpansionIcon changes icon", () => {
306
306
  tableProps={tableProps}
307
307
  toggleExpansionIcon= "chevron-up"
308
308
  />
309
- );
309
+ )
310
310
 
311
- const kit = screen.getByTestId(testId);
311
+ const kit = screen.getByTestId(testId)
312
312
  const tableHead = kit.querySelector('table')
313
313
  const toggleIcon= tableHead.querySelector(".pb_icon_kit")
314
314
  expect(toggleIcon).toHaveClass("fa-chevron-up")
315
- });
315
+ })
316
316
 
317
317
  test("sortIcon changes icon", () => {
318
318
  render(
@@ -328,18 +328,18 @@ test("sortIcon changes icon", () => {
328
328
  />
329
329
  <AdvancedTable.Body />
330
330
  </AdvancedTable>
331
- );
331
+ )
332
332
 
333
- const kit = screen.getByTestId(testId);
333
+ const kit = screen.getByTestId(testId)
334
334
  const sortIcon = kit.querySelector('.sort-button-icon')
335
335
  const icon= sortIcon.querySelector(".pb_icon_kit")
336
336
  expect(icon).toHaveClass("fa-chevron-down")
337
- });
337
+ })
338
338
 
339
339
  test("Sort icon renders with enableSorting + sortControl works as expected", () => {
340
340
  render (<AdvancedTableSortControl/>)
341
341
 
342
- const kit = screen.getByTestId(testId);
342
+ const kit = screen.getByTestId(testId)
343
343
  const sortIcon = kit.querySelector(".sort-button-icon")
344
344
  expect(sortIcon).toBeInTheDocument()
345
345
 
@@ -358,9 +358,9 @@ test("sort button exists and sorts column data", () => {
358
358
  <AdvancedTable.Header enableSorting />
359
359
  <AdvancedTable.Body />
360
360
  </AdvancedTable>
361
- );
361
+ )
362
362
 
363
- const kit = screen.getByTestId(testId);
363
+ const kit = screen.getByTestId(testId)
364
364
 
365
365
  const sortButton= kit.querySelector(".pb_flex_kit_orientation_row_justify_content_between_align_items_top_spacing_none.pl_xxs.cursor_pointer.header-sort-button.pb_th_link")
366
366
  expect(sortButton).toBeInTheDocument()
@@ -372,7 +372,7 @@ test("sort button exists and sorts column data", () => {
372
372
 
373
373
  const row2 = kit.getElementsByTagName('tr')[2]
374
374
  expect(row2.id).toBe("0-0-0-row")
375
- });
375
+ })
376
376
 
377
377
  test("Generates Table.Header default + custom classname", () => {
378
378
  render(
@@ -385,12 +385,12 @@ test("Generates Table.Header default + custom classname", () => {
385
385
  <AdvancedTable.Body />
386
386
 
387
387
  </AdvancedTable>
388
- );
388
+ )
389
389
 
390
- const kit = screen.getByTestId(testId);
390
+ const kit = screen.getByTestId(testId)
391
391
  const tableHeader = kit.querySelector('thead')
392
392
  expect(tableHeader).toHaveClass('pb_advanced_table_header custom-header')
393
- });
393
+ })
394
394
 
395
395
  test("Generates Table.Body default + custom classname", () => {
396
396
  render(
@@ -403,12 +403,12 @@ test("Generates Table.Body default + custom classname", () => {
403
403
  <AdvancedTable.Body className="custom-body-classname"/>
404
404
 
405
405
  </AdvancedTable>
406
- );
406
+ )
407
407
 
408
- const kit = screen.getByTestId(testId);
408
+ const kit = screen.getByTestId(testId)
409
409
  const tableHeader = kit.querySelector('tbody')
410
410
  expect(tableHeader).toHaveClass('pb_advanced_table_body custom-body-classname')
411
- });
411
+ })
412
412
 
413
413
  test("inlineRowLoading prop renders inline loading if true", () => {
414
414
  render(
@@ -418,12 +418,12 @@ test("inlineRowLoading prop renders inline loading if true", () => {
418
418
  inlineRowLoading
419
419
  tableData={MOCK_DATA_LOADING}
420
420
  />
421
- );
421
+ )
422
422
 
423
- const kit = screen.getByTestId(testId);
423
+ const kit = screen.getByTestId(testId)
424
424
  const rowButton = kit.querySelector(".gray-icon.expand-toggle-icon")
425
425
  expect(rowButton).toBeInTheDocument()
426
426
  rowButton.click()
427
427
  const inlineLoading = kit.querySelector(".fa-spinner")
428
428
  expect(inlineLoading).toBeInTheDocument()
429
- });
429
+ })
@@ -1,6 +1,6 @@
1
- import React from "react";
2
- import { AdvancedTable } from "../../";
3
- import { MOCK_DATA } from "./_mock_data";
1
+ import React from "react"
2
+ import { AdvancedTable } from "../../"
3
+ import { MOCK_DATA } from "./_mock_data"
4
4
 
5
5
  const AdvancedTableCollapsibleTrail = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableCollapsibleTrail = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  return (
39
39
  <div>
@@ -46,7 +46,7 @@ const AdvancedTableCollapsibleTrail = (props) => {
46
46
  <AdvancedTable.Body collapsibleTrail={false} />
47
47
  </AdvancedTable>
48
48
  </div>
49
- );
50
- };
49
+ )
50
+ }
51
51
 
52
- export default AdvancedTableCollapsibleTrail;
52
+ export default AdvancedTableCollapsibleTrail