From 4e7c1ce90f9cf29d14945ffd2a3e0bdeeb6336d4 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 5 May 2015 12:18:45 +0200 Subject: [PATCH] immutable service properties --- app/modules/home/home.service.coffee | 24 +++++++++++++------- app/modules/home/home.service.spec.coffee | 12 ++++++++-- app/modules/projects/projects.service.coffee | 22 ++++++++++-------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/app/modules/home/home.service.coffee b/app/modules/home/home.service.coffee index 42f245ba..c6123c4c 100644 --- a/app/modules/home/home.service.coffee +++ b/app/modules/home/home.service.coffee @@ -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) diff --git a/app/modules/home/home.service.spec.coffee b/app/modules/home/home.service.spec.coffee index 22a0f3d6..f2cb34ce 100644 --- a/app/modules/home/home.service.spec.coffee +++ b/app/modules/home/home.service.spec.coffee @@ -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 diff --git a/app/modules/projects/projects.service.coffee b/app/modules/projects/projects.service.coffee index 9699faf8..a2ea2ef8 100644 --- a/app/modules/projects/projects.service.coffee +++ b/app/modules/projects/projects.service.coffee @@ -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", {