playbook_ui 14.21.2.pre.alpha.PLAY2020sidebarfilterPOC8265 → 14.21.2.pre.alpha.PLAY2179playbookiconsupdate8389
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/CustomCell.tsx +5 -2
- data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +20 -4
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +25 -5
- data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +36 -16
- data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +18 -5
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +37 -17
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +5 -2
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +91 -40
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +4 -1
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/ColumnStylingHelper.ts +15 -0
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/TableContainerStyles.ts +3 -2
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +49 -4
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +36 -18
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +105 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_sort.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color_rails.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.jsx +51 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx +77 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers_rails.html.erb +63 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.html.erb +38 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.jsx +64 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions.jsx +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +3 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +6 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_advanced_table/index.js +21 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +5 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +33 -0
- data/dist/chunks/_typeahead-BXD634Vm.js +22 -0
- data/dist/chunks/_weekday_stacked--dPf0i--.js +45 -0
- data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
- data/dist/chunks/lib-9VvC3Rp0.js +29 -0
- data/dist/chunks/{pb_form_validation-DSkdRDMf.js → pb_form_validation-CbyL4Bqa.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +3 -3
- 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 +1 -1
- metadata +19 -7
- data/dist/chunks/_typeahead-CoOpeYom.js +0 -22
- data/dist/chunks/_weekday_stacked-BitxTXxk.js +0 -45
- data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
- data/dist/chunks/lib-D7Va7yqa.js +0 -29
@@ -17,7 +17,8 @@ export const createCellFunction = (
|
|
17
17
|
customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element,
|
18
18
|
isFirstColumn?: boolean,
|
19
19
|
onRowToggleClick?: (row: Row<GenericObject>) => void,
|
20
|
-
selectableRows?: boolean
|
20
|
+
selectableRows?: boolean,
|
21
|
+
rowStyling?: GenericObject
|
21
22
|
) => {
|
22
23
|
// Add display name to the returned function
|
23
24
|
const cellRenderer = ({
|
@@ -28,6 +29,7 @@ export const createCellFunction = (
|
|
28
29
|
getValue: Getter<string>
|
29
30
|
}) => {
|
30
31
|
const rowData = row.original;
|
32
|
+
const customStyle = rowStyling?.length > 0 && rowStyling?.find((s:GenericObject) => s?.rowId === row.id);
|
31
33
|
|
32
34
|
if (isFirstColumn) {
|
33
35
|
switch (row.depth) {
|
@@ -35,6 +37,7 @@ export const createCellFunction = (
|
|
35
37
|
return (
|
36
38
|
<CustomCell
|
37
39
|
customRenderer={customRenderer}
|
40
|
+
customStyle={customStyle}
|
38
41
|
getValue={getValue}
|
39
42
|
onRowToggleClick={onRowToggleClick}
|
40
43
|
row={row}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
export const findColumnDefByAccessor = (
|
2
|
+
defs: any[],
|
3
|
+
targetAccessor: string
|
4
|
+
): any | undefined => {
|
5
|
+
for (const def of defs) {
|
6
|
+
if (def.accessor === targetAccessor) {
|
7
|
+
return def;
|
8
|
+
}
|
9
|
+
if (Array.isArray(def.columns) && def.columns.length) {
|
10
|
+
const found = findColumnDefByAccessor(def.columns, targetAccessor);
|
11
|
+
if (found) return found;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
return undefined;
|
15
|
+
};
|
@@ -57,7 +57,6 @@ export const getVirtualizedContainerStyles = (maxHeight?: string): React.CSSProp
|
|
57
57
|
position: 'absolute',
|
58
58
|
top: 0,
|
59
59
|
left: 0,
|
60
|
-
width: '100%',
|
61
60
|
height: '40px', // Match standard table row height
|
62
61
|
transform: `translateY(${startPosition}px)`,
|
63
62
|
tableLayout: 'fixed',
|
@@ -67,12 +66,14 @@ export const getVirtualizedContainerStyles = (maxHeight?: string): React.CSSProp
|
|
67
66
|
/**
|
68
67
|
* Get height estimates for different row types
|
69
68
|
*/
|
70
|
-
export const getRowHeightEstimate = (rowType: 'header' | 'row' | 'loading') => {
|
69
|
+
export const getRowHeightEstimate = (rowType: 'header' | 'row' | 'loading' | 'footer') => {
|
71
70
|
switch (rowType) {
|
72
71
|
case 'header':
|
73
72
|
return 40; // Header height
|
74
73
|
case 'loading':
|
75
74
|
return 30; // Loading indicator height
|
75
|
+
case 'footer':
|
76
|
+
return 40
|
76
77
|
case 'row':
|
77
78
|
default:
|
78
79
|
return 40; // Standard row height - match this to your design system
|
@@ -63,11 +63,30 @@
|
|
63
63
|
width: 100%;
|
64
64
|
}
|
65
65
|
|
66
|
-
// Virtualized
|
66
|
+
// Virtualized Table and Rows for Infinite Scroll
|
67
|
+
scrollbar-gutter: stable right-edges;
|
68
|
+
.virtualized-header-row-header {
|
69
|
+
width: 100% !important;
|
70
|
+
.table-header-cells:first-child {
|
71
|
+
min-width: 180px;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
.virtualized-footer {
|
76
|
+
width: 100% !important;
|
77
|
+
td {
|
78
|
+
border-bottom-left-radius: 4px !important;
|
79
|
+
border-bottom-right-radius: 4px !important;
|
80
|
+
display: flex;
|
81
|
+
justify-content: center;
|
82
|
+
align-items: center;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
67
86
|
.virtualized-table-row {
|
68
87
|
display: table !important;
|
69
88
|
table-layout: fixed !important;
|
70
|
-
|
89
|
+
box-sizing: border-box !important;
|
71
90
|
|
72
91
|
td {
|
73
92
|
display: table-cell !important;
|
@@ -104,7 +123,7 @@
|
|
104
123
|
|
105
124
|
-ms-overflow-style: none !important;
|
106
125
|
scrollbar-width: none !important;
|
107
|
-
|
126
|
+
}
|
108
127
|
|
109
128
|
|
110
129
|
.row-selection-actions-card {
|
@@ -193,7 +212,6 @@
|
|
193
212
|
|
194
213
|
// Fix virtualized row borders
|
195
214
|
tr.virtualized-table-row {
|
196
|
-
border-bottom: 1px solid $border_light;
|
197
215
|
|
198
216
|
&.bg-silver {
|
199
217
|
td:first-child {
|
@@ -606,6 +624,16 @@
|
|
606
624
|
td.sticky-left {
|
607
625
|
border-right: 1px solid $border_light !important;
|
608
626
|
}
|
627
|
+
// Virtualized Table in Responsive Styles
|
628
|
+
.virtualized-header,
|
629
|
+
.virtualized-header-row-header,
|
630
|
+
.virtualized-table-row,
|
631
|
+
.virtualized-footer {
|
632
|
+
border-right: 1px solid $border_light !important;
|
633
|
+
.table-header-cells:first-child {
|
634
|
+
box-shadow: 0 0 10px 0 rgba($shadow, 0.16) !important;
|
635
|
+
}
|
636
|
+
}
|
609
637
|
}
|
610
638
|
}
|
611
639
|
}
|
@@ -621,6 +649,23 @@
|
|
621
649
|
box-shadow: 0 4px 10px 0 rgba($shadow, 0.16) !important;
|
622
650
|
}
|
623
651
|
|
652
|
+
// For Rails, we can't target the &:last-child since collapsed rows are display: none;
|
653
|
+
// With JS, we add a .last-visible-row class and add rounded corners to bottom row
|
654
|
+
.last-visible-row {
|
655
|
+
td, .pb_table_td {
|
656
|
+
border-width: 0 0 1px 0;
|
657
|
+
|
658
|
+
&:first-child {
|
659
|
+
border-radius: 0 0 0 4px;
|
660
|
+
border-width: 0 0 1px 1px;
|
661
|
+
}
|
662
|
+
&:last-child {
|
663
|
+
border-radius: 0 0 4px 0;
|
664
|
+
border-width: 0 1px 1px 0;
|
665
|
+
}
|
666
|
+
}
|
667
|
+
}
|
668
|
+
|
624
669
|
&.dark {
|
625
670
|
// Override default border color for dark mode
|
626
671
|
--column-border-color: #{$border_dark};
|
@@ -57,6 +57,7 @@ type AdvancedTableProps = {
|
|
57
57
|
onChange?: (value: RowPinningState) => void;
|
58
58
|
};
|
59
59
|
responsive?: "scroll" | "none",
|
60
|
+
rowStyling?: GenericObject[],
|
60
61
|
scrollBarNone?: boolean,
|
61
62
|
selectableRows?: boolean,
|
62
63
|
showActionsBar?: boolean,
|
@@ -98,6 +99,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
98
99
|
paginationProps,
|
99
100
|
pinnedRows,
|
100
101
|
responsive = "scroll",
|
102
|
+
rowStyling,
|
101
103
|
scrollBarNone= false,
|
102
104
|
showActionsBar = true,
|
103
105
|
selectableRows,
|
@@ -144,6 +146,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
144
146
|
onRowSelectionChange,
|
145
147
|
columnVisibilityControl,
|
146
148
|
pinnedRows,
|
149
|
+
rowStyling
|
147
150
|
});
|
148
151
|
|
149
152
|
// Initialize table actions
|
@@ -266,6 +269,29 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
266
269
|
// Visibility flag for action bar
|
267
270
|
const isActionBarVisible = (selectableRows && showActionsBar && selectedRowsLength > 0) || columnVisibilityControl;
|
268
271
|
|
272
|
+
// The actual Main <Table /> element
|
273
|
+
const tableElement = (
|
274
|
+
<Table
|
275
|
+
className={`${loading ? "content-loading" : ""}`}
|
276
|
+
dark={dark}
|
277
|
+
dataTable
|
278
|
+
numberSpacing="tabular"
|
279
|
+
responsive="none"
|
280
|
+
{...tableProps}
|
281
|
+
>
|
282
|
+
{children ? (
|
283
|
+
children
|
284
|
+
) : (
|
285
|
+
<>
|
286
|
+
<TableHeader />
|
287
|
+
<TableBody
|
288
|
+
isFetching={isFetching}
|
289
|
+
/>
|
290
|
+
</>
|
291
|
+
)}
|
292
|
+
</Table>
|
293
|
+
)
|
294
|
+
|
269
295
|
return (
|
270
296
|
<>
|
271
297
|
{/* Top Pagination */}
|
@@ -313,6 +339,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
313
339
|
onExpandByDepthClick={onExpandByDepthClick}
|
314
340
|
pinnedRows={pinnedRows}
|
315
341
|
responsive={responsive}
|
342
|
+
rowStyling={rowStyling}
|
316
343
|
selectableRows={selectableRows}
|
317
344
|
setExpanded={setExpanded}
|
318
345
|
showActionsBar={showActionsBar}
|
@@ -322,6 +349,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
322
349
|
table={table}
|
323
350
|
tableContainerRef={tableWrapperRef}
|
324
351
|
toggleExpansionIcon={toggleExpansionIcon}
|
352
|
+
totalAvailableCount={fullData.length}
|
325
353
|
virtualizedRows={virtualizedRows}
|
326
354
|
>
|
327
355
|
<React.Fragment>
|
@@ -333,24 +361,14 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
333
361
|
type={columnVisibilityControl ? "column-visibility" : "row-selection"}
|
334
362
|
/>
|
335
363
|
|
336
|
-
{/*
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
>
|
345
|
-
{children ? (
|
346
|
-
children
|
347
|
-
) : (
|
348
|
-
<>
|
349
|
-
<TableHeader />
|
350
|
-
<TableBody />
|
351
|
-
</>
|
352
|
-
)}
|
353
|
-
</Table>
|
364
|
+
{/* Virtualized wrapper div only if virtualizedRows is true */}
|
365
|
+
{virtualizedRows ? (
|
366
|
+
<div style={{ overflow: 'auto', width: '100%' }}>
|
367
|
+
{tableElement}
|
368
|
+
</div>
|
369
|
+
) : (
|
370
|
+
tableElement
|
371
|
+
)}
|
354
372
|
</React.Fragment>
|
355
373
|
</AdvancedTableProvider>
|
356
374
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React, {useState} from "react"
|
2
2
|
import { render, screen, waitFor } from "../utilities/test-utils"
|
3
3
|
|
4
|
-
import { AdvancedTable, Pill } from "playbook-ui"
|
4
|
+
import { AdvancedTable, Pill, colors } from "playbook-ui"
|
5
5
|
|
6
6
|
global.ResizeObserver = class {
|
7
7
|
observe() {}
|
@@ -572,4 +572,107 @@ test("pinnedRows prop renders pinned rows at top", () => {
|
|
572
572
|
const firstPinnedRow = pinnedRows[0]
|
573
573
|
expect(firstPinnedRow).toHaveStyle("position: sticky")
|
574
574
|
expect(firstPinnedRow).toHaveStyle("background-color: white")
|
575
|
-
})
|
575
|
+
})
|
576
|
+
|
577
|
+
test("columnStyling.headerAlignment aligns header as expected", () => {
|
578
|
+
const styledColumnDefs = [
|
579
|
+
{
|
580
|
+
accessor: "year",
|
581
|
+
label: "Year",
|
582
|
+
cellAccessors: ["quarter", "month", "day"],
|
583
|
+
},
|
584
|
+
{
|
585
|
+
accessor: "newEnrollments",
|
586
|
+
label: "New Enrollments",
|
587
|
+
columnStyling: { headerAlignment: "left" },
|
588
|
+
},
|
589
|
+
{
|
590
|
+
accessor: "scheduledMeetings",
|
591
|
+
label: "Scheduled Meetings",
|
592
|
+
},
|
593
|
+
];
|
594
|
+
|
595
|
+
render(
|
596
|
+
<AdvancedTable
|
597
|
+
columnDefinitions={styledColumnDefs}
|
598
|
+
data={{ testid: testId }}
|
599
|
+
tableData={MOCK_DATA}
|
600
|
+
/>
|
601
|
+
);
|
602
|
+
|
603
|
+
const headerCell = screen.getByText("New Enrollments").closest("th");
|
604
|
+
expect(headerCell).toHaveAttribute("align", "left");
|
605
|
+
});
|
606
|
+
|
607
|
+
test("columnStyling.cellAlignment sets each <td> align attribute as expected", () => {
|
608
|
+
const styledColumnDefs = [
|
609
|
+
{
|
610
|
+
accessor: "year",
|
611
|
+
label: "Year",
|
612
|
+
cellAccessors: ["quarter", "month", "day"],
|
613
|
+
},
|
614
|
+
{
|
615
|
+
accessor: "newEnrollments",
|
616
|
+
label: "New Enrollments",
|
617
|
+
columnStyling: { cellAlignment: "left" },
|
618
|
+
},
|
619
|
+
{
|
620
|
+
accessor: "scheduledMeetings",
|
621
|
+
label: "Scheduled Meetings",
|
622
|
+
},
|
623
|
+
];
|
624
|
+
|
625
|
+
render(
|
626
|
+
<AdvancedTable
|
627
|
+
columnDefinitions={styledColumnDefs}
|
628
|
+
data={{ testid: testId }}
|
629
|
+
tableData={MOCK_DATA}
|
630
|
+
/>
|
631
|
+
);
|
632
|
+
|
633
|
+
const firstEnrollmentCell = screen.getAllByText("20")[0].closest("td");
|
634
|
+
expect(firstEnrollmentCell).toHaveAttribute("align", "left");
|
635
|
+
});
|
636
|
+
|
637
|
+
test("renders virtualized table rows and header", () => {
|
638
|
+
render(
|
639
|
+
<AdvancedTable
|
640
|
+
columnDefinitions={columnDefinitions}
|
641
|
+
data={{ testid: testId }}
|
642
|
+
tableData={MOCK_DATA_WITH_ID}
|
643
|
+
virtualizedRows
|
644
|
+
/>
|
645
|
+
)
|
646
|
+
|
647
|
+
const kit = screen.getByTestId(testId)
|
648
|
+
|
649
|
+
const virtualizedHeader = kit.querySelector('.virtualized-header-row-header')
|
650
|
+
expect(virtualizedHeader).toBeInTheDocument()
|
651
|
+
|
652
|
+
const virtualizedRows = kit.querySelectorAll('.virtualized-table-row')
|
653
|
+
expect(virtualizedRows.length).toBeLessThan(MOCK_DATA_WITH_ID.length)
|
654
|
+
})
|
655
|
+
|
656
|
+
test("rowStyling prop works as expected", () => {
|
657
|
+
const rowStyling = [
|
658
|
+
{
|
659
|
+
rowId: "1",
|
660
|
+
backgroundColor: colors.white,
|
661
|
+
fontColor: colors.black
|
662
|
+
},
|
663
|
+
];
|
664
|
+
|
665
|
+
render(
|
666
|
+
<AdvancedTable
|
667
|
+
columnDefinitions={columnDefinitions}
|
668
|
+
data={{ testid: testId }}
|
669
|
+
rowStyling={rowStyling}
|
670
|
+
tableData={MOCK_DATA_WITH_ID}
|
671
|
+
/>
|
672
|
+
)
|
673
|
+
|
674
|
+
const kit = screen.getByTestId(testId)
|
675
|
+
const tableBody = kit.querySelector('tbody')
|
676
|
+
const row1 = tableBody.querySelector('tr:nth-child(1)')
|
677
|
+
expect(row1).toHaveStyle({backgroundColor: colors.white, color: colors.black})
|
678
|
+
})
|
@@ -51,7 +51,7 @@
|
|
51
51
|
]
|
52
52
|
%>
|
53
53
|
|
54
|
-
<%= pb_rails("advanced_table", props: { table_data: @table_data, column_definitions: column_definitions }) do %>
|
54
|
+
<%= pb_rails("advanced_table", props: { table_data: @table_data, column_definitions: column_definitions, id: "beta_sort" }) do %>
|
55
55
|
<%= pb_rails("advanced_table/table_header", props: { column_definitions: column_definitions }) %>
|
56
56
|
<%= pb_rails("advanced_table/table_body", props: { id: "beta_sort", table_data: @table_data, column_definitions: column_definitions, enable_toggle_expansion: "all" }) %>
|
57
57
|
<% end %>
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.html.erb
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
subrow_headers = ["Quarter", "Month", "Day"]
|
35
35
|
%>
|
36
36
|
|
37
|
-
<%= pb_rails("advanced_table", props: { table_data: @table_data, column_definitions: column_definitions }) do %>
|
37
|
+
<%= pb_rails("advanced_table", props: { table_data: @table_data, column_definitions: column_definitions, id: "test_table" }) do %>
|
38
38
|
<%= pb_rails("advanced_table/table_header", props: { column_definitions: column_definitions }) %>
|
39
39
|
<%= pb_rails("advanced_table/table_body", props: { id: "test_table", table_data: @table_data, column_definitions: column_definitions, subrow_headers: subrow_headers, enable_toggle_expansion: "all" }) %>
|
40
40
|
<% end %>
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_border_color_rails.html.erb
CHANGED
@@ -55,4 +55,4 @@
|
|
55
55
|
},
|
56
56
|
] %>
|
57
57
|
|
58
|
-
<%= pb_rails("advanced_table", props: { id: "
|
58
|
+
<%= pb_rails("advanced_table", props: { id: "beta_table_with_color_headers", table_data: @table_data, column_definitions: column_definitions, column_group_border_color: "text_lt_default", table_props: { vertical_border: true } }) %>
|
@@ -0,0 +1,51 @@
|
|
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 AdvancedTableColumnStyling = (props) => {
|
6
|
+
const columnDefinitions = [
|
7
|
+
{
|
8
|
+
accessor: "year",
|
9
|
+
label: "Year",
|
10
|
+
cellAccessors: ["quarter", "month", "day"],
|
11
|
+
},
|
12
|
+
{
|
13
|
+
accessor: "newEnrollments",
|
14
|
+
label: "New Enrollments",
|
15
|
+
columnStyling:{headerAlignment: "left", cellAlignment: "left"},
|
16
|
+
},
|
17
|
+
{
|
18
|
+
accessor: "scheduledMeetings",
|
19
|
+
label: "Scheduled Meetings",
|
20
|
+
columnStyling:{headerAlignment: "center", cellAlignment: "center"},
|
21
|
+
},
|
22
|
+
{
|
23
|
+
accessor: "attendanceRate",
|
24
|
+
label: "Attendance Rate",
|
25
|
+
},
|
26
|
+
{
|
27
|
+
accessor: "completedClasses",
|
28
|
+
label: "Completed Classes",
|
29
|
+
},
|
30
|
+
{
|
31
|
+
accessor: "classCompletionRate",
|
32
|
+
label: "Class Completion Rate",
|
33
|
+
},
|
34
|
+
{
|
35
|
+
accessor: "graduatedStudents",
|
36
|
+
label: "Graduated Students",
|
37
|
+
},
|
38
|
+
]
|
39
|
+
|
40
|
+
return (
|
41
|
+
<div>
|
42
|
+
<AdvancedTable
|
43
|
+
columnDefinitions={columnDefinitions}
|
44
|
+
tableData={MOCK_DATA}
|
45
|
+
{...props}
|
46
|
+
/>
|
47
|
+
</div>
|
48
|
+
)
|
49
|
+
}
|
50
|
+
|
51
|
+
export default AdvancedTableColumnStyling
|
@@ -0,0 +1,7 @@
|
|
1
|
+
The `columnStyling` prop is an optional item that can be used within `columnDefinitions` as shown in the code snippet below. It is an object that has 2 optional key/value pairs:
|
2
|
+
|
3
|
+
1) `headerAlignment`: This will allow you to control alignment of header content which is set to right aligned by default. you can set this to `left`, `right` or `center`.
|
4
|
+
|
5
|
+
2) `cellAlignment`: This will allow you to control alignment of content within all cells in the given column. This is set to right aligned by default. you can set this to `left`, `right` or `center`.
|
6
|
+
|
7
|
+
`columnStyling` can be used within the columnDefinition of all the columns or some of them, as shown. Each column has its own individual control in this way.
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx
ADDED
@@ -0,0 +1,77 @@
|
|
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 AdvancedTableColumnStylingColumnHeaders = (props) => {
|
6
|
+
const columnDefinitions = [
|
7
|
+
{
|
8
|
+
accessor: "year",
|
9
|
+
label: "Year",
|
10
|
+
cellAccessors: ["quarter", "month", "day"],
|
11
|
+
},
|
12
|
+
{
|
13
|
+
label: "Enrollment Data",
|
14
|
+
columns: [
|
15
|
+
{
|
16
|
+
label: "Enrollment Stats",
|
17
|
+
columns: [
|
18
|
+
{
|
19
|
+
accessor: "newEnrollments",
|
20
|
+
label: "New Enrollments",
|
21
|
+
columnStyling:{headerAlignment: "left", cellAlignment: "left"},
|
22
|
+
|
23
|
+
},
|
24
|
+
{
|
25
|
+
accessor: "scheduledMeetings",
|
26
|
+
label: "Scheduled Meetings",
|
27
|
+
},
|
28
|
+
],
|
29
|
+
},
|
30
|
+
],
|
31
|
+
},
|
32
|
+
{
|
33
|
+
label: "Performance Data",
|
34
|
+
columns: [
|
35
|
+
{
|
36
|
+
label: "Completion Metrics",
|
37
|
+
columns: [
|
38
|
+
{
|
39
|
+
accessor: "completedClasses",
|
40
|
+
label: "Completed Classes",
|
41
|
+
columnStyling:{headerAlignment: "center", cellAlignment: "center"},
|
42
|
+
},
|
43
|
+
{
|
44
|
+
accessor: "classCompletionRate",
|
45
|
+
label: "Class Completion Rate",
|
46
|
+
},
|
47
|
+
],
|
48
|
+
},
|
49
|
+
{
|
50
|
+
label: "Attendance",
|
51
|
+
columns: [
|
52
|
+
{
|
53
|
+
accessor: "attendanceRate",
|
54
|
+
label: "Attendance Rate",
|
55
|
+
},
|
56
|
+
{
|
57
|
+
accessor: "scheduledMeetings",
|
58
|
+
label: "Scheduled Meetings",
|
59
|
+
},
|
60
|
+
],
|
61
|
+
},
|
62
|
+
],
|
63
|
+
},
|
64
|
+
];
|
65
|
+
|
66
|
+
return (
|
67
|
+
<>
|
68
|
+
<AdvancedTable
|
69
|
+
columnDefinitions={columnDefinitions}
|
70
|
+
tableData={MOCK_DATA}
|
71
|
+
{...props}
|
72
|
+
/>
|
73
|
+
</>
|
74
|
+
);
|
75
|
+
};
|
76
|
+
|
77
|
+
export default AdvancedTableColumnStylingColumnHeaders
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
`columnStyling` can also be used with the multi column logic. When used in this way, `columnStyling` must be used within the leaf column's columnDefinition as shown.
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<% column_definitions = [
|
2
|
+
{
|
3
|
+
accessor: "year",
|
4
|
+
label: "Year",
|
5
|
+
cellAccessors: ["quarter", "month", "day"],
|
6
|
+
},
|
7
|
+
{
|
8
|
+
label: "Enrollment Data",
|
9
|
+
columns: [
|
10
|
+
{
|
11
|
+
label: "Enrollment Stats",
|
12
|
+
columns: [
|
13
|
+
{
|
14
|
+
accessor: "newEnrollments",
|
15
|
+
label: "New Enrollments",
|
16
|
+
column_styling:{header_alignment:"left", cell_alignment:"left"}
|
17
|
+
},
|
18
|
+
{
|
19
|
+
accessor: "scheduledMeetings",
|
20
|
+
label: "Scheduled Meetings",
|
21
|
+
},
|
22
|
+
],
|
23
|
+
},
|
24
|
+
],
|
25
|
+
},
|
26
|
+
{
|
27
|
+
label: "Performance Data",
|
28
|
+
columns: [
|
29
|
+
{
|
30
|
+
label: "Completion Metrics",
|
31
|
+
columns: [
|
32
|
+
{
|
33
|
+
accessor: "completedClasses",
|
34
|
+
label: "Completed Classes",
|
35
|
+
column_styling:{header_alignment:"center", cell_alignment:"center"}
|
36
|
+
},
|
37
|
+
{
|
38
|
+
accessor: "classCompletionRate",
|
39
|
+
label: "Class Completion Rate",
|
40
|
+
},
|
41
|
+
],
|
42
|
+
},
|
43
|
+
{
|
44
|
+
label: "Attendance",
|
45
|
+
columns: [
|
46
|
+
{
|
47
|
+
accessor: "attendanceRate",
|
48
|
+
label: "Attendance Rate",
|
49
|
+
},
|
50
|
+
{
|
51
|
+
accessor: "scheduledMeetings",
|
52
|
+
label: "Scheduled Meetings",
|
53
|
+
},
|
54
|
+
],
|
55
|
+
},
|
56
|
+
],
|
57
|
+
},
|
58
|
+
] %>
|
59
|
+
|
60
|
+
<%= pb_rails("advanced_table", props: { id: "column-styling-multi", table_data: @table_data, column_definitions: column_definitions }) do %>
|
61
|
+
<%= pb_rails("advanced_table/table_header", props: { column_definitions: column_definitions }) %>
|
62
|
+
<%= pb_rails("advanced_table/table_body", props: { table_data: @table_data, column_definitions: column_definitions }) %>
|
63
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
`column_styling` can also be used with the multi column logic. When used in this way, `column_styling` must be used within the leaf column's column_definition as shown.
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.html.erb
ADDED
@@ -0,0 +1,38 @@
|
|
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
|
+
column_styling:{header_alignment:"left", cell_alignment:"left"}
|
11
|
+
},
|
12
|
+
{
|
13
|
+
accessor: "scheduledMeetings",
|
14
|
+
label: "Scheduled Meetings",
|
15
|
+
column_styling:{header_alignment:"center", cell_alignment:"center"}
|
16
|
+
},
|
17
|
+
{
|
18
|
+
accessor: "attendanceRate",
|
19
|
+
label: "Attendance Rate",
|
20
|
+
},
|
21
|
+
{
|
22
|
+
accessor: "completedClasses",
|
23
|
+
label: "Completed Classes",
|
24
|
+
},
|
25
|
+
{
|
26
|
+
accessor: "classCompletionRate",
|
27
|
+
label: "Class Completion Rate",
|
28
|
+
},
|
29
|
+
{
|
30
|
+
accessor: "graduatedStudents",
|
31
|
+
label: "Graduated Students",
|
32
|
+
}
|
33
|
+
] %>
|
34
|
+
|
35
|
+
<%= pb_rails("advanced_table", props: { id: "column-styling", table_data: @table_data, column_definitions: column_definitions }) do %>
|
36
|
+
<%= pb_rails("advanced_table/table_header", props: { column_definitions: column_definitions }) %>
|
37
|
+
<%= pb_rails("advanced_table/table_body", props: { table_data: @table_data, column_definitions: column_definitions }) %>
|
38
|
+
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
The `column_styling` prop is an optional item that can be used within `column_definitions` as shown in the code snippet below. It is an object that has 2 optional key/value pairs:
|
2
|
+
|
3
|
+
1) `header_alignment`: This will allow you to control alignment of header content which is set to right aligned by default. you can set this to `left`, `right` or `center`.
|
4
|
+
|
5
|
+
2) `cell_alignment`: This will allow you to control alignment of content within all cells in the given column. This is set to right aligned by default. you can set this to `left`, `right` or `center`.
|
6
|
+
|
7
|
+
`column_styling` can be used within the column_definition of all the columns or some of them, as shown. Each column has its own individual control in this way.
|
@@ -0,0 +1,3 @@
|
|
1
|
+
The `virtualizedRows` boolean prop enables the rendering of a virtualized table using [Tanstack's Virtualizer Library](https://tanstack.com/virtual/v3/docs/api/virtualizer) with infinite scroll capabilities for large data sets.
|
2
|
+
|
3
|
+
**Note:** Not all Advanced Table props work perfectly with the Virtualized Table - for complex table configurations with many added features or controls consider using the [Pagination](https://playbook.powerapp.cloud/kits/advanced_table/react#pagination) version instead. Additionally, it is a known issue that due to the use of absolute positioning for the virtualized header, it does not render in Safari.
|
@@ -30,4 +30,4 @@
|
|
30
30
|
}
|
31
31
|
] %>
|
32
32
|
|
33
|
-
<%= pb_rails("advanced_table", props: { id: "
|
33
|
+
<%= pb_rails("advanced_table", props: { id: "loading_table", table_data: @table_data, column_definitions: column_definitions, loading: true }) %>
|