Refactoring projects service

stable
Alejandro Alonso 2015-04-23 09:30:22 +02:00 committed by Juanfran
parent 37f3ba68a0
commit 71f8ab18e0
3 changed files with 22 additions and 52 deletions

View File

@ -1,11 +1,7 @@
DropdownProjectListDirective = (projectsService) -> DropdownProjectListDirective = (projectsService) ->
link = (scope, el, attrs, ctrl) -> link = (scope, el, attrs, ctrl) ->
scope.vm = {} scope.vm = {}
scope.vm.projects = projectsService.projects
projectsService.projectsSuscription (projects) ->
scope.vm.projects = projects
projectsService.getProjects()
directive = { directive = {
templateUrl: "navigation-bar/dropdown-project-list/dropdown-project-list.html" templateUrl: "navigation-bar/dropdown-project-list/dropdown-project-list.html"

View File

@ -14,30 +14,17 @@ ProjectsListingDirective = (projectsService) ->
itemEl = ui.item itemEl = ui.item
project = itemEl.scope().project project = itemEl.scope().project
index = itemEl.index() index = itemEl.index()
scope.sorted_project_ids = _.without(scope.sorted_project_ids, project.id) sorted_project_ids = _.map(scope.vm.projects.all, (p) -> p.id)
scope.sorted_project_ids.splice(index, 0, project.id) sorted_project_ids = _.without(sorted_project_ids, project.id)
sorted_project_ids.splice(index, 0, project.id)
sortData = [] sortData = []
for value, index in scope.sorted_project_ids for value, index in sorted_project_ids
sortData.push({"project_id": value, "order":index}) sortData.push({"project_id": value, "order":index})
projectsService.bulkUpdateProjectsOrder(sortData) projectsService.bulkUpdateProjectsOrder(sortData)
projectsService.projectsSuscription (projects) -> scope.vm.projects = projectsService.projects
scope.vm.projects = projects
scope.sorted_project_ids = _.map(projects.all, (p) -> p.id)
projectsService.getProjects(true)
"""
projectsService.fetchProjects().then (projects) ->
Object.defineProperty scope.vm, "projects", {
get: () ->
projects = projectsService.getProjects()
if projects
scope.sorted_project_ids = _.map(projects.all, (p) -> p.id)
return projects
}
"""
directive = { directive = {
templateUrl: "projects/listing/listing.html" templateUrl: "projects/listing/listing.html"
scope: {} scope: {}

View File

@ -1,43 +1,30 @@
class ProjectsService extends taiga.Service class ProjectsService extends taiga.Service
@.$inject = ["$q", "$tgResources", "$rootScope", "$projectUrl"] @.$inject = ["$q", "$tgResources", "$rootScope", "$projectUrl"]
constructor: (@q, @rs, @rootscope, @projectUrl) -> constructor: (@q, @rs, @rootScope, @projectUrl) ->
@.projects = {all: [], recent: []}
@.inProgress = false
@.projectsPromise = null @.projectsPromise = null
@.projects = null @.fetchProjects()
@.callbacks = []
projectsSuscription: (callback) -> fetchProjects: ->
@.callbacks.push(callback) console.log "fetchProjects", @.inProgress
if not @.inProgress
notifySuscriptors: -> @.inProgress = true
for callback in @.callbacks @.projectsPromise = @rs.projects.listByMember(@rootScope.user?.id).then (projects) =>
callback(@.projects)
fetchProjects: (updateSuscriptors = true) ->
@.projectsPromise = @rs.projects.listByMember(@rootscope.user?.id).then (projects) =>
for project in projects for project in projects
project.url = @projectUrl.get(project) project.url = @projectUrl.get(project)
@.projects = {'recents': projects.slice(0, 8), 'all': projects} @.projects.recents = projects.slice(0, 8)
if updateSuscriptors @.projects.all = projects
@.notifySuscriptors()
return @.projects return @.projects
@.projectsPromise.then () =>
@.inProgress = false
return @.projectsPromise return @.projectsPromise
getProjects: (updateSuscriptors = false) ->
if not @.projectsPromise?
promise = @.fetchProjects(not updateSuscriptors)
else
promise = @.projectsPromise
if updateSuscriptors
promise.then =>
@.notifySuscriptors()
return promise
bulkUpdateProjectsOrder: (sortData) -> bulkUpdateProjectsOrder: (sortData) ->
@rs.projects.bulkUpdateOrder(sortData).then => @rs.projects.bulkUpdateOrder(sortData).then =>
@.fetchProjects() @.fetchProjects()