taiga-front/app/modules/services/current-user.service.coffee

62 lines
1.7 KiB
CoffeeScript

taiga = @.taiga
groupBy = @.taiga.groupBy
class CurrentUserService
@.$inject = [
"tgProjectsService",
"$tgStorage"
]
constructor: (@projectsService, @storageService) ->
@._user = null
@._projects = Immutable.Map()
@._projectsById = Immutable.Map()
taiga.defineImmutableProperty @, "projects", () => return @._projects
taiga.defineImmutableProperty @, "projectsById", () => return @._projectsById
isAuthenticated: ->
if @.getUser() != null
return true
return false
getUser: () ->
if !@._user
userData = @storageService.get("userInfo")
if userData
userData = Immutable.fromJS(userData)
@.setUser(userData)
return @._user
removeUser: () ->
@._user = null
@._projects = Immutable.Map()
@._projectsById = Immutable.Map()
setUser: (user) ->
@._user = user
return @._loadUserInfo()
bulkUpdateProjectsOrder: (sortData) ->
@projectsService.bulkUpdateProjectsOrder(sortData).then () =>
@.loadProjects()
loadProjects: () ->
return @projectsService.getProjectsByUserId(@._user.get("id"))
.then (projects) =>
@._projects = @._projects.set("all", projects)
@._projects = @._projects.set("recents", projects.slice(0, 10))
@._projectsById = Immutable.fromJS(groupBy(projects.toJS(), (p) -> p.id))
return @.projects
_loadUserInfo: () ->
return @.loadProjects()
angular.module("taigaCommon").service("tgCurrentUserService", CurrentUserService)