1
1
<template >
2
2
<div >
3
- <v-btn
4
- color =" primary"
5
- prepend-icon =" mdi-play"
6
- variant =" outlined"
7
- density =" comfortable"
8
- data-test =" connect-btn"
9
- @click =" openDialog"
10
- :disabled =" !isCommunity && props.disabled"
11
- >
12
- Play
13
- </v-btn >
3
+ <v-tooltip location =" bottom" :disabled =" disableTooltip" >
4
+ <template v-slot :activator =" { props } " >
5
+ <div v-bind =" props" >
6
+ <v-btn
7
+ color =" primary"
8
+ prepend-icon =" mdi-play"
9
+ variant =" outlined"
10
+ density =" comfortable"
11
+ data-test =" connect-btn"
12
+ @click =" openDialog"
13
+ :disabled =" !isCommunity && disabled"
14
+ >
15
+ Play
16
+ </v-btn >
17
+ </div >
18
+ </template >
19
+ <span >{{ tooltipMessage }}</span >
20
+ </v-tooltip >
14
21
15
22
<v-dialog
16
23
:transition =" false"
@@ -37,36 +44,36 @@ import {
37
44
computed ,
38
45
ref ,
39
46
} from " vue" ;
47
+ import hasPermission from " @/utils/permission" ;
48
+ import { actions , authorizer } from " @/authorizer" ;
40
49
import { envVariables } from " @/envVariables" ;
41
50
import { useStore } from " @/store" ;
42
51
import handleError from " @/utils/handleError" ;
43
52
import Player from " ./Player.vue" ;
44
53
import useSnackbar from " @/helpers/snackbar" ;
45
54
46
- const props = defineProps ({
47
- uid: {
48
- type: String ,
49
- required: true ,
50
- },
51
- recorded: {
52
- type: Boolean ,
53
- required: true ,
54
- },
55
- notHasAuthorization: {
56
- type: Boolean ,
57
- default: false ,
58
- },
59
- disabled: {
60
- type: Boolean ,
61
- default: false ,
62
- },
63
- });
55
+ const props = defineProps <{
56
+ uid: string ;
57
+ recorded: boolean ;
58
+ authenticated: boolean ;
59
+ }>();
64
60
65
61
const showDialog = ref (false );
66
62
const store = useStore ();
67
63
const snackbar = useSnackbar ();
64
+ const disabled = computed (() => ! props .recorded || ! props .authenticated );
68
65
const logs = ref <string | null >(null );
69
66
const isCommunity = computed (() => envVariables .isCommunity );
67
+ const tooltipMessage = computed (() => props .recorded
68
+ ? " You don't have permission to play this session."
69
+ : " This session was not recorded." );
70
+
71
+ const hasAuthorizationToPlay = () => {
72
+ const role = store .getters [" auth/role" ];
73
+ return !! role && hasPermission (authorizer .role [role ], actions .session .play );
74
+ };
75
+
76
+ const disableTooltip = computed (() => isCommunity .value || (hasAuthorizationToPlay () && props .recorded ));
70
77
71
78
const getSessionLogs = async () => {
72
79
if (props .recorded ) {
0 commit comments