Class: Playbook::PbAdvancedTable::TableHeader

Inherits:
KitBase
  • Object
show all
Defined in:
app/pb_kits/playbook/pb_advanced_table/table_header.rb

Constant Summary

Constants included from Playbook::PositionPropsCss

Playbook::PositionPropsCss::POSITION_VALUES

Instance Attribute Summary

Attributes included from Playbook::Props

#values

Instance Method Summary collapse

Methods inherited from KitBase

#combined_html_options, #global_inline_props, #object, #pb_content_tag, #react_component

Methods included from MaxHeight

included, #max_height_options, #max_height_props, #max_height_values

Methods included from MinHeight

included, #min_height_options, #min_height_props, #min_height_values

Methods included from Height

#height_options, #height_props, #height_values, included

Methods included from VerticalAlign

included, #vertical_align_options, #vertical_align_props, #vertical_align_values

Methods included from Bottom

#bottom_options, #bottom_values, included

Methods included from Playbook::PositionPropsCss

#positioning_css

Methods included from Right

included, #right_options, #right_values

Methods included from Top

included, #top_options, #top_values

Methods included from Left

included, #left_options, #left_values

Methods included from Truncate

included, #truncate_options, #truncate_props, #truncate_values

Methods included from Overflow

included, #overflow_options, #overflow_props, #overflow_values

Methods included from TextAlign

included, #text_align_options, #text_align_props, #text_align_values

Methods included from BorderRadius

#border_radius_options, #border_radius_props, #border_radius_values, included

Methods included from Hover

#hover_attributes, #hover_background_values, #hover_color_values, #hover_options, #hover_props, #hover_scale_values, #hover_shadow_values, #hover_underline_values, #hover_values, included

Methods included from Playbook::Position

included, #position_options, #position_values

Methods included from Order

included, #order_options, #order_props, #order_values

Methods included from FlexShrink

#flex_shrink_options, #flex_shrink_props, #flex_shrink_values, included

Methods included from FlexGrow

#flex_grow_options, #flex_grow_props, #flex_grow_values, included

Methods included from Flex

#flex_options, #flex_props, #flex_values, included

Methods included from AlignSelf

#align_self_options, #align_self_props, #align_self_values, included

Methods included from AlignContent

#align_content_options, #align_content_props, #align_content_values, included

Methods included from AlignItems

#align_items_options, #align_items_props, #align_items_values, included

Methods included from JustifySelf

included, #justify_self_options, #justify_self_props, #justify_self_values

Methods included from JustifyContent

included, #justify_content_options, #justify_content_props, #justify_content_values

Methods included from FlexWrap

#flex_wrap_options, #flex_wrap_props, #flex_wrap_values, included

Methods included from FlexDirection

#flex_direction_options, #flex_direction_props, #flex_direction_values, included

Methods included from Cursor

#cursor_options, #cursor_props, #cursor_values, included

Methods included from Display

#display_options, #display_props, #display_size_values, #display_values, included

Methods included from LineHeight

included, #line_height_options, #line_height_props, #line_height_values

Methods included from Shadow

included, #shadow_options, #shadow_props, #shadow_values

Methods included from NumberSpacing

included, #number_spacing_options, #number_spacing_values

Methods included from ZIndex

included, #screen_size_values, #z_index_options, #z_index_props, #z_index_values

Methods included from Spacing

#break_method_values, #column_gap_options, #column_gap_props, #filter_classname, #gap_options, #gap_props, #gap_values, included, #max_width_options, #max_width_props, #max_width_values, #min_width_options, #min_width_props, #min_width_values, #row_gap_options, #row_gap_props, #screen_size_values, #spacing_options, #spacing_props, #spacing_values, #width_options, #width_props, #width_values

Methods included from Classnames

#generate_classname, #generate_classname_without_spacing, included

Methods included from Playbook::Props

#initialize, #prop

Methods included from Playbook::PbKitHelper

#pb_rails

Methods included from Playbook::PbFormsHelper

#pb_form_with

Instance Method Details

#classnameObject



23
24
25
26
27
28
29
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 23

def classname
  additional_classes = []
  additional_classes << "advanced-table-responsive-#{responsive} pinned-left" if responsive == "scroll"
  additional_classes << "selectable-rows-enabled" if selectable_rows && enable_toggle_expansion == "none"

  generate_classname("pb_advanced_table_header", "pb_table_thead", *additional_classes, separator: " ")
end

#find_original_column_def(accessor) ⇒ Object

Get original column definition for custom rendering



86
87
88
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 86

def find_original_column_def(accessor)
  find_column_def_by_accessor(column_definitions, accessor)
end

#has_header_renderer?(cell) ⇒ Boolean

Check if a header cell has a custom renderer

Returns:



91
92
93
94
95
96
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 91

def has_header_renderer?(cell)
  return false unless cell[:accessor].present?

  original_def = find_original_column_def(cell[:accessor])
  original_def && original_def[:header].present?
end

#header_rowsObject



39
40
41
42
43
44
45
46
47
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 39

def header_rows
  wrapped_columns = wrap_leaf_columns(column_definitions)

  rows = []
  max_depth = compute_max_depth(wrapped_columns)
  max_depth.times { rows << [] }
  process_columns(wrapped_columns, rows, 0, max_depth)
  rows
end

#render_header(cell) ⇒ Object

Render custom header content



99
100
101
102
103
104
105
106
107
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 99

def render_header(cell)
  return cell[:label] unless has_header_renderer?(cell)

  original_def = find_original_column_def(cell[:accessor])
  custom_renderer = original_def[:header]

  # Call the custom renderer with the cell data and label
  custom_renderer.call(cell, cell[:label])
end

#render_select_all_checkboxObject

Selectable Rows w/ Subrows - checkboxes part of toggleable first cell



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 71

def render_select_all_checkbox
  if selectable_rows
    pb_rails("checkbox", props: {
               id: "#{id ? "#{id}-" : ''}select-all-rows",
               indeterminate_main: true,
               indeterminate_main_labels: ["", ""],
               name: "#{id ? "#{id}-" : ''}select-all-rows",
               data: {
                 action: "click->pb-advanced-table#toggleAllRowSelection",
               },
             })
  end
end

#render_select_all_headerObject

Selectable Rows No Subrows - checkboxes in their own first cell



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 50

def render_select_all_header
  if selectable_rows
    additional_classes = []
    additional_classes << "table-header-cells-custom"
    additional_classes << "header-cells-with-actions" if show_actions_bar
    additional_classes << "checkbox-cell-header"
    additional_classes << "pinned-left" if responsive == "scroll"
    pb_rails("table/table_header", props: {
               classname: additional_classes.join(" "),
             }) do
      pb_rails("checkbox", props: {
                 id: "#{id ? "#{id}-" : ''}select-all-rows",
                 indeterminate_main: true,
                 indeterminate_main_labels: ["", ""],
                 name: "#{id ? "#{id}-" : ''}select-all-rows",
               })
    end
  end
end

#th_classname(is_first_column: false) ⇒ Object



31
32
33
34
35
36
37
# File 'app/pb_kits/playbook/pb_advanced_table/table_header.rb', line 31

def th_classname(is_first_column: false)
  additional_classes = []
  additional_classes << "pinned-left" if is_first_column && responsive == "scroll" && !selectable_rows
  additional_classes << "header-cells-with-actions" if selectable_rows && show_actions_bar

  generate_classname("table-header-cells", *additional_classes, separator: " ")
end