conditional backlog joyride step if the user has perms
parent
ef8053ddd6
commit
50db211c86
|
@ -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
|
class JoyRideService extends taiga.Service
|
||||||
@.$inject = [
|
@.$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) ->
|
get: (name) ->
|
||||||
|
joyRides = @.getConfig()
|
||||||
joyRide = joyRides[name].call(this)
|
joyRide = joyRides[name].call(this)
|
||||||
|
|
||||||
return _.map joyRide, (item) ->
|
return _.map joyRide, (item) ->
|
||||||
|
|
|
@ -9,6 +9,15 @@ describe "tgJoyRideService", ->
|
||||||
|
|
||||||
provide.value "$translate", mocks.translate
|
provide.value "$translate", mocks.translate
|
||||||
|
|
||||||
|
_mockCheckPermissionsService = () ->
|
||||||
|
mocks.checkPermissionsService = {
|
||||||
|
check: sinon.stub()
|
||||||
|
}
|
||||||
|
|
||||||
|
mocks.checkPermissionsService.check.returns(true)
|
||||||
|
|
||||||
|
provide.value "tgCheckPermissionsService", mocks.checkPermissionsService
|
||||||
|
|
||||||
_inject = (callback) ->
|
_inject = (callback) ->
|
||||||
inject (_tgJoyRideService_) ->
|
inject (_tgJoyRideService_) ->
|
||||||
joyRideService = _tgJoyRideService_
|
joyRideService = _tgJoyRideService_
|
||||||
|
@ -18,6 +27,7 @@ describe "tgJoyRideService", ->
|
||||||
module ($provide) ->
|
module ($provide) ->
|
||||||
provide = $provide
|
provide = $provide
|
||||||
_mockTranslate()
|
_mockTranslate()
|
||||||
|
_mockCheckPermissionsService()
|
||||||
return null
|
return null
|
||||||
|
|
||||||
_setup = ->
|
_setup = ->
|
||||||
|
@ -30,7 +40,7 @@ describe "tgJoyRideService", ->
|
||||||
|
|
||||||
it "get joyride by category", () ->
|
it "get joyride by category", () ->
|
||||||
example = {
|
example = {
|
||||||
element: '.home-project-list',
|
element: '.project-list > section:not(.ng-hide)',
|
||||||
position: 'left',
|
position: 'left',
|
||||||
joyride: {
|
joyride: {
|
||||||
title: 'test',
|
title: 'test',
|
||||||
|
|
|
@ -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)
|
|
@ -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
|
Loading…
Reference in New Issue