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

View File

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

View File

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