Merge pull request #381 from taigaio/issue/2393/status-filter-disappear

fix 2393 - fix if I filter by status and tag the status filter disappear
stable
Alejandro 2015-03-11 12:08:14 +01:00
commit 01d567f277
2 changed files with 40 additions and 42 deletions

View File

@ -89,12 +89,10 @@ BacklogFiltersDirective = ($log, $location, $templates) ->
selectedFilters.push(filter)
$scope.$apply ->
$ctrl.selectFilter(type, id)
$ctrl.filterVisibleUserstories()
else
selectedFilters = _.reject(selectedFilters, filter)
$scope.$apply ->
$ctrl.unselectFilter(type, id)
$ctrl.filterVisibleUserstories()
renderSelectedFilters(selectedFilters)

View File

@ -204,8 +204,9 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
# NOTE: Fix order of USs because the filter orderBy does not work propertly in the partials files
@scope.userstories = _.sortBy(userstories, "backlog_order")
@.generateFilters()
@.setSearchDataFilters()
@.filterVisibleUserstories()
@.generateFilters()
@rootscope.$broadcast("filters:loaded", @scope.filters)
# The broadcast must be executed when the DOM has been fully reloaded.
@ -246,32 +247,16 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
@scope.visibleUserstories = []
# Filter by tags
selectedTags = _.filter(@scope.filters.tags, "selected")
selectedTags = _.map(selectedTags, "name")
if selectedTags.length == 0
@scope.visibleUserstories = _.clone(@scope.userstories, false)
else
@scope.visibleUserstories = _.reject @scope.userstories, (us) =>
if _.intersection(selectedTags, us.tags).length == 0
return true
return false
@scope.visibleUserstories = _.reject @scope.userstories, (us) =>
return _.some us.tags, (tag) =>
return @isFilterSelected("tag", tag)
# Filter by status
selectedStatuses = _.filter(@scope.filters.statuses, "selected")
selectedStatuses = _.map(selectedStatuses, "id")
@scope.visibleUserstories = _.filter @scope.visibleUserstories, (us) =>
if @searchdata["statuses"] && Object.keys(@searchdata["statuses"]).length
return @isFilterSelected("statuses", taiga.toString(us.status))
if selectedStatuses.length > 0
@scope.visibleUserstories = _.reject @scope.visibleUserstories, (us) =>
res = _.find(selectedStatuses, (x) -> x == taiga.toString(us.status))
return not res
@rs.userstories.storeQueryParams(@scope.projectId, {
"status": selectedStatuses,
"tags": selectedTags,
"project": @scope.projectId
"milestone": null
})
return true
prepareBulkUpdateData: (uses, field="backlog_order") ->
return _.map(uses, (x) -> {"us_id": x.id, "order": x[field]})
@ -428,31 +413,33 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
return promise
getUrlFilters: ->
return _.pick(@location.search(), "statuses", "tags", "q")
isFilterSelected: (type, id) ->
if @searchdata[type]? and @searchdata[type][id]
return true
return false
generateFilters: ->
setSearchDataFilters: () ->
urlfilters = @.getUrlFilters()
if urlfilters.q
@scope.filtersQ = @scope.filtersQ or urlfilters.q
searchdata = {}
@searchdata = {}
for name, value of urlfilters
if not searchdata[name]?
searchdata[name] = {}
if not @searchdata[name]?
@searchdata[name] = {}
for val in taiga.toString(value).split(",")
searchdata[name][val] = true
@searchdata[name][val] = true
isSelected = (type, id) ->
if searchdata[type]? and searchdata[type][id]
return true
return false
getUrlFilters: ->
return _.pick(@location.search(), "statuses", "tags", "q")
generateFilters: ->
@scope.filters = {}
plainTags = _.flatten(_.filter(_.map(@scope.userstories, "tags")))
#tags
plainTags = _.flatten(_.filter(_.map(@scope.visibleUserstories, "tags")))
plainTags.sort()
@scope.filters.tags = _.map _.countBy(plainTags), (v, k) =>
@ -463,10 +450,14 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
color: @scope.project.tags_colors[k],
count: v
}
obj.selected = true if isSelected("tags", obj.id)
obj.selected = true if @isFilterSelected("tags", obj.id)
return obj
plainStatuses = _.map(@scope.userstories, "status")
selectedTags = _.filter(@scope.filters.tags, "selected")
selectedTags = _.map(selectedTags, "name")
#status
plainStatuses = _.map(@scope.visibleUserstories, "status")
plainStatuses = _.filter plainStatuses, (status) =>
if status
@ -480,11 +471,20 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
color: @scope.usStatusById[k].color,
count:v
}
obj.selected = true if isSelected("statuses", obj.id)
obj.selected = true if @isFilterSelected("statuses", obj.id)
return obj
return @scope.filters
selectedStatuses = _.filter(@scope.filters.statuses, "selected")
selectedStatuses = _.map(selectedStatuses, "id")
#store query params
@rs.userstories.storeQueryParams(@scope.projectId, {
"status": selectedStatuses,
"tags": selectedTags,
"project": @scope.projectId
"milestone": null
})
## Template actions