Module: HakumiComponents::DatePicker::SharedRendering
- Extended by:
- T::Helpers, T::Sig
- Included in:
- Component, RangePicker
- Defined in:
- app/components/hakumi_components/date_picker/shared_rendering.rb
Constant Summary collapse
- DateTimeLike =
T.type_alias { T.any(Date, Time, DateTime) }
- PlaceholderValue =
T.type_alias { T.nilable(T.any(String, T::Array[String])) }
- CalendarOptionValue =
T.type_alias do T.nilable(T.any( Date, Types::FormFieldValue, Symbol, T::Boolean, Proc, Types::DataAttributes )) end
- PICKERS =
T.let([ :date, :week, :month, :quarter, :year ].freeze, T::Array[Symbol])
- DEFAULT_DATE_FORMAT =
T.let("YYYY-MM-DD", String)
- DEFAULT_DATETIME_FORMAT =
T.let("YYYY-MM-DD HH:mm:ss", String)
- DEFAULT_DATETIME_NO_SECONDS_FORMAT =
T.let("YYYY-MM-DD HH:mm", String)
Instance Method Summary collapse
- #base_wrapper_classes(base:, extra_classes: []) ⇒ Object
- #calendar_component_options(value:, range: nil) ⇒ Object
- #date_picker_allow_clear ⇒ Object
- #date_picker_bordered ⇒ Object
- #date_picker_default_value ⇒ Object
- #date_picker_disabled ⇒ Object
- #date_picker_disabled_date ⇒ Object
- #date_picker_display_format ⇒ Object
- #date_picker_format ⇒ Object
- #date_picker_picker ⇒ Object
- #date_picker_placeholder ⇒ Object
- #date_picker_show_seconds ⇒ Object
- #date_picker_show_time ⇒ Object
- #date_picker_size ⇒ Object
- #date_picker_value ⇒ Object
- #dayjs_to_strftime(dayjs_format) ⇒ Object
- #default_strftime_format ⇒ Object
- #display_format ⇒ Object
- #format_quarter(date_value) ⇒ Object
- #formatted_value(value) ⇒ Object
- #iso_value(value) ⇒ Object
- #js_display_format ⇒ Object
- #parse_date(value) ⇒ Object
- #parse_datetime(value) ⇒ Object
- #picker_mode ⇒ Object
- #picker_panel_attributes(range: nil) ⇒ Object
- #placeholder_text ⇒ Object
- #range_placeholders ⇒ Object
- #show_seconds? ⇒ Boolean
- #use_12_hours? ⇒ Boolean
Instance Method Details
#base_wrapper_classes(base:, extra_classes: []) ⇒ Object
224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 224 def base_wrapper_classes(base:, extra_classes: []) class_names( base, { lg: date_picker_size == :large, sm: date_picker_size == :small, borderless: !date_picker_bordered, disabled: date_picker_disabled, "allow-clear": date_picker_allow_clear, "has-value": value_present?(date_picker_value) }, extra_classes ) end |
#calendar_component_options(value:, range: nil) ⇒ Object
249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 249 def (value:, range: nil) { value: value, default_value: date_picker_default_value, fullscreen: false, mode: picker_mode, show_week: date_picker_picker == :week, static: true, disabled_date: date_picker_disabled_date, data: picker_panel_attributes(range: range) } end |
#date_picker_allow_clear ⇒ Object
57 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 57 def date_picker_allow_clear; end |
#date_picker_bordered ⇒ Object
51 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 51 def date_picker_bordered; end |
#date_picker_default_value ⇒ Object
63 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 63 def date_picker_default_value; end |
#date_picker_disabled ⇒ Object
54 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 54 def date_picker_disabled; end |
#date_picker_disabled_date ⇒ Object
66 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 66 def date_picker_disabled_date; end |
#date_picker_display_format ⇒ Object
36 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 36 def date_picker_display_format; end |
#date_picker_format ⇒ Object
33 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 33 def date_picker_format; end |
#date_picker_picker ⇒ Object
39 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 39 def date_picker_picker; end |
#date_picker_placeholder ⇒ Object
69 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 69 def date_picker_placeholder; end |
#date_picker_show_seconds ⇒ Object
45 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 45 def date_picker_show_seconds; end |
#date_picker_show_time ⇒ Object
42 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 42 def date_picker_show_time; end |
#date_picker_size ⇒ Object
48 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 48 def date_picker_size; end |
#date_picker_value ⇒ Object
60 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 60 def date_picker_value; end |
#dayjs_to_strftime(dayjs_format) ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 147 def dayjs_to_strftime(dayjs_format) dayjs_format .gsub("YYYY", "%Y") .gsub("YY", "%y") .gsub("MMMM", "%B") .gsub("MMM", "%b") .gsub("MM", "%m") .gsub("M", "%-m") .gsub("DD", "%d") .gsub("D", "%-d") .gsub("HH", "%H") .gsub("hh", "%I") .gsub("mm", "%M") .gsub("ss", "%S") .gsub("A", "%p") .gsub("a", "%P") end |
#default_strftime_format ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 129 def default_strftime_format if date_picker_show_time show_seconds? ? "%Y-%m-%d %H:%M:%S" : "%Y-%m-%d %H:%M" else case date_picker_picker when :month "%Y-%m" when :year "%Y" when :week "%G-W%V" else "%Y-%m-%d" end end end |
#display_format ⇒ Object
121 122 123 124 125 126 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 121 def display_format format_value = date_picker_format return format_value if format_value.present? default_strftime_format end |
#format_quarter(date_value) ⇒ Object
202 203 204 205 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 202 def format_quarter(date_value) quarter = ((date_value.month - 1) / 3) + 1 "Q#{quarter} #{date_value.year}" end |
#formatted_value(value) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 86 def formatted_value(value) return nil if value.blank? datetime_value = parse_datetime(value) return value.to_s if datetime_value.nil? if date_picker_picker == :quarter && date_picker_display_format.blank? && date_picker_format.blank? return format_quarter(datetime_value.to_date) end display_format_value = date_picker_display_format format_value = date_picker_format if display_format_value.present? datetime_value.strftime(dayjs_to_strftime(display_format_value)) elsif format_value.present? datetime_value.strftime(format_value) else datetime_value.strftime(default_strftime_format) end end |
#iso_value(value) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 72 def iso_value(value) return nil if value.blank? datetime_value = parse_datetime(value) return nil if datetime_value.nil? if date_picker_show_time show_seconds? ? datetime_value.strftime("%Y-%m-%d %H:%M:%S") : datetime_value.strftime("%Y-%m-%d %H:%M") else datetime_value.strftime("%Y-%m-%d") end end |
#js_display_format ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 109 def js_display_format display_format_value = date_picker_display_format return display_format_value if display_format_value.present? if date_picker_show_time show_seconds? ? DEFAULT_DATETIME_FORMAT : DEFAULT_DATETIME_NO_SECONDS_FORMAT else DEFAULT_DATE_FORMAT end end |
#parse_date(value) ⇒ Object
183 184 185 186 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 183 def parse_date(value) datetime_value = parse_datetime(value) datetime_value&.to_date end |
#parse_datetime(value) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 166 def parse_datetime(value) return nil if value.nil? return value if value.is_a?(Time) || value.is_a?(DateTime) return Time.parse(value.to_s) if value.is_a?(ActiveSupport::TimeWithZone) return date_picker_show_time ? value.to_time : value if value.is_a?(Date) string_value = value.to_s if date_picker_show_time && string_value.include?(" ") Time.parse(string_value) else Date.parse(string_value) end rescue ArgumentError, TypeError nil end |
#picker_mode ⇒ Object
208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 208 def picker_mode case date_picker_picker when :date, :week :month when :month :year when :quarter :quarter when :year :decade else :month end end |
#picker_panel_attributes(range: nil) ⇒ Object
240 241 242 243 244 245 246 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 240 def picker_panel_attributes(range: nil) data_attrs = T.let({ action: "hakumi--calendar:select->hakumi--date-picker#handleCalendarSelect" }, Types::DataAttributes) data_attrs[:date_range] = range if range data_attrs end |
#placeholder_text ⇒ Object
263 264 265 266 267 268 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 263 def placeholder_text placeholder = date_picker_placeholder return placeholder if placeholder.is_a?(String) t_default(:placeholder, default: "Select date") end |
#range_placeholders ⇒ Object
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 271 def range_placeholders placeholder = date_picker_placeholder if placeholder.is_a?(Array) values = placeholder.filter_map do |item| next if item.nil? item.to_s end return values if values.length == 2 end [ t_default(:start_placeholder, default: "Start date"), t_default(:end_placeholder, default: "End date") ] end |
#show_seconds? ⇒ Boolean
189 190 191 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 189 def show_seconds? date_picker_show_seconds end |
#use_12_hours? ⇒ Boolean
194 195 196 197 198 199 |
# File 'app/components/hakumi_components/date_picker/shared_rendering.rb', line 194 def use_12_hours? display_format_value = date_picker_display_format return false unless display_format_value.present? display_format_value.include?("hh") && (display_format_value.include?("A") || display_format_value.include?("a")) end |