Class: Avo::Fields::KeyValueField

Inherits:
BaseField
  • Object
show all
Defined in:
lib/avo/fields/key_value_field.rb

Defined Under Namespace

Classes: EditComponent, ShowComponent

Instance Attribute Summary collapse

Attributes inherited from BaseField

#action, #as_avatar, #autocomplete, #block, #computable, #computed, #computed_value, #default, #for_attribute, #for_presentation_only, #format_using, #help, #id, #null_values, #nullable, #panel_name, #readonly, #record, #required, #sortable, #stacked, #summarizable, #user

Attributes included from Concerns::IsDisabled

#disabled

Attributes included from Concerns::HasHTMLAttributes

#html

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

#visible

Attributes included from Concerns::IsResourceItem

#resource, #view

Instance Method Summary collapse

Methods inherited from BaseField

#apply_update_using, #assign_value, #custom?, #custom_name?, #database_id, #default_name, #execute_block, #form_field_label, #has_attribute?, #has_own_panel?, #hidden_in_reflection?, #meta, #name, #options_for_filter, #placeholder, #plural_name, #record_errors, #resolve_attribute, #table_header_label, #translated_name, #translated_plural_name, #translation_key, #type, #updatable, #value, #visible_in_reflection?

Methods included from Concerns::UseViewComponents

#component_for_view, #view_component_name, #view_component_namespace

Methods included from Concerns::IsRequired

#is_required?

Methods included from Concerns::IsDisabled

#is_disabled?

Methods included from Concerns::IsReadonly

#is_readonly?

Methods included from Concerns::HasHTMLAttributes

#get_html

Methods included from Concerns::HasDefault

#computed_default_value

Methods included from Concerns::HasHelpers

#helpers

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

#visible?

Methods included from Concerns::HasItemType

#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

#visible?

Methods included from Concerns::Hydration

#hydrate

Constructor Details

#initialize(id, **args, &block) ⇒ KeyValueField

Returns a new instance of KeyValueField.



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
# File 'lib/avo/fields/key_value_field.rb', line 10

def initialize(id, **args, &block)
  super(id, **args, &block)

  hide_on :index

  @key_label = args[:key_label] || I18n.translate("avo.key_value_field.key")
  @value_label = args[:value_label] || I18n.translate("avo.key_value_field.value")
  @action_text = args[:action_text] || I18n.translate("avo.key_value_field.add_row")
  @delete_text = args[:delete_text] || I18n.translate("avo.key_value_field.delete_row")
  @reorder_text = args[:reorder_text] || I18n.translate("avo.key_value_field.reorder_row")

  if args[:disabled] == true
    @disable_editing_keys = true
    @disable_editing_values = true
    @disable_adding_rows = true
    @disable_deleting_rows = true
  else
    @disable_editing_keys = args[:disable_editing_keys].present? ? args[:disable_editing_keys] : false
    @disable_editing_values = args[:disable_editing_values].present? ? args[:disable_editing_values] : false
    # disabling editing keys also disables adding rows (doesn't take into account the value of disable_adding_rows)
    @disable_adding_rows = if args[:disable_editing_keys].present? && args[:disable_editing_keys] == true
      true
    elsif args[:disable_adding_rows].present?
      args[:disable_adding_rows]
    else
      false
    end
    @disable_deleting_rows = args[:disable_deleting_rows].present? ? args[:disable_deleting_rows] : false
  end
end

Instance Attribute Details

#action_textObject (readonly)

Returns the value of attribute action_text.



8
9
10
# File 'lib/avo/fields/key_value_field.rb', line 8

def action_text
  @action_text
end

#disable_adding_rowsObject (readonly)

Returns the value of attribute disable_adding_rows.



7
8
9
# File 'lib/avo/fields/key_value_field.rb', line 7

def disable_adding_rows
  @disable_adding_rows
end

#disable_editing_keysObject (readonly)

Returns the value of attribute disable_editing_keys.



6
7
8
# File 'lib/avo/fields/key_value_field.rb', line 6

def disable_editing_keys
  @disable_editing_keys
end

#key_labelObject (readonly)

Returns the value of attribute key_label.



8
9
10
# File 'lib/avo/fields/key_value_field.rb', line 8

def key_label
  @key_label
end

#value_labelObject (readonly)

Returns the value of attribute value_label.



8
9
10
# File 'lib/avo/fields/key_value_field.rb', line 8

def value_label
  @value_label
end

Instance Method Details

#fill_field(record, key, value, _params) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/avo/fields/key_value_field.rb', line 65

def fill_field(record, key, value, _params)
  begin
    new_value = JSON.parse(value)
  rescue
    new_value = {}
  end

  record.send(:"#{key}_will_change!")
  record.send(:"#{key}=", new_value)

  record
end

#optionsObject



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/avo/fields/key_value_field.rb', line 51

def options
  {
    key_label: @key_label,
    value_label: @value_label,
    action_text: @action_text,
    delete_text: @delete_text,
    reorder_text: @reorder_text,
    disable_editing_keys: @disable_editing_keys,
    disable_editing_values: @disable_editing_values,
    disable_adding_rows: @disable_adding_rows,
    disable_deleting_rows: @disable_deleting_rows
  }
end

#parsed_valueObject



45
46
47
48
49
# File 'lib/avo/fields/key_value_field.rb', line 45

def parsed_value
  value.to_json
rescue
  {}
end

#to_permitted_paramObject



41
42
43
# File 'lib/avo/fields/key_value_field.rb', line 41

def to_permitted_param
  [:"#{id}", "#{id}": {}]
end