Module: UI::DatePickerBehavior
- Included in:
- DatePicker, DatePickerComponent
- Defined in:
- app/behaviors/ui/date_picker_behavior.rb
Overview
UI::DatePickerBehavior
Instance Method Summary collapse
-
#date_picker_classes ⇒ Object
Default datepicker classes.
-
#date_picker_data_attributes ⇒ Object
Generate Stimulus controller data attributes.
-
#date_picker_html_attributes ⇒ Object
Build complete HTML attributes hash for datepicker container.
- #format_date(date) ⇒ Object
-
#initial_display_value ⇒ Object
Get initial display value.
- #placeholder_text ⇒ Object
-
#selected_json ⇒ Object
Convert selected dates to JSON array.
-
#selected_value ⇒ Object
Convert selected dates for form value.
Instance Method Details
#date_picker_classes ⇒ Object
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_attributes ⇒ Object
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_attributes ⇒ Object
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_value ⇒ Object
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_text ⇒ Object
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_json ⇒ Object
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_value ⇒ Object
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 |