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) selectedFilters.push(filter)
$scope.$apply -> $scope.$apply ->
$ctrl.selectFilter(type, id) $ctrl.selectFilter(type, id)
$ctrl.filterVisibleUserstories()
else else
selectedFilters = _.reject(selectedFilters, filter) selectedFilters = _.reject(selectedFilters, filter)
$scope.$apply -> $scope.$apply ->
$ctrl.unselectFilter(type, id) $ctrl.unselectFilter(type, id)
$ctrl.filterVisibleUserstories()
renderSelectedFilters(selectedFilters) 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 # NOTE: Fix order of USs because the filter orderBy does not work propertly in the partials files
@scope.userstories = _.sortBy(userstories, "backlog_order") @scope.userstories = _.sortBy(userstories, "backlog_order")
@.generateFilters() @.setSearchDataFilters()
@.filterVisibleUserstories() @.filterVisibleUserstories()
@.generateFilters()
@rootscope.$broadcast("filters:loaded", @scope.filters) @rootscope.$broadcast("filters:loaded", @scope.filters)
# The broadcast must be executed when the DOM has been fully reloaded. # 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 = [] @scope.visibleUserstories = []
# Filter by tags # Filter by tags
selectedTags = _.filter(@scope.filters.tags, "selected") @scope.visibleUserstories = _.reject @scope.userstories, (us) =>
selectedTags = _.map(selectedTags, "name") return _.some us.tags, (tag) =>
return @isFilterSelected("tag", tag)
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
# Filter by status # Filter by status
selectedStatuses = _.filter(@scope.filters.statuses, "selected") @scope.visibleUserstories = _.filter @scope.visibleUserstories, (us) =>
selectedStatuses = _.map(selectedStatuses, "id") if @searchdata["statuses"] && Object.keys(@searchdata["statuses"]).length
return @isFilterSelected("statuses", taiga.toString(us.status))
if selectedStatuses.length > 0 return true
@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
})
prepareBulkUpdateData: (uses, field="backlog_order") -> prepareBulkUpdateData: (uses, field="backlog_order") ->
return _.map(uses, (x) -> {"us_id": x.id, "order": x[field]}) 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 return promise
getUrlFilters: -> isFilterSelected: (type, id) ->
return _.pick(@location.search(), "statuses", "tags", "q") if @searchdata[type]? and @searchdata[type][id]
return true
return false
generateFilters: -> setSearchDataFilters: () ->
urlfilters = @.getUrlFilters() urlfilters = @.getUrlFilters()
if urlfilters.q if urlfilters.q
@scope.filtersQ = @scope.filtersQ or urlfilters.q @scope.filtersQ = @scope.filtersQ or urlfilters.q
searchdata = {} @searchdata = {}
for name, value of urlfilters for name, value of urlfilters
if not searchdata[name]? if not @searchdata[name]?
searchdata[name] = {} @searchdata[name] = {}
for val in taiga.toString(value).split(",") for val in taiga.toString(value).split(",")
searchdata[name][val] = true @searchdata[name][val] = true
isSelected = (type, id) -> getUrlFilters: ->
if searchdata[type]? and searchdata[type][id] return _.pick(@location.search(), "statuses", "tags", "q")
return true
return false
generateFilters: ->
@scope.filters = {} @scope.filters = {}
plainTags = _.flatten(_.filter(_.map(@scope.userstories, "tags"))) #tags
plainTags = _.flatten(_.filter(_.map(@scope.visibleUserstories, "tags")))
plainTags.sort() plainTags.sort()
@scope.filters.tags = _.map _.countBy(plainTags), (v, k) => @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], color: @scope.project.tags_colors[k],
count: v count: v
} }
obj.selected = true if isSelected("tags", obj.id) obj.selected = true if @isFilterSelected("tags", obj.id)
return obj 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) => plainStatuses = _.filter plainStatuses, (status) =>
if status if status
@ -480,11 +471,20 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F
color: @scope.usStatusById[k].color, color: @scope.usStatusById[k].color,
count:v count:v
} }
obj.selected = true if isSelected("statuses", obj.id) obj.selected = true if @isFilterSelected("statuses", obj.id)
return obj 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 ## Template actions