Class: Avo::Fields::BaseField
- Inherits:
-
Object
- Object
- Avo::Fields::BaseField
- Extended by:
- ActiveSupport::DescendantsTracker
- Includes:
- ActionView::Helpers::UrlHelper, Concerns::HasHelpers, Concerns::HasItemType, Concerns::IsResourceItem, Concerns::IsVisible, Concerns::VisibleInDifferentViews, Concerns::HandlesFieldArgs, Concerns::HasDefault, Concerns::HasFieldName, Concerns::HasHTMLAttributes, Concerns::IsDisabled, Concerns::IsReadonly, Concerns::IsRequired, Concerns::UseViewComponents
- Defined in:
- lib/avo/fields/base_field.rb
Direct Known Subclasses
AreaField, BadgeField, BelongsToField, BooleanField, BooleanGroupField, CodeField, CountryField, EasyMdeField, ExternalImageField, FileField, FilesField, FrameBaseField, GravatarField, HeadingField, IdField, KeyValueField, LocationField, PreviewField, ProgressBarField, RadioField, SelectField, StatusField, TagsField, TextField, TiptapField, TrixField
Instance Attribute Summary collapse
-
#action ⇒ Object
Returns the value of attribute action.
-
#autocomplete ⇒ Object
readonly
Returns the value of attribute autocomplete.
-
#block ⇒ Object
readonly
Returns the value of attribute block.
-
#computable ⇒ Object
readonly
Private options.
-
#computed ⇒ Object
readonly
if block is present.
-
#computed_value ⇒ Object
readonly
the value after computation.
-
#copyable ⇒ Object
readonly
if allowed to be copyable.
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#for_attribute ⇒ Object
readonly
Returns the value of attribute for_attribute.
-
#for_presentation_only ⇒ Object
readonly
Returns the value of attribute for_presentation_only.
-
#format_display_using ⇒ Object
readonly
Returns the value of attribute format_display_using.
-
#format_edit_using ⇒ Object
readonly
Returns the value of attribute format_edit_using.
-
#format_form_using ⇒ Object
readonly
Returns the value of attribute format_form_using.
-
#format_index_using ⇒ Object
readonly
Returns the value of attribute format_index_using.
-
#format_new_using ⇒ Object
readonly
Returns the value of attribute format_new_using.
-
#format_show_using ⇒ Object
readonly
Returns the value of attribute format_show_using.
-
#format_using ⇒ Object
readonly
Returns the value of attribute format_using.
-
#help ⇒ Object
readonly
Returns the value of attribute help.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#null_values ⇒ Object
readonly
Returns the value of attribute null_values.
-
#nullable ⇒ Object
readonly
Returns the value of attribute nullable.
-
#panel_name ⇒ Object
Returns the value of attribute panel_name.
-
#readonly ⇒ Object
readonly
Returns the value of attribute readonly.
-
#record ⇒ Object
Hydrated payload.
-
#required ⇒ Object
readonly
Returns the value of attribute required.
-
#sortable ⇒ Object
readonly
Returns the value of attribute sortable.
-
#stacked ⇒ Object
readonly
Returns the value of attribute stacked.
-
#summarizable ⇒ Object
readonly
Returns the value of attribute summarizable.
-
#user ⇒ Object
Returns the value of attribute user.
Attributes included from Concerns::IsDisabled
Attributes included from Concerns::HasHTMLAttributes
Attributes included from Concerns::VisibleInDifferentViews
#show_on_edit, #show_on_index, #show_on_new, #show_on_preview, #show_on_show
Attributes included from Concerns::IsVisible
Attributes included from Concerns::IsResourceItem
Instance Method Summary collapse
- #apply_update_using(record, key, value, resource) ⇒ Object
-
#assign_value(record:, value:) ⇒ Object
Used by Avo to fill the record with the default value on :new and :edit views.
- #attribute_id ⇒ Object
- #custom? ⇒ Boolean
- #custom_name? ⇒ Boolean
-
#database_id ⇒ Object
Try to see if the field has a different database ID than it’s name.
- #default_name ⇒ Object
- #execute_context(target, **extra_args) ⇒ Object
-
#fill_field(record, key, value, params) ⇒ Object
Fills the record with the received value on create and update actions.
- #form_field_label ⇒ Object
- #has_attribute?(record, attribute) ⇒ Boolean
- #has_own_panel? ⇒ Boolean
- #hidden_in_reflection? ⇒ Boolean
-
#initialize(id, **args, &block) ⇒ BaseField
constructor
A new instance of BaseField.
- #meta ⇒ Object
-
#name ⇒ Object
Getting the name of the resource (user/users, post/posts) We’ll first check to see if the user passed a name Secondly we’ll try to find a translation key We’ll fallback to humanizing the id.
- #options_for_filter ⇒ Object
- #parent ⇒ Object
- #placeholder ⇒ Object
- #plural_name ⇒ Object
- #record_errors ⇒ Object
- #resolve_attribute(value) ⇒ Object
- #table_header_label ⇒ Object
- #to_permitted_param ⇒ Object
- #translated_name(default:) ⇒ Object
- #translated_plural_name(default:) ⇒ Object
- #translation_key ⇒ Object
- #type ⇒ Object
- #updatable ⇒ Object
- #value(property = nil) ⇒ Object
- #visible_in_reflection? ⇒ Boolean
Methods included from Concerns::UseViewComponents
#component_for_view, #view_component_name, #view_component_namespace
Methods included from Concerns::IsRequired
Methods included from Concerns::IsDisabled
Methods included from Concerns::IsReadonly
Methods included from Concerns::HasHTMLAttributes
Methods included from Concerns::HasDefault
Methods included from Concerns::HasHelpers
Methods included from Concerns::VisibleInDifferentViews
#except_on, #hide_on, #initialize_views, #only_on, #post_initialize, #show_on, #show_on_create, #show_on_update, #visible_in_view?
Methods included from Concerns::IsVisible
Methods included from Concerns::HasItemType
#is_collaboration?, #is_field?, #is_heading?, #is_main_panel?, #is_panel?, #is_row?, #is_sidebar?, #is_tab?, #is_tab_group?, #is_tool?
Methods included from Concerns::IsResourceItem
Methods included from Concerns::Hydration
Constructor Details
#initialize(id, **args, &block) ⇒ BaseField
Returns a new instance of BaseField.
66 67 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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/avo/fields/base_field.rb', line 66 def initialize(id, **args, &block) @id = id @name = args[:name] @translation_key = args[:translation_key] @block = block @required = args.dig(:required) # Value if :required present on args, nil otherwise @readonly = args[:readonly] || false @disabled = args[:disabled] || false @sortable = args[:sortable] || false @summarizable = args[:summarizable] || false @nullable = args[:nullable] || false @null_values = args[:null_values] || [nil, ""] @format_using = args[:format_using] @format_display_using = args[:format_display_using] || args[:decorate] unless Rails.env.production? if args[:decorate].present? puts "[Avo DEPRECATION WARNING]: The `decorate` field configuration option is nolonger supported and will be removed in future versions. Please discontinue its use and solely utilize `format_display_using` instead." end end @format_index_using = args[:format_index_using] @format_show_using = args[:format_show_using] @format_edit_using = args[:format_edit_using] @format_new_using = args[:format_new_using] @format_form_using = args[:format_form_using] @update_using = args[:update_using] @decorate = args[:decorate] @placeholder = args[:placeholder] @autocomplete = args[:autocomplete] @help = args[:help] @default = args[:default] @visible = args[:visible] @html = args[:html] @view = Avo::ViewInquirer.new(args[:view]) @value = args[:value] @stacked = args[:stacked] @for_presentation_only = args[:for_presentation_only] || false @resource = args[:resource] @action = args[:action] @components = args[:components] || {} @for_attribute = args[:for_attribute] @meta = args[:meta] @copyable = args[:copyable] || false @args = args @computable = true @computed = block.present? @computed_value = nil post_initialize if respond_to?(:post_initialize) end |
Instance Attribute Details
#action ⇒ Object
Returns the value of attribute action.
60 61 62 |
# File 'lib/avo/fields/base_field.rb', line 60 def action @action end |
#autocomplete ⇒ Object (readonly)
Returns the value of attribute autocomplete.
45 46 47 |
# File 'lib/avo/fields/base_field.rb', line 45 def autocomplete @autocomplete end |
#block ⇒ Object (readonly)
Returns the value of attribute block.
31 32 33 |
# File 'lib/avo/fields/base_field.rb', line 31 def block @block end |
#computable ⇒ Object (readonly)
Private options
53 54 55 |
# File 'lib/avo/fields/base_field.rb', line 53 def computable @computable end |
#computed ⇒ Object (readonly)
if block is present
54 55 56 |
# File 'lib/avo/fields/base_field.rb', line 54 def computed @computed end |
#computed_value ⇒ Object (readonly)
the value after computation
55 56 57 |
# File 'lib/avo/fields/base_field.rb', line 55 def computed_value @computed_value end |
#copyable ⇒ Object (readonly)
if allowed to be copyable
56 57 58 |
# File 'lib/avo/fields/base_field.rb', line 56 def copyable @copyable end |
#default ⇒ Object (readonly)
Returns the value of attribute default.
47 48 49 |
# File 'lib/avo/fields/base_field.rb', line 47 def default @default end |
#for_attribute ⇒ Object (readonly)
Returns the value of attribute for_attribute.
50 51 52 |
# File 'lib/avo/fields/base_field.rb', line 50 def for_attribute @for_attribute end |
#for_presentation_only ⇒ Object (readonly)
Returns the value of attribute for_presentation_only.
49 50 51 |
# File 'lib/avo/fields/base_field.rb', line 49 def for_presentation_only @for_presentation_only end |
#format_display_using ⇒ Object (readonly)
Returns the value of attribute format_display_using.
39 40 41 |
# File 'lib/avo/fields/base_field.rb', line 39 def format_display_using @format_display_using end |
#format_edit_using ⇒ Object (readonly)
Returns the value of attribute format_edit_using.
42 43 44 |
# File 'lib/avo/fields/base_field.rb', line 42 def format_edit_using @format_edit_using end |
#format_form_using ⇒ Object (readonly)
Returns the value of attribute format_form_using.
44 45 46 |
# File 'lib/avo/fields/base_field.rb', line 44 def format_form_using @format_form_using end |
#format_index_using ⇒ Object (readonly)
Returns the value of attribute format_index_using.
40 41 42 |
# File 'lib/avo/fields/base_field.rb', line 40 def format_index_using @format_index_using end |
#format_new_using ⇒ Object (readonly)
Returns the value of attribute format_new_using.
43 44 45 |
# File 'lib/avo/fields/base_field.rb', line 43 def format_new_using @format_new_using end |
#format_show_using ⇒ Object (readonly)
Returns the value of attribute format_show_using.
41 42 43 |
# File 'lib/avo/fields/base_field.rb', line 41 def format_show_using @format_show_using end |
#format_using ⇒ Object (readonly)
Returns the value of attribute format_using.
38 39 40 |
# File 'lib/avo/fields/base_field.rb', line 38 def format_using @format_using end |
#help ⇒ Object (readonly)
Returns the value of attribute help.
46 47 48 |
# File 'lib/avo/fields/base_field.rb', line 46 def help @help end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
30 31 32 |
# File 'lib/avo/fields/base_field.rb', line 30 def id @id end |
#null_values ⇒ Object (readonly)
Returns the value of attribute null_values.
37 38 39 |
# File 'lib/avo/fields/base_field.rb', line 37 def null_values @null_values end |
#nullable ⇒ Object (readonly)
Returns the value of attribute nullable.
36 37 38 |
# File 'lib/avo/fields/base_field.rb', line 36 def nullable @nullable end |
#panel_name ⇒ Object
Returns the value of attribute panel_name.
62 63 64 |
# File 'lib/avo/fields/base_field.rb', line 62 def panel_name @panel_name end |
#readonly ⇒ Object (readonly)
Returns the value of attribute readonly.
33 34 35 |
# File 'lib/avo/fields/base_field.rb', line 33 def readonly @readonly end |
#record ⇒ Object
Hydrated payload
59 60 61 |
# File 'lib/avo/fields/base_field.rb', line 59 def record @record end |
#required ⇒ Object (readonly)
Returns the value of attribute required.
32 33 34 |
# File 'lib/avo/fields/base_field.rb', line 32 def required @required end |
#sortable ⇒ Object (readonly)
Returns the value of attribute sortable.
34 35 36 |
# File 'lib/avo/fields/base_field.rb', line 34 def sortable @sortable end |
#stacked ⇒ Object (readonly)
Returns the value of attribute stacked.
48 49 50 |
# File 'lib/avo/fields/base_field.rb', line 48 def stacked @stacked end |
#summarizable ⇒ Object (readonly)
Returns the value of attribute summarizable.
35 36 37 |
# File 'lib/avo/fields/base_field.rb', line 35 def summarizable @summarizable end |
#user ⇒ Object
Returns the value of attribute user.
61 62 63 |
# File 'lib/avo/fields/base_field.rb', line 61 def user @user end |
Instance Method Details
#apply_update_using(record, key, value, resource) ⇒ Object
224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/avo/fields/base_field.rb', line 224 def apply_update_using(record, key, value, resource) return value if @update_using.nil? Avo::ExecutionContext.new( target: @update_using, record:, key:, value:, resource:, field: self, include: self.class.included_modules ).handle end |
#assign_value(record:, value:) ⇒ Object
Used by Avo to fill the record with the default value on :new and :edit views
292 293 294 295 296 297 298 |
# File 'lib/avo/fields/base_field.rb', line 292 def assign_value(record:, value:) id = (type == "belongs_to") ? foreign_key : database_id if record.send(id).nil? record.send(:"#{id}=", value) end end |
#attribute_id ⇒ Object
172 |
# File 'lib/avo/fields/base_field.rb', line 172 def attribute_id = (@attribure_id ||= @for_attribute || @id) |
#custom? ⇒ Boolean
269 270 271 272 273 |
# File 'lib/avo/fields/base_field.rb', line 269 def custom? !method(:initialize).source_location.first.include?("lib/avo/field") rescue true end |
#custom_name? ⇒ Boolean
160 161 162 |
# File 'lib/avo/fields/base_field.rb', line 160 def custom_name? !@name.nil? end |
#database_id ⇒ Object
Try to see if the field has a different database ID than it’s name
243 244 245 246 247 |
# File 'lib/avo/fields/base_field.rb', line 243 def database_id foreign_key rescue id end |
#default_name ⇒ Object
164 165 166 |
# File 'lib/avo/fields/base_field.rb', line 164 def default_name @id.to_s.humanize(keep_id_suffix: true) end |
#execute_context(target, **extra_args) ⇒ Object
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/avo/fields/base_field.rb', line 202 def execute_context(target, **extra_args) Avo::ExecutionContext.new( target:, record: @record, resource: @resource, view: @view, field: self, include: self.class.included_modules, **extra_args ).handle end |
#fill_field(record, key, value, params) ⇒ Object
Fills the record with the received value on create and update actions.
215 216 217 218 219 220 221 222 |
# File 'lib/avo/fields/base_field.rb', line 215 def fill_field(record, key, value, params) key = @for_attribute.to_s if @for_attribute.present? return record unless has_attribute?(record, key) record.public_send(:"#{key}=", apply_update_using(record, key, value, resource)) record end |
#form_field_label ⇒ Object
300 301 302 |
# File 'lib/avo/fields/base_field.rb', line 300 def form_field_label id end |
#has_attribute?(record, attribute) ⇒ Boolean
238 239 240 |
# File 'lib/avo/fields/base_field.rb', line 238 def has_attribute?(record, attribute) record.methods.include? attribute.to_sym end |
#has_own_panel? ⇒ Boolean
249 250 251 |
# File 'lib/avo/fields/base_field.rb', line 249 def has_own_panel? false end |
#hidden_in_reflection? ⇒ Boolean
279 280 281 |
# File 'lib/avo/fields/base_field.rb', line 279 def hidden_in_reflection? !visible_in_reflection? end |
#meta ⇒ Object
304 305 306 |
# File 'lib/avo/fields/base_field.rb', line 304 def Avo::ExecutionContext.new(target: @meta, record: record, resource: @resource, view: @view).handle end |
#name ⇒ Object
Getting the name of the resource (user/users, post/posts) We’ll first check to see if the user passed a name Secondly we’ll try to find a translation key We’ll fallback to humanizing the id
136 137 138 139 140 141 142 143 144 |
# File 'lib/avo/fields/base_field.rb', line 136 def name if custom_name? Avo::ExecutionContext.new(target: @name).handle elsif translation_key translated_name default: default_name else default_name end end |
#options_for_filter ⇒ Object
283 284 285 |
# File 'lib/avo/fields/base_field.rb', line 283 def end |
#parent ⇒ Object
308 309 310 |
# File 'lib/avo/fields/base_field.rb', line 308 def parent @parent ||= fetch_parent end |
#placeholder ⇒ Object
168 169 170 |
# File 'lib/avo/fields/base_field.rb', line 168 def placeholder Avo::ExecutionContext.new(target: @placeholder || name, record: record, resource: @resource, view: @view).handle end |
#plural_name ⇒ Object
146 147 148 149 150 151 152 153 154 |
# File 'lib/avo/fields/base_field.rb', line 146 def plural_name default = name.pluralize if translation_key translated_plural_name default: default else default end end |
#record_errors ⇒ Object
261 262 263 |
# File 'lib/avo/fields/base_field.rb', line 261 def record_errors record.present? ? record.errors : {} end |
#resolve_attribute(value) ⇒ Object
253 254 255 |
# File 'lib/avo/fields/base_field.rb', line 253 def resolve_attribute(value) value end |
#table_header_label ⇒ Object
156 157 158 |
# File 'lib/avo/fields/base_field.rb', line 156 def table_header_label @table_header_label ||= name end |
#to_permitted_param ⇒ Object
257 258 259 |
# File 'lib/avo/fields/base_field.rb', line 257 def to_permitted_param id.to_sym end |
#translated_name(default:) ⇒ Object
124 125 126 |
# File 'lib/avo/fields/base_field.rb', line 124 def translated_name(default:) t(translation_key, count: 1, default: default).humanize end |
#translated_plural_name(default:) ⇒ Object
128 129 130 |
# File 'lib/avo/fields/base_field.rb', line 128 def translated_plural_name(default:) t(translation_key, count: 2, default: default).humanize end |
#translation_key ⇒ Object
120 121 122 |
# File 'lib/avo/fields/base_field.rb', line 120 def translation_key @translation_key || "avo.field_translations.#{@id}" end |
#type ⇒ Object
265 266 267 |
# File 'lib/avo/fields/base_field.rb', line 265 def type @type ||= self.class.name.demodulize.to_s.underscore.gsub("_field", "") end |
#updatable ⇒ Object
287 288 289 |
# File 'lib/avo/fields/base_field.rb', line 287 def updatable !is_disabled? && visible? end |
#value(property = nil) ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/avo/fields/base_field.rb', line 174 def value(property = nil) return @value if @value.present? property ||= attribute_id # Get record value final_value = @record.send(property) if is_model?(@record) && @record.respond_to?(property) # On new views and actions modals we need to prefill the fields with the default value if value is nil if final_value.nil? && should_fill_with_default_value? && @default.present? final_value = computed_default_value end # Run computable callback block if present if computable && @block.present? final_value = execute_context(@block) end # Format value based on available formatter final_value = format_value(final_value) if @decorate.present? && @view.display? final_value = execute_context(@decorate, value: final_value) end final_value end |
#visible_in_reflection? ⇒ Boolean
275 276 277 |
# File 'lib/avo/fields/base_field.rb', line 275 def visible_in_reflection? true end |