adapt taskboard filter for use include/exclude modes

stable
Héctor Fernández Cascallar 2019-01-10 17:33:50 +01:00 committed by Alex Hermida
parent 7b2c266eea
commit e3803af3a5
1 changed files with 40 additions and 43 deletions

View File

@ -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,24 +224,13 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga
@.selectedFilters = []
if loadFilters.status
selected = @.formatSelectedFilters("status", statuses, loadFilters.status)
for key in @.filterCategories
excludeKey = @.excludePrefix.concat(key)
if loadFilters[key]
selected = @.formatSelectedFilters(key, dataCollection[key], loadFilters[key])
@.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)
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) =>