From a93fb7006a41cc9f0e91d9629e38b8835301f92c Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 11 Mar 2015 11:05:31 +0100 Subject: [PATCH] fix 2393 - fix if I filter by status and tag the status filter disappear - filter by status - check if the tags doesn't have an US with this status are disappear --- app/coffee/modules/backlog/filters.coffee | 2 - app/coffee/modules/backlog/main.coffee | 80 +++++++++++------------ 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/app/coffee/modules/backlog/filters.coffee b/app/coffee/modules/backlog/filters.coffee index 56199e3e..8185fdf2 100644 --- a/app/coffee/modules/backlog/filters.coffee +++ b/app/coffee/modules/backlog/filters.coffee @@ -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) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 93c84ba7..518042f2 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -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