fix profile projects tags
parent
25d3cdadce
commit
623b562192
|
@ -1,20 +1,20 @@
|
||||||
class ProfileProjectsController
|
class ProfileProjectsController
|
||||||
@.$inject = [
|
@.$inject = [
|
||||||
|
"tgProjectsService",
|
||||||
"tgUserService",
|
"tgUserService",
|
||||||
"$tgAuth"
|
"$tgAuth"
|
||||||
]
|
]
|
||||||
|
|
||||||
constructor: (@userService, @auth) ->
|
constructor: (@projectsService, @userService, @auth) ->
|
||||||
|
|
||||||
loadProjects: () ->
|
loadProjects: () ->
|
||||||
userId = @auth.getUser().id
|
userId = @auth.getUser().id
|
||||||
|
|
||||||
@userService.getProjects(userId)
|
@projectsService.getProjectsByUserId(userId)
|
||||||
.then (projects) =>
|
.then (projects) =>
|
||||||
return @userService.attachUserContactsToProjects(userId, projects)
|
return @userService.attachUserContactsToProjects(userId, projects)
|
||||||
.then (projects) =>
|
.then (projects) =>
|
||||||
@.projects = projects
|
@.projects = projects
|
||||||
console.log @.projects.toJS()
|
|
||||||
|
|
||||||
angular.module("taigaProfile")
|
angular.module("taigaProfile")
|
||||||
.controller("ProfileProjects", ProfileProjectsController)
|
.controller("ProfileProjects", ProfileProjectsController)
|
||||||
|
|
|
@ -7,12 +7,18 @@ describe "ProfileProjects", ->
|
||||||
|
|
||||||
_mockUserService = () ->
|
_mockUserService = () ->
|
||||||
mocks.userService = {
|
mocks.userService = {
|
||||||
getProjects: sinon.stub(),
|
|
||||||
attachUserContactsToProjects: sinon.stub()
|
attachUserContactsToProjects: sinon.stub()
|
||||||
}
|
}
|
||||||
|
|
||||||
provide.value "tgUserService", mocks.userService
|
provide.value "tgUserService", mocks.userService
|
||||||
|
|
||||||
|
_mockProjectsService = () ->
|
||||||
|
mocks.projectsService = {
|
||||||
|
getProjectsByUserId: sinon.stub()
|
||||||
|
}
|
||||||
|
|
||||||
|
provide.value "tgProjectsService", mocks.projectsService
|
||||||
|
|
||||||
_mockAuthService = () ->
|
_mockAuthService = () ->
|
||||||
stub = sinon.stub()
|
stub = sinon.stub()
|
||||||
|
|
||||||
|
@ -27,6 +33,7 @@ describe "ProfileProjects", ->
|
||||||
provide = $provide
|
provide = $provide
|
||||||
_mockUserService()
|
_mockUserService()
|
||||||
_mockAuthService()
|
_mockAuthService()
|
||||||
|
_mockProjectsService()
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
@ -55,7 +62,7 @@ describe "ProfileProjects", ->
|
||||||
{id: 3, contacts: "fake"}
|
{id: 3, contacts: "fake"}
|
||||||
]
|
]
|
||||||
|
|
||||||
mocks.userService.getProjects = (userId) ->
|
mocks.projectsService.getProjectsByUserId = (userId) ->
|
||||||
expect(userId).to.be.equal(userId)
|
expect(userId).to.be.equal(userId)
|
||||||
|
|
||||||
return $q (resolve, reject) ->
|
return $q (resolve, reject) ->
|
||||||
|
|
|
@ -2,9 +2,9 @@ taiga = @.taiga
|
||||||
groupBy = @.taiga.groupBy
|
groupBy = @.taiga.groupBy
|
||||||
|
|
||||||
class ProjectsService extends taiga.Service
|
class ProjectsService extends taiga.Service
|
||||||
@.$inject = ["tgResources", "$rootScope", "$projectUrl", "tgLightboxFactory"]
|
@.$inject = ["tgResources", "$tgAuth", "$projectUrl", "tgLightboxFactory"]
|
||||||
|
|
||||||
constructor: (@rs, @rootScope, @projectUrl, @lightboxFactory) ->
|
constructor: (@rs, @auth, @projectUrl, @lightboxFactory) ->
|
||||||
@._currentUserProjects = Immutable.Map()
|
@._currentUserProjects = Immutable.Map()
|
||||||
@._currentUserProjectsById = Immutable.Map()
|
@._currentUserProjectsById = Immutable.Map()
|
||||||
@._inProgress = false
|
@._inProgress = false
|
||||||
|
@ -24,30 +24,35 @@ class ProjectsService extends taiga.Service
|
||||||
getProjectStats: (projectId) ->
|
getProjectStats: (projectId) ->
|
||||||
return @rs.projects.getProjectStats(projectId)
|
return @rs.projects.getProjectStats(projectId)
|
||||||
|
|
||||||
|
getProjectsByUserId: (userId) ->
|
||||||
|
return @rs.projects.getProjectsByUserId(userId)
|
||||||
|
.then (projects) =>
|
||||||
|
return @._decorate(projects)
|
||||||
|
|
||||||
|
_decorate: (projects) ->
|
||||||
|
return projects.map (project) =>
|
||||||
|
url = @projectUrl.get(project.toJS())
|
||||||
|
|
||||||
|
project = project.set("url", url)
|
||||||
|
colorized_tags = []
|
||||||
|
|
||||||
|
if project.get("tags")
|
||||||
|
tags = project.get("tags").sort()
|
||||||
|
|
||||||
|
colorized_tags = tags.map (tag) ->
|
||||||
|
color = project.get("tags_colors").get(tag)
|
||||||
|
return Immutable.fromJS({name: tag, color: color})
|
||||||
|
|
||||||
|
project = project.set("colorized_tags", colorized_tags)
|
||||||
|
|
||||||
|
return project
|
||||||
|
|
||||||
fetchProjects: ->
|
fetchProjects: ->
|
||||||
if not @._inProgress
|
if not @._inProgress
|
||||||
@._inProgress = true
|
@._inProgress = true
|
||||||
|
|
||||||
@._currentUserProjectsPromise = @rs.users.getProjects(@rootScope.user?.id)
|
@._currentUserProjectsPromise = @.getProjectsByUserId(@auth.userData.get("id"))
|
||||||
@._currentUserProjectsPromise.then (projects) =>
|
@._currentUserProjectsPromise.then (projects) =>
|
||||||
projects = projects.map (project) =>
|
|
||||||
url = @projectUrl.get(project.toJS())
|
|
||||||
|
|
||||||
project = project.set("url", url)
|
|
||||||
colorized_tags = []
|
|
||||||
|
|
||||||
if project.get("tags")
|
|
||||||
tags = project.get("tags").sort()
|
|
||||||
|
|
||||||
colorized_tags = tags.map (tag) ->
|
|
||||||
color = project.get("tags_colors").get(tag)
|
|
||||||
return Immutable.fromJS({name: tag, color: color})
|
|
||||||
|
|
||||||
project = project.set("colorized_tags", colorized_tags)
|
|
||||||
|
|
||||||
return project
|
|
||||||
|
|
||||||
|
|
||||||
@._currentUserProjects = @._currentUserProjects.set("all", projects)
|
@._currentUserProjects = @._currentUserProjects.set("all", projects)
|
||||||
@._currentUserProjects = @._currentUserProjects.set("recents", projects.slice(0, 10))
|
@._currentUserProjects = @._currentUserProjects.set("recents", projects.slice(0, 10))
|
||||||
|
|
||||||
|
@ -69,4 +74,5 @@ class ProjectsService extends taiga.Service
|
||||||
@rs.projects.bulkUpdateOrder(sortData).then =>
|
@rs.projects.bulkUpdateOrder(sortData).then =>
|
||||||
@.fetchProjects()
|
@.fetchProjects()
|
||||||
|
|
||||||
angular.module("taigaProjects").service("tgProjectsService", ProjectsService)
|
angular.module("taigaProjects").service("tgProjectsService
|
||||||
|
", ProjectsService)
|
||||||
|
|
|
@ -1,26 +1,23 @@
|
||||||
describe "tgProjects", ->
|
describe "tgProjects", ->
|
||||||
projectsService = provide = null
|
projectsService = provide = $rootScope = null
|
||||||
|
$q = null
|
||||||
mocks = {}
|
mocks = {}
|
||||||
|
|
||||||
_mockResources = () ->
|
_mockResources = () ->
|
||||||
mocks.resources = {}
|
mocks.resources = {}
|
||||||
|
|
||||||
mocks.resources.users = {
|
mocks.resources.projects = {}
|
||||||
getProjects: sinon.stub()
|
|
||||||
}
|
|
||||||
|
|
||||||
mocks.thenStub = sinon.stub()
|
mocks.resources.projects.getProjectsByUserId = () ->
|
||||||
mocks.finallyStub = sinon.stub()
|
return $q (resolve) ->
|
||||||
|
resolve(Immutable.fromJS([]))
|
||||||
mocks.resources.users.getProjects.withArgs(10).returns({
|
|
||||||
then: mocks.thenStub
|
|
||||||
finally: mocks.finallyStub
|
|
||||||
})
|
|
||||||
|
|
||||||
provide.value "tgResources", mocks.resources
|
provide.value "tgResources", mocks.resources
|
||||||
|
|
||||||
_mockRootScope = () ->
|
_mockAuthService = () ->
|
||||||
provide.value "$rootScope", {user: {id: 10}}
|
mocks.auth = {userData: Immutable.fromJS({id: 10})}
|
||||||
|
|
||||||
|
provide.value "$tgAuth", mocks.auth
|
||||||
|
|
||||||
_mockProjectUrl = () ->
|
_mockProjectUrl = () ->
|
||||||
mocks.projectUrl = {get: sinon.stub()}
|
mocks.projectUrl = {get: sinon.stub()}
|
||||||
|
@ -38,6 +35,12 @@ describe "tgProjects", ->
|
||||||
provide.value "tgLightboxFactory", mocks.lightboxFactory
|
provide.value "tgLightboxFactory", mocks.lightboxFactory
|
||||||
|
|
||||||
_inject = (callback) ->
|
_inject = (callback) ->
|
||||||
|
inject (_$q_, _$rootScope_) ->
|
||||||
|
$q = _$q_
|
||||||
|
$rootScope = _$rootScope_
|
||||||
|
callback() if callback
|
||||||
|
|
||||||
|
_injectService = (callback) ->
|
||||||
inject (_tgProjectsService_) ->
|
inject (_tgProjectsService_) ->
|
||||||
projectsService = _tgProjectsService_
|
projectsService = _tgProjectsService_
|
||||||
callback() if callback
|
callback() if callback
|
||||||
|
@ -46,18 +49,15 @@ describe "tgProjects", ->
|
||||||
module ($provide) ->
|
module ($provide) ->
|
||||||
provide = $provide
|
provide = $provide
|
||||||
_mockResources()
|
_mockResources()
|
||||||
_mockRootScope()
|
|
||||||
_mockProjectUrl()
|
_mockProjectUrl()
|
||||||
_mockLightboxFactory()
|
_mockLightboxFactory()
|
||||||
|
_mockAuthService()
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|
||||||
_setup = ->
|
|
||||||
_mocks()
|
|
||||||
|
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
module "taigaProjects"
|
module "taigaProjects"
|
||||||
_setup()
|
_mocks()
|
||||||
_inject()
|
_inject()
|
||||||
|
|
||||||
describe "fetch items", ->
|
describe "fetch items", ->
|
||||||
|
@ -79,8 +79,15 @@ describe "tgProjects", ->
|
||||||
{"id": 12, url: 'url-12'}
|
{"id": 12, url: 'url-12'}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
mocks.resources.projects.getProjectsByUserId = () ->
|
||||||
|
return $q (resolve) ->
|
||||||
|
resolve(Immutable.fromJS(projects))
|
||||||
|
|
||||||
|
_injectService()
|
||||||
|
|
||||||
it "all & recents filled", () ->
|
it "all & recents filled", () ->
|
||||||
mocks.thenStub.callArg(0, Immutable.fromJS(projects))
|
projectsService.fetchProjects()
|
||||||
|
$rootScope.$digest()
|
||||||
|
|
||||||
expect(projectsService.currentUserProjects.get("all").toJS()).to.be.eql(projects)
|
expect(projectsService.currentUserProjects.get("all").toJS()).to.be.eql(projects)
|
||||||
expect(projectsService.currentUserProjects.get("recents").toJS()).to.be.eql(projects.slice(0, 10))
|
expect(projectsService.currentUserProjects.get("recents").toJS()).to.be.eql(projects.slice(0, 10))
|
||||||
|
@ -88,34 +95,25 @@ describe "tgProjects", ->
|
||||||
it "_inProgress change to false when tgResources end", () ->
|
it "_inProgress change to false when tgResources end", () ->
|
||||||
expect(projectsService._inProgress).to.be.true
|
expect(projectsService._inProgress).to.be.true
|
||||||
|
|
||||||
mocks.thenStub.callArg(0, Immutable.fromJS(projects))
|
$rootScope.$digest()
|
||||||
mocks.finallyStub.callArg(0)
|
|
||||||
|
|
||||||
expect(projectsService._inProgress).to.be.false
|
expect(projectsService._inProgress).to.be.false
|
||||||
|
|
||||||
it "_inProgress prevent new ajax calls", () ->
|
|
||||||
projectsService.fetchProjects()
|
|
||||||
projectsService.fetchProjects()
|
|
||||||
|
|
||||||
mocks.thenStub.callArg(0, Immutable.fromJS(projects))
|
|
||||||
|
|
||||||
expect(mocks.resources.users.getProjects).have.been.calledOnce
|
|
||||||
|
|
||||||
it "group projects by id", () ->
|
it "group projects by id", () ->
|
||||||
mocks.thenStub.callArg(0, Immutable.fromJS(projects))
|
$rootScope.$digest()
|
||||||
|
|
||||||
expect(projectsService.currentUserProjectsById.size).to.be.equal(12)
|
expect(projectsService.currentUserProjectsById.size).to.be.equal(12)
|
||||||
expect(projectsService.currentUserProjectsById.toJS()[1].id).to.be.equal(projects[0].id)
|
expect(projectsService.currentUserProjectsById.toJS()[1].id).to.be.equal(projects[0].id)
|
||||||
|
|
||||||
it "add urls in the project object", () ->
|
it "add urls in the project object", () ->
|
||||||
mocks.thenStub.callArg(0, Immutable.fromJS(projects))
|
$rootScope.$digest()
|
||||||
|
|
||||||
expect(projectsService.currentUserProjectsById.toJS()[1].url).to.be.equal("url-1")
|
expect(projectsService.currentUserProjectsById.toJS()[1].url).to.be.equal("url-1")
|
||||||
expect(projectsService.currentUserProjects.get("all").toJS()[0].url).to.be.equal("url-1")
|
expect(projectsService.currentUserProjects.get("all").toJS()[0].url).to.be.equal("url-1")
|
||||||
expect(projectsService.currentUserProjects.get("recents").toJS()[0].url).to.be.equal("url-1")
|
expect(projectsService.currentUserProjects.get("recents").toJS()[0].url).to.be.equal("url-1")
|
||||||
|
|
||||||
it "add sorted colorized_tags project object", () ->
|
it "add sorted colorized_tags project object", () ->
|
||||||
mocks.thenStub.callArg(0, Immutable.fromJS(projects))
|
$rootScope.$digest()
|
||||||
|
|
||||||
tags = [
|
tags = [
|
||||||
{name: "aa", color: "white"},
|
{name: "aa", color: "white"},
|
||||||
|
@ -129,6 +127,8 @@ describe "tgProjects", ->
|
||||||
expect(colorized_tags).to.be.eql(tags)
|
expect(colorized_tags).to.be.eql(tags)
|
||||||
|
|
||||||
it "newProject, create the wizard lightbox", () ->
|
it "newProject, create the wizard lightbox", () ->
|
||||||
|
_injectService()
|
||||||
|
|
||||||
projectsService.newProject()
|
projectsService.newProject()
|
||||||
|
|
||||||
expect(mocks.lightboxFactory.create).to.have.been.calledWith("tg-lb-create-project", {
|
expect(mocks.lightboxFactory.create).to.have.been.calledWith("tg-lb-create-project", {
|
||||||
|
@ -136,6 +136,8 @@ describe "tgProjects", ->
|
||||||
})
|
})
|
||||||
|
|
||||||
it "bulkUpdateProjectsOrder and then fetch projects again", () ->
|
it "bulkUpdateProjectsOrder and then fetch projects again", () ->
|
||||||
|
_injectService()
|
||||||
|
|
||||||
projects_order = [
|
projects_order = [
|
||||||
{"id": 8},
|
{"id": 8},
|
||||||
{"id": 2},
|
{"id": 2},
|
||||||
|
@ -168,6 +170,8 @@ describe "tgProjects", ->
|
||||||
expect(projectsService.fetchProjects).to.have.been.calledOnce
|
expect(projectsService.fetchProjects).to.have.been.calledOnce
|
||||||
|
|
||||||
it "getProjectBySlug", () ->
|
it "getProjectBySlug", () ->
|
||||||
|
_injectService()
|
||||||
|
|
||||||
projectSlug = "project-slug"
|
projectSlug = "project-slug"
|
||||||
|
|
||||||
mocks.resources.projects = {}
|
mocks.resources.projects = {}
|
||||||
|
@ -177,6 +181,8 @@ describe "tgProjects", ->
|
||||||
expect(projectsService.getProjectBySlug(projectSlug)).to.be.true
|
expect(projectsService.getProjectBySlug(projectSlug)).to.be.true
|
||||||
|
|
||||||
it "getProjectStats", () ->
|
it "getProjectStats", () ->
|
||||||
|
_injectService()
|
||||||
|
|
||||||
projectId = 3
|
projectId = 3
|
||||||
|
|
||||||
mocks.resources.projects = {}
|
mocks.resources.projects = {}
|
||||||
|
|
|
@ -10,6 +10,15 @@ Resource = (urlsService, http) ->
|
||||||
.then (result) ->
|
.then (result) ->
|
||||||
return Immutable.fromJS(result.data)
|
return Immutable.fromJS(result.data)
|
||||||
|
|
||||||
|
service.getProjectsByUserId = (userId) ->
|
||||||
|
url = urlsService.resolve("projects")
|
||||||
|
|
||||||
|
params = {"member": userId, "order_by": "memberships__user_order"}
|
||||||
|
|
||||||
|
return http.get(url, params)
|
||||||
|
.then (result) ->
|
||||||
|
return Immutable.fromJS(result.data)
|
||||||
|
|
||||||
service.getProjectStats = (projectId) ->
|
service.getProjectStats = (projectId) ->
|
||||||
url = urlsService.resolve("projects")
|
url = urlsService.resolve("projects")
|
||||||
url = "#{url}/#{projectId}"
|
url = "#{url}/#{projectId}"
|
||||||
|
|
|
@ -28,15 +28,6 @@ Resource = (urlsService, http) ->
|
||||||
.then (result) ->
|
.then (result) ->
|
||||||
return Immutable.fromJS(result.data)
|
return Immutable.fromJS(result.data)
|
||||||
|
|
||||||
service.getProjects = (userId) ->
|
|
||||||
url = urlsService.resolve("projects")
|
|
||||||
|
|
||||||
params = {"member": userId, "order_by": "memberships__user_order"}
|
|
||||||
|
|
||||||
return http.get(url, params)
|
|
||||||
.then (result) ->
|
|
||||||
return Immutable.fromJS(result.data)
|
|
||||||
|
|
||||||
service.getTimeline = (userId, page) ->
|
service.getTimeline = (userId, page) ->
|
||||||
params = {
|
params = {
|
||||||
page: page
|
page: page
|
||||||
|
|
|
@ -5,9 +5,6 @@ class UserService extends taiga.Service
|
||||||
|
|
||||||
constructor: (@rs) ->
|
constructor: (@rs) ->
|
||||||
|
|
||||||
getProjects: (userId) ->
|
|
||||||
return @rs.users.getProjects(userId)
|
|
||||||
|
|
||||||
getContacts: (userId) ->
|
getContacts: (userId) ->
|
||||||
return @rs.users.getContacts(userId)
|
return @rs.users.getContacts(userId)
|
||||||
|
|
||||||
|
|
|
@ -32,19 +32,6 @@ describe "UserService", ->
|
||||||
_mocks()
|
_mocks()
|
||||||
_inject()
|
_inject()
|
||||||
|
|
||||||
it "get user projects", () ->
|
|
||||||
userId = 2
|
|
||||||
|
|
||||||
projects = [
|
|
||||||
{id: 1},
|
|
||||||
{id: 2},
|
|
||||||
{id: 3}
|
|
||||||
]
|
|
||||||
|
|
||||||
mocks.resources.users.getProjects.withArgs(userId).returns(true)
|
|
||||||
|
|
||||||
expect(userService.getProjects(userId)).to.be.true
|
|
||||||
|
|
||||||
it "get user contacts", () ->
|
it "get user contacts", () ->
|
||||||
userId = 2
|
userId = 2
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue