diff --git a/Gemfile b/Gemfile index 9642bc7..13980a7 100644 --- a/Gemfile +++ b/Gemfile @@ -19,4 +19,5 @@ group :test do gem 'capybara' gem 'selenium-webdriver' gem 'chromedriver-helper' + gem 'byebug' end diff --git a/lib/active_admin_datetimepicker/base.rb b/lib/active_admin_datetimepicker/base.rb index f9365bf..b8bd45b 100644 --- a/lib/active_admin_datetimepicker/base.rb +++ b/lib/active_admin_datetimepicker/base.rb @@ -18,7 +18,7 @@ def input_html_options(input_name = nil, placeholder = nil) options[:class] = [self.options[:class], html_class].compact.join(' ') options[:data] ||= input_html_data options[:data].merge!(datepicker_options: datetime_picker_options) - options[:value] ||= input_value(input_name) + options[:value] = input_value(input_name) options[:maxlength] = 19 options[:placeholder] = placeholder unless placeholder.nil? end @@ -26,8 +26,13 @@ def input_html_options(input_name = nil, placeholder = nil) def input_value(input_name = nil) val = object.public_send(input_name || method) - return DateTime.new(val.year, val.month, val.day, val.hour, val.min, val.sec).strftime(format) if val.is_a?(Time) - val.to_s + if val.nil? + val + elsif column.type == :date + val + else + DateTime.new(val.year, val.month, val.day, val.hour, val.min, val.sec).strftime(format) + end end def datetime_picker_options diff --git a/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb b/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb index e5fc7b8..1dc4673 100644 --- a/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb +++ b/lib/active_admin_datetimepicker/inputs/filters/date_time_range_input.rb @@ -11,13 +11,6 @@ def input_html_options(input_name = gt_input_name, placeholder = gt_input_placeh end end - def gt_input_name - "#{method}_gteq" - end - - def lt_input_name - "#{method}_lteq" - end end end end diff --git a/spec/filters_and_edit_form_spec.rb b/spec/filters_and_edit_form_spec.rb index 1c0669e..ef12838 100644 --- a/spec/filters_and_edit_form_spec.rb +++ b/spec/filters_and_edit_form_spec.rb @@ -38,9 +38,28 @@ expect(page.find('input#q_birthday_gteq').value).to start_with(date_from) expect(page.find('input#q_birthday_lteq').value).to start_with(date_to) + expect(page).to have_css('input#q_birthday_gteq[placeholder="From"]') expect(page).to have_css('input#q_birthday_lteq[placeholder="To"]') end + + it 'submit filter form' do + page.find('#q_created_at_gteq_datetime').click + + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click + page.find('.xdsoft_datetimepicker', visible: true) + .find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click + + page.find('#sidebar input[type=submit]').click + expect(page).to have_css('h4', text: 'Current filters:') + + # should contain Hours:Minutes, as selected before submit + expect(page.find('#q_created_at_gteq_datetime').value).to match(/\A\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\z/) + + # birthday is a Date column, should not contain H:M + expect(page.find('#q_birthday_gteq').value).to match(/\A\d{4}-\d{2}-\d{2}\z/) + end end diff --git a/spec/support/admin.rb b/spec/support/admin.rb index 022cd89..6850abe 100644 --- a/spec/support/admin.rb +++ b/spec/support/admin.rb @@ -4,6 +4,7 @@ def add_author_resource(options = {}, &block) config.filters = true filter :birthday, as: :date_time_range + filter :created_at, as: :date_time_range form do |f| f.semantic_errors *f.object.errors.keys