diff --git a/app/javascript/packs/vue/repository_filter.js b/app/javascript/packs/vue/repository_filter.js index 0ee400999..1f8168e10 100644 --- a/app/javascript/packs/vue/repository_filter.js +++ b/app/javascript/packs/vue/repository_filter.js @@ -14,7 +14,8 @@ window.initRepositoryFilter = () => { { id: 'row_name', name: 'Name', data_type: 'RepositoryTextValue' }, { id: 'added_on', name: 'Added on', data_type: 'RepositoryDateTimeValue' }, { id: 'added_by', name: 'Added by', data_type: 'RepositoryUserValue' }, - { id: 'archived_by', name: 'Archived by', data_type: 'RepositoryUserValue' } + { id: 'archived_by', name: 'Archived by', data_type: 'RepositoryUserValue' }, + { id: 'archived_on', name: 'Archived on', data_type: 'RepositoryDateTimeValue' } ]; const repositoryFilterContainer = new Vue({ el: '#filterContainer', diff --git a/app/javascript/vue/repository_filter/filters/repositoryUserValue.vue b/app/javascript/vue/repository_filter/filters/repositoryUserValue.vue index e3c36370e..900702729 100644 --- a/app/javascript/vue/repository_filter/filters/repositoryUserValue.vue +++ b/app/javascript/vue/repository_filter/filters/repositoryUserValue.vue @@ -75,7 +75,8 @@ }, computed: { isBlank(){ - return this.operator == 'any_of' && !this.value; + return (this.operator == 'any_of' && !this.value) || + (this.filter.column.id === 'archived_by' && $('.repository-show').hasClass('active') ) ; } } } diff --git a/app/javascript/vue/repository_filter/mixins/filters/date_time_filter.js b/app/javascript/vue/repository_filter/mixins/filters/date_time_filter.js index 58b87fbfb..435b17fb8 100644 --- a/app/javascript/vue/repository_filter/mixins/filters/date_time_filter.js +++ b/app/javascript/vue/repository_filter/mixins/filters/date_time_filter.js @@ -16,7 +16,8 @@ export default { }, computed: { isBlank() { - return this.operator === 'equal_to' && !this.value; + return (this.operator === 'equal_to' && !this.value) || + (this.filter.column.id === 'archived_on' && $('.repository-show').hasClass('active')); }, isPreset() { return [ diff --git a/app/services/repository_datatable_service.rb b/app/services/repository_datatable_service.rb index f801362c1..b809525df 100644 --- a/app/services/repository_datatable_service.rb +++ b/app/services/repository_datatable_service.rb @@ -135,6 +135,8 @@ class RepositoryDatatableService build_added_by_filter_condition(repository_rows, filter_element_params) when 'archived_by' build_archived_by_filter_condition(repository_rows, filter_element_params) + when 'archived_on' + build_archived_on_filter_condition(repository_rows, filter_element_params) when 'assigned' build_assigned_filter_condition(repository_rows, filter_element_params) else @@ -214,6 +216,45 @@ class RepositoryDatatableService end end + def build_archived_on_filter_condition(repository_rows, filter_element_params) + case filter_element_params[:operator] + when 'today' + repository_rows.where('archived_on >= ?', Time.zone.now.beginning_of_day) + when 'yesterday' + repository_rows.where('archived_on >= ? AND archived_on < ?', + Time.zone.now.beginning_of_day - 1.day, Time.zone.now.beginning_of_day) + when 'last_week' + repository_rows.where('archived_on >= ? AND archived_on < ?', + Time.zone.now.beginning_of_week - 1.week, Time.zone.now.beginning_of_week) + when 'this_month' + repository_rows.where('archived_on >= ?', Time.zone.now.beginning_of_month) + when 'last_year' + repository_rows.where('archived_on >= ? AND archived_on < ?', + Time.zone.now.beginning_of_year - 1.year, Time.zone.now.beginning_of_year) + when 'this_year' + repository_rows.where('archived_on >= ?', Time.zone.now.beginning_of_year) + when 'equal_to' + repository_rows.where(archived_on: filter_element_params.dig(:parameters, :datetime)) + when 'unequal_to' + repository_rows + .where.not(archived_on: filter_element_params.dig(:parameters, :datetime)) + when 'greater_than' + repository_rows.where('archived_on > ?', filter_element_params.dig(:parameters, :datetime)) + when 'greater_than_or_equal_to' + repository_rows.where('archived_on >= ?', filter_element_params.dig(:parameters, :datetime)) + when 'less_than' + repository_rows.where('archived_on < ?', filter_element_params.dig(:parameters, :datetime)) + when 'less_than_or_equal_to' + repository_rows.where('archived_on <= ?', filter_element_params.dig(:parameters, :datetime)) + when 'between' + repository_rows.where('archived_on > ? AND archived_on < ?', + filter_element_params.dig(:parameters, :start_datetime), + filter_element_params.dig(:parameters, :end_datetime)) + else + raise ArgumentError, 'Wrong operator for RepositoryRow Archived On!' + end + end + def build_added_by_filter_condition(repository_rows, filter_element_params) case filter_element_params[:operator] when 'any_of'