class Avo::Fields::DateTimeField

def edit_formatted_value

def edit_formatted_value
  return nil if value.nil?
  value.utc.iso8601
end

def fill_field(record, key, value, params)

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 formatted_value

def formatted_value
  return nil if value.nil?
  value.utc.to_time.iso8601
end

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

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 timezone

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

def utc_time(value)

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