Issuable filtering improvements
This improves the filtering of issues and merge requests by creating a single file that encapsulates all the filtering. Previously this was done with a file for issues and a file for merge requests. Created the ability for the text search to be done alongside other filterables. Previously because this was outside the filterable form, this wasn't possible and would instead do either filter dropdown or text filter - not both.
This commit is contained in:
parent
78a67fc48d
commit
832d7fa3ce
|
@ -16,7 +16,6 @@ class Dispatcher
|
||||||
shortcut_handler = null
|
shortcut_handler = null
|
||||||
switch page
|
switch page
|
||||||
when 'projects:issues:index'
|
when 'projects:issues:index'
|
||||||
Issues.init()
|
|
||||||
Issuable.init()
|
Issuable.init()
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
when 'projects:issues:show'
|
when 'projects:issues:show'
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
issuable_created = false
|
||||||
@Issuable =
|
@Issuable =
|
||||||
init: ->
|
init: ->
|
||||||
Issuable.initTemplates()
|
if not issuable_created
|
||||||
Issuable.initSearch()
|
issuable_created = true
|
||||||
|
Issuable.initTemplates()
|
||||||
|
Issuable.initSearch()
|
||||||
|
|
||||||
initTemplates: ->
|
initTemplates: ->
|
||||||
Issuable.labelRow = _.template(
|
Issuable.labelRow = _.template(
|
||||||
|
@ -64,6 +67,7 @@
|
||||||
|
|
||||||
$('#filter_issue_search').val($('#issue_search').val())
|
$('#filter_issue_search').val($('#issue_search').val())
|
||||||
|
|
||||||
|
|
||||||
updateStateFilters: ->
|
updateStateFilters: ->
|
||||||
stateFilters = $('.issues-state-filters')
|
stateFilters = $('.issues-state-filters')
|
||||||
newParams = {}
|
newParams = {}
|
||||||
|
@ -82,3 +86,18 @@
|
||||||
else
|
else
|
||||||
newUrl = gl.utils.mergeUrlParams(newParams, initialUrl)
|
newUrl = gl.utils.mergeUrlParams(newParams, initialUrl)
|
||||||
$(this).attr 'href', newUrl
|
$(this).attr 'href', newUrl
|
||||||
|
|
||||||
|
checkChanged: ->
|
||||||
|
checked_issues = $('.selected_issue:checked')
|
||||||
|
if checked_issues.length > 0
|
||||||
|
ids = []
|
||||||
|
$.each checked_issues, (index, value) ->
|
||||||
|
ids.push $(value).data('id')
|
||||||
|
|
||||||
|
$('#update_issues_ids').val ids
|
||||||
|
$('.issues-other-filters').hide()
|
||||||
|
$('.issues_bulk_update').show()
|
||||||
|
else
|
||||||
|
$('#update_issues_ids').val []
|
||||||
|
$('.issues_bulk_update').hide()
|
||||||
|
$('.issues-other-filters').show()
|
||||||
|
|
|
@ -26,10 +26,19 @@
|
||||||
newUrl = decodeURIComponent(url)
|
newUrl = decodeURIComponent(url)
|
||||||
for paramName, paramValue of params
|
for paramName, paramValue of params
|
||||||
pattern = new RegExp "\\b(#{paramName}=).*?(&|$)"
|
pattern = new RegExp "\\b(#{paramName}=).*?(&|$)"
|
||||||
if url.search(pattern) >= 0
|
if !paramValue?
|
||||||
|
newUrl = newUrl.replace pattern, ''
|
||||||
|
else if url.search(pattern) >= 0
|
||||||
newUrl = newUrl.replace pattern, "$1#{paramValue}$2"
|
newUrl = newUrl.replace pattern, "$1#{paramValue}$2"
|
||||||
else
|
else
|
||||||
newUrl = "#{newUrl}#{(if newUrl.indexOf('?') > 0 then '&' else '?')}#{paramName}=#{paramValue}"
|
newUrl = "#{newUrl}#{(if newUrl.indexOf('?') > 0 then '&' else '?')}#{paramName}=#{paramValue}"
|
||||||
|
|
||||||
|
# Remove a trailing ampersand
|
||||||
|
lastChar = newUrl[newUrl.length - 1]
|
||||||
|
|
||||||
|
if lastChar is '&'
|
||||||
|
newUrl = newUrl.slice 0, -1
|
||||||
|
|
||||||
newUrl
|
newUrl
|
||||||
|
|
||||||
# removes parameter query string from url. returns the modified url
|
# removes parameter query string from url. returns the modified url
|
||||||
|
|
|
@ -119,7 +119,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
input {
|
input {
|
||||||
height: 34px;
|
height: 35px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 2px;
|
top: 2px;
|
||||||
|
|
|
@ -40,11 +40,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.issue-search-form {
|
|
||||||
margin: 0;
|
|
||||||
height: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
form.edit-issue {
|
form.edit-issue {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,6 +263,7 @@ module ApplicationHelper
|
||||||
assignee_id: params[:assignee_id],
|
assignee_id: params[:assignee_id],
|
||||||
author_id: params[:author_id],
|
author_id: params[:author_id],
|
||||||
sort: params[:sort],
|
sort: params[:sort],
|
||||||
|
issue_search: params[:issue_search]
|
||||||
}
|
}
|
||||||
|
|
||||||
options = exist_opts.merge(options)
|
options = exist_opts.merge(options)
|
||||||
|
@ -273,15 +274,21 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
params = options.compact.to_param
|
||||||
|
|
||||||
path = request.path
|
path = request.path
|
||||||
path << "?#{options.to_param}"
|
|
||||||
if add_label
|
if params != nil
|
||||||
if params[:label_name].present? and params[:label_name].respond_to?('any?')
|
path << "?#{options.to_param}"
|
||||||
params[:label_name].each do |label|
|
if add_label
|
||||||
path << "&label_name[]=#{label}"
|
if params[:label_name].present? and params[:label_name].respond_to?('any?')
|
||||||
|
params[:label_name].each do |label|
|
||||||
|
path << "&label_name[]=#{label}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
path
|
path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
.issues-filters
|
.issues-filters
|
||||||
.issues-details-filters.row-content-block.second-block
|
.issues-details-filters.gray-content-block.second-block
|
||||||
= form_tag page_filter_path(without: [:assignee_id, :author_id, :milestone_title, :label_name]), method: :get, class: 'filter-form' do
|
= form_tag page_filter_path(without: [:assignee_id, :author_id, :milestone_title, :label_name, :issue_search]), method: :get, class: 'filter-form js-filter-form' do
|
||||||
|
- if params[:issue_search].present?
|
||||||
|
= hidden_field_tag :issue_search, params[:issue_search]
|
||||||
- if controller.controller_name == 'issues' && can?(current_user, :admin_issue, @project)
|
- if controller.controller_name == 'issues' && can?(current_user, :admin_issue, @project)
|
||||||
.check-all-holder
|
.check-all-holder
|
||||||
= check_box_tag "check_all_issues", nil, false,
|
= check_box_tag "check_all_issues", nil, false,
|
||||||
|
|
|
@ -1,8 +1,2 @@
|
||||||
= form_tag(path, method: :get, id: "issue_search_form", class: 'issue-search-form') do
|
= form_tag(path, method: :get, id: "issue_search_form", class: 'issue-search-form') do
|
||||||
= search_field_tag :issue_search, params[:issue_search], { placeholder: 'Filter by name ...', class: 'form-control issue_search search-text-input input-short', spellcheck: false }
|
= search_field_tag :issue_search, params[:issue_search], { placeholder: 'Filter by name ...', class: 'form-control issue_search search-text-input input-short', spellcheck: false }
|
||||||
= hidden_field_tag :state, params['state']
|
|
||||||
= hidden_field_tag :scope, params['scope']
|
|
||||||
= hidden_field_tag :assignee_id, params['assignee_id']
|
|
||||||
= hidden_field_tag :author_id, params['author_id']
|
|
||||||
= hidden_field_tag :milestone_id, params['milestone_id']
|
|
||||||
= hidden_field_tag :label_id, params['label_id']
|
|
||||||
|
|
Loading…
Reference in New Issue