Sha256: cf6a2e1c50dccc80fbb98d4b21e4161690fb5a14e6dbbea6e63e811c7d43d8cf

Contents?: true

Size: 1.53 KB

Versions: 68

Compression:

Stored size: 1.53 KB

Contents

module Avo
  module Fields
    class DateTimeField < DateField
      attr_reader :format
      attr_reader :picker_format
      attr_reader :time_24hr
      attr_reader :relative

      def initialize(id, **args, &block)
        super(id, **args, &block)

        add_boolean_prop args, :time_24hr
        add_string_prop args, :picker_format, "Y-m-d H:i:S"
        add_string_prop args, :format, "yyyy-LL-dd TT"
        add_string_prop args, :timezone
        add_boolean_prop args, :relative, true
      end

      def formatted_value
        return nil if value.nil?

        value.utc.to_time.iso8601
      end

      def edit_formatted_value
        return nil if value.nil?

        value.utc.iso8601
      end

      def fill_field(record, key, value, params)
        if value.in?(["", nil])
          record.send(:"#{id}=", value)

          return record
        end

        return record if value.blank?

        record.send(:"#{id}=", utc_time(value))

        record
      end

      def utc_time(value)
        time = Time.parse(value)

        if timezone.present? && !time.utc?
          ActiveSupport::TimeZone.new(timezone).local_to_utc(time)
        else
          value
        end
      end

      def timezone
        timezone = Avo::ExecutionContext.new(target: @timezone, record: resource.record, resource: resource, view: view).handle

        # Fix for https://github.com/moment/luxon/issues/1358#issuecomment-2017477897
        return "Etc/UTC" if timezone&.downcase == "utc" && view.form?

        timezone
      end
    end
  end
end

Version data entries

68 entries across 68 versions & 1 rubygems

Version Path
avo-3.18.1.tw4 lib/avo/fields/date_time_field.rb
avo-3.18.1 lib/avo/fields/date_time_field.rb
avo-3.18.0.tw4 lib/avo/fields/date_time_field.rb
avo-3.18.0 lib/avo/fields/date_time_field.rb
avo-3.17.9.beta2 lib/avo/fields/date_time_field.rb
avo-3.17.9.beta1 lib/avo/fields/date_time_field.rb
avo-3.17.9.tw4 lib/avo/fields/date_time_field.rb
avo-3.17.9 lib/avo/fields/date_time_field.rb
avo-3.17.8.tw4 lib/avo/fields/date_time_field.rb
avo-3.17.8 lib/avo/fields/date_time_field.rb
avo-3.17.7 lib/avo/fields/date_time_field.rb
avo-3.17.6.tw4 lib/avo/fields/date_time_field.rb
avo-3.17.6 lib/avo/fields/date_time_field.rb
avo-3.17.5 lib/avo/fields/date_time_field.rb
avo-3.17.4 lib/avo/fields/date_time_field.rb
avo-3.17.3 lib/avo/fields/date_time_field.rb
avo-3.17.5.tw4 lib/avo/fields/date_time_field.rb
avo-3.17.4.tw4 lib/avo/fields/date_time_field.rb
avo-3.17.3.tw4 lib/avo/fields/date_time_field.rb
avo-3.17.2.tw4 lib/avo/fields/date_time_field.rb