playbook_ui 13.21.0.pre.alpha.PBNTR224letuserresetrowexpansion2441 → 13.21.0.pre.alpha.PBNTR224letuserresetrowexpansion2466

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +18 -15
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/SortIconButton.tsx +6 -3
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +12 -8
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +14 -9
  6. data/app/pb_kits/playbook/pb_advanced_table/Components/ToggleIconButton.tsx +9 -5
  7. data/app/pb_kits/playbook/pb_advanced_table/README.md +2 -2
  8. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +15 -11
  9. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +12 -8
  10. data/app/pb_kits/playbook/pb_advanced_table/Utilities/ExpansionControlHelpers.tsx +3 -2
  11. data/app/pb_kits/playbook/pb_advanced_table/Utilities/types.ts +0 -2
  12. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +7 -9
  13. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +83 -79
  14. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +14 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +19 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +54 -54
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail.jsx +7 -7
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.jsx +7 -7
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_expanded_control.jsx +12 -7
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx +7 -7
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.md +1 -1
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.jsx +7 -7
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.jsx +7 -7
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.jsx +7 -7
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_subrow_headers.jsx +7 -7
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_options.jsx +7 -7
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +7 -7
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data.js +1 -1
  29. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading.js +1 -1
  30. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  31. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/_chrome_styles.scss +13 -0
  32. data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +9 -0
  33. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +30 -0
  34. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +20 -0
  35. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +21 -0
  36. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +37 -0
  37. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +32 -0
  38. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +2 -1
  39. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +2 -1
  40. data/app/pb_kits/playbook/pb_background/background.html.erb +2 -1
  41. data/app/pb_kits/playbook/pb_badge/badge.html.erb +2 -1
  42. data/app/pb_kits/playbook/pb_body/body.html.erb +2 -1
  43. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +0 -7
  44. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumb_item.html.erb +2 -1
  45. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumbs.html.erb +2 -1
  46. data/app/pb_kits/playbook/pb_button/button.html.erb +2 -1
  47. data/app/pb_kits/playbook/pb_button/button.rb +2 -3
  48. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.html.erb +2 -1
  49. data/app/pb_kits/playbook/pb_caption/caption.html.erb +2 -1
  50. data/app/pb_kits/playbook/pb_card/card.html.erb +2 -1
  51. data/app/pb_kits/playbook/pb_card/card_body.html.erb +2 -1
  52. data/app/pb_kits/playbook/pb_card/card_header.html.erb +2 -1
  53. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +3 -1
  54. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +2 -1
  55. data/app/pb_kits/playbook/pb_collapsible/collapsible.html.erb +2 -1
  56. data/app/pb_kits/playbook/pb_collapsible/collapsible_content.html.erb +2 -1
  57. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +2 -1
  58. data/app/pb_kits/playbook/pb_contact/contact.html.erb +2 -1
  59. data/app/pb_kits/playbook/pb_currency/currency.html.erb +2 -1
  60. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.html.erb +2 -1
  61. data/app/pb_kits/playbook/pb_date/date.html.erb +2 -1
  62. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -2
  63. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +3 -0
  64. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -2
  65. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -1
  66. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +1 -1
  67. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +9 -7
  68. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_margin_bottom.html.erb +7 -0
  69. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_margin_bottom.jsx +41 -0
  70. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +2 -0
  71. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  72. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +1 -2
  73. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.html.erb +2 -1
  74. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.html.erb +2 -1
  75. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +2 -1
  76. data/app/pb_kits/playbook/pb_date_time/date_time.html.erb +2 -1
  77. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +3 -2
  78. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.html.erb +2 -1
  79. data/app/pb_kits/playbook/pb_detail/detail.html.erb +2 -1
  80. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +2 -1
  81. data/app/pb_kits/playbook/pb_dialog/dialog_body.html.erb +3 -2
  82. data/app/pb_kits/playbook/pb_dialog/dialog_footer.html.erb +2 -1
  83. data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +3 -2
  84. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +2 -1
  85. data/app/pb_kits/playbook/pb_filter/filter.html.erb +2 -1
  86. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +8 -3
  87. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -0
  88. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.html.erb +51 -1
  89. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.jsx +62 -11
  90. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_positions.html.erb +7 -2
  91. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.html.erb +4 -3
  92. data/app/pb_kits/playbook/pb_flex/docs/_flex_spacing.html.erb +0 -4
  93. data/app/pb_kits/playbook/pb_flex/flex.html.erb +2 -1
  94. data/app/pb_kits/playbook/pb_flex/flex_item.html.erb +2 -1
  95. data/app/pb_kits/playbook/pb_form_group/form_group.html.erb +2 -1
  96. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +2 -2
  97. data/app/pb_kits/playbook/pb_hashtag/hashtag.html.erb +2 -1
  98. data/app/pb_kits/playbook/pb_highlight/highlight.html.erb +2 -1
  99. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.html.erb +2 -1
  100. data/app/pb_kits/playbook/pb_icon/_icon.tsx +1 -0
  101. data/app/pb_kits/playbook/pb_icon/icon.html.erb +2 -1
  102. data/app/pb_kits/playbook/pb_icon/icon.rb +3 -3
  103. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.html.erb +2 -1
  104. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +2 -1
  105. data/app/pb_kits/playbook/pb_icon_value/icon_value.html.erb +2 -1
  106. data/app/pb_kits/playbook/pb_image/image.html.erb +2 -1
  107. data/app/pb_kits/playbook/pb_label_pill/label_pill.html.erb +2 -1
  108. data/app/pb_kits/playbook/pb_label_value/label_value.html.erb +3 -2
  109. data/app/pb_kits/playbook/pb_layout/body.html.erb +2 -1
  110. data/app/pb_kits/playbook/pb_layout/footer.html.erb +2 -1
  111. data/app/pb_kits/playbook/pb_layout/header.html.erb +2 -1
  112. data/app/pb_kits/playbook/pb_layout/item.html.erb +2 -1
  113. data/app/pb_kits/playbook/pb_layout/layout.html.erb +2 -1
  114. data/app/pb_kits/playbook/pb_layout/sidebar.html.erb +2 -1
  115. data/app/pb_kits/playbook/pb_legend/legend.html.erb +2 -1
  116. data/app/pb_kits/playbook/pb_list/item.html.erb +2 -1
  117. data/app/pb_kits/playbook/pb_list/list.html.erb +2 -1
  118. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.html.erb +2 -1
  119. data/app/pb_kits/playbook/pb_message/message.html.erb +2 -1
  120. data/app/pb_kits/playbook/pb_message/message_mention.html.erb +3 -2
  121. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +2 -1
  122. data/app/pb_kits/playbook/pb_multiple_users/multiple_users.html.erb +2 -1
  123. data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.html.erb +2 -1
  124. data/app/pb_kits/playbook/pb_nav/item.html.erb +4 -2
  125. data/app/pb_kits/playbook/pb_nav/nav.html.erb +2 -1
  126. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +2 -1
  127. data/app/pb_kits/playbook/pb_pagination/pagination.html.erb +2 -1
  128. data/app/pb_kits/playbook/pb_passphrase/passphrase.html.erb +1 -1
  129. data/app/pb_kits/playbook/pb_person/person.html.erb +2 -1
  130. data/app/pb_kits/playbook/pb_person_contact/person_contact.html.erb +2 -1
  131. data/app/pb_kits/playbook/pb_pill/pill.html.erb +2 -1
  132. data/app/pb_kits/playbook/pb_popover/popover.html.erb +2 -1
  133. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +2 -1
  134. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +2 -1
  135. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +2 -1
  136. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +2 -1
  137. data/app/pb_kits/playbook/pb_radio/radio.html.erb +2 -1
  138. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +2 -1
  139. data/app/pb_kits/playbook/pb_select/select.html.erb +2 -1
  140. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +2 -1
  141. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +2 -1
  142. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +2 -1
  143. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.html.erb +2 -1
  144. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -1
  145. data/app/pb_kits/playbook/pb_source/source.html.erb +2 -1
  146. data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +2 -1
  147. data/app/pb_kits/playbook/pb_stat_change/stat_change.html.erb +2 -1
  148. data/app/pb_kits/playbook/pb_stat_value/stat_value.html.erb +2 -1
  149. data/app/pb_kits/playbook/pb_table/table.html.erb +4 -2
  150. data/app/pb_kits/playbook/pb_table/table_body.html.erb +5 -3
  151. data/app/pb_kits/playbook/pb_table/table_cell.html.erb +5 -3
  152. data/app/pb_kits/playbook/pb_table/table_head.html.erb +5 -3
  153. data/app/pb_kits/playbook/pb_table/table_header.html.erb +5 -3
  154. data/app/pb_kits/playbook/pb_table/table_row.html.erb +5 -3
  155. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +0 -1
  156. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +2 -1
  157. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -1
  158. data/app/pb_kits/playbook/pb_textarea/textarea.html.erb +2 -1
  159. data/app/pb_kits/playbook/pb_time/time.html.erb +2 -1
  160. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.html.erb +3 -2
  161. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.html.erb +2 -1
  162. data/app/pb_kits/playbook/pb_timeline/item.html.erb +2 -1
  163. data/app/pb_kits/playbook/pb_timeline/timeline.html.erb +2 -1
  164. data/app/pb_kits/playbook/pb_timestamp/timestamp.html.erb +2 -1
  165. data/app/pb_kits/playbook/pb_title/title.html.erb +3 -2
  166. data/app/pb_kits/playbook/pb_title_count/title_count.html.erb +2 -1
  167. data/app/pb_kits/playbook/pb_title_detail/title_detail.html.erb +2 -1
  168. data/app/pb_kits/playbook/pb_toggle/toggle.html.erb +2 -1
  169. data/app/pb_kits/playbook/pb_tooltip/tooltip.html.erb +2 -1
  170. data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -1
  171. data/app/pb_kits/playbook/pb_user/user.html.erb +2 -1
  172. data/app/pb_kits/playbook/pb_user_badge/user_badge.html.erb +2 -1
  173. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.html.erb +2 -1
  174. data/dist/playbook-rails.js +4 -4
  175. data/lib/playbook/kit_base.rb +18 -0
  176. data/lib/playbook/version.rb +1 -1
  177. metadata +16 -5
@@ -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 AdvancedTableDefault = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableDefault = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  return (
39
39
  <div>
@@ -43,7 +43,7 @@ const AdvancedTableDefault = (props) => {
43
43
  {...props}
44
44
  />
45
45
  </div>
46
- );
47
- };
46
+ )
47
+ }
48
48
 
49
- export default AdvancedTableDefault;
49
+ export default AdvancedTableDefault
@@ -1,6 +1,6 @@
1
- import React, { useState } from "react";
2
- import { AdvancedTable } from "../../";
3
- import { MOCK_DATA } from "./_mock_data";
1
+ import React, { useState } from "react"
2
+ import { AdvancedTable } from "../../"
3
+ import { MOCK_DATA } from "./_mock_data"
4
4
 
5
5
  const AdvancedTableExpandedControl = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableExpandedControl = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  //State for manually effecting what is expanded
39
39
  const [expanded, setExpanded] = useState({'0': true, '0.0': true, '0.0.1': true})
@@ -44,16 +44,21 @@ const AdvancedTableExpandedControl = (props) => {
44
44
  onChange: setExpanded,
45
45
  }
46
46
 
47
+ const onRowToggleClick = (row) => {
48
+ setExpanded({ ...expanded, [row.id]: !expanded[row.id] })
49
+ }
50
+
47
51
  return (
48
52
  <div>
49
53
  <AdvancedTable
50
54
  columnDefinitions={columnDefinitions}
51
55
  expandedControl={expandedControl}
56
+ onRowToggleClick={onRowToggleClick}
52
57
  tableData={MOCK_DATA}
53
58
  {...props}
54
59
  />
55
60
  </div>
56
- );
57
- };
61
+ )
62
+ }
58
63
 
59
- export default AdvancedTableExpandedControl;
64
+ export default AdvancedTableExpandedControl
@@ -1,6 +1,6 @@
1
- import React from "react";
2
- import { AdvancedTable } from "../..";
3
- import { MOCK_DATA_INLINE_LOADING } from "./_mock_data_inline_loading";
1
+ import React from "react"
2
+ import { AdvancedTable } from "../.."
3
+ import { MOCK_DATA_INLINE_LOADING } from "./_mock_data_inline_loading"
4
4
 
5
5
  const AdvancedTableInlineRowLoading = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableInlineRowLoading = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  //Render the subRow header rows
39
39
  const subRowHeaders = ["Quarter", "Month", "Day"]
@@ -52,7 +52,7 @@ const AdvancedTableInlineRowLoading = (props) => {
52
52
  <AdvancedTable.Body subRowHeaders={subRowHeaders}/>
53
53
  </AdvancedTable>
54
54
  </div>
55
- );
56
- };
55
+ )
56
+ }
57
57
 
58
- export default AdvancedTableInlineRowLoading;
58
+ export default AdvancedTableInlineRowLoading
@@ -1,4 +1,4 @@
1
- As a default, the kit assumes that the initial dataset is complete, and it renders all expansion buttons/controls based on that data; if no children are present, no expansion controls are rendered. If, however, you want to change the initial dataset to omit some or all of its children (to improve load times of a complex dataset, perhaps), and you implement a querying logic that loads children only when its parent is expanded, then you must use the `inlineRowLoading` prop to ensure your expansion controls are rendered even though your child data is not yet loaded. You must also pass an empty `children` array to any node that will have children to ensure its parent maintains its ability to expand. If this prop is called AND your data contains empty `children` arrays, the kit will render expansion controls on any row with empty children, and then add an inline loading state within the expanded subrow until those child row(s) are returned to the page [by your query logic].
1
+ As a default, the kit assumes that the initial dataset is complete, and it renders all expansion buttons/controls based on that data; if no children are present, no expansion controls are rendered. If, however, you want to change the initial dataset to omit some or all of its children (to improve load times of a complex dataset, perhaps), and you implement a querying logic that loads children only when its parent is expanded, then you must use the `inlineRowLoading` prop to ensure your expansion controls are rendered even though your child data is not yet loaded. You must also pass an empty `children` array to any node that will have children to ensure its parent maintains its ability to expand. If this prop is called AND your data contains empty `children` arrays, the kit will render expansion controls on any row with empty children, and then add an inline loading state within the expanded subrow until those child row(s) are returned to the page [by your query logic].
2
2
 
3
3
  In this code example, 2021 has an empty children array. Toggle it open to see the inline loading state. Once the correct data loads, this state will be replaced with the correct data rows.
4
4
 
@@ -1,7 +1,7 @@
1
- import React, { useState } from "react";
2
- import { AdvancedTable } from "../../";
1
+ import React, { useState } from "react"
2
+ import { AdvancedTable } from "../../"
3
3
  import { Button } from "../../"
4
- import { MOCK_DATA } from "./_mock_data";
4
+ import { MOCK_DATA } from "./_mock_data"
5
5
 
6
6
  const AdvancedTableLoading = (props) => {
7
7
 
@@ -37,7 +37,7 @@ const [isloading, setIsLoading] = useState(true)
37
37
  accessor: "graduatedStudents",
38
38
  label: "Graduated Students",
39
39
  },
40
- ];
40
+ ]
41
41
 
42
42
  return (
43
43
  <div>
@@ -54,7 +54,7 @@ const [isloading, setIsLoading] = useState(true)
54
54
  {...props}
55
55
  />
56
56
  </div>
57
- );
58
- };
57
+ )
58
+ }
59
59
 
60
- export default AdvancedTableLoading;
60
+ export default AdvancedTableLoading
@@ -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 AdvancedTableSort = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableSort = (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 AdvancedTableSort = (props) => {
46
46
  <AdvancedTable.Body />
47
47
  </AdvancedTable>
48
48
  </div>
49
- );
50
- };
49
+ )
50
+ }
51
51
 
52
- export default AdvancedTableSort;
52
+ export default AdvancedTableSort
@@ -1,6 +1,6 @@
1
- import React, { useState } from "react";
2
- import { AdvancedTable } from "../..";
3
- import { MOCK_DATA } from "./_mock_data";
1
+ import React, { useState } from "react"
2
+ import { AdvancedTable } from "../.."
3
+ import { MOCK_DATA } from "./_mock_data"
4
4
 
5
5
  const AdvancedTableSortControl = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableSortControl = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  //State for sort direction
39
39
  const [isSortDesc, setIsSortDesc] = useState({desc: false})
@@ -57,7 +57,7 @@ const AdvancedTableSortControl = (props) => {
57
57
  <AdvancedTable.Body />
58
58
  </AdvancedTable>
59
59
  </div>
60
- );
61
- };
60
+ )
61
+ }
62
62
 
63
- export default AdvancedTableSortControl;
63
+ export default AdvancedTableSortControl
@@ -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 AdvancedTableSubrowHeaders = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableSubrowHeaders = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  //Render the subRow header rows
39
39
  const subRowHeaders = ["Quarter", "Month", "Day"]
@@ -51,7 +51,7 @@ const AdvancedTableSubrowHeaders = (props) => {
51
51
  <AdvancedTable.Body subRowHeaders={subRowHeaders}/>
52
52
  </AdvancedTable>
53
53
  </div>
54
- );
55
- };
54
+ )
55
+ }
56
56
 
57
- export default AdvancedTableSubrowHeaders;
57
+ export default AdvancedTableSubrowHeaders
@@ -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 AdvancedTableTableOptions = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableTableOptions = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  const tableOptions = {
39
39
  initialState: {
@@ -55,7 +55,7 @@ const AdvancedTableTableOptions = (props) => {
55
55
  {...props}
56
56
  />
57
57
  </div>
58
- );
59
- };
58
+ )
59
+ }
60
60
 
61
- export default AdvancedTableTableOptions;
61
+ export default AdvancedTableTableOptions
@@ -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 AdvancedTableTableProps = (props) => {
6
6
  const columnDefinitions = [
@@ -33,7 +33,7 @@ const AdvancedTableTableProps = (props) => {
33
33
  accessor: "graduatedStudents",
34
34
  label: "Graduated Students",
35
35
  },
36
- ];
36
+ ]
37
37
 
38
38
  const tableProps = {
39
39
  container: false,
@@ -49,7 +49,7 @@ const AdvancedTableTableProps = (props) => {
49
49
  {...props}
50
50
  />
51
51
  </div>
52
- );
53
- };
52
+ )
53
+ }
54
54
 
55
- export default AdvancedTableTableProps;
55
+ export default AdvancedTableTableProps
@@ -275,4 +275,4 @@ export const MOCK_DATA = [
275
275
  },
276
276
  ],
277
277
  },
278
- ];
278
+ ]
@@ -196,5 +196,5 @@ export const MOCK_DATA_INLINE_LOADING = [
196
196
  },
197
197
  ],
198
198
  },
199
- ];
199
+ ]
200
200
 
@@ -1,4 +1,6 @@
1
1
  examples:
2
+ # rails:
3
+ # - advanced_table_default: Default (Required Props)
2
4
  react:
3
5
  - advanced_table_default: Default (Required Props)
4
6
  - advanced_table_loading: Loading State
@@ -0,0 +1,13 @@
1
+ @import "../../tokens/colors";
2
+
3
+ @mixin chrome_styles($border-color) {
4
+ .chrome-styles:first-child {
5
+ border-right: $border-color;
6
+ }
7
+
8
+ .table-card {
9
+ .chrome-styles:first-child {
10
+ border-right: $transparent !important;
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ <%= content_tag(:div,
2
+ aria: object.aria,
3
+ class: object.classname,
4
+ data: object.data,
5
+ id: object.id) do %>
6
+ <% object.table_data.each do |row| %>
7
+ <%= render_row_and_children(row, object.column_definitions) %>
8
+ <% end %>
9
+ <% end %>
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbAdvancedTable
5
+ class TableBody < Playbook::KitBase
6
+ prop :table_data, type: Playbook::Props::Array,
7
+ default: []
8
+ prop :column_definitions, type: Playbook::Props::Array,
9
+ default: []
10
+
11
+ def render_row_and_children(row, column_definitions, current_depth = 0)
12
+ output = ActiveSupport::SafeBuffer.new
13
+
14
+ output << pb_rails("advanced_table/table_row", props: { row: row, column_definitions: column_definitions, depth: current_depth })
15
+
16
+ if row[:children].present?
17
+ row[:children].each do |child_row|
18
+ output << render_row_and_children(child_row, column_definitions, current_depth + 1)
19
+ end
20
+ end
21
+
22
+ output
23
+ end
24
+
25
+ def classname
26
+ generate_classname("pb_advanced_table_body", "pb_table_tbody", separator: " ")
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
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/table_row", props: {tag:"div"}) do %>
7
+ <% object.column_definitions.each_with_index do |item, index| %>
8
+ <%= pb_rails("table/table_header", props: { tag:"div", id:item[:accessor], classname:object.th_classname}) do %>
9
+ <%= pb_rails("flex", props:{ align: "center", justify: index.zero? ? "start" : "end", text_align:"end" }) do %>
10
+ <% if index.zero? && (object.enable_toggle_expansion == "header" || object.enable_toggle_expansion == "all") %>
11
+ <button class="gray-icon toggle-all-icon">
12
+ <%= pb_rails("icon", props: { icon: "arrows-from-line", cursor: "pointer", fixed_width: true, padding_right:"xs" }) %>
13
+ </button>
14
+ <% end %>
15
+ <%= item[:label] %>
16
+ <% end %>
17
+ <% end %>
18
+ <% end %>
19
+ <% end %>
20
+ <% end %>
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbAdvancedTable
5
+ class TableHeader < Playbook::KitBase
6
+ prop :column_definitions, type: Playbook::Props::Array,
7
+ default: []
8
+ prop :enable_toggle_expansion, type: Playbook::Props::Enum,
9
+ values: %w[all header none],
10
+ default: "header"
11
+
12
+ def classname
13
+ generate_classname("pb_advanced_table_header", "pb_table_thead", separator: " ")
14
+ end
15
+
16
+ def th_classname
17
+ generate_classname("table-header-cells", separator: " ")
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ <%= content_tag(:div,
2
+ aria: object.aria,
3
+ class: object.classname,
4
+ data: object.data,
5
+ id: object.id) do %>
6
+ <% object.column_definitions.each_with_index do |column, index| %>
7
+ <%= pb_rails("table/table_cell", props: { tag:"div", classname:object.td_classname}) do %>
8
+ <%= pb_rails("flex", props:{ align: "center", justify: index.zero? ? "start" : "end" }) do %>
9
+ <div style="padding-left: <%= depth * 1.25 %>em">
10
+ <%= pb_rails("flex", props:{align: "center", column_gap: "xs"}) do %>
11
+ <% if index.zero? && object.row[:children].present? %>
12
+ <button class="gray-icon expand-toggle-icon">
13
+ <%= pb_rails("icon", props: { icon: "circle-play", cursor: "pointer" }) %>
14
+ </button>
15
+ <% end %>
16
+ <%= pb_rails("flex/flex_item", props:{padding_left: index.zero? && object.row[:children].present? ? "none" : "xs"}) do %>
17
+ <% if index.zero? %>
18
+ <% if object.depth.zero? %>
19
+ <%= object.row[column[:accessor].to_sym] %>
20
+ <% else %>
21
+ <% object.depth_accessors.each_with_index do |item, accessor_index| %>
22
+ <% if object.depth - 1 == accessor_index %>
23
+ <% key = item.to_sym %>
24
+ <%= object.row[key] %>
25
+ <% end %>
26
+ <% end %>
27
+ <% end %>
28
+ <% else %>
29
+ <%= object.row[column[:accessor].to_sym] %>
30
+ <% end %>
31
+ <% end %>
32
+ <% end %>
33
+ </div>
34
+ <% end %>
35
+ <% end %>
36
+ <% end %>
37
+ <% end %>
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbAdvancedTable
5
+ class TableRow < Playbook::KitBase
6
+ prop :column_definitions, type: Playbook::Props::Array,
7
+ default: []
8
+ prop :row
9
+ prop :depth
10
+
11
+ def classname
12
+ generate_classname("pb_table_tr", "bg-white", subrow_depth_classname, separator: " ")
13
+ end
14
+
15
+ def td_classname
16
+ generate_classname("id-cell", "chrome-styles", separator: " ")
17
+ end
18
+
19
+ def depth_accessors
20
+ column_definitions.flat_map do |column|
21
+ column[:cellAccessors] if column.key?(:cellAccessors)
22
+ end.compact
23
+ end
24
+
25
+ private
26
+
27
+ def subrow_depth_classname
28
+ depth.positive? ? "depth-sub-row-#{depth}" : ""
29
+ end
30
+ end
31
+ end
32
+ end
@@ -2,7 +2,8 @@
2
2
  id: object.id,
3
3
  data: object.data.merge(initials: object.initials),
4
4
  class: object.classname,
5
- aria: object.aria) do %>
5
+ aria: object.aria,
6
+ **combined_html_options) do %>
6
7
  <%= content_tag(:div, data: { initials: object.initials }, class: "avatar_wrapper") do %>
7
8
  <%= pb_rails("image", props: { alt: object.alt_text, url: object.image_url, on_error: object.handle_img_error }) if object.image_url.present? %>
8
9
  <% end %>
@@ -2,7 +2,8 @@
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) do %>
5
+ class: object.classname,
6
+ **combined_html_options) do %>
6
7
  <% if object.tooltip_text.present? %>
7
8
  <%= pb_rails("tooltip", props: {
8
9
  trigger_element_id: object.tooltip_id,
@@ -7,7 +7,8 @@
7
7
  style: "background-image: url('#{object.image_url}');
8
8
  background-repeat: #{object.background_repeat};
9
9
  background-size: #{object.background_size};
10
- background-position: #{object.background_position};"
10
+ background-position: #{object.background_position};",
11
+ **combined_html_options
11
12
  ) do %>
12
13
  <%= content.presence %>
13
14
  <% end %>
@@ -2,6 +2,7 @@
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) do %>
5
+ class: object.classname,
6
+ **combined_html_options) do %>
6
7
  <span><%= object.text %></span>
7
8
  <% end %>
@@ -2,6 +2,7 @@
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) do %>
5
+ class: object.classname,
6
+ **combined_html_options) do %>
6
7
  <%= object.content %>
7
8
  <% end %>
@@ -1,4 +1,3 @@
1
- @import "../tokens/border_radius";
2
1
  @import "../tokens/colors";
3
2
  @import "../tokens/opacity";
4
3
  @import "../tokens/spacing";
@@ -10,11 +9,7 @@
10
9
  display: inline-flex;
11
10
  align-items: center;
12
11
  justify-content: center;
13
- border-radius: $border_rad_light;
14
12
  padding: 0 $space_xs/2;
15
- border-width: 1px;
16
- border-style: solid;
17
- border-color: $card_light;
18
13
 
19
14
  svg {
20
15
  margin-right: 8px;
@@ -44,8 +39,6 @@
44
39
  }
45
40
 
46
41
  &.dark {
47
- border-width: 0;
48
-
49
42
  @each $color_name, $color_value in $status_colors {
50
43
  &[class*=_#{$color_name}] {
51
44
  background: rgba(mix($bg_dark, $color_value, 10%), $opacity_2);
@@ -2,7 +2,8 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname,
5
- aria: object.aria) do%>
5
+ aria: object.aria,
6
+ **combined_html_options) do%>
6
7
  <%= content_tag(object.link ? 'a' : 'span', class: 'bread_crumb_item', href: object.link) do %>
7
8
  <%= content.presence %>
8
9
  <% end %>
@@ -2,6 +2,7 @@
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) do %>
5
+ class: object.classname,
6
+ **combined_html_options) do %>
6
7
  <%= content.presence %>
7
8
  <% end %>
@@ -1,5 +1,6 @@
1
1
  <%= content_tag(object.tag,
2
- object.tag == "button" ? object.options : object.link_options) do %>
2
+ object.tag == "button" ? object.options : object.link_options,
3
+ **combined_html_options) do %>
3
4
  <% if object.variant === "reaction" %>
4
5
  <% if icon && object.valid_emoji(object.icon) %>
5
6
  <%= pb_rails("flex", props:{ align: "center" }) do %>
@@ -34,10 +34,8 @@ module Playbook
34
34
  default: "far"
35
35
 
36
36
  def options
37
- {
38
- aria: aria,
37
+ options = {
39
38
  class: classname,
40
- data: data,
41
39
  disabled: disabled,
42
40
  id: id,
43
41
  role: "button",
@@ -46,6 +44,7 @@ module Playbook
46
44
  value: value,
47
45
  form: form,
48
46
  }.compact
47
+ combined_html_options.merge!(options) if combined_html_options.present?
49
48
  end
50
49
 
51
50
  def target_attribute
@@ -2,6 +2,7 @@
2
2
  aria: object.aria,
3
3
  class: object.classname,
4
4
  data: object.data,
5
- id: object.id) do %>
5
+ id: object.id,
6
+ **combined_html_options) do %>
6
7
  <%= content.presence || object.text %>
7
8
  <% end %>
@@ -2,6 +2,7 @@
2
2
  aria: object.aria,
3
3
  id: object.id,
4
4
  data: object.data,
5
- class: object.classname) do %>
5
+ class: object.classname,
6
+ **combined_html_options) do %>
6
7
  <%= content.presence || object.text %>
7
8
  <% end %>
@@ -3,7 +3,8 @@
3
3
  data: object.data,
4
4
  class: object.classname,
5
5
  aria: object.aria,
6
- dark: object.dark) do %>
6
+ dark: object.dark,
7
+ **combined_html_options) do %>
7
8
  <%= content.presence %>
8
9
  <% end %>
9
10