Module: UI::DatePickerBehavior

Included in:
DatePicker, DatePickerComponent
Defined in:
app/behaviors/ui/date_picker_behavior.rb

Overview

UI::DatePickerBehavior

Instance Method Summary collapse

Instance Method Details

#date_picker_classesObject

Default datepicker classes



49
50
51
52
53
54
# File 'app/behaviors/ui/date_picker_behavior.rb', line 49

def date_picker_classes
  TailwindMerge::Merger.new.merge([
    "flex flex-col gap-3",
    @classes
  ].compact.join(" "))
end

#date_picker_data_attributesObject

Generate Stimulus controller data attributes



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/behaviors/ui/date_picker_behavior.rb', line 24

def date_picker_data_attributes
  attrs = {
    controller: "ui--datepicker",
    ui__datepicker_mode_value: @mode.to_s,
    ui__datepicker_selected_value: selected_json,
    ui__datepicker_locale_value: @locale,
    ui__datepicker_format_value: @format,
    ui__datepicker_placeholder_value: @placeholder,
    ui__datepicker_range_placeholder_value: @range_placeholder,
    ui__datepicker_close_on_select_value: @close_on_select
  }
  attrs.compact
end

#date_picker_html_attributesObject

Build complete HTML attributes hash for datepicker container



39
40
41
42
43
44
45
46
# File 'app/behaviors/ui/date_picker_behavior.rb', line 39

def date_picker_html_attributes
  base_attrs = @attributes&.except(:data) || {}
  user_data = @attributes&.fetch(:data, {}) || {}
  base_attrs.merge(
    class: date_picker_classes,
    data: user_data.merge(date_picker_data_attributes)
  )
end

#format_date(date) ⇒ Object



102
103
104
105
106
# File 'app/behaviors/ui/date_picker_behavior.rb', line 102

def format_date(date)
  return "" unless date

  date.strftime("%B %d, %Y")
end

#initial_display_valueObject

Get initial display value



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'app/behaviors/ui/date_picker_behavior.rb', line 77

def initial_display_value
  return placeholder_text if @selected.nil?

  case @selected
  when Date
    format_date(@selected)
  when Range
    "#{format_date(@selected.begin)} - #{format_date(@selected.end)}"
  when Array
    if @selected.empty?
      placeholder_text
    elsif @selected.length == 1
      format_date(@selected.first)
    else
      "#{@selected.length} dates selected"
    end
  else
    placeholder_text
  end
end

#placeholder_textObject



98
99
100
# File 'app/behaviors/ui/date_picker_behavior.rb', line 98

def placeholder_text
  (@mode.to_s == "range") ? @range_placeholder : @placeholder
end

#selected_jsonObject

Convert selected dates to JSON array



57
58
59
60
61
62
63
64
# File 'app/behaviors/ui/date_picker_behavior.rb', line 57

def selected_json
  case @selected
  when Date then [@selected.to_s].to_json
  when Range then [@selected.begin.to_s, @selected.end.to_s].to_json
  when Array then @selected.map(&:to_s).to_json
  else [].to_json
  end
end

#selected_valueObject

Convert selected dates for form value



67
68
69
70
71
72
73
74
# File 'app/behaviors/ui/date_picker_behavior.rb', line 67

def selected_value
  case @selected
  when Date then @selected.to_s
  when Range then "#{@selected.begin},#{@selected.end}"
  when Array then @selected.map(&:to_s).join(",")
  else ""
  end
end