2017-09-30 13:28:39 +00:00
< template lang = "pug" >
b - modal # quest - details ( title = "Empty" , size = 'md' , : hide - footer = "true" , : hide - header = "true" )
. left - panel . content
h3 . text - center { { $t ( 'participantsTitle' ) } }
. row
. col - 10. offset - 1. text - center
span . description ( v - once ) { { $t ( 'participantDesc' ) } }
. row
. col - 12. member ( v - for = 'member in members' )
strong ( : class = "{'declined-name': member.accepted === false}" ) { { member . name } }
. accepted . float - right ( v - if = 'member.accepted === true' ) { { $t ( 'accepted' ) } }
. declined . float - right ( v - if = 'member.accepted === false' ) { { $t ( 'declined' ) } }
. pending . float - right ( v - if = 'member.accepted === null' ) { { $t ( 'pending' ) } }
div ( v - if = 'questData' )
questDialogContent ( : item = "questData" )
2017-10-04 02:15:00 +00:00
div . text - center . actions ( v - if = 'canEditQuest' )
2017-09-30 13:28:39 +00:00
div
button . btn . btn - secondary ( v - once , @ click = "questForceStart()" ) { { $t ( 'begin' ) } }
2017-10-04 02:15:00 +00:00
// @TODO don't allow the party leader to start the quest until the leader has accepted or rejected the invitation (users get confused and think "begin" means "join quest")
2017-09-30 13:28:39 +00:00
div
. cancel ( v - once , @ click = "questCancel()" ) { { $t ( 'cancel' ) } }
. side - panel ( v - if = 'questData' )
questDialogDrops ( : item = "questData" )
< / template >
< style lang = 'scss' scoped >
@ import '~client/assets/scss/colors.scss' ;
header {
background - color : $white ! important ;
border : none ! important ;
h5 {
text - indent : - 99999 px ;
}
}
. quest - details {
margin : 0 auto ;
text - align : left ;
width : 180 px ;
}
. btn - primary {
margin : 1 em 0 ;
}
. left - panel {
background : # 4 e4a57 ;
color : $white ;
position : absolute ;
height : 460 px ;
width : 320 px ;
top : 2.5 em ;
left : - 22 em ;
z - index : - 1 ;
padding : 2 em ;
overflow : scroll ;
h3 {
color : $white ;
}
. selected . quest - wrapper {
border : solid 1.5 px # 9 a62ff ;
}
. quest - wrapper : hover {
cursor : pointer ;
}
. quest - col . quest - wrapper {
background : $white ;
padding : .2 em ;
margin - bottom : 1 em ;
border - radius : 3 px ;
}
. description {
text - align : center ;
color : # a5a1ac ;
font - size : 12 px ;
}
}
. side - panel {
position : absolute ;
right : - 350 px ;
top : 25 px ;
border - radius : 8 px ;
background - color : $gray - 600 ;
box - shadow : 0 2 px 16 px 0 rgba ( 26 , 24 , 29 , 0.32 ) ;
display : flex ;
align - items : center ;
flex - direction : column ;
width : 364 px ;
z - index : - 1 ;
height : 93 % ;
}
. member {
padding : 1 em .5 em ;
border - top : 1 px solid # 686274 ;
. declined - name {
color : # 878190 ;
}
. accepted {
color : # 1 ed3a0 ;
}
. declined {
color : # f19595 ;
}
. pending {
color : # c3c0c7 ;
}
}
. actions {
padding - top : 2 em ;
padding - bottom : 2 em ;
. cancel {
color : # f74e52 ;
margin - top : 3 em ;
}
. cancel : hover {
cursor : pointer ;
}
}
< / style >
< script >
import { mapState } from 'client/libs/store' ;
import quests from 'common/script/content/quests' ;
import copyIcon from 'assets/svg/copy.svg' ;
import greyBadgeIcon from 'assets/svg/grey-badge.svg' ;
import qrCodeIcon from 'assets/svg/qrCode.svg' ;
import facebookIcon from 'assets/svg/facebook.svg' ;
import twitterIcon from 'assets/svg/twitter.svg' ;
import starIcon from 'assets/svg/star.svg' ;
import goldIcon from 'assets/svg/gold.svg' ;
import difficultyStarIcon from 'assets/svg/difficulty-star.svg' ;
import questDialogDrops from '../shops/quests/questDialogDrops' ;
import questDialogContent from '../shops/quests/questDialogContent' ;
export default {
props : [ 'group' ] ,
components : {
questDialogDrops ,
questDialogContent ,
} ,
data ( ) {
return {
loading : false ,
selectedQuest : { } ,
icons : Object . freeze ( {
copy : copyIcon ,
greyBadge : greyBadgeIcon ,
qrCode : qrCodeIcon ,
facebook : facebookIcon ,
twitter : twitterIcon ,
starIcon ,
goldIcon ,
difficultyStarIcon ,
} ) ,
} ;
} ,
computed : {
... mapState ( {
user : 'user.data' ,
partyMembers : 'party.members.data' ,
} ) ,
questData ( ) {
return quests . quests [ this . group . quest . key ] ;
} ,
members ( ) {
return this . partyMembers . map ( member => {
return {
name : member . profile . name ,
accepted : this . group . quest . members [ member . _id ] ,
} ;
} ) ;
} ,
2017-10-04 02:15:00 +00:00
canEditQuest ( ) {
if ( ! this . group . quest ) return false ;
let isQuestLeader = this . group . quest . leader === this . user . _id ;
let isPartyLeader = this . group . leader . _id === this . user . _id ;
return isQuestLeader || isPartyLeader ;
} ,
2017-09-30 13:28:39 +00:00
} ,
methods : {
async questForceStart ( ) {
let quest = await this . $store . dispatch ( 'quests:sendAction' , { groupId : this . group . _id , action : 'quests/force-start' } ) ;
this . group . quest = quest ;
this . close ( ) ;
} ,
async questCancel ( ) {
if ( ! confirm ( this . $t ( 'sureCancel' ) ) ) return ;
let quest = await this . $store . dispatch ( 'quests:sendAction' , { groupId : this . group . _id , action : 'quests/cancel' } ) ;
this . group . quest = quest ;
this . close ( ) ;
} ,
close ( ) {
2017-11-08 17:40:37 +00:00
this . $root . $emit ( 'bv::hide::modal' , 'quest-details' ) ;
2017-09-30 13:28:39 +00:00
} ,
} ,
} ;
< / script >