From 7ae59899d96684f95786308ce4a11c7aa2f4c6dd Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 4 Sep 2014 11:11:11 +0200 Subject: [PATCH] Improve resource loading on taskboard. --- app/coffee/modules/taskboard/main.coffee | 77 ++++++++++++------------ 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index 274b6081..06254bb7 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -53,11 +53,16 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) promise = @.loadInitialData() - promise.then () => + # On Success + promise.then => @appTitle.set("Taskboard - " + @scope.project.name) - promise.then null, -> - console.log "FAIL" #TODO + # On Error + promise.then null, (xhr) => + if xhr and xhr.status == 404 + @location.path("/not-found") + @location.replace() + return @q.reject(xhr) # TODO: Reload entire taskboard after create/edit tasks seems # a big overhead. It should be optimized in near future. @@ -72,6 +77,20 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then null, -> console.log "FAIL" # TODO + loadProject: -> + return @rs.projects.get(@scope.projectId).then (project) => + @scope.project = project + @scope.$emit('project:loaded', project) + # Not used at this momment + @scope.pointsList = _.sortBy(project.points, "order") + # @scope.roleList = _.sortBy(project.roles, "order") + @scope.pointsById = groupBy(project.points, (e) -> e.id) + @scope.roleById = groupBy(project.roles, (e) -> e.id) + @scope.taskStatusList = _.sortBy(project.task_statuses, "order") + @scope.usStatusList = _.sortBy(project.us_statuses, "order") + @scope.usStatusById = groupBy(project.us_statuses, (e) -> e.id) + return project + loadSprintStats: -> return @rs.sprints.stats(@scope.projectId, @scope.sprintId).then (stats) => totalPointsSum =_.reduce(_.values(stats.total_points), ((res, n) -> res + n), 0) @@ -100,42 +119,28 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) return sprint loadTasks: -> - return @.refreshTagsColors().then => - return @rs.tasks.list(@scope.projectId, @scope.sprintId).then (tasks) => - @scope.tasks = tasks - @scope.usTasks = {} + return @rs.tasks.list(@scope.projectId, @scope.sprintId).then (tasks) => + @scope.tasks = tasks + @scope.usTasks = {} - # Iterate over all userstories and - # null userstory for unassigned tasks - for us in _.union(@scope.userstories, [{id:null}]) - @scope.usTasks[us.id] = {} - for status in @scope.taskStatusList - @scope.usTasks[us.id][status.id] = [] + # Iterate over all userstories and + # null userstory for unassigned tasks + for us in _.union(@scope.userstories, [{id:null}]) + @scope.usTasks[us.id] = {} + for status in @scope.taskStatusList + @scope.usTasks[us.id][status.id] = [] - for task in @scope.tasks - @scope.usTasks[task.user_story][task.status].push(task) + for task in @scope.tasks + @scope.usTasks[task.user_story][task.status].push(task) - return tasks - - loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => - @scope.project = project - @scope.$emit('project:loaded', project) - # Not used at this momment - @scope.pointsList = _.sortBy(project.points, "order") - # @scope.roleList = _.sortBy(project.roles, "order") - @scope.pointsById = groupBy(project.points, (e) -> e.id) - @scope.roleById = groupBy(project.roles, (e) -> e.id) - @scope.taskStatusList = _.sortBy(project.task_statuses, "order") - @scope.usStatusList = _.sortBy(project.us_statuses, "order") - @scope.usStatusById = groupBy(project.us_statuses, (e) -> e.id) - return project + return tasks loadTaskboard: -> return @q.all([ + @.refreshTagsColors(), @.loadSprintStats(), - @.loadSprint() - ]).then(=> @.loadTasks()) + @.loadSprint().then(=> @.loadTasks()) + ]) loadInitialData: -> params = { @@ -148,13 +153,9 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.sprintId = data.milestone return data - promise.then null, => - @location.path("/not-found") - @location.replace() - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadTaskboard()) + .then(=> @q.all([@.loadUsersAndRoles(), + @.loadTaskboard()])) taskMove: (ctx, task, usId, statusId, order) -> # Remove task from old position