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