app/pb_kits/playbook/pb_time/time.rb
# frozen_string_literal: true module Playbook module PbTime class Time < Playbook::PbKit::Base include ActionView::Helpers::TagHelper include ActionView::Context PROPS = %i[configured_classname configured_data configured_id configured_size configured_time configured_timestamp configured_timezone].freeze def initialize(classname: default_configuration, data: default_configuration, id: default_configuration, size: default_configuration, time: default_configuration, timestamp: default_configuration, timezone: default_configuration) self.configured_classname = classname self.configured_data = data self.configured_id = id self.configured_size = size self.configured_time = time self.configured_timestamp = timestamp self.configured_timezone = timezone end def display_value case size when "lg" display_value_lg when "sm" display_value_sm else display_value_xs end end def kit_class kit_options = [ "pb_time_kit", size, ] kit_options.join("_") end def to_partial_path "pb_time/time" end private def timestamp if is_set? configured_time time = configured_time else time = configured_timestamp end Playbook::PbKit::PbDateTime.new(time, timezone_value) end def timezone_value default_value(configured_timezone, "America/New_York") end def format_time_string "#{timestamp.to_hour}:#{timestamp.to_minutes}#{timestamp.to_meridian}" end def timezone content_tag(:span, class: "pb_time_timezone") do timestamp.to_timezone.upcase end end def size size_options = %w[lg sm xs] one_of_value(configured_size, size_options, "sm") end def icon pb_icon = Playbook::PbIcon::Icon.new(icon: "clock", fixed_width: true) ApplicationController.renderer.render(partial: pb_icon, as: :object) end def text content_tag(:time, datetime: timestamp.to_iso) do content_tag(:span) do format_time_string end + timezone end end def display_value_xs if is_set?(configured_timestamp) || is_set?(configured_time) pb_value = Playbook::PbBody::Body.new(color: "default") do text end ApplicationController.renderer.render(partial: pb_value, as: :object) end end def display_value_sm if is_set?(configured_timestamp) || is_set?(configured_time) pb_value = Playbook::PbBody::Body.new(color: "default") do icon + text end ApplicationController.renderer.render(partial: pb_value, as: :object) end end def display_value_lg if is_set?(configured_timestamp) || is_set?(configured_time) pb_value_lg = Playbook::PbTitle::Title.new(size: 3, text: text) ApplicationController.renderer.render(partial: pb_value_lg, as: :object) end end DEFAULT = Object.new private_constant :DEFAULT def default_configuration DEFAULT end attr_accessor(*PROPS) end end end