Class: EasyAdmin::Layouts::Builders::FormLayoutBuilder

Inherits:
BaseLayoutBuilder show all
Defined in:
lib/easy_admin/layouts/builders/form_layout_builder.rb

Overview

Builder specifically for form layouts

Instance Attribute Summary

Attributes inherited from BaseLayoutBuilder

#current_container_stack, #resource_class, #root_node

Instance Method Summary collapse

Methods inherited from BaseLayoutBuilder

#add_node, #belongs_to_field, #build, #content, #current_container, #divider, #fields, #file_field, #grid, #id_field, #json_field, #method_missing, #render, #respond_to_missing?, #section, #spacer, #tabs, #with_container

Constructor Details

#initialize(resource_class: nil) ⇒ FormLayoutBuilder

Returns a new instance of FormLayoutBuilder.



6
7
8
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 6

def initialize(resource_class: nil)
  super(:form, resource_class: resource_class)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class EasyAdmin::Layouts::Builders::BaseLayoutBuilder

Instance Method Details

#boolean_field(name, **options) ⇒ Object



119
120
121
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 119

def boolean_field(name, **options)
  field(name, field_type: :boolean, **options)
end

#conditional_fields(condition:, **attributes, &block) ⇒ Object

Add conditional fields



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 54

def conditional_fields(condition:, **attributes, &block)
  conditional_node = Nodes::ConditionalFields.new(
    condition: condition,
    **attributes
  )
  
  if block_given?
    with_container(conditional_node, &block)
  else
    add_node(conditional_node)
  end
  
  conditional_node
end

#date_field(name, **options) ⇒ Object



131
132
133
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 131

def date_field(name, **options)
  field(name, field_type: :date, **options)
end

#datetime_field(name, **options) ⇒ Object



135
136
137
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 135

def datetime_field(name, **options)
  field(name, field_type: :datetime, **options)
end

#email_field(name, **options) ⇒ Object



111
112
113
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 111

def email_field(name, **options)
  field(name, field_type: :email, **options)
end

#errors_summary(**attributes) ⇒ Object

Add form errors summary



92
93
94
95
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 92

def errors_summary(**attributes)
  errors_node = Nodes::ErrorsSummary.new(attributes)
  add_node(errors_node)
end

#field(name, **options) ⇒ Object

Override field method to include form-specific options



98
99
100
101
102
103
104
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 98

def field(name, **options)
  # Set default form field options
  options[:required] = true if options[:required].nil? && required_field?(name)
  options[:readonly] = true if readonly_field?(name)
  
  super(name, **options)
end

#fieldset(legend = nil, **attributes, &block) ⇒ Object

Add fieldset for grouping form fields



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 13

def fieldset(legend = nil, **attributes, &block)
  fieldset_node = Nodes::Fieldset.new(legend, attributes)
  
  if block_given?
    with_container(fieldset_node, &block)
  else
    add_node(fieldset_node)
  end
  
  fieldset_node
end

#form_actions(**attributes, &block) ⇒ Object

Add form actions (submit, cancel, etc.)



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 26

def form_actions(**attributes, &block)
  actions_node = Nodes::FormActions.new(attributes)
  add_node(actions_node)
  
  if block_given?
    @current_container_stack.push(actions_node)
    form_actions_builder = FormActionsBuilder.new(self, actions_node)
    form_actions_builder.instance_exec(&block)
    @current_container_stack.pop
  end
  
  actions_node
end

#has_many_field(name, **options) ⇒ Object



127
128
129
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 127

def has_many_field(name, **options)
  field(name, field_type: :has_many, **options)
end

#help_text(text, **attributes) ⇒ Object

Add help text



86
87
88
89
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 86

def help_text(text, **attributes)
  help_node = Nodes::HelpText.new(text, attributes)
  add_node(help_node)
end

#inline_fields(**attributes, &block) ⇒ Object

Add inline fields (multiple fields in one row)



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 41

def inline_fields(**attributes, &block)
  inline_node = Nodes::InlineFields.new(attributes)
  
  if block_given?
    with_container(inline_node, &block)
  else
    add_node(inline_node)
  end
  
  inline_node
end

#nested_fields(association, **attributes, &block) ⇒ Object

Add nested fields for associations



70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 70

def nested_fields(association, **attributes, &block)
  nested_node = Nodes::NestedFields.new(
    association,
    attributes
  )
  
  if block_given?
    with_container(nested_node, &block)
  else
    add_node(nested_node)
  end
  
  nested_node
end

#number_field(name, **options) ⇒ Object



139
140
141
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 139

def number_field(name, **options)
  field(name, field_type: :number, **options)
end

#password_field(name, **options) ⇒ Object



143
144
145
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 143

def password_field(name, **options)
  field(name, field_type: :password, **options)
end

#select_field(name, **options) ⇒ Object



123
124
125
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 123

def select_field(name, **options)
  field(name, field_type: :select, **options)
end

#text_field(name, **options) ⇒ Object

Convenience methods for specific field types



107
108
109
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 107

def text_field(name, **options)
  field(name, field_type: :text, **options)
end

#textarea_field(name, **options) ⇒ Object



115
116
117
# File 'lib/easy_admin/layouts/builders/form_layout_builder.rb', line 115

def textarea_field(name, **options)
  field(name, field_type: :textarea, **options)
end