Sha256: 0db212e3d3020f6e836b183ec9d1bdffc24cd62f8ed2357316d865b5f4c6ad09

Contents?: true

Size: 1.62 KB

Versions: 24

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Tables
    module Cells
      # Formats the value as a date
      # @param format [String] date format
      # @param relative [Boolean] if true, the date may be(if within 5 days) shown as a relative date
      class DateComponent < CellComponent
        def initialize(format:, relative:, **)
          super(**)

          @format   = format
          @relative = relative
        end

        def value
          super&.to_date
        end

        def rendered_value
          @relative ? relative_time : absolute_time
        end

        private

        def default_html_attributes
          {
            class: "type-date",
            title: (absolute_time if row.body? && @relative && value.present? && days_ago_in_words(value).present?),
          }
        end

        def absolute_time
          value.present? ? I18n.l(value, format: @format) : ""
        end

        def relative_time
          if value.blank?
            ""
          else
            days_ago_in_words(value)&.capitalize || absolute_time
          end
        end

        def days_ago_in_words(value)
          from_time        = value.to_time
          to_time          = Date.current.to_time
          distance_in_days = ((to_time - from_time) / (24.0 * 60.0 * 60.0)).round

          case distance_in_days
          when 0
            "today"
          when 1
            "yesterday"
          when -1
            "tomorrow"
          when 2..5
            "#{distance_in_days} days ago"
          when -5..-2
            "#{distance_in_days.abs} days from now"
          end
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
katalyst-tables-3.7.0 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.6.2 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.6.1 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.6.0 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.5.5 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.5.4 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.5.3 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.5.2 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.5.1 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.5.0 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.6 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.5 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.4 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.3 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.2 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.1 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.4.0 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.3.4 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.3.3 app/components/katalyst/tables/cells/date_component.rb
katalyst-tables-3.3.2 app/components/katalyst/tables/cells/date_component.rb