conditional backlog joyride step if the user has perms

stable
Juanfran 2015-10-19 08:16:06 +02:00 committed by Alejandro Alonso
parent ef8053ddd6
commit 50db211c86
4 changed files with 191 additions and 118 deletions

View File

@ -1,126 +1,132 @@
joyRides = {
dashboard: () ->
return [
{
element: '.project-list > section:not(.ng-hide)',
position: 'left',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TITLE'),
text: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TEXT')
}
},
{
element: '.working-on-container',
position: 'right',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TITLE'),
text: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TEXT')
}
},
{
element: '.watching-container',
position: 'right',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP3.TITLE')
text: [
@translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT1'),
@translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT2')
]
}
},
{
element: '.project-list .see-more-projects-btn',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP4.TITLE')
text: [
@translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT1'),
@translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT2')
]
}
}
]
backlog: () ->
return [
{
element: '.summary',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP1.TITLE')
text: [
@translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT1'),
@translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT2')
]
}
},
{
element: '.backlog-table-empty',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP2.TITLE')
text: @translate.instant('JOYRIDE.BACKLOG.STEP2.TEXT')
}
},
{
element: '.sprints',
position: 'left',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP3.TITLE')
text: @translate.instant('JOYRIDE.BACKLOG.STEP3.TEXT')
}
},
{
element: '.new-us',
position: 'rigth',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP4.TITLE')
text: @translate.instant('JOYRIDE.BACKLOG.STEP4.TEXT')
}
}
]
kanban: () ->
return [
{
element: '.kanban-table-inner',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.KANBAN.STEP1.TITLE')
text: @translate.instant('JOYRIDE.KANBAN.STEP1.TEXT')
}
},
{
element: '.card-placeholder',
position: 'right',
joyride: {
title: @translate.instant('JOYRIDE.KANBAN.STEP2.TITLE')
text: @translate.instant('JOYRIDE.KANBAN.STEP2.TEXT')
}
},
{
element: '.icon-plus',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.KANBAN.STEP3.TITLE')
text: [
@translate.instant('JOYRIDE.KANBAN.STEP3.TEXT1'),
@translate.instant('JOYRIDE.KANBAN.STEP3.TEXT2'),
]
}
}
]
}
class JoyRideService extends taiga.Service
@.$inject = [
'$translate'
'$translate',
'tgCheckPermissionsService'
]
constructor: (@translate) ->
constructor: (@translate, @checkPermissionsService) ->
getConfig: () ->
return {
dashboard: () =>
return [
{
element: '.project-list > section:not(.ng-hide)',
position: 'left',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TITLE'),
text: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TEXT')
}
},
{
element: '.working-on-container',
position: 'right',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TITLE'),
text: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TEXT')
}
},
{
element: '.watching-container',
position: 'right',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP3.TITLE')
text: [
@translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT1'),
@translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT2')
]
}
},
{
element: '.project-list .see-more-projects-btn',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.DASHBOARD.STEP4.TITLE')
text: [
@translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT1'),
@translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT2')
]
}
}
]
backlog: () =>
steps = [
{
element: '.summary',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP1.TITLE')
text: [
@translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT1'),
@translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT2')
]
}
},
{
element: '.backlog-table-empty',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP2.TITLE')
text: @translate.instant('JOYRIDE.BACKLOG.STEP2.TEXT')
}
},
{
element: '.sprints',
position: 'left',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP3.TITLE')
text: @translate.instant('JOYRIDE.BACKLOG.STEP3.TEXT')
}
}
]
if @checkPermissionsService.check('add_us')
steps.push({
element: '.new-us',
position: 'rigth',
joyride: {
title: @translate.instant('JOYRIDE.BACKLOG.STEP4.TITLE')
text: @translate.instant('JOYRIDE.BACKLOG.STEP4.TEXT')
}
})
return steps
kanban: () =>
return [
{
element: '.kanban-table-inner',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.KANBAN.STEP1.TITLE')
text: @translate.instant('JOYRIDE.KANBAN.STEP1.TEXT')
}
},
{
element: '.card-placeholder',
position: 'right',
joyride: {
title: @translate.instant('JOYRIDE.KANBAN.STEP2.TITLE')
text: @translate.instant('JOYRIDE.KANBAN.STEP2.TEXT')
}
},
{
element: '.icon-plus',
position: 'bottom',
joyride: {
title: @translate.instant('JOYRIDE.KANBAN.STEP3.TITLE')
text: [
@translate.instant('JOYRIDE.KANBAN.STEP3.TEXT1'),
@translate.instant('JOYRIDE.KANBAN.STEP3.TEXT2'),
]
}
}
]
}
get: (name) ->
joyRides = @.getConfig()
joyRide = joyRides[name].call(this)
return _.map joyRide, (item) ->

View File

@ -9,6 +9,15 @@ describe "tgJoyRideService", ->
provide.value "$translate", mocks.translate
_mockCheckPermissionsService = () ->
mocks.checkPermissionsService = {
check: sinon.stub()
}
mocks.checkPermissionsService.check.returns(true)
provide.value "tgCheckPermissionsService", mocks.checkPermissionsService
_inject = (callback) ->
inject (_tgJoyRideService_) ->
joyRideService = _tgJoyRideService_
@ -18,6 +27,7 @@ describe "tgJoyRideService", ->
module ($provide) ->
provide = $provide
_mockTranslate()
_mockCheckPermissionsService()
return null
_setup = ->
@ -30,7 +40,7 @@ describe "tgJoyRideService", ->
it "get joyride by category", () ->
example = {
element: '.home-project-list',
element: '.project-list > section:not(.ng-hide)',
position: 'left',
joyride: {
title: 'test',

View File

@ -0,0 +1,13 @@
taiga = @.taiga
class ChekcPermissionsService
@.$inject = [
"tgProjectService"
]
constructor: (@projectService) ->
check: (permission) ->
return @projectService.project.get('my_permissions').indexOf(permission) != -1
angular.module("taigaCommon").service("tgCheckPermissionsService", ChekcPermissionsService)

View File

@ -0,0 +1,44 @@
describe "tgCheckPermissionsService", ->
checkPermissionsService = provide = null
mocks = {}
_mockProjectService = () ->
mocks.projectService = {
project: sinon.stub()
}
provide.value "tgProjectService", mocks.projectService
_inject = () ->
inject (_tgCheckPermissionsService_) ->
checkPermissionsService = _tgCheckPermissionsService_
_mocks = () ->
module ($provide) ->
provide = $provide
_mockProjectService()
return null
beforeEach ->
module "taigaCommon"
_mocks()
_inject()
it "the user has perms", () ->
mocks.projectService.project = Immutable.fromJS({
my_permissions: ['add_us']
})
perm = checkPermissionsService.check('add_us')
expect(perm).to.be.true
it "the user hasn't perms", () ->
mocks.projectService.project = Immutable.fromJS({
my_permissions: []
})
perm = checkPermissionsService.check('add_us')
expect(perm).to.be.false