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