playbook_ui 14.19.0.pre.rc.2 → 14.20.0.pre.alpha.PLAY2178advancedtablerowpinning7978
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/_playbook.scss +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +92 -5
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +175 -16
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +56 -25
- data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +58 -2
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +34 -15
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +7 -3
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/VisibilityTree.ts +47 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +11 -10
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +13 -4
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +16 -8
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +9 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +61 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +5 -7
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.jsx +57 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.md +4 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.jsx +62 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.jsx +82 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.jsx +66 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx +57 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_react.md +5 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +137 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.html.erb +40 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +5 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.jsx → _advanced_table_selectable_rows_no_subrows_react.jsx} +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +3 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +10 -3
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +7 -2
- data/app/pb_kits/playbook/pb_advanced_table/flat_advanced_table.js +106 -0
- data/app/pb_kits/playbook/pb_advanced_table/index.js +370 -10
- data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.html.erb +23 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.rb +19 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +9 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +4 -3
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +1 -2
- data/app/pb_kits/playbook/pb_avatar/_avatar.scss +4 -0
- data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +3 -0
- data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +3 -3
- data/app/pb_kits/playbook/pb_avatar/avatar.rb +2 -0
- data/app/pb_kits/playbook/pb_avatar/avatar.test.js +18 -0
- data/app/pb_kits/playbook/pb_avatar/docs/_avatar_grayscale.html.erb +5 -0
- data/app/pb_kits/playbook/pb_avatar/docs/_avatar_grayscale.jsx +16 -0
- data/app/pb_kits/playbook/pb_avatar/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_avatar/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
- data/app/pb_kits/playbook/pb_card/card.rb +12 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +2 -2
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.html.erb +22 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line.html.erb +55 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line_rails.md +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_rails.md +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners.jsx +59 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners_react.md +1 -0
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +11 -1
- data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +11 -1
- data/app/pb_kits/playbook/pb_draggable/index.js +4 -2
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +33 -5
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +6 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +82 -35
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +31 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.md +5 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_error.html.erb +5 -2
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.jsx +56 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.md +3 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.jsx +58 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.md +3 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.html.erb +20 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.html.erb +19 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.md +3 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.html.erb +20 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.jsx +57 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.html.erb +50 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.jsx +105 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.html.erb +22 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.jsx +67 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.html.erb +28 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.jsx +17 -64
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_with_subcomponents.html.erb +58 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/{_dropdown_with_autocomplete_and_custom_display.jsx → _dropdown_with_autocomplete_with_subcomponents.jsx} +11 -25
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_with_subcomponents.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +11 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.md +1 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +33 -2
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.md +3 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_external_control.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search.jsx +61 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search.md +2 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search_rails.html.erb +52 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_search_rails.md +2 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +18 -5
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +7 -2
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -3
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +20 -2
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +153 -3
- data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +10 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +3 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +37 -6
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +5 -1
- data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +0 -6
- data/app/pb_kits/playbook/pb_dropdown/index.js +380 -17
- data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +64 -11
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +3 -4
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +16 -12
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +83 -17
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +58 -0
- data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +8 -1
- data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_alignment.html.erb +27 -0
- data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_default.html.erb +7 -0
- data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_orientation.html.erb +12 -0
- data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_size.html.erb +23 -0
- data/app/pb_kits/playbook/pb_empty_state/docs/example.yml +5 -1
- data/app/pb_kits/playbook/pb_empty_state/empty_state.html.erb +19 -0
- data/app/pb_kits/playbook/pb_empty_state/empty_state.rb +123 -0
- data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +13 -0
- data/app/pb_kits/playbook/pb_file_upload/_file_upload.tsx +11 -1
- data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_error.html.erb +1 -0
- data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_error.jsx +41 -0
- data/app/pb_kits/playbook/pb_file_upload/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_file_upload/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -0
- data/app/pb_kits/playbook/pb_file_upload/file_upload.rb +7 -1
- data/app/pb_kits/playbook/pb_file_upload/fileupload.test.js +18 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -0
- data/app/pb_kits/playbook/pb_form_group/_error_state_mixin.scss +2 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +19 -12
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +13 -7
- data/app/pb_kits/playbook/pb_message/_message.tsx +3 -0
- data/app/pb_kits/playbook/pb_message/docs/_message_grayscale.html.erb +9 -0
- data/app/pb_kits/playbook/pb_message/docs/_message_grayscale.jsx +21 -0
- data/app/pb_kits/playbook/pb_message/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_message/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_message/message.html.erb +2 -1
- data/app/pb_kits/playbook/pb_message/message.rb +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -2
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +2 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.md +3 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.html.erb +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.jsx +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx +22 -22
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +11 -11
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb +11 -11
- data/app/pb_kits/playbook/pb_overlay/_overlay.scss +2 -1
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +1 -1
- data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +5 -4
- data/app/pb_kits/playbook/pb_person/_person.tsx +12 -2
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +9 -9
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +4 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_exclude_countries.html.erb +4 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_exclude_countries.jsx +15 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_exclude_countries.md +1 -0
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_only_countries.jsx +1 -1
- data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +4 -3
- 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_section_separator/_section_separator.tsx +2 -2
- data/app/pb_kits/playbook/pb_select/_select.scss +10 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select_subheaders.html.erb +12 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select_subheaders.jsx +31 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select_subheaders.md +1 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_error.html.erb +1 -1
- data/app/pb_kits/playbook/pb_select/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.jsx +7 -7
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +5 -5
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +4 -2
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.html.erb +1 -1
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.html.erb +5 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +73 -3
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_error_state.html.erb +8 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.jsx +23 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.md +1 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_user/_user.tsx +3 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_grayscale.html.erb +6 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_grayscale.jsx +16 -0
- data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_user/user.html.erb +2 -1
- data/app/pb_kits/playbook/pb_user/user.rb +1 -0
- data/dist/chunks/_typeahead-CRW6dJbW.js +22 -0
- data/dist/chunks/_weekday_stacked-yWpUc_c0.js +45 -0
- data/dist/chunks/lib-D5R1BjUn.js +29 -0
- data/dist/chunks/{pb_form_validation-BWjy4bFn.js → pb_form_validation-BZ2AVAi_.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +6 -14
- 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/kit_base.rb +3 -3
- data/lib/playbook/version.rb +2 -2
- metadata +84 -22
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.html.erb +0 -10
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_hook.jsx +0 -79
- data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.scss +0 -3
- data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.tsx +0 -72
- data/app/pb_kits/playbook/pb_gantt_chart/docs/_gantt_chart_default.jsx +0 -53
- data/app/pb_kits/playbook/pb_gantt_chart/docs/example.yml +0 -7
- data/app/pb_kits/playbook/pb_gantt_chart/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_gantt_chart/gantt_chart.test.jsx +0 -19
- data/dist/chunks/_typeahead-D8CsVBZO.js +0 -22
- data/dist/chunks/_weekday_stacked-D3oLTSkH.js +0 -45
- data/dist/chunks/lib-BmTAc7Nc.js +0 -29
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_react.md → _advanced_table_selectable_rows.md} +0 -0
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.html.erb → _advanced_table_selectable_rows_no_subrows_rails.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.html.erb → _advanced_table_selectable_rows_rails.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_drop_zones_line.md → _draggable_drop_zones_line_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_event_listeners.md → _draggable_event_listeners_rails.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: c8e79a2664649f32a2195a4e9199e868f6c1ebac20764479066f12c2dbbd7e9c
|
4
|
+
data.tar.gz: da415e2485131587cc6a32a03c8145152df934616500a008ef06b4e49c6c049a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd7c9331ca4274f9e6e95d186ada4456ddfa8240d1cc48249dd0b899931bf3db83576abfbfed0ebd4105e2159d57cc9efb75a3a16e2d33cc6a37262dede08746
|
7
|
+
data.tar.gz: 9072a56af0c016514dd3a3f3d5b0e20fbdbaea20ca5b25d258f3c31c859fc0d4edc855c58ed297089453525b67df0789c6ff216b9dd500eaa5115664a4bba396
|
@@ -28,11 +28,14 @@ export const RegularTableView = ({
|
|
28
28
|
handleExpandOrCollapse,
|
29
29
|
inlineRowLoading,
|
30
30
|
loading,
|
31
|
-
responsive,
|
32
31
|
table,
|
33
32
|
selectableRows,
|
34
33
|
hasAnySubRows,
|
35
|
-
stickyLeftColumn
|
34
|
+
stickyLeftColumn,
|
35
|
+
pinnedRows,
|
36
|
+
headerHeight,
|
37
|
+
rowHeight,
|
38
|
+
sampleRowRef,
|
36
39
|
} = useContext(AdvancedTableContext)
|
37
40
|
|
38
41
|
|
@@ -50,9 +53,81 @@ export const RegularTableView = ({
|
|
50
53
|
const columnPinning = table.getState().columnPinning || { left: [] };
|
51
54
|
const columnDefinitions = table.options.meta?.columnDefinitions || [];
|
52
55
|
|
56
|
+
// Row pinning
|
57
|
+
function PinnedRow({ row }: { row: Row<any> }) {
|
58
|
+
return (
|
59
|
+
<tr
|
60
|
+
className={classnames(
|
61
|
+
`pinned-row`,
|
62
|
+
)}
|
63
|
+
style={{
|
64
|
+
backgroundColor: 'white',
|
65
|
+
position: 'sticky',
|
66
|
+
top:
|
67
|
+
row.getIsPinned() === 'top'
|
68
|
+
? `${row.getPinnedIndex() * rowHeight + headerHeight}px`
|
69
|
+
: undefined,
|
70
|
+
zIndex: '3'
|
71
|
+
}}
|
72
|
+
>
|
73
|
+
{row.getVisibleCells().map((cell: Cell<GenericObject, unknown>, i: number) => {
|
74
|
+
const isPinnedLeft = columnPinning.left.includes(cell.column.id);
|
75
|
+
const isLastCell = (() => {
|
76
|
+
const parent = cell.column.parent;
|
77
|
+
if (!parent) {
|
78
|
+
const last = row.getVisibleCells().at(-1);
|
79
|
+
return last?.column.id === cell.column.id;
|
80
|
+
}
|
81
|
+
|
82
|
+
const visibleSiblings = parent.columns.filter(col => col.getIsVisible());
|
83
|
+
return visibleSiblings.at(-1)?.id === cell.column.id;
|
84
|
+
})();
|
85
|
+
|
86
|
+
const { column } = cell;
|
87
|
+
return (
|
88
|
+
<td
|
89
|
+
align="right"
|
90
|
+
className={classnames(
|
91
|
+
`${cell.id}-cell position_relative`,
|
92
|
+
isChrome() ? "chrome-styles" : "",
|
93
|
+
isPinnedLeft && 'pinned-left',
|
94
|
+
stickyLeftColumn && stickyLeftColumn.length > 0 && isPinnedLeft && 'sticky-left',
|
95
|
+
isLastCell && 'last-cell',
|
96
|
+
)}
|
97
|
+
key={`${cell.id}-data`}
|
98
|
+
style={{
|
99
|
+
left: isPinnedLeft
|
100
|
+
? i === 1 //Accounting for set min-width for first column
|
101
|
+
? '180px'
|
102
|
+
: `${column.getStart("left")}px`
|
103
|
+
: undefined,
|
104
|
+
}}
|
105
|
+
>
|
106
|
+
{collapsibleTrail && i === 0 && row.depth > 0 && renderCollapsibleTrail(row.depth)}
|
107
|
+
<span id={`${cell.id}-span`}>
|
108
|
+
{loading ? (
|
109
|
+
<LoadingCell />
|
110
|
+
) : (
|
111
|
+
flexRender(cell.column.columnDef.cell, cell.getContext())
|
112
|
+
)}
|
113
|
+
</span>
|
114
|
+
</td>
|
115
|
+
);
|
116
|
+
})}
|
117
|
+
</tr>
|
118
|
+
)
|
119
|
+
}
|
120
|
+
|
121
|
+
const totalRows = pinnedRows ? table.getCenterRows() : table.getRowModel().rows
|
122
|
+
|
53
123
|
return (
|
54
124
|
<>
|
55
|
-
{table.
|
125
|
+
{pinnedRows && table.getTopRows().map((row: Row<GenericObject>) => (
|
126
|
+
<PinnedRow key={row.id}
|
127
|
+
row={row}
|
128
|
+
/>
|
129
|
+
))}
|
130
|
+
{totalRows.map((row: Row<GenericObject>, rowIndex: number) => {
|
56
131
|
const isExpandable = row.getIsExpanded();
|
57
132
|
const isFirstChildofSubrow = row.depth > 0 && row.index === 0;
|
58
133
|
const rowHasNoChildren = row.original?.children && !row.original.children.length ? true : false;
|
@@ -60,6 +135,7 @@ export const RegularTableView = ({
|
|
60
135
|
const isDataLoading = isExpandable && (inlineRowLoading && rowHasNoChildren) && (row.depth < columnDefinitions[0]?.cellAccessors?.length);
|
61
136
|
const rowBackground = isExpandable && ((!inlineRowLoading && row.getCanExpand()) || (inlineRowLoading && rowHasNoChildren));
|
62
137
|
const rowColor = row.getIsSelected() ? "bg-row-selection" : rowBackground ? "bg-silver" : "bg-white";
|
138
|
+
const isFirstRegularRow = rowIndex === 0 && !row.getIsPinned();
|
63
139
|
|
64
140
|
return (
|
65
141
|
<React.Fragment key={`${row.index}-${row.id}-${row.depth}-row`}>
|
@@ -77,6 +153,7 @@ export const RegularTableView = ({
|
|
77
153
|
<tr
|
78
154
|
className={`${rowColor} ${row.depth > 0 ? `depth-sub-row-${row.depth}` : ""}`}
|
79
155
|
id={`${row.index}-${row.id}-${row.depth}-row`}
|
156
|
+
ref={isFirstRegularRow ? sampleRowRef : null}
|
80
157
|
>
|
81
158
|
{/* Render custom checkbox column when we want selectableRows for non-expanding tables */}
|
82
159
|
{selectableRows && !hasAnySubRows && (
|
@@ -93,7 +170,17 @@ export const RegularTableView = ({
|
|
93
170
|
|
94
171
|
{row.getVisibleCells().map((cell: Cell<GenericObject, unknown>, i: number) => {
|
95
172
|
const isPinnedLeft = columnPinning.left.includes(cell.column.id);
|
96
|
-
const isLastCell =
|
173
|
+
const isLastCell = (() => {
|
174
|
+
const parent = cell.column.parent;
|
175
|
+
if (!parent) {
|
176
|
+
const last = row.getVisibleCells().at(-1);
|
177
|
+
return last?.column.id === cell.column.id;
|
178
|
+
}
|
179
|
+
|
180
|
+
const visibleSiblings = parent.columns.filter(col => col.getIsVisible());
|
181
|
+
return visibleSiblings.at(-1)?.id === cell.column.id;
|
182
|
+
})();
|
183
|
+
|
97
184
|
const { column } = cell;
|
98
185
|
return (
|
99
186
|
<td
|
@@ -144,4 +231,4 @@ export const RegularTableView = ({
|
|
144
231
|
);
|
145
232
|
}
|
146
233
|
|
147
|
-
export default RegularTableView;
|
234
|
+
export default RegularTableView;
|
@@ -1,52 +1,211 @@
|
|
1
|
-
import React, { useEffect, useRef } from "react";
|
1
|
+
import React, { useEffect, useRef, useContext, useState } from "react";
|
2
|
+
|
3
|
+
import AdvancedTableContext from "../Context/AdvancedTableContext";
|
4
|
+
import { buildVisibilityTree } from "../Utilities/VisibilityTree";
|
5
|
+
|
2
6
|
import Card from "../../pb_card/_card";
|
3
7
|
import Caption from "../../pb_caption/_caption";
|
4
8
|
import Flex from "../../pb_flex/_flex";
|
5
9
|
import FlexItem from "../../pb_flex/_flex_item";
|
6
|
-
import
|
10
|
+
import Icon from "../../pb_icon/_icon";
|
11
|
+
import Checkbox from "../../pb_checkbox/_checkbox";
|
12
|
+
import SectionSeparator from "../../pb_section_separator/_section_separator";
|
13
|
+
import Tooltip from "../../pb_tooltip/_tooltip";
|
14
|
+
import PbReactPopover from "../../pb_popover/_popover";
|
15
|
+
|
16
|
+
import {
|
17
|
+
showActionBar,
|
18
|
+
hideActionBar,
|
19
|
+
} from "../Utilities/ActionBarAnimationHelper";
|
20
|
+
import { GenericObject } from "../../types";
|
7
21
|
|
8
22
|
interface TableActionBarProps {
|
9
|
-
isVisible: boolean;
|
23
|
+
isVisible: boolean | GenericObject | undefined;
|
10
24
|
selectedCount: number;
|
11
25
|
actions?: React.ReactNode[] | React.ReactNode;
|
26
|
+
type?: string;
|
27
|
+
}
|
28
|
+
|
29
|
+
interface VisibilityNode {
|
30
|
+
id?: string | undefined;
|
31
|
+
label?: string | undefined;
|
32
|
+
children?: VisibilityNode[];
|
12
33
|
}
|
13
34
|
|
14
35
|
const TableActionBar: React.FC<TableActionBarProps> = ({
|
15
36
|
isVisible,
|
16
37
|
selectedCount,
|
17
|
-
actions
|
38
|
+
actions,
|
39
|
+
type = "row-selection",
|
18
40
|
}) => {
|
19
41
|
const cardRef = useRef(null);
|
42
|
+
const { table, columnVisibilityControl, columnDefinitions } =
|
43
|
+
useContext(AdvancedTableContext);
|
44
|
+
|
45
|
+
// ----------- Column visibility logic -----------
|
46
|
+
const includeIds = columnVisibilityControl?.includeIds;
|
47
|
+
const firstLeafId = table.getAllLeafColumns()[0]?.id;
|
48
|
+
// Get the first leaf column ID to exclude it from the visibility tree
|
49
|
+
// This is to avoid showing the first column in the dropdown
|
50
|
+
// as toggling it's visibility breaks the expanded row functionality
|
51
|
+
const tree = buildVisibilityTree(columnDefinitions, includeIds).filter(node => node.id !== firstLeafId);
|
52
|
+
|
53
|
+
const renderLeaf = (id: string, label: string) => {
|
54
|
+
const col = table.getColumn(id);
|
55
|
+
const show = col.getIsVisible();
|
56
|
+
|
57
|
+
const handleVisibilityChange = () => {
|
58
|
+
col.toggleVisibility();
|
59
|
+
if (columnVisibilityControl?.onColumnVisibilityChange) {
|
60
|
+
const updatedVisibilityState = {
|
61
|
+
...table.getAllColumns().reduce((acc: { [x: string]: any; }, col: { id: string | number; getIsVisible: () => any; }) => {
|
62
|
+
acc[col.id] = col.getIsVisible();
|
63
|
+
return acc;
|
64
|
+
}, {}),
|
65
|
+
};
|
66
|
+
columnVisibilityControl?.onColumnVisibilityChange(updatedVisibilityState);
|
67
|
+
}
|
68
|
+
};
|
69
|
+
|
70
|
+
return (
|
71
|
+
<Checkbox
|
72
|
+
checked={show}
|
73
|
+
key={id}
|
74
|
+
onChange={handleVisibilityChange}
|
75
|
+
paddingBottom="xs"
|
76
|
+
text={label}
|
77
|
+
/>
|
78
|
+
);
|
79
|
+
};
|
80
|
+
|
81
|
+
const gatherLeafIds = (node: VisibilityNode): string[] =>
|
82
|
+
node.children && node.children.length
|
83
|
+
? node.children.flatMap(gatherLeafIds)
|
84
|
+
: node.id
|
85
|
+
? [node.id]
|
86
|
+
: [];
|
87
|
+
|
88
|
+
const renderGroup = (node: VisibilityNode ) => {
|
89
|
+
const leaves = gatherLeafIds(node);
|
90
|
+
const visibleArray = leaves.map((id) => table.getColumn(id).getIsVisible());
|
91
|
+
const allOn = visibleArray.every(Boolean);
|
92
|
+
const someOn = visibleArray.some(Boolean);
|
93
|
+
|
94
|
+
const handleGroupVisibilityChange = () => {
|
95
|
+
leaves.forEach((id) => table.getColumn(id).toggleVisibility(!allOn));
|
96
|
+
if (columnVisibilityControl?.onColumnVisibilityChange) {
|
97
|
+
const updatedVisibilityState = {
|
98
|
+
...table.getAllColumns().reduce((acc: { [x: string]: any; }, col: { id: string | number; getIsVisible: () => any; }) => {
|
99
|
+
acc[col.id] = col.getIsVisible();
|
100
|
+
return acc;
|
101
|
+
}, {}),
|
102
|
+
};
|
103
|
+
columnVisibilityControl?.onColumnVisibilityChange(updatedVisibilityState);
|
104
|
+
}
|
105
|
+
};
|
106
|
+
return (
|
107
|
+
<>
|
108
|
+
<Checkbox
|
109
|
+
checked={allOn}
|
110
|
+
indeterminate={!allOn && someOn}
|
111
|
+
onChange={handleGroupVisibilityChange}
|
112
|
+
paddingBottom="xs"
|
113
|
+
text={node.label}
|
114
|
+
/>
|
115
|
+
<Flex flexDirection="column"
|
116
|
+
paddingLeft="lg"
|
117
|
+
>
|
118
|
+
{node?.children?.map((child) =>
|
119
|
+
child.children ? renderGroup(child) : renderLeaf(child.id, child.label),
|
120
|
+
)}
|
121
|
+
</Flex>
|
122
|
+
</>
|
123
|
+
);
|
124
|
+
};
|
125
|
+
// ------------ End of column visibility logic --------
|
20
126
|
|
21
127
|
useEffect(() => {
|
22
|
-
if (cardRef.current) {
|
128
|
+
if (cardRef.current && type === "row-selection") {
|
23
129
|
if (isVisible) {
|
24
130
|
showActionBar(cardRef.current);
|
25
131
|
} else {
|
26
132
|
hideActionBar(cardRef.current);
|
27
133
|
}
|
28
134
|
}
|
29
|
-
}, [isVisible]);
|
135
|
+
}, [isVisible, type]);
|
136
|
+
|
137
|
+
const [showPopover, setShowPopover] = useState(false)
|
138
|
+
|
139
|
+
const togglePopover = () => setShowPopover((prev) => !prev)
|
140
|
+
const handleShouldClose = (shouldClose: boolean) =>
|
141
|
+
setShowPopover(!shouldClose)
|
142
|
+
|
143
|
+
const popoverReference = (
|
144
|
+
<Tooltip
|
145
|
+
placement="top"
|
146
|
+
text="Column Configuration"
|
147
|
+
>
|
148
|
+
<div onClick={togglePopover}>
|
149
|
+
<Icon
|
150
|
+
color="primary"
|
151
|
+
cursor="pointer"
|
152
|
+
icon="sliders-h"
|
153
|
+
/>
|
154
|
+
</div>
|
155
|
+
</Tooltip>
|
156
|
+
)
|
30
157
|
|
31
158
|
return (
|
32
159
|
<Card
|
33
160
|
borderNone={!isVisible}
|
34
|
-
className={`${
|
161
|
+
className={`${
|
162
|
+
isVisible && "show-action-card row-selection-actions-card"
|
163
|
+
}`}
|
35
164
|
htmlOptions={{ ref: cardRef as any }}
|
36
165
|
padding={`${isVisible ? "xs" : "none"}`}
|
37
166
|
>
|
38
167
|
<Flex
|
39
168
|
alignItems="center"
|
40
|
-
justify="between"
|
169
|
+
justify={type === "row-selection" ? "between" : "end"}
|
41
170
|
>
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
171
|
+
{type === "row-selection" ? (
|
172
|
+
<>
|
173
|
+
<Caption color="light"
|
174
|
+
paddingLeft="xs"
|
175
|
+
size="xs"
|
176
|
+
>
|
177
|
+
{selectedCount} Selected
|
178
|
+
</Caption>
|
179
|
+
<FlexItem>{actions}</FlexItem>
|
180
|
+
</>
|
181
|
+
) : (
|
182
|
+
<PbReactPopover
|
183
|
+
closeOnClick="outside"
|
184
|
+
placement="bottom-end"
|
185
|
+
reference={popoverReference}
|
186
|
+
shouldClosePopover={handleShouldClose}
|
187
|
+
show={showPopover}
|
188
|
+
zIndex={3}
|
189
|
+
>
|
190
|
+
<>
|
191
|
+
<Caption
|
192
|
+
paddingY="sm"
|
193
|
+
text="Columns Config"
|
194
|
+
textAlign="center"
|
195
|
+
/>
|
196
|
+
<SectionSeparator paddingBottom="xs" />
|
197
|
+
{tree.map((node: VisibilityNode) => (
|
198
|
+
<Flex cursor="pointer"
|
199
|
+
flexDirection="column"
|
200
|
+
key={node.id}
|
201
|
+
paddingX="xs"
|
202
|
+
>
|
203
|
+
{node.children ? renderGroup(node) : renderLeaf(node.id, node.label)}
|
204
|
+
</Flex>
|
205
|
+
))}
|
206
|
+
</>
|
207
|
+
</PbReactPopover>
|
208
|
+
)}
|
50
209
|
</Flex>
|
51
210
|
</Card>
|
52
211
|
);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useContext } from "react"
|
1
|
+
import React, { useContext, useState } from "react"
|
2
2
|
import classnames from "classnames"
|
3
3
|
import { flexRender, Header, Table, RowModel } from "@tanstack/react-table"
|
4
4
|
|
@@ -8,10 +8,8 @@ import { GlobalProps } from "../../utilities/globalProps"
|
|
8
8
|
|
9
9
|
import Flex from "../../pb_flex/_flex"
|
10
10
|
import Checkbox from "../../pb_checkbox/_checkbox"
|
11
|
-
import
|
12
|
-
import
|
13
|
-
import DropdownOption from "../../pb_dropdown/subcomponents/DropdownOption"
|
14
|
-
import DropdownContainer from "../../pb_dropdown/subcomponents/DropdownContainer"
|
11
|
+
import SectionSeparator from "../../pb_section_separator/_section_separator"
|
12
|
+
import PbReactPopover from "../../pb_popover/_popover";
|
15
13
|
import Icon from "../../pb_icon/_icon"
|
16
14
|
|
17
15
|
import { SortIconButton } from "./SortIconButton"
|
@@ -79,9 +77,26 @@ export const TableHeaderCell = ({
|
|
79
77
|
header?.column.getLeafColumns().length === 1 &&
|
80
78
|
header?.column.getLeafColumns()[0].id === header.column.id
|
81
79
|
|
82
|
-
const
|
83
|
-
|
84
|
-
(
|
80
|
+
const columnHasVisibleLeaf = (col: any): boolean =>
|
81
|
+
col.getIsVisible?.() ||
|
82
|
+
(Array.isArray(col.columns) &&
|
83
|
+
col.columns.some((child: any) => columnHasVisibleLeaf(child)));
|
84
|
+
|
85
|
+
// Check on column position in stack + visibility to add the vertical border
|
86
|
+
const isLastHeaderCell = (() => {
|
87
|
+
if (!header) return false;
|
88
|
+
|
89
|
+
if (header.colSpan > 1 && header.column.parent !== undefined) return true;
|
90
|
+
|
91
|
+
const parent = header.column.parent;
|
92
|
+
|
93
|
+
if (!parent) {
|
94
|
+
const topHeaders = table?.getHeaderGroups()[0].headers.filter((h: any) => columnHasVisibleLeaf(h.column));
|
95
|
+
return topHeaders?.at(-1)?.id === header.id;
|
96
|
+
}
|
97
|
+
const visibleSiblings = parent.columns.filter(columnHasVisibleLeaf);
|
98
|
+
return visibleSiblings.at(-1) === header.column;
|
99
|
+
})();
|
85
100
|
|
86
101
|
const cellClassName = classnames(
|
87
102
|
"table-header-cells",
|
@@ -119,6 +134,20 @@ const isToggleExpansionEnabled =
|
|
119
134
|
justifyHeader = isLeafColumn ? "end" : "center";
|
120
135
|
}
|
121
136
|
|
137
|
+
const [showPopover, setShowPopover] = useState(false)
|
138
|
+
|
139
|
+
const togglePopover = () => setShowPopover((prev) => !prev)
|
140
|
+
const handleShouldClose = (shouldClose: boolean) =>
|
141
|
+
setShowPopover(!shouldClose)
|
142
|
+
|
143
|
+
const popoverReference = (
|
144
|
+
<div className="gray-icon toggle-all-icon"
|
145
|
+
onClick={togglePopover}
|
146
|
+
>
|
147
|
+
<Icon icon={displayIcon(toggleExpansionIcon)[0]} />
|
148
|
+
</div>
|
149
|
+
)
|
150
|
+
|
122
151
|
const handleExpandDepth = (depth: number) => {
|
123
152
|
if (onExpandByDepthClick) {
|
124
153
|
const flatRows = table?.getRowModel().flatRows
|
@@ -174,31 +203,33 @@ const isToggleExpansionEnabled =
|
|
174
203
|
<ToggleIconButton onClick={handleExpandOrCollapse} />
|
175
204
|
)}
|
176
205
|
{isToggleExpansionEnabled && hasAnySubRows && expandByDepth && (
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
<DropdownOption
|
186
|
-
key={index}
|
187
|
-
option={option}
|
188
|
-
padding="none"
|
206
|
+
|
207
|
+
<PbReactPopover
|
208
|
+
closeOnClick="any"
|
209
|
+
placement="bottom-start"
|
210
|
+
reference={popoverReference}
|
211
|
+
shouldClosePopover={handleShouldClose}
|
212
|
+
show={showPopover}
|
213
|
+
zIndex={3}
|
189
214
|
>
|
215
|
+
{expandByDepth.map((option:{ [key: string]: any }, index: number) => (
|
216
|
+
<>
|
190
217
|
<Flex
|
191
218
|
alignItems="center"
|
219
|
+
className="pb-advanced-table-popover-option"
|
220
|
+
cursor="pointer"
|
192
221
|
htmlOptions={{onClick: () => {handleExpandDepth(option.depth)} }}
|
193
222
|
paddingX="sm"
|
194
223
|
paddingY="xs"
|
195
224
|
>
|
196
225
|
{option.label}
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
226
|
+
</Flex>
|
227
|
+
{index !== expandByDepth.length - 1 && <SectionSeparator/>}
|
228
|
+
</>
|
229
|
+
))}
|
230
|
+
</PbReactPopover>
|
231
|
+
|
232
|
+
|
202
233
|
)}
|
203
234
|
|
204
235
|
{isToggleExpansionEnabledLoading &&(
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { createContext, useRef, useMemo, useEffect } from 'react';
|
1
|
+
import React, { createContext, useRef, useMemo, useEffect, useState, useCallback } from 'react';
|
2
2
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
3
3
|
|
4
4
|
import { Row } from "@tanstack/react-table";
|
@@ -23,6 +23,54 @@ export const AdvancedTableProvider = ({ children, ...props }: {
|
|
23
23
|
|
24
24
|
const table = props.table;
|
25
25
|
const isVirtualized = props.virtualizedRows || props.enableVirtualization;
|
26
|
+
|
27
|
+
// Pinned Row: height calculations for Header and Row
|
28
|
+
const headerRef = useRef(null);
|
29
|
+
const sampleRowRef = useRef(null);
|
30
|
+
|
31
|
+
const [headerHeight, setHeaderHeight] = useState(44);
|
32
|
+
const [rowHeight, setRowHeight] = useState(38);
|
33
|
+
|
34
|
+
const measureHeights = useCallback(() => {
|
35
|
+
if (headerRef.current) {
|
36
|
+
const headerRect = headerRef.current.getBoundingClientRect();
|
37
|
+
if (headerRect.height > 0) {
|
38
|
+
setHeaderHeight(headerRect.height);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
if (sampleRowRef.current) {
|
42
|
+
const rowRect = sampleRowRef.current.getBoundingClientRect();
|
43
|
+
if (rowRect.height > 0) {
|
44
|
+
setRowHeight(rowRect.height);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}, []);
|
48
|
+
|
49
|
+
useEffect(() => {
|
50
|
+
const resizeObserver = new ResizeObserver(() => {
|
51
|
+
measureHeights();
|
52
|
+
});
|
53
|
+
|
54
|
+
if (headerRef.current) {
|
55
|
+
resizeObserver.observe(headerRef.current);
|
56
|
+
}
|
57
|
+
|
58
|
+
if (sampleRowRef.current) {
|
59
|
+
resizeObserver.observe(sampleRowRef.current);
|
60
|
+
}
|
61
|
+
|
62
|
+
const timeoutId = setTimeout(measureHeights, 100);
|
63
|
+
|
64
|
+
return () => {
|
65
|
+
resizeObserver.disconnect();
|
66
|
+
clearTimeout(timeoutId);
|
67
|
+
};
|
68
|
+
}, [measureHeights]);
|
69
|
+
|
70
|
+
useEffect(() => {
|
71
|
+
measureHeights();
|
72
|
+
}, [table?.getRowModel().rows.length, measureHeights]);
|
73
|
+
|
26
74
|
|
27
75
|
// Create a flattened data array that includes ALL components for virtualization
|
28
76
|
const flattenedItems = useMemo(() => {
|
@@ -132,7 +180,15 @@ export const AdvancedTableProvider = ({ children, ...props }: {
|
|
132
180
|
virtualizer: isVirtualized ? virtualizer : null,
|
133
181
|
flattenedItems,
|
134
182
|
virtualizedRows: isVirtualized,
|
135
|
-
enableVirtualization: isVirtualized
|
183
|
+
enableVirtualization: isVirtualized,
|
184
|
+
rowPinning: props.rowPinning,
|
185
|
+
setRowPinning: props.setRowPinning,
|
186
|
+
keepPinnedRows: props.keepPinnedRows,
|
187
|
+
headerHeight,
|
188
|
+
rowHeight,
|
189
|
+
headerRef,
|
190
|
+
sampleRowRef,
|
191
|
+
measureHeights,
|
136
192
|
};
|
137
193
|
|
138
194
|
return (
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { useCallback, useEffect } from 'react';
|
2
|
-
import { Row } from "@tanstack/react-table";
|
2
|
+
import { Row, RowPinningState } from "@tanstack/react-table";
|
3
3
|
import { GenericObject } from "../../types";
|
4
4
|
import { updateExpandAndCollapseState } from "../Utilities/ExpansionControlHelpers";
|
5
5
|
|