Class: ShadcnPhlexcomponents::FormRadioGroup

Inherits:
Base
  • Object
show all
Includes:
FormHelpers
Defined in:
lib/shadcn_phlexcomponents/components/form/form_radio_group.rb

Constant Summary

Constants inherited from Base

Base::SANITIZER_ALLOWED_ATTRIBUTES, Base::SANITIZER_ALLOWED_TAGS, Base::TAILWIND_MERGER

Instance Method Summary collapse

Methods included from FormHelpers

#default_checked, #default_error, #default_value, #describedby, #hint, #hint_attributes, #label, #label_and_hint_container_attributes, #render_error, #render_hint, #render_label

Methods inherited from Base

#before_template, #convert_collection_hash_to_struct, #default_attributes, #find_as_child, #icon, #item_disabled?, #merge_default_attributes, #merged_as_child_attributes, #nokogiri_attributes_to_hash, #overlay, #sanitize_as_child

Constructor Details

#initialize(method = nil, model: false, object_name: nil, collection: [], value_method: nil, text_method: nil, value: nil, name: nil, id: nil, label: nil, error: nil, hint: nil, disabled_items: nil, **attributes) ⇒ FormRadioGroup

Returns a new instance of FormRadioGroup.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/shadcn_phlexcomponents/components/form/form_radio_group.rb', line 7

def initialize(
  method = nil,
  model: false,
  object_name: nil,
  collection: [],
  value_method: nil,
  text_method: nil,
  value: nil,
  name: nil,
  id: nil,
  label: nil,
  error: nil,
  hint: nil,
  disabled_items: nil,
  **attributes
)
  @method = method
  @model = model
  @object_name = object_name

  @collection = if collection.first&.is_a?(Hash)
    convert_collection_hash_to_struct(collection, value_method: value_method, text_method: text_method)
  else
    collection
  end

  @value_method = value_method
  @text_method = text_method
  @value = default_value(value, method)
  @name = name
  @id = id
  @label = label
  @error = default_error(error, method)
  @hint = hint
  @disabled_items = disabled_items
  @aria_id = "form-field-#{SecureRandom.hex(5)}"
  super(**attributes)
end

Instance Method Details

#aria_attributes ⇒ Object



46
47
48
49
50
# File 'lib/shadcn_phlexcomponents/components/form/form_radio_group.rb', line 46

def aria_attributes
  attrs = super
  attrs[:labelledby] = "#{@aria_id}-label"
  attrs
end

#label_attributes(use_label_styles: false, **attributes) ⇒ Object



52
53
54
55
56
# File 'lib/shadcn_phlexcomponents/components/form/form_radio_group.rb', line 52

def label_attributes(use_label_styles: false, **attributes)
  attrs = super(use_label_styles: use_label_styles, **attributes)
  attrs[:id] = "#{@aria_id}-label"
  attrs
end

#radio(**attributes) ⇒ Object



58
59
60
61
# File 'lib/shadcn_phlexcomponents/components/form/form_radio_group.rb', line 58

def radio(**attributes)
  @radio_attributes = attributes
  nil
end

#radio_label(**attributes) ⇒ Object



63
64
65
66
# File 'lib/shadcn_phlexcomponents/components/form/form_radio_group.rb', line 63

def radio_label(**attributes)
  @radio_label_attributes = attributes
  nil
end

#view_template ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/shadcn_phlexcomponents/components/form/form_radio_group.rb', line 68

def view_template(&)
  vanish(&)

  @id ||= field_id(@object_name, @method)
  @name ||= field_name(@object_name, @method)

  FormField(data: label_and_hint_container_attributes) do
    render_label(&)

    RadioGroup(
      name: @name,
      id: @id,
      value: @value,
      aria: aria_attributes,
      **@attributes,
    ) do |c|
      c.items(
        @collection,
        value_method: @value_method,
        text_method: @text_method,
        disabled_items: @disabled_items,
        id_prefix: @id,
      ) do
        if @radio_attributes
          c.radio(**@radio_attributes)
        end

        if @radio_label_attributes
          c.label(**@radio_label_attributes)
        end
      end
    end

    render_hint(&)
    render_error
  end
end