Class: Satis::DateTimePicker::Component

Inherits:
ApplicationComponent show all
Defined in:
app/components/satis/date_time_picker/component.rb

Instance Attribute Summary collapse

Attributes inherited from ApplicationComponent

#original_view_context

Instance Method Summary collapse

Methods inherited from ApplicationComponent

add_helper, #component_name, #ct, #i18n_scope, #original_i18n_scope, #original_virtual_path

Constructor Details

#initialize(form:, attribute:, **options, &block) ⇒ Component

Returns a new instance of Component.



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
# File 'app/components/satis/date_time_picker/component.rb', line 8

def initialize(form:, attribute:, **options, &block)
  super

  @form = form
  @attribute = attribute
  @options = options
  @block = block
  options[:input_html] ||= {}
  @time_picker = options.key?(:time_picker) ? options[:time_picker] : true
  @inline = options.key?(:inline) ? options[:inline] : false
  @clearable = options.key?(:clearable) ? options[:clearable] : true
  @multiple = options.key?(:multiple) ? options[:multiple] : false
  @range = options.key?(:range) ? options[:range] : false

  @format = if options.key?(:format)
              options[:format]
            else
              { "weekday": 'long', "month": 'short', "year": 'numeric', "day": 'numeric',
                "hour": 'numeric', "minute": 'numeric', "hour12": false }
            end

  options[:input_html].merge!('data-satis-date-time-picker-target' => 'hiddenInput')

  # FIXME: deal with ranges and multiples
  hidden_value = options[:input_html][:value]
  hidden_value ||= @form.object.send(attribute)
  hidden_value = if hidden_value.is_a?(String)
                   hidden_value&.split(' - ')&.map { |d| Time.parse(d).iso8601 }.join(' - ')
                 else
                   hidden_value&.iso8601
                 end

  options[:input_html][:value] = hidden_value
end

Instance Attribute Details

#attributeObject (readonly)

Returns the value of attribute attribute.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def attribute
  @attribute
end

#clearableObject (readonly)

Returns the value of attribute clearable.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def clearable
  @clearable
end

#formObject (readonly)

Returns the value of attribute form.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def form
  @form
end

#formatObject (readonly)

Returns the value of attribute format.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def format
  @format
end

#inlineObject (readonly)

Returns the value of attribute inline.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def inline
  @inline
end

#multipleObject (readonly)

Returns the value of attribute multiple.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def multiple
  @multiple
end

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def options
  @options
end

#rangeObject (readonly)

Returns the value of attribute range.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def range
  @range
end

#time_pickerObject (readonly)

Returns the value of attribute time_picker.



6
7
8
# File 'app/components/satis/date_time_picker/component.rb', line 6

def time_picker
  @time_picker
end

Instance Method Details

#week_startObject



43
44
45
# File 'app/components/satis/date_time_picker/component.rb', line 43

def week_start
  Date::DAYS_INTO_WEEK[Date.beginning_of_week] || 1
end