Class: Fluxbit::Form::ToggleInputComponent

Inherits:
Component
  • Object
show all
Defined in:
app/components/fluxbit/form/toggle_input_component.rb

Instance Method Summary collapse

Constructor Details

#initialize(form: nil, field: nil, color: nil, unchecked_color: :default, sizing: :md, right_sided: false, label: nil, helper_text: nil, helper_popover: nil, helper_popover_placement: "right", **props) ⇒ ToggleInputComponent

Returns a new instance of ToggleInputComponent.



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 77

def initialize(form: nil, field: nil, color: nil, unchecked_color: :default, sizing: :md,
               right_sided: false, label: nil, helper_text: nil, helper_popover: nil,
               helper_popover_placement: "right", **props)
  super
  @form = form
  @field = field
  @object = form&.object
  @right_sided = right_sided
  @sizing = sizing.in?(styles[:toggle][:sizes].keys) ? sizing : :md
  @color = valid_color(color)
  @unchecked_color = unchecked_color.in?(styles[:toggle][:unchecked].keys) ? unchecked_color : :default
  @props = props
  @label = label_value(label, @object, field, id)
  @helper_text = define_helper_text(helper_text, @object, field)
  @helper_popover = define_helper_popover(helper_popover, @object, field)
  @helper_popover_placement = helper_popover_placement
  @label_class = "ml-2" unless right_sided

  # Input
  @props[:type] = "checkbox"
  declare_classes
end

Instance Method Details

#callObject



162
163
164
165
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 162

def call
  add(class: styles[:root][:no_helper_text], to: @root_element) if @helper_text.nil? && !helper?
  @right_sided ? right_sided : left_sided
end

#declare_classesObject



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 107

def declare_classes
  add(class: styles[:root][:input], to: @props)

  # Root
  @root_element = { class: "#{styles[:root][:base]} #{styles[:root][:active][(@props[:disabled] ? :off : :on)]}" }

  # Toggle
  @toggle_element = {
    class:
          [
            styles[:toggle][:base],
            styles[:toggle][:unchecked][@unchecked_color],
            styles[:toggle][:checked][@color],
            styles[:toggle][:sizes][@sizing]
          ].join(" ")
  }
end

#inputObject



125
126
127
128
129
130
131
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 125

def input
  if @form.nil?
     :input, content, @props
  else
    @form.check_box(@field, **@props)
  end
end

#label_containerObject



141
142
143
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 141

def label_container
  (:label, safe_join(toggle_input, label), @root_element)
end

#left_sidedObject



145
146
147
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 145

def left_sided
  safe_join label_container, (helper? ? helper : helper_text)
end

#right_sidedObject



149
150
151
152
153
154
155
156
157
158
159
160
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 149

def right_sided
   :label, class: styles[:right_sided][:top] do
    safe_join(
      (
        :div,
        safe_join(label, (helper? ? helper : helper_text)),
        class: styles[:right_sided][:inside]
      ),
      toggle_input
    )
  end
end

#toggleObject



133
134
135
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 133

def toggle
   :div, "", @toggle_element
end

#toggle_inputObject



137
138
139
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 137

def toggle_input
   :div, safe_join(input, toggle), class: styles[:root][:base2]
end

#valid_color(color) ⇒ Object



100
101
102
103
104
105
# File 'app/components/fluxbit/form/toggle_input_component.rb', line 100

def valid_color(color)
  return color if styles[:toggle][:checked].key?(color)
  return :failure if errors.present?

  :default
end