Add archived
related options in sort dropdown
This commit is contained in:
parent
d72b95cfb7
commit
934f4c6ea4
3 changed files with 48 additions and 15 deletions
|
@ -25,30 +25,34 @@ export default class GroupFilterableList extends FilterableList {
|
||||||
bindEvents() {
|
bindEvents() {
|
||||||
super.bindEvents();
|
super.bindEvents();
|
||||||
|
|
||||||
this.onFormSubmitWrapper = this.onFormSubmit.bind(this);
|
|
||||||
this.onFilterOptionClikWrapper = this.onOptionClick.bind(this);
|
this.onFilterOptionClikWrapper = this.onOptionClick.bind(this);
|
||||||
|
|
||||||
this.filterForm.addEventListener('submit', this.onFormSubmitWrapper);
|
|
||||||
this.$dropdown.on('click', 'a', this.onFilterOptionClikWrapper);
|
this.$dropdown.on('click', 'a', this.onFilterOptionClikWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
onFormSubmit(e) {
|
onFilterInput() {
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
const $form = $(this.form);
|
|
||||||
const filterGroupsParam = $form.find(`[name="${this.filterInputField}"]`).val();
|
|
||||||
const queryData = {};
|
const queryData = {};
|
||||||
|
const $form = $(this.form);
|
||||||
|
const archivedParam = getParameterByName('archived', window.location.href);
|
||||||
|
const filterGroupsParam = $form.find(`[name="${this.filterInputField}"]`).val();
|
||||||
|
|
||||||
if (filterGroupsParam) {
|
if (filterGroupsParam) {
|
||||||
queryData[this.filterInputField] = filterGroupsParam;
|
queryData[this.filterInputField] = filterGroupsParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (archivedParam) {
|
||||||
|
queryData.archived = archivedParam;
|
||||||
|
}
|
||||||
|
|
||||||
this.filterResults(queryData);
|
this.filterResults(queryData);
|
||||||
this.setDefaultFilterOption();
|
|
||||||
|
if (this.setDefaultFilterOption) {
|
||||||
|
this.setDefaultFilterOption();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setDefaultFilterOption() {
|
setDefaultFilterOption() {
|
||||||
const defaultOption = $.trim(this.$dropdown.find('.dropdown-menu a').first().text());
|
const defaultOption = $.trim(this.$dropdown.find('.dropdown-menu li.js-filter-sort-order a').first().text());
|
||||||
this.$dropdown.find('.dropdown-label').text(defaultOption);
|
this.$dropdown.find('.dropdown-label').text(defaultOption);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,17 +60,34 @@ export default class GroupFilterableList extends FilterableList {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
const queryData = {};
|
const queryData = {};
|
||||||
const sortParam = getParameterByName('sort', e.currentTarget.href);
|
|
||||||
|
// Get type of option selected from dropdown
|
||||||
|
const currentTargetClassList = e.currentTarget.parentElement.classList;
|
||||||
|
const isOptionFilterBySort = currentTargetClassList.contains('js-filter-sort-order');
|
||||||
|
|
||||||
|
// Get option query param, also preserve currently applied query param
|
||||||
|
const isOptionFilterByArchivedProjects = currentTargetClassList.contains('js-filter-archived-projects');
|
||||||
|
const sortParam = getParameterByName('sort', e.currentTarget.href) || getParameterByName('sort', window.location.href);
|
||||||
|
const archivedParam = getParameterByName('archived', e.currentTarget.href) || getParameterByName('archived', window.location.href);
|
||||||
|
|
||||||
if (sortParam) {
|
if (sortParam) {
|
||||||
queryData.sort = sortParam;
|
queryData.sort = sortParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (archivedParam) {
|
||||||
|
queryData.archived = archivedParam;
|
||||||
|
}
|
||||||
|
|
||||||
this.filterResults(queryData);
|
this.filterResults(queryData);
|
||||||
|
|
||||||
// Active selected option
|
// Active selected option
|
||||||
this.$dropdown.find('.dropdown-label').text($.trim(e.currentTarget.text));
|
if (isOptionFilterBySort) {
|
||||||
this.$dropdown.find('.dropdown-menu li a').removeClass('is-active');
|
this.$dropdown.find('.dropdown-label').text($.trim(e.currentTarget.text));
|
||||||
|
this.$dropdown.find('.dropdown-menu li.js-filter-sort-order a').removeClass('is-active');
|
||||||
|
} else if (isOptionFilterByArchivedProjects) {
|
||||||
|
this.$dropdown.find('.dropdown-menu li.js-filter-archived-projects a').removeClass('is-active');
|
||||||
|
}
|
||||||
|
|
||||||
$(e.target).addClass('is-active');
|
$(e.target).addClass('is-active');
|
||||||
|
|
||||||
// Clear current value on search form
|
// Clear current value on search form
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
.group-nav-container
|
.group-nav-container
|
||||||
.nav-controls.clearfix
|
.nav-controls.clearfix
|
||||||
= render "shared/groups/search_form"
|
= render "shared/groups/search_form"
|
||||||
= render "shared/groups/dropdown"
|
= render "shared/groups/dropdown", show_archive_options: true
|
||||||
- if can? current_user, :create_projects, @group
|
- if can? current_user, :create_projects, @group
|
||||||
- new_project_label = _("New project")
|
- new_project_label = _("New project")
|
||||||
- new_subgroup_label = _("New subgroup")
|
- new_subgroup_label = _("New subgroup")
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
- show_archive_options = local_assigns.fetch(:show_archive_options, false)
|
||||||
- if @sort.present?
|
- if @sort.present?
|
||||||
- default_sort_by = @sort
|
- default_sort_by = @sort
|
||||||
- else
|
- else
|
||||||
|
@ -15,6 +16,17 @@
|
||||||
%li.dropdown-header
|
%li.dropdown-header
|
||||||
= _("Sort by")
|
= _("Sort by")
|
||||||
- groups_sort_options_hash.each do |value, title|
|
- groups_sort_options_hash.each do |value, title|
|
||||||
%li
|
%li.js-filter-sort-order
|
||||||
= link_to filter_groups_path(sort: value), class: "#{ 'is-active' if default_sort_by == value }" do
|
= link_to filter_groups_path(sort: value), class: ("is-active" if default_sort_by == value) do
|
||||||
= title
|
= title
|
||||||
|
- if show_archive_options
|
||||||
|
%li.divider
|
||||||
|
%li.js-filter-archived-projects
|
||||||
|
= link_to group_children_path(@group, archived: nil), class: ("is-active" unless params[:archived].present?) do
|
||||||
|
Hide archived projects
|
||||||
|
%li.js-filter-archived-projects
|
||||||
|
= link_to group_children_path(@group, archived: true), class: ("is-active" if Gitlab::Utils.to_boolean(params[:archived])) do
|
||||||
|
Show archived projects
|
||||||
|
%li.js-filter-archived-projects
|
||||||
|
= link_to group_children_path(@group, archived: 'only'), class: ("is-active" if params[:archived] == 'only') do
|
||||||
|
Show archived projects only
|
||||||
|
|
Loading…
Reference in a new issue