playbook_ui 14.22.0 → 14.23.0.pre.alpha.PLAY1985renderpaginationonlywithpages9148
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +32 -11
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +10 -10
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +3 -3
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +58 -1
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +15 -6
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +14 -2
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table_action_bar.js +16 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.jsx +65 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.md +5 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +46 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.jsx +69 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.jsx +107 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.html.erb +51 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +14 -8
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +7 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +5 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +36 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +11 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -0
- data/app/pb_kits/playbook/pb_badge/_badge.scss +5 -6
- data/app/pb_kits/playbook/pb_bar_graph/barGraphTheme.ts +106 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_colors.jsx +33 -15
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_default.jsx +33 -15
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.jsx +52 -22
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.md +3 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_horizontal.jsx +12 -16
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend.jsx +31 -15
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_non_clickable.jsx +39 -16
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.jsx +86 -38
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.md +1 -1
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_negative_numbers.jsx +32 -15
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.jsx +72 -22
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.md +1 -1
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_spline.jsx +31 -15
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_stacked.jsx +37 -16
- data/app/pb_kits/playbook/pb_bar_graph/docs/_description.md +1 -3
- data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -3
- data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -2
- data/app/pb_kits/playbook/pb_body/docs/_body_truncate.jsx +3 -3
- data/app/pb_kits/playbook/pb_body/docs/_body_truncate_react.md +4 -0
- data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +12 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +1 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate_rails.md +2 -1
- data/app/pb_kits/playbook/pb_checkbox/index.js +3 -1
- data/app/pb_kits/playbook/pb_circle_chart/circleChartTheme.ts +36 -1
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.jsx +71 -26
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.jsx +29 -16
- data/app/pb_kits/playbook/pb_circle_chart/docs/{_circle_chart_colors.md → _circle_chart_colors_rails.md} +1 -1
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors_react.md +2 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.jsx +28 -16
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.md +4 -2
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.jsx +23 -15
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_inner_sizes.jsx +81 -51
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.jsx +103 -75
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.md +4 -7
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_live_data.jsx +19 -13
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_rounded.jsx +30 -17
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_labels.jsx +34 -20
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_legend_kit.jsx +29 -20
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_title.jsx +28 -20
- data/app/pb_kits/playbook/pb_circle_chart/docs/_description.md +1 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_circle_chart/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +12 -4
- data/app/pb_kits/playbook/pb_draggable/context/types.ts +5 -2
- data/app/pb_kits/playbook/pb_gauge/docs/_description.md +1 -0
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.jsx +32 -15
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors_react.md +2 -0
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.jsx +35 -9
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex_react.md +1 -0
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_default.jsx +26 -14
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_disable_animation.jsx +32 -15
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_full_circle.jsx +45 -17
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_height.jsx +59 -22
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_live_data.jsx +40 -9
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_min_max.jsx +50 -18
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_sizing.jsx +31 -18
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_title.jsx +34 -17
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units.jsx +64 -23
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units_react.md +1 -0
- data/app/pb_kits/playbook/pb_gauge/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_gauge/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_gauge/gaugeTheme.ts +7 -1
- data/app/pb_kits/playbook/pb_line_graph/docs/_description.md +1 -3
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors.jsx +36 -17
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors_react.md +3 -0
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_default.jsx +31 -16
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.jsx +63 -31
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.md +3 -0
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend.jsx +35 -16
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_nonclickable.jsx +41 -16
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.jsx +107 -62
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.md +4 -7
- data/app/pb_kits/playbook/pb_line_graph/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_line_graph/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_line_graph/lineGraphTheme.ts +16 -1
- data/app/pb_kits/playbook/pb_pagination/_pagination.tsx +4 -0
- data/app/pb_kits/playbook/pb_pagination/docs/_pagination_default_rails.md +3 -1
- data/app/pb_kits/playbook/pb_pagination/docs/_pagination_default_react.md +3 -1
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +30 -17
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.html.erb +10 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.jsx +26 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.md +3 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
- data/app/pb_kits/playbook/pb_table/_table.tsx +4 -4
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.jsx +8 -8
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_react.md +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.jsx +12 -12
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_react.md +3 -3
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.jsx +12 -12
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_react.md +3 -3
- data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +1 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_truncate.jsx +3 -3
- data/app/pb_kits/playbook/pb_title/docs/_title_truncate_react.md +4 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_click_open.html.erb +14 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_click_open_rails.md +1 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +59 -36
- data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +9 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.html.erb +18 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input_rails.md +1 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
- data/dist/chunks/_line_graph-BfCo79KE.js +1 -0
- data/dist/chunks/_typeahead-Db4YQA5c.js +6 -0
- data/dist/chunks/_weekday_stacked-Byp3KKop.js +61 -0
- data/dist/chunks/lib-DnQyMxO1.js +29 -0
- data/dist/chunks/{pb_form_validation-Dx1C9XCK.js → pb_form_validation-kl-4Jv4t.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +68 -8
- data/dist/playbook-doc.js +2 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +2 -2
- metadata +45 -25
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.jsx +0 -72
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.md +0 -6
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.jsx +0 -38
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.md +0 -1
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.jsx +0 -30
- data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.md +0 -1
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.jsx +0 -52
- data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.md +0 -1
- data/dist/chunks/_typeahead-dOC1gq2X.js +0 -22
- data/dist/chunks/_weekday_stacked-Bh8iY5uA.js +0 -45
- data/dist/chunks/lib-DtCftrUN.js +0 -29
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_row_styling.md → _advanced_table_row_styling_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_body/docs/{_body_truncate.md → _body_truncate_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_colors.md → _gauge_colors_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_complex.md → _gauge_complex_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_line_graph/docs/{_line_graph_colors.md → _line_graph_colors_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_title/docs/{_title_truncate.md → _title_truncate_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_tooltip/docs/{_tooltip_click_open.md → _tooltip_click_open_react.md} +0 -0
- /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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5916a3032b32d8b41936c775fb41e871ebf43ba155a6d234f0bb1058cae9613c
|
4
|
+
data.tar.gz: 7b8a5f1b60bb0f78172b99184496b42f1a5479899e426adcf8ec463849d15fc0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 046f073e9767bd44c5314eeae88a20d75418932540ba2f6dec23abea41fbd71f1b90c2c37010440f18db52fceda43947eea004f545cf04f19364920c7707cb79
|
7
|
+
data.tar.gz: f985deed8f16d963197d009608817d827bfbcd7ba6602fc4b464c6acb954616ba92eb03934ecb507f3af0dca88bcf7d225a1fc41051a9294c85a9cd6254a9567
|
@@ -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
|
-
|
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
|
-
|
55
|
-
|
56
|
-
|
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
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
}
|
@@ -112,7 +112,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
112
112
|
paddingBottom="xs"
|
113
113
|
text={node.label}
|
114
114
|
/>
|
115
|
-
<Flex flexDirection="column"
|
115
|
+
<Flex flexDirection="column"
|
116
116
|
paddingLeft="lg"
|
117
117
|
>
|
118
118
|
{node?.children?.map((child) =>
|
@@ -141,8 +141,8 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
141
141
|
setShowPopover(!shouldClose)
|
142
142
|
|
143
143
|
const popoverReference = (
|
144
|
-
<Tooltip
|
145
|
-
placement="top"
|
144
|
+
<Tooltip
|
145
|
+
placement="top"
|
146
146
|
text="Column Configuration"
|
147
147
|
>
|
148
148
|
<div onClick={togglePopover}>
|
@@ -170,8 +170,8 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
170
170
|
>
|
171
171
|
{type === "row-selection" ? (
|
172
172
|
<>
|
173
|
-
<Caption color="light"
|
174
|
-
paddingLeft="xs"
|
173
|
+
<Caption color="light"
|
174
|
+
paddingLeft="xs"
|
175
175
|
size="xs"
|
176
176
|
>
|
177
177
|
{selectedCount} Selected
|
@@ -188,15 +188,15 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
188
188
|
zIndex={3}
|
189
189
|
>
|
190
190
|
<>
|
191
|
-
<Caption
|
192
|
-
paddingY="sm"
|
191
|
+
<Caption
|
192
|
+
paddingY="sm"
|
193
193
|
text="Columns Config"
|
194
|
-
textAlign="center"
|
194
|
+
textAlign="center"
|
195
195
|
/>
|
196
196
|
<SectionSeparator paddingBottom="xs" />
|
197
197
|
{tree.map((node: VisibilityNode) => (
|
198
|
-
<Flex cursor="pointer"
|
199
|
-
flexDirection="column"
|
198
|
+
<Flex cursor="pointer"
|
199
|
+
flexDirection="column"
|
200
200
|
key={node.id}
|
201
201
|
paddingX="xs"
|
202
202
|
>
|
@@ -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
|
|
@@ -124,13 +124,65 @@
|
|
124
124
|
-ms-overflow-style: none !important;
|
125
125
|
scrollbar-width: none !important;
|
126
126
|
}
|
127
|
-
|
127
|
+
|
128
|
+
// When action bar is hidden, ensure proper border radius for header corners
|
129
|
+
&.hidden-action-bar {
|
130
|
+
.pb_advanced_table_header {
|
131
|
+
> tr:first-child {
|
132
|
+
th:first-child {
|
133
|
+
border-top-left-radius: 4px !important;
|
134
|
+
}
|
135
|
+
th:last-child {
|
136
|
+
border-top-right-radius: 4px !important;
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
140
|
+
|
141
|
+
// Also handle the case when there are multiple header rows
|
142
|
+
.pb_advanced_table_header {
|
143
|
+
> tr:first-child {
|
144
|
+
th:first-child,
|
145
|
+
.table-header-cells:first-child,
|
146
|
+
.table-header-cells-custom:first-child {
|
147
|
+
border-top-left-radius: 4px !important;
|
148
|
+
}
|
149
|
+
th:last-child,
|
150
|
+
.table-header-cells:last-child,
|
151
|
+
.table-header-cells-custom:last-child {
|
152
|
+
border-top-right-radius: 4px !important;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
// When action bar is shown, remove border radius from header
|
159
|
+
.row-selection-actions-card.is-visible ~ * .pb_advanced_table_header,
|
160
|
+
.row-selection-actions-card.show-action-card ~ * .pb_advanced_table_header {
|
161
|
+
> tr:first-child {
|
162
|
+
th:first-child,
|
163
|
+
th:last-child,
|
164
|
+
.table-header-cells:first-child,
|
165
|
+
.table-header-cells:last-child,
|
166
|
+
.table-header-cells-custom:first-child,
|
167
|
+
.table-header-cells-custom:last-child {
|
168
|
+
border-top-left-radius: 0 !important;
|
169
|
+
border-top-right-radius: 0 !important;
|
170
|
+
}
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
128
174
|
|
129
175
|
.row-selection-actions-card {
|
130
176
|
border-bottom-right-radius: 0px !important;
|
131
177
|
border-bottom-left-radius: 0px !important;
|
132
178
|
border-bottom-color: transparent;
|
133
179
|
transition: height 300ms ease;
|
180
|
+
|
181
|
+
&.is-visible,
|
182
|
+
&.show-action-card {
|
183
|
+
border-top-left-radius: 4px !important;
|
184
|
+
border-top-right-radius: 4px !important;
|
185
|
+
}
|
134
186
|
}
|
135
187
|
.table-header-cells:first-child {
|
136
188
|
min-width: 180px;
|
@@ -189,6 +241,11 @@
|
|
189
241
|
box-sizing: border-box !important;
|
190
242
|
}
|
191
243
|
}
|
244
|
+
// Fixes for tooltip picking up th styling from Table kit
|
245
|
+
.pb_tooltip_kit {
|
246
|
+
font-weight: unset;
|
247
|
+
text-transform: unset;
|
248
|
+
}
|
192
249
|
}
|
193
250
|
|
194
251
|
.pb_advanced_table_body {
|
@@ -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,
|
@@ -214,10 +218,10 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
214
218
|
)
|
215
219
|
|
216
220
|
return (
|
217
|
-
<Card
|
221
|
+
<Card
|
218
222
|
borderNone
|
219
223
|
borderRadius="none"
|
220
|
-
className="advanced-table-fullscreen-header"
|
224
|
+
className="advanced-table-fullscreen-header"
|
221
225
|
{...props}
|
222
226
|
>
|
223
227
|
<Flex justify="end">
|
@@ -246,6 +250,10 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
246
250
|
const ariaProps = buildAriaProps(aria);
|
247
251
|
const dataProps = buildDataProps(data);
|
248
252
|
const htmlProps = buildHtmlProps(htmlOptions);
|
253
|
+
|
254
|
+
// Visibility flag for action bar
|
255
|
+
const isActionBarVisible = (selectableRows && showActionsBar && selectedRowsLength > 0) || columnVisibilityControl;
|
256
|
+
|
249
257
|
const classes = classnames(
|
250
258
|
buildCss("pb_advanced_table"),
|
251
259
|
`advanced-table-responsive-${responsive}`,
|
@@ -253,6 +261,8 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
253
261
|
{
|
254
262
|
'advanced-table-fullscreen': isFullscreen,
|
255
263
|
'advanced-table-allow-fullscreen': allowFullScreen,
|
264
|
+
// Add the hidden-action-bar class when action bar functionality exists but is not visible
|
265
|
+
'hidden-action-bar': (selectableRows || columnVisibilityControl) && !isActionBarVisible,
|
256
266
|
},
|
257
267
|
{'advanced-table-sticky-left-columns': stickyLeftColumn && stickyLeftColumn.length > 0},
|
258
268
|
columnGroupBorderColor ? `column-group-border-${columnGroupBorderColor}` : '',
|
@@ -266,9 +276,6 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
266
276
|
? getVirtualizedContainerStyles(maxHeight)
|
267
277
|
: {};
|
268
278
|
|
269
|
-
// Visibility flag for action bar
|
270
|
-
const isActionBarVisible = (selectableRows && showActionsBar && selectedRowsLength > 0) || columnVisibilityControl;
|
271
|
-
|
272
279
|
// The actual Main <Table /> element
|
273
280
|
const tableElement = (
|
274
281
|
<Table
|
@@ -284,7 +291,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
284
291
|
) : (
|
285
292
|
<>
|
286
293
|
<TableHeader />
|
287
|
-
<TableBody
|
294
|
+
<TableBody
|
288
295
|
isFetching={isFetching}
|
289
296
|
/>
|
290
297
|
</>
|
@@ -325,6 +332,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
325
332
|
columnDefinitions={columnDefinitions}
|
326
333
|
columnGroupBorderColor={columnGroupBorderColor}
|
327
334
|
columnVisibilityControl={columnVisibilityControl}
|
335
|
+
customSort={customSort}
|
328
336
|
enableToggleExpansion={enableToggleExpansion}
|
329
337
|
enableVirtualization={virtualizedRows}
|
330
338
|
expandByDepth={expandByDepth}
|
@@ -336,6 +344,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
336
344
|
isActionBarVisible={isActionBarVisible}
|
337
345
|
isFullscreen={isFullscreen}
|
338
346
|
loading={loading}
|
347
|
+
onCustomSortClick={onCustomSortClick}
|
339
348
|
onExpandByDepthClick={onExpandByDepthClick}
|
340
349
|
pinnedRows={pinnedRows}
|
341
350
|
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,9 +31,16 @@ 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
|
-
additional_classes = [
|
38
|
+
additional_classes = [
|
39
|
+
responsive_classname,
|
40
|
+
max_height_classname,
|
41
|
+
hide_scroll_bar_class,
|
42
|
+
hidden_action_bar_class,
|
43
|
+
]
|
37
44
|
additional_classes << "column-group-border-#{column_group_border_color}" if column_group_border_color != "none"
|
38
45
|
generate_classname("pb_advanced_table", *additional_classes, separator: " ")
|
39
46
|
end
|
@@ -47,7 +54,12 @@ module Playbook
|
|
47
54
|
end
|
48
55
|
|
49
56
|
def hide_scroll_bar_class
|
50
|
-
scroll_bar_none ? "advanced-table-hide-scrollbar
|
57
|
+
scroll_bar_none ? "advanced-table-hide-scrollbar" : ""
|
58
|
+
end
|
59
|
+
|
60
|
+
def hidden_action_bar_class
|
61
|
+
# Add hidden-action-bar class when action bar functionality is enabled but not currently visible
|
62
|
+
selectable_rows && !is_action_bar_visible ? "hidden-action-bar" : ""
|
51
63
|
end
|
52
64
|
|
53
65
|
def selected_rows
|
@@ -1,4 +1,7 @@
|
|
1
1
|
function showActionBar(actionBar, selectedCount) {
|
2
|
+
// Get container
|
3
|
+
const tableContainer = actionBar.closest('.pb_advanced_table');
|
4
|
+
|
2
5
|
// Show action bar directly
|
3
6
|
actionBar.style.height = "auto";
|
4
7
|
actionBar.style.overflow = "visible";
|
@@ -8,6 +11,11 @@ function showActionBar(actionBar, selectedCount) {
|
|
8
11
|
actionBar.classList.remove("p_none");
|
9
12
|
actionBar.classList.add("p_xs", "is-visible", "show-action-card");
|
10
13
|
|
14
|
+
// Remove hidden-action-bar class when action bar is shown
|
15
|
+
if (tableContainer) {
|
16
|
+
tableContainer.classList.remove("hidden-action-bar");
|
17
|
+
}
|
18
|
+
|
11
19
|
// Update the count
|
12
20
|
const countElement = actionBar.querySelector(".selected-count");
|
13
21
|
if (countElement) {
|
@@ -16,12 +24,20 @@ function showActionBar(actionBar, selectedCount) {
|
|
16
24
|
}
|
17
25
|
|
18
26
|
function hideActionBar(actionBar) {
|
27
|
+
// Get container
|
28
|
+
const tableContainer = actionBar.closest('.pb_advanced_table');
|
29
|
+
|
19
30
|
// Hide action bar directly
|
20
31
|
actionBar.style.height = "0px";
|
21
32
|
actionBar.style.overflow = "hidden";
|
22
33
|
actionBar.style.opacity = "0";
|
23
34
|
actionBar.classList.add("p_none");
|
24
35
|
actionBar.classList.remove("p_xs", "is-visible", "show-action-card");
|
36
|
+
|
37
|
+
// Add hidden-action-bar class when action bar is hidden
|
38
|
+
if (tableContainer) {
|
39
|
+
tableContainer.classList.add("hidden-action-bar");
|
40
|
+
}
|
25
41
|
}
|
26
42
|
|
27
43
|
export function updateSelectionActionBar(table, selectedCount) {
|
@@ -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.
|