module AbstractNumeric

class DateInput < React::Component::Base

param :on_change, type: Proc
param :value
param :format
param :valid
param :dirty

include ClassesInput

before_mount do
  state.value! ''
  state.year! ''
end

def date(value, year)
  begin # opal: undefined method `strptime' for Time
    Time.strptime(value+year, params.format+'%Y'){|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}
  rescue
    nil
  end
end

def render
  if params.value.nil?
    value = state.value
    year = state.year
  else
    value = params.value.format params.format
    year = params.value.year.to_s
  end
  span do
    input(class: valid_class + ' ' + dirty_class, value: value).on(:change) do |event|
      state.value! event.target.value
      params.on_change date(event.target.value, year)
    end
    input(value: year).on(:change) do |event|
      state.year! event.target.value
      params.on_change date(value, event.target.value)
    end
  end
end

end

Public Instance Methods

format(val) click to toggle source
# File lib/bull/ui_core.rb, line 211
def format val
  val.to_s
end
render() click to toggle source
# File lib/bull/ui_core.rb, line 215
def render
  if parse(state.value) != params.value
    value = params.value.to_s
  else
    value = state.value
  end

  span do
    input(placeholder: params.placeholder, class: valid_class + ' ' + dirty_class, type: :text, value: format(value)){}.on(:change) do |event|
        state.value! event.target.value
        if event.target.value == ''
          params.on_change nil
        else
          update_state event
        end
    end.on(:keyDown) do |event|
      if event.key_code == 13
        params.on_enter.call event.target.value
      end
    end
  end
end