Add ordering implementation to issues list.
parent
3fb545edf2
commit
18318d4e75
|
@ -28,6 +28,7 @@ joinStr = @.taiga.joinStr
|
|||
groupBy = @.taiga.groupBy
|
||||
bindOnce = @.taiga.bindOnce
|
||||
debounce = @.taiga.debounce
|
||||
startswith = @.taiga.startswith
|
||||
|
||||
module = angular.module("taigaIssues")
|
||||
|
||||
|
@ -77,22 +78,32 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
|
|||
return project
|
||||
|
||||
getUrlFilters: ->
|
||||
filters = _.pick(@location.search(), "page", "tags", "statuses", "types", "subject",
|
||||
"severities", "priorities", "assignedTo")
|
||||
filters = _.pick(@location.search(), "page", "tags", "statuses", "types",
|
||||
"subject", "severities", "priorities",
|
||||
"assignedTo", "orderBy")
|
||||
filters.page = 1 if not filters.page
|
||||
return filters
|
||||
|
||||
loadFilters: ->
|
||||
return @rs.issues.filtersData(@scope.projectId).then (data) =>
|
||||
urlfilters = @.getUrlFilters()
|
||||
getUrlFilter: (name) ->
|
||||
filters = _.pick(@location.search(), name)
|
||||
return filters[name]
|
||||
|
||||
loadFilters: ->
|
||||
# This function is executed only once when page is loads and
|
||||
# it needs create all filters structure and know that
|
||||
# filters are selected from url params.
|
||||
urlfilters = @.getUrlFilters()
|
||||
|
||||
if urlfilters.subject
|
||||
@scope.filtersSubject = urlfilters.subject
|
||||
|
||||
return @rs.issues.filtersData(@scope.projectId).then (data) =>
|
||||
# Build selected filters (from url) fast lookup data structure
|
||||
searchdata = {}
|
||||
|
||||
for name, value of urlfilters
|
||||
if name == "page"
|
||||
continue
|
||||
|
||||
for name, value of _.omit(urlfilters, "page", "orderBy")
|
||||
# if name == "page" or name == "orderBy"
|
||||
# continue
|
||||
if not searchdata[name]?
|
||||
searchdata[name] = {}
|
||||
|
||||
|
@ -135,38 +146,33 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
|
|||
obj.selected = true if isSelected("statuses", obj.id)
|
||||
return obj
|
||||
|
||||
if urlfilters.subject
|
||||
@scope.filtersSubject = urlfilters.subject
|
||||
|
||||
@rootscope.$broadcast("filters:loaded", @scope.filters)
|
||||
return data
|
||||
|
||||
# Convert stored filters to http parameters
|
||||
# ready filters (the name difference exists
|
||||
# because of some automatic lookups and is
|
||||
# the simplest way todo it without adding
|
||||
# additional complexity to code.
|
||||
prepareFilters: ->
|
||||
filters = {}
|
||||
loadIssues: ->
|
||||
@scope.urlFilters = @.getUrlFilters()
|
||||
|
||||
for name, values of @.getUrlFilters()
|
||||
# Convert stored filters to http parameters
|
||||
# ready filters (the name difference exists
|
||||
# because of some automatic lookups and is
|
||||
# the simplest way todo it without adding
|
||||
# additional complexity to code.
|
||||
@scope.httpParams = {}
|
||||
for name, values of @scope.urlFilters
|
||||
if name == "severities"
|
||||
name = "severity"
|
||||
else if name == "orderBy"
|
||||
name = "order_by"
|
||||
else if name == "priorities"
|
||||
name = "priority"
|
||||
else if name == "assignedTo"
|
||||
name = "assigned_to"
|
||||
else if name == "statuses"
|
||||
name = "status"
|
||||
@scope.httpParams[name] = values
|
||||
|
||||
filters[name] = values
|
||||
|
||||
return filters
|
||||
|
||||
loadIssues: ->
|
||||
filters = @.prepareFilters()
|
||||
|
||||
promise = @rs.issues.list(@scope.projectId, filters).then (data) =>
|
||||
console.log "prepared filters", @scope.httpParams
|
||||
promise = @rs.issues.list(@scope.projectId, @scope.httpParams).then (data) =>
|
||||
@scope.issues = data.models
|
||||
@scope.page = data.current
|
||||
@scope.count = data.count
|
||||
|
@ -319,9 +325,28 @@ IssuesDirective = ($log, $location) ->
|
|||
## Issues Filters
|
||||
#########################
|
||||
|
||||
linkFilters = ($scope, $el, $attrs, $ctrl) ->
|
||||
$scope.filters = {}
|
||||
$scope.selectedFilters = []
|
||||
linkOrdering = ($scope, $el, $attrs, $ctrl) ->
|
||||
$el.on "click", ".row.title > div", (event) ->
|
||||
target = angular.element(event.currentTarget)
|
||||
|
||||
currentOrder = $ctrl.getUrlFilter("orderBy")
|
||||
newOrder = target.data("fieldname")
|
||||
finalOrder = newOrder
|
||||
|
||||
if currentOrder is undefined
|
||||
finalOrder = newOrder
|
||||
else
|
||||
reverse = true
|
||||
if startswith(currentOrder, "-")
|
||||
reverse = false
|
||||
currentOrder = trim(currentOrder, "-")
|
||||
|
||||
if currentOrder == newOrder
|
||||
finalOrder = if reverse then "-#{newOrder}" else newOrder
|
||||
|
||||
$scope.$apply ->
|
||||
$ctrl.replaceFilter("orderBy", finalOrder)
|
||||
$ctrl.loadIssues()
|
||||
|
||||
#########################
|
||||
## Issues Link
|
||||
|
@ -329,9 +354,12 @@ IssuesDirective = ($log, $location) ->
|
|||
|
||||
link = ($scope, $el, $attrs) ->
|
||||
$ctrl = $el.controller()
|
||||
linkFilters($scope, $el, $attrs, $ctrl)
|
||||
linkOrdering($scope, $el, $attrs, $ctrl)
|
||||
linkPagination($scope, $el, $attrs, $ctrl)
|
||||
|
||||
$scope.$on "$destroy", ->
|
||||
$el.off()
|
||||
|
||||
return {link:link}
|
||||
|
||||
#############################################################################
|
||||
|
|
|
@ -92,6 +92,8 @@ joinStr = (str, coll) ->
|
|||
debounce = (wait, func) ->
|
||||
return _.debounce(func, wait)
|
||||
|
||||
startswith = (str1, str2) ->
|
||||
return _.str.startsWith(str1, str2)
|
||||
|
||||
taiga = @.taiga
|
||||
taiga.bindOnce = bindOnce
|
||||
|
@ -105,3 +107,4 @@ taiga.scopeDefer = scopeDefer
|
|||
taiga.toString = toString
|
||||
taiga.joinStr = joinStr
|
||||
taiga.debounce = debounce
|
||||
taiga.startswith = startswith
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
section.issues-table.basic-table
|
||||
div.row.title
|
||||
div.level-field Severity
|
||||
div.level-field Priority
|
||||
div.subject Subject
|
||||
div.issue-field Status
|
||||
div.assigned-field Assigned to
|
||||
div.level-field(data-fieldname="severity") Severity
|
||||
div.level-field(data-fieldname="priority") Priority
|
||||
div.subject(data-fieldname="subject") Subject
|
||||
div.issue-field(data-fieldname="status") Status
|
||||
div.assigned-field(data-fieldname="assigned_to") Assigned to
|
||||
div.row.table-main(ng-repeat="issue in issues track by issue.id")
|
||||
div.level-field(tg-listitem-severity="issue")
|
||||
div.level-field(tg-listitem-priority="issue")
|
||||
|
|
Loading…
Reference in New Issue