diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index dd7290ab..c23ba6cb 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -57,6 +57,15 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga "tgFilterRemoteStorageService" ] + excludePrefix: "exclude_" + filterCategories: [ + "tags", + "status", + "assigned_to", + "owner", + "role", + ] + constructor: (@scope, @rootscope, @repo, @confirm, @rs, @rs2, @params, @q, @appMetaService, @location, @navUrls, @events, @analytics, @translate, @errorHandlingService, @taskboardTasksService, @taskboardIssuesService, @storage, @filterRemoteStorageService) -> @@ -115,12 +124,12 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga @.generateFilters() removeFilter: (filter) -> - @.unselectFilter(filter.dataType, filter.id) + @.unselectFilter(filter.dataType, filter.id, false, filter.mode) @.loadTasks() @.generateFilters() addFilter: (newFilter) -> - @.selectFilter(newFilter.category.dataType, newFilter.filter.id) + @.selectFilter(newFilter.category.dataType, newFilter.filter.id, false, newFilter.mode) @.loadTasks() @.generateFilters() @@ -144,11 +153,10 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga saveCustomFilter: (name) -> filters = {} urlfilters = @location.search() - filters.tags = urlfilters.tags - filters.status = urlfilters.status - filters.assigned_to = urlfilters.assigned_to - filters.owner = urlfilters.owner - filters.role = urlfilters.role + for key in @.filterCategories + excludeKey = @.excludePrefix.concat(key) + filters[key] = urlfilters[key] + filters[excludeKey] = urlfilters[excludeKey] @filterRemoteStorageService.getFilters(@scope.projectId, 'tasks-custom-filters').then (userFilters) => userFilters[name] = filters @@ -163,33 +171,34 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga loadFilters = {} loadFilters.project = @scope.projectId loadFilters.milestone = @scope.sprintId - loadFilters.tags = urlfilters.tags - loadFilters.status = urlfilters.status - loadFilters.assigned_to = urlfilters.assigned_to - loadFilters.owner = urlfilters.owner - loadFilters.role = urlfilters.role loadFilters.q = urlfilters.q + for key in @.filterCategories + excludeKey = @.excludePrefix.concat(key) + loadFilters[key] = urlfilters[key] + loadFilters[excludeKey] = urlfilters[excludeKey] + return @q.all([ @rs.tasks.filtersData(loadFilters), @filterRemoteStorageService.getFilters(@scope.projectId, 'tasks-custom-filters') ]).then (result) => data = result[0] customFiltersRaw = result[1] + dataCollection = {} - statuses = _.map data.statuses, (it) -> + dataCollection.status = _.map data.statuses, (it) -> it.id = it.id.toString() return it - tags = _.map data.tags, (it) -> + dataCollection.tags = _.map data.tags, (it) -> it.id = it.name return it - tagsWithAtLeastOneElement = _.filter tags, (tag) -> + tagsWithAtLeastOneElement = _.filter dataCollection.tags, (tag) -> return tag.count > 0 - assignedTo = _.map data.assigned_to, (it) -> + dataCollection.assigned_to = _.map data.assigned_to, (it) -> if it.id it.id = it.id.toString() else @@ -198,7 +207,7 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga it.name = it.full_name || "Unassigned" return it - role = _.map data.roles, (it) -> + dataCollection.role = _.map data.roles, (it) -> if it.id it.id = it.id.toString() else @@ -207,7 +216,7 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga it.name = it.name || "Unassigned" return it - owner = _.map data.owners, (it) -> + dataCollection.owner = _.map data.owners, (it) -> it.id = it.id.toString() it.name = it.full_name @@ -215,25 +224,14 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga @.selectedFilters = [] - if loadFilters.status - selected = @.formatSelectedFilters("status", statuses, loadFilters.status) - @.selectedFilters = @.selectedFilters.concat(selected) - - if loadFilters.tags - selected = @.formatSelectedFilters("tags", tags, loadFilters.tags) - @.selectedFilters = @.selectedFilters.concat(selected) - - if loadFilters.assigned_to - selected = @.formatSelectedFilters("assigned_to", assignedTo, loadFilters.assigned_to) - @.selectedFilters = @.selectedFilters.concat(selected) - - if loadFilters.owner - selected = @.formatSelectedFilters("owner", owner, loadFilters.owner) - @.selectedFilters = @.selectedFilters.concat(selected) - - if loadFilters.role - selected = @.formatSelectedFilters("role", role, loadFilters.role) - @.selectedFilters = @.selectedFilters.concat(selected) + for key in @.filterCategories + excludeKey = @.excludePrefix.concat(key) + if loadFilters[key] + selected = @.formatSelectedFilters(key, dataCollection[key], loadFilters[key]) + @.selectedFilters = @.selectedFilters.concat(selected) + if loadFilters[excludeKey] + selected = @.formatSelectedFilters(key, dataCollection[key], loadFilters[excludeKey], "exclude") + @.selectedFilters = @.selectedFilters.concat(selected) @.filterQ = loadFilters.q @@ -241,29 +239,29 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga { title: @translate.instant("COMMON.FILTERS.CATEGORIES.STATUS"), dataType: "status", - content: statuses + content: dataCollection.status }, { title: @translate.instant("COMMON.FILTERS.CATEGORIES.TAGS"), dataType: "tags", - content: tags, + content: dataCollection.tags, hideEmpty: true, totalTaggedElements: tagsWithAtLeastOneElement.length }, { title: @translate.instant("COMMON.FILTERS.CATEGORIES.ASSIGNED_TO"), dataType: "assigned_to", - content: assignedTo + content: dataCollection.assigned_to }, { title: @translate.instant("COMMON.FILTERS.CATEGORIES.ROLE"), dataType: "role", - content: role + content: dataCollection.role }, { title: @translate.instant("COMMON.FILTERS.CATEGORIES.CREATED_BY"), dataType: "owner", - content: owner + content: dataCollection.owner } ] @@ -357,7 +355,6 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga if @.isFilterDataTypeSelected('assigned_to') || @.isFilterDataTypeSelected('role') @.loadIssues() - initializeSubscription: -> routingKey = "changes.project.#{@scope.projectId}.tasks" @events.subscribe @scope, routingKey, debounceLeading(500, (message) =>