immutable service properties

stable
Juanfran 2015-05-05 12:18:45 +02:00
parent bb6920df8f
commit 4e7c1ce90f
3 changed files with 39 additions and 19 deletions

View File

@ -1,11 +1,18 @@
class HomeService extends taiga.Service
@.$inject = ["$q", "$tgResources", "$rootScope", "$projectUrl"]
@.$inject = ["$q", "$tgResources", "$rootScope", "$projectUrl", "$tgAuth"]
constructor: (@q, @rs, @rootScope, @projectUrl) ->
@.workInProgress = Immutable.Map()
constructor: (@q, @rs, @rootScope, @projectUrl, @auth) ->
@._workInProgress = Immutable.Map()
@._projectPromise = null
@._inProgress = false
fetchWorkInProgress: (userId) ->
taiga.defineImmutableProperty @, "workInProgress", () => return @._workInProgress
@.fetchWorkInProgress()
fetchWorkInProgress: () ->
userId = @auth.getUser().id
if not @._inProgress
@._inProgress = true
params = {
@ -21,6 +28,7 @@ class HomeService extends taiga.Service
assignedIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) =>
@.assignedToIssues = issues
params = {
status__is_closed: false
watchers: userId
@ -34,12 +42,12 @@ class HomeService extends taiga.Service
watchingIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) =>
@.watchingIssues = issues
workPromise = @q.all([assignedUserStoriesPromise, assignedTasksPromise,
@._projectPromise = @q.all([assignedUserStoriesPromise, assignedTasksPromise,
assignedIssuesPromise, watchingUserStoriesPromise,
watchingUserStoriesPromise, watchingIssuesPromise])
workPromise.then =>
@.workInProgress = Immutable.fromJS({
@._projectPromise.then =>
@._workInProgress = Immutable.fromJS({
assignedTo: {
userStories: @.assignedToUserStories
tasks: @.assignedToTasks
@ -54,6 +62,6 @@ class HomeService extends taiga.Service
@._inProgress = false
return workPromise
return @._projectPromise
angular.module("taigaHome").service("tgHomeService", HomeService)

View File

@ -67,6 +67,15 @@ describe "tgHome", ->
provide.value "$projectUrl", mocks.projectUrl
_mockAuth = () ->
mocks.auth = {
getUser: sinon.stub()
}
mocks.auth.getUser.returns(id: 1)
provide.value "$tgAuth", mocks.auth
_inject = (callback) ->
inject (_$q_, _$tgResources_, _$rootScope_, _$projectUrl_, _$timeout_, _tgHomeService_) ->
timeout = _$timeout_
@ -78,6 +87,7 @@ describe "tgHome", ->
provide = $provide
_mockResources()
_mockProjectUrl()
_mockAuth()
return null
_setup = ->
@ -90,7 +100,6 @@ describe "tgHome", ->
describe "fetch items", ->
it "work in progress filled", () ->
homeService.fetchWorkInProgress(1)
mocks.thenStubAssignedToUserstories.callArg(0, [{"id": 1}])
mocks.thenStubAssignedToTasks.callArg(0, [{"id": 2}])
mocks.thenStubAssignedToIssues.callArg(0, [{"id": 3}])
@ -113,7 +122,6 @@ describe "tgHome", ->
})
it "_inProgress change to false when tgResources end", () ->
homeService.fetchWorkInProgress(1)
expect(homeService._inProgress).to.be.true
timeout.flush()
expect(homeService._inProgress).to.be.false

View File

@ -5,34 +5,38 @@ class ProjectsService extends taiga.Service
@.$inject = ["$tgResources", "$rootScope", "$projectUrl", "tgLightboxFactory"]
constructor: (@rs, @rootScope, @projectUrl, @lightboxFactory) ->
@.projects = Immutable.Map()
@.projectsById = Immutable.Map()
@._projects = Immutable.Map()
@._projectsById = Immutable.Map()
@._inProgress = false
@.projectsPromise = null
@._projectsPromise = null
taiga.defineImmutableProperty @, "projects", () => return @._projects
taiga.defineImmutableProperty @, "projectsById", () => return @._projectsById
@.fetchProjects()
fetchProjects: ->
if not @._inProgress
@._inProgress = true
@.projectsPromise = @rs.projects.listByMember(@rootScope.user?.id)
@.projectsPromise.then (projects) =>
@._projectsPromise = @rs.projects.listByMember(@rootScope.user?.id)
@._projectsPromise.then (projects) =>
for project in projects
project.url = @projectUrl.get(project)
@.projects = Immutable.fromJS({
@._projects = Immutable.fromJS({
all: projects,
recents: projects.slice(0, 10)
})
@.projectsById = Immutable.fromJS(groupBy(projects, (p) -> p.id))
@._projectsById = Immutable.fromJS(groupBy(projects, (p) -> p.id))
return @.projects
@.projectsPromise.finally =>
@._projectsPromise.finally =>
@._inProgress = false
return @.projectsPromise
return @._projectsPromise
newProject: ->
@lightboxFactory.create("tg-lb-create-project", {