Newer
Older
dmpopidor / app / helpers / dynamic_form_helper.rb
module DynamicFormHelper

  def create_text_field(form, value, name, label, html_class: nil, is_multiple: false, readonly: false, index: 0)
    render partial: 'shared/dynamic_form/fields/text_field', 
    locals: {
      f: form, 
      multiple: is_multiple,
      index: index,
      field_value: value, 
      field_name: name, 
      field_label: label,
      field_class: html_class,
      input_type: nil,
      readonly: readonly
    }
  end



  def create_url_field(form, value, name, label, html_class: nil, is_multiple: false, readonly: false, index: 0)
    render partial: 'shared/dynamic_form/fields/text_field', 
    locals: {
      f: form, 
      multiple: is_multiple,
      index: index,
      field_value: value, 
      field_name: name, 
      field_label: label,
      field_class: html_class,
      input_type: 'url',
      readonly: readonly
    }
  end



  def create_email_field(form, value, name, label, html_class: nil, is_multiple: false, readonly: false, index: 0)
    render partial: 'shared/dynamic_form/fields/text_field', 
    locals: {
      f: form, 
      multiple: is_multiple,
      index: index,
      field_value: value, 
      field_name: name, 
      field_label: label,
      field_class: html_class,
      input_type: 'email',
      readonly: readonly
    }
  end



  def create_date_field(form, value, name, label, html_class: nil, is_multiple: false, readonly: false, index: 0)
    render partial: 'shared/dynamic_form/fields/text_field', 
    locals: {
      f: form, 
      multiple: is_multiple,
      index: index,
      field_value: value, 
      field_name: name, 
      field_label: label,
      field_class: html_class,
      input_type: 'date',
      readonly: readonly
    }
  end



  def create_number_field(form, value, name, label, html_class: nil, is_multiple: false, readonly: false, index: 0)
    render partial: 'shared/dynamic_form/fields/number_field', 
    locals: {
      f: form, 
      multiple: is_multiple,
      index: index,
      field_value: value, 
      field_name: name, 
      field_label: label,
      field_class: html_class,
      readonly: readonly
    }
  end



  def create_checkbox_field(form, value, name, label, html_class: nil, readonly: false)
    render partial: 'shared/dynamic_form/fields/checkbox_field', 
    locals: {
      f: form, 
      field_value: value, 
      field_name: name, 
      field_label: label, 
      readonly: readonly
    }
  end

  def create_select_field(form, value, name, label, select_values, html_class: nil, readonly: false)
    render partial: 'shared/dynamic_form/fields/select_field', 
    locals: {
      f: form, 
      selected_value: value, 
      field_name: name,
      field_label: label,
      select_values: select_values,
      field_class: html_class,
      readonly: readonly
    }
  end 


  # Formats the data extract from the structured answer form to valid JSON data
  # This is useful because Rails converts all form data to strings and JSON needs the actual types
  def data_reformater(schema, data)
    schema["properties"].each do |key, prop|
      case prop["type"]
      when "integer"
        data[key] = data[key].to_i
      when "boolean"
        data[key] = data[key] == "1"
      when "array"
        data[key] = data[key].kind_of?(Array) ? data[key] : [data[key]]
      when "object"
        if prop['schema_id'].present?
          sub_schema = MadmpSchema.find(prop['schema_id'])
          data[key] = data_reformater(sub_schema.schema, data[key])
        end 
        # if value["dictionnary"]
        #   data[key] = JSON.parse(DictionnaryValue.where(id: data[key]).select(:id, :uri, :label).take.to_json)
        # end
      end
    end
    data
  end
  
end