Module: MegaBar::DatesHelper

Defined in:
app/helpers/mega_bar/dates_helper.rb

Instance Method Summary collapse

Instance Method Details

#date_picker_field(form_builder, field_name, date_options = {}) ⇒ Object

New helper for Rails form builders



60
61
62
63
64
65
66
# File 'app/helpers/mega_bar/dates_helper.rb', line 60

def date_picker_field(form_builder, field_name, date_options = {})
  obj = form_builder.object
  date_record = date_options.is_a?(MegaBar::Date) ? date_options : nil
  options = date_record ? date_record.attributes : date_options
  
  format_date_field(obj, field_name, options, form_builder)
end

#format_date_field(obj, field_name, date_options, form_builder = nil) ⇒ Object



3
4
5
6
7
8
9
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
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/helpers/mega_bar/dates_helper.rb', line 3

def format_date_field(obj, field_name, date_options, form_builder = nil)
  # Handle different ways date_options might be passed
  date_options = date_options.is_a?(Hash) ? date_options : date_options.try(:attributes) || {}
  
  value = obj.respond_to?(:read_attribute) ? obj.read_attribute(field_name) : obj.send(field_name) rescue nil
  
  # Format for datepicker display
  formatted_value = ""
  if value.present?
    begin
      date_value = value.is_a?(String) ? DateTime.parse(value) : value
      include_time = date_options[:include_time] || date_options['include_time']
      formatted_value = include_time ? date_value.strftime('%Y-%m-%dT%H:%M') : date_value.strftime('%Y-%m-%d')
    rescue => e
      formatted_value = value.to_s
    end
  end

  format = date_options[:format] || date_options['format']
  
  if format == 'datepicker' || format == 'date'
    # Generate proper form input
    input_name = form_builder ? "#{form_builder.object_name}[#{field_name}]" : "#{obj.class.name.underscore}[#{field_name}]"
    input_id = form_builder ? "#{form_builder.object_name}_#{field_name}" : "#{obj.class.name.underscore}_#{field_name}"
    
    include_time = date_options[:include_time] || date_options['include_time']
    input_type = include_time ? 'datetime-local' : 'date'
    
    (:input, '',
      type: input_type,
      name: input_name,
      id: input_id,
      class: 'datepicker-input form-control',
      value: formatted_value,
      data: {
        include_time: include_time,
        min_date: date_options[:picker_min_date] || date_options['picker_min_date'],
        max_date: date_options[:picker_max_date] || date_options['picker_max_date'],
        default_view: date_options[:picker_default_view] || date_options['picker_default_view'] || 'month',
        format: format
      }
    )
  else
    # Handle other display formats (non-editable)
    return '' if value.nil?
    
    begin
      date_value = value.is_a?(String) ? DateTime.parse(value) : value
      base_format = format_date_value(date_value, date_options)
      apply_date_transformation(date_value, base_format, date_options)
    rescue => e
      value.to_s
    end
  end
end