Class: Playbook::PbAdvancedTable::TableRow

Inherits:
KitBase
  • Object
show all
Defined in:
app/pb_kits/playbook/pb_advanced_table/table_row.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, #hover_visible_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

#cell_background_color(column) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 64

def cell_background_color(column)
  return nil unless column[:accessor].present?

  orig_def = find_column_def_by_accessor(column_definitions, column[:accessor])
  if orig_def && orig_def[:column_styling].is_a?(Hash) && orig_def[:column_styling][:cell_background_color].present?
    bg_color = orig_def[:column_styling][:cell_background_color]
    if bg_color.respond_to?(:call)
      bg_color.call(row)
    else
      bg_color
    end
  end
end

#cell_component_info(column, index, bg_color, font_color) ⇒ Object

Uses a regular table/table_cell component if there is no custom background color; if there is a cell_background_color uses a background component with tag “td”



83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 83

def cell_component_info(column, index, bg_color, font_color)
  if has_custom_background_color?(column)
    custom_bg_color = cell_background_color(column)
    component_name = "background"
    component_props = { background_color: custom_bg_color, tag: "td", classname: td_classname(column, index) }
  else
    component_name = "table/table_cell"
    component_props = { html_options: { style: { "background-color": bg_color, color: font_color } }, classname: td_classname(column, index) }
  end

  { name: component_name, props: component_props }
end

#classnameObject



41
42
43
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 41

def classname
  generate_classname("pb_table_tr", "bg-white", subrow_depth_classname, separator: " ")
end

#dataObject



37
38
39
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 37

def data
  Hash(prop(:data)).merge(table_data_attributes)
end

#depth_accessorsObject



96
97
98
99
100
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 96

def depth_accessors
  column_definitions.flat_map do |column|
    column[:cellAccessors] if column.key?(:cellAccessors)
  end.compact
end

#has_custom_background_color?(column) ⇒ Boolean

Returns:



78
79
80
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 78

def has_custom_background_color?(column)
  cell_background_color(column).present?
end

#justify_for(column, index) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 146

def justify_for(column, index)
  if index.zero?
    "start"
  else
    case cell_alignment_for(column)
    when "left"   then "start"
    when "center" then "center"
    when "right"  then "end"
    else
      "end"
    end
  end
end

#render_checkbox_cellObject

Selectable Rows No Subrows - checkboxes in their own first cell



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 103

def render_checkbox_cell
  if selectable_rows
    prefix = table_id ? "#{table_id}-" : ""
    pb_rails("table/table_cell", props: {
               classname: "checkbox-cell",
             }) do
      pb_rails("checkbox", props: {
                 id: "#{prefix}select-row-#{row_id || row.object_id}",
                 indeterminate_parent: "#{table_id ? "#{table_id}-" : ''}select-all-rows",
                 name: "#{prefix}select-row-#{row_id || row.object_id}",
                 data: {
                   row_id: row_id || row.object_id.to_s,
                   flat_advanced_table_select: true,
                 },
               })
    end
  end
end

#render_row_checkboxObject

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



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 123

def render_row_checkbox
  if selectable_rows
    prefix = table_id ? "#{table_id}-" : ""
    indeterminate_parent =
      if depth.zero?
        "#{prefix}select-all-rows"
      else
        "#{prefix}select-row-#{immediate_parent_row_id}"
      end

    pb_rails("checkbox", props: {
               id: "#{prefix}select-row-#{row_id || row.object_id}",
               indeterminate_main: !last_row,
               indeterminate_main_labels: ["", ""],
               indeterminate_parent: indeterminate_parent,
               name: "#{prefix}select-row-#{row_id || row.object_id}",
               data: {
                 row_id: row_id || row.object_id.to_s,
               },
             })
  end
end

#td_classname(column, index) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'app/pb_kits/playbook/pb_advanced_table/table_row.rb', line 45

def td_classname(column, index)
  classes = %w[id-cell]
  classes << "last-cell" if column[:is_last_in_group]
  classes << "pinned-left" if index.zero? && is_pinned_left && responsive == "scroll"

  row_style = row_styling.find { |style| style[:row_id].to_s == row_id.to_s }
  row_padding = row_style&.[](:cell_padding)

  if column[:accessor].present?
    orig_def = find_column_def_by_accessor(column_definitions, column[:accessor])
    column_padding = orig_def[:column_styling][:cell_padding] if orig_def && orig_def[:column_styling].is_a?(Hash) && orig_def[:column_styling][:cell_padding].present?
  end

  classes << "p_#{row_padding}" if row_padding.present?
  classes << "p_#{column_padding}" if column_padding.present?

  classes.join(" ")
end