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
8 changed files with 48 additions and 23 deletions
|
@ -16,7 +16,6 @@ class Dispatcher
|
|||
shortcut_handler = null
|
||||
switch page
|
||||
when 'projects:issues:index'
|
||||
Issues.init()
|
||||
Issuable.init()
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
when 'projects:issues:show'
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
issuable_created = false
|
||||
@Issuable =
|
||||
init: ->
|
||||
Issuable.initTemplates()
|
||||
Issuable.initSearch()
|
||||
if not issuable_created
|
||||
issuable_created = true
|
||||
Issuable.initTemplates()
|
||||
Issuable.initSearch()
|
||||
|
||||
initTemplates: ->
|
||||
Issuable.labelRow = _.template(
|
||||
|
@ -64,6 +67,7 @@
|
|||
|
||||
$('#filter_issue_search').val($('#issue_search').val())
|
||||
|
||||
|
||||
updateStateFilters: ->
|
||||
stateFilters = $('.issues-state-filters')
|
||||
newParams = {}
|
||||
|
@ -82,3 +86,18 @@
|
|||
else
|
||||
newUrl = gl.utils.mergeUrlParams(newParams, initialUrl)
|
||||
$(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)
|
||||
for paramName, paramValue of params
|
||||
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"
|
||||
else
|
||||
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
|
||||
|
||||
# removes parameter query string from url. returns the modified url
|
||||
|
|
|
@ -119,7 +119,7 @@
|
|||
}
|
||||
|
||||
input {
|
||||
height: 34px;
|
||||
height: 35px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
|
|
|
@ -40,11 +40,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.issue-search-form {
|
||||
margin: 0;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
form.edit-issue {
|
||||
margin: 0;
|
||||
}
|
||||
|
|
|
@ -263,6 +263,7 @@ module ApplicationHelper
|
|||
assignee_id: params[:assignee_id],
|
||||
author_id: params[:author_id],
|
||||
sort: params[:sort],
|
||||
issue_search: params[:issue_search]
|
||||
}
|
||||
|
||||
options = exist_opts.merge(options)
|
||||
|
@ -273,15 +274,21 @@ module ApplicationHelper
|
|||
end
|
||||
end
|
||||
|
||||
params = options.compact.to_param
|
||||
|
||||
path = request.path
|
||||
path << "?#{options.to_param}"
|
||||
if add_label
|
||||
if params[:label_name].present? and params[:label_name].respond_to?('any?')
|
||||
params[:label_name].each do |label|
|
||||
path << "&label_name[]=#{label}"
|
||||
|
||||
if params != nil
|
||||
path << "?#{options.to_param}"
|
||||
if add_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
|
||||
|
||||
path
|
||||
end
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
.issues-filters
|
||||
.issues-details-filters.row-content-block.second-block
|
||||
= form_tag page_filter_path(without: [:assignee_id, :author_id, :milestone_title, :label_name]), method: :get, class: 'filter-form' do
|
||||
.issues-details-filters.gray-content-block.second-block
|
||||
= 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)
|
||||
.check-all-holder
|
||||
= 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
|
||||
= 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 a new issue