Module: AdminSuite::UI::FormFieldRenderer

Included in:
BaseHelper
Defined in:
lib/admin_suite/ui/form_field_renderer.rb

Overview

Overrides render_form_field to use a registry of field renderers, while leaving the legacy implementation available via super.

Instance Method Summary collapse

Instance Method Details

#render_form_field(f, field, resource) ⇒ Object



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
45
# File 'lib/admin_suite/ui/form_field_renderer.rb', line 10

def render_form_field(f, field, resource)
  return super unless defined?(AdminSuite::UI::FieldRendererRegistry)

  return if field.if_condition.present? && !field.if_condition.call(resource)
  return if field.unless_condition.present? && field.unless_condition.call(resource)

  capture do
    concat((:div, class: "form-group") do
      concat(f.label(field.name, class: "form-label") do
        concat(field.label)
        concat((:span, " *", class: "text-red-500")) if field.required
      end)

      field_class = "form-input w-full"
      field_class += " border-red-500" if resource.errors[field.name].any?

      field_html =
        AdminSuite::UI::FieldRendererRegistry.render(
          field.type || :text,
          view: self,
          f: f,
          field: field,
          resource: resource,
          field_class: field_class
        )

      # If the registry doesn't know how to render, fall back to legacy behavior.
      return super if field_html.nil?

      concat(field_html)

      concat((:p, field.help, class: "mt-1 text-sm text-slate-500 dark:text-slate-400")) if field.help.present?
      concat((:p, resource.errors[field.name].first, class: "mt-1 text-sm text-red-600 dark:text-red-400")) if resource.errors[field.name].any?
    end)
  end
end