Class: Glib::JsonUi::ViewBuilder::Panels::Form
- Inherits:
-
View
show all
- Defined in:
- app/helpers/glib/json_ui/view_builder/panels.rb
Instance Attribute Summary collapse
#json, #page
Class Method Summary
collapse
-
.field_assert_respond_to(model, prop) ⇒ Object
-
.field_label(model, model_name, prop, args) ⇒ Object
-
.field_name(model, prop, multiple, page) ⇒ Object
-
.field_validation(model, prop) ⇒ Object
-
.field_value(model, prop, collect_ids:) ⇒ Object
-
.hint_label(model_name, prop, args) ⇒ Object
-
.is_array_association?(model, prop) ⇒ Boolean
TODO: Enable this when we know it won’t break existing apps.
-
.is_single_association?(model, prop) ⇒ Boolean
-
.placeholder_label(model_name, prop, args) ⇒ Object
Instance Method Summary
collapse
Methods inherited from View
component_name
#initialize, #props
Instance Attribute Details
#current_dynamic_group ⇒ Object
Returns the value of attribute current_dynamic_group.
5
6
7
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 5
def current_dynamic_group
@current_dynamic_group
end
|
#model_name ⇒ Object
See Panels::Form.field_name
4
5
6
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 4
def model_name
@model_name
end
|
Class Method Details
.field_assert_respond_to(model, prop) ⇒ Object
40
41
42
43
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 40
def self.field_assert_respond_to(model, prop)
raise "Invalid property `#{prop}` on '#{model.class}'" unless model.respond_to?(prop)
end
|
.field_label(model, model_name, prop, args) ⇒ Object
92
93
94
95
96
97
98
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 92
def self.field_label(model, model_name, prop, args)
name = prop.to_s
if name.ends_with?('_id') && is_single_association?(model, name.chomp('_id'))
name = name.chomp('_id') end
I18n.t("dt_models.#{model_name}.#{name}.label", **args.merge(default: nil)) || I18n.t("activerecord.attributes.#{model_name}.#{name}", **args)
end
|
.field_name(model, prop, multiple, page) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 49
def self.field_name(model, prop, multiple, page)
form = page.current_form
include_form_model = true
reversed_model_panels = []
form.nested_associations.reverse.each do |panel|
if panel.is_a?(Fields::DynamicGroup)
include_form_model = false
break end
reversed_model_panels << panel
end
name = include_form_model ? form.model_name : ''
reversed_model_panels.reverse.each do |panel|
index_exists = !panel.assoc_order_index.nil?
field_name = index_exists ? panel.model_name.pluralize : panel.model_name
name += "[#{field_name}_attributes]"
if index_exists
index = panel.assoc_order_index == :auto ? '' : panel.assoc_order_index
name += "[#{index}]"
end
end
suffix = is_array_association?(model, prop) || multiple ? '[]' : ''
"#{name}[#{prop}]#{suffix}"
end
|
.field_validation(model, prop) ⇒ Object
120
121
122
123
124
125
126
127
128
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 120
def self.field_validation(model, prop)
validations = {}
model.class.validators_on(prop).each do |validator|
if validator.kind == :presence
validations[:required] = { message: 'Required' }
end
end
validations
end
|
.field_value(model, prop, collect_ids:) ⇒ Object
80
81
82
83
84
85
86
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 80
def self.field_value(model, prop, collect_ids:)
if is_array_association?(model, prop) && collect_ids
model.send(prop)&.map { |record| record.id }
else
model.send(prop)
end
end
|
.hint_label(model_name, prop, args) ⇒ Object
104
105
106
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 104
def self.hint_label(model_name, prop, args)
I18n.t("dt_models.#{model_name}.#{prop}.hint", **args.merge(default: nil))
end
|
.is_array_association?(model, prop) ⇒ Boolean
TODO: Enable this when we know it won’t break existing apps. Even for pure client-side apps, this is required because form.validate() requires a URL to construct form data. required :url
20
21
22
23
24
25
26
27
28
29
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 20
def self.is_array_association?(model, prop)
model.class.try(:reflect_on_association, prop)&.macro == :has_many || model.class.try(:reflect_on_attachment, prop)&.macro == :has_many_attached
end
|
.is_single_association?(model, prop) ⇒ Boolean
31
32
33
34
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 31
def self.is_single_association?(model, prop)
model.class.try(:reflect_on_association, prop)&.macro == :belongs_to
end
|
.placeholder_label(model_name, prop, args) ⇒ Object
112
113
114
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 112
def self.placeholder_label(model_name, prop, args)
I18n.t("dt_models.#{model_name}.#{prop}.placeholder", **args.merge(default: nil))
end
|
Instance Method Details
#as(model_name) ⇒ Object
138
139
140
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 138
def as(model_name)
@model_name = model_name
end
|
#childViews(block) ⇒ Object
184
185
186
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 184
def childViews(block)
@childViewsBlock = block
end
|
#created ⇒ Object
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 147
def created
if @models
@model = @models.is_a?(Array) ? @models.last : @models
@model_name ||= @model.class.model_name.singular
@url ||= page.context.polymorphic_url(@models)
@method ||= if @model.persisted?
:patch
else
:post
end
end
@method = @method&.to_sym || :get
json.url @url
json.method @method
json.childViews do
if @method != :get
json.child! do
json.view 'fields/hidden'
json.name 'authenticity_token'
json.value page.context.form_authenticity_token
end
end
if page.current_form
raise 'Nested form is not allowed'
end
page.current_form = self
@childViewsBlock.call(page.view_builder)
page.current_form = nil
end
end
|
#field_assert_respond_to(prop) ⇒ Object
36
37
38
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 36
def field_assert_respond_to(prop)
self.class.field_assert_respond_to(@model, prop)
end
|
#field_label(prop, args) ⇒ Object
88
89
90
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 88
def field_label(prop, args)
self.class.field_label(@model, @model_name, prop, args)
end
|
#field_name(prop, multiple) ⇒ Object
45
46
47
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 45
def field_name(prop, multiple)
self.class.field_name(@model, prop, multiple, page)
end
|
#field_validation(prop) ⇒ Object
116
117
118
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 116
def field_validation(prop)
self.class.field_validation(@model, prop)
end
|
#field_value(prop, collect_ids: true) ⇒ Object
76
77
78
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 76
def field_value(prop, collect_ids: true)
self.class.field_value(@model, prop, collect_ids: collect_ids)
end
|
#hint_label(prop, args) ⇒ Object
100
101
102
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 100
def hint_label(prop, args)
self.class.hint_label(@model_name, prop, args)
end
|
#method(method) ⇒ Object
134
135
136
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 134
def method(method)
@method = method
end
|
#model(models) ⇒ Object
142
143
144
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 142
def model(models)
@models = models
end
|
#nested_associations ⇒ Object
12
13
14
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 12
def nested_associations
@nested_associations ||= []
end
|
#placeholder_label(prop, args) ⇒ Object
108
109
110
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 108
def placeholder_label(prop, args)
self.class.placeholder_label(@model_name, prop, args)
end
|
#url(url) ⇒ Object
130
131
132
|
# File 'app/helpers/glib/json_ui/view_builder/panels.rb', line 130
def url(url)
@url = url
end
|