53 lines
1.6 KiB
CoffeeScript
53 lines
1.6 KiB
CoffeeScript
taiga = @.taiga
|
|
|
|
class LikeProjectButtonService extends taiga.Service
|
|
@.$inject = ["tgResources", "tgCurrentUserService", "tgProjectService"]
|
|
|
|
constructor: (@rs, @currentUserService, @projectService) ->
|
|
|
|
_getProjectIndex: (projectId) ->
|
|
return @currentUserService.projects
|
|
.get('all')
|
|
.findIndex (project) -> project.get('id') == projectId
|
|
|
|
_updateProjects: (projectId, isFan) ->
|
|
projectIndex = @._getProjectIndex(projectId)
|
|
projects = @currentUserService.projects
|
|
.get('all')
|
|
.update projectIndex, (project) ->
|
|
|
|
totalFans = project.get("total_fans")
|
|
|
|
if isFan then totalFans++ else totalFans--
|
|
|
|
return project.merge({
|
|
is_fan: isFan,
|
|
total_fans: totalFans
|
|
})
|
|
|
|
@currentUserService.setProjects(projects)
|
|
|
|
_updateCurrentProject: (isFan) ->
|
|
totalFans = @projectService.project.get("total_fans")
|
|
|
|
if isFan then totalFans++ else totalFans--
|
|
|
|
project = @projectService.project.merge({
|
|
is_fan: isFan,
|
|
total_fans: totalFans
|
|
})
|
|
|
|
@projectService.setProject(project)
|
|
|
|
like: (projectId) ->
|
|
return @rs.projects.likeProject(projectId).then =>
|
|
@._updateProjects(projectId, true)
|
|
@._updateCurrentProject(true)
|
|
|
|
unlike: (projectId) ->
|
|
return @rs.projects.unlikeProject(projectId).then =>
|
|
@._updateProjects(projectId, false)
|
|
@._updateCurrentProject(false)
|
|
|
|
angular.module("taigaProjects").service("tgLikeProjectButtonService", LikeProjectButtonService)
|