- {{ getEndedReason }}
+
+
+
+
+
+
+
+
+ {{ getNumber | numberFormat }}
+
+
{{ getEndedReason }}
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -56,7 +74,7 @@
import { normalizeNumber, rawNumber } from '../filters/number-format'
export default {
name: 'csc-call',
- props: ['region'],
+ props: ['region', 'fullscreen'],
data () {
return {
phoneNumber: '',
@@ -102,7 +120,7 @@
},
call(localMedia) {
this.validationEnabled = true;
- if(this.phoneNumber !== null) {
+ if(!_.isEmpty(this.phoneNumber)) {
this.phoneNumberError = false;
this.$store.dispatch('call/start', {
number: this.phoneNumber,
@@ -149,15 +167,71 @@
},
stopIncomingSound() {
this.$refs.incomingRinging.stop();
+ },
+ toggleAudio() {
+ if(this.isAudioEnabled) {
+ this.$store.dispatch('call/disableAudio');
+ } else {
+ this.$store.dispatch('call/enableAudio');
+ }
+ },
+ toggleVideo() {
+ if(this.isVideoEnabled) {
+ this.$store.dispatch('call/disableVideo');
+ } else {
+ this.$store.dispatch('call/enableVideo');
+ }
+ },
+ toggleMute() {
+ if(this.isMuted) {
+ this.$store.commit('call/unmute');
+ } else {
+ this.$store.commit('call/mute');
+ }
+ },
+ toggleFullscreen() {
+ this.$emit('fullscreen');
}
},
computed: {
+ isFullscreenEnabled() {
+ return this.fullscreen;
+ },
+ toggleAudioIcon() {
+ if(this.isAudioEnabled) {
+ return 'mic'
+ } else {
+ return 'mic off';
+ }
+ },
+ toggleVideoIcon() {
+ if(this.isVideoEnabled) {
+ return 'videocam'
+ } else {
+ return 'videocam off';
+ }
+ },
+ toggleMuteIcon() {
+ if(this.isMuted) {
+ return 'volume off'
+ } else {
+ return 'volume up';
+ }
+ },
+ mediaPreviewClasses() {
+ var classes = [];
+ if(this.isEstablished && this.hasRemoteVideo) {
+ classes.push('csc-media-preview');
+ }
+ return classes;
+ },
formattedPhoneNumber: {
get() {
return normalizeNumber(this.phoneNumber);
},
set(value) {
this.validationEnabled = true;
+ this.phoneNumberError = false;
this.phoneNumber = rawNumber(value);
}
},
@@ -187,7 +261,12 @@
'getNumber',
'getMediaType',
'getLocalMediaType',
- 'getEndedReason'
+ 'getEndedReason',
+ 'hasRemoteVideo',
+ 'hasVideo',
+ 'isAudioEnabled',
+ 'isVideoEnabled',
+ 'isMuted'
]),
hasLocalVideo() {
return this.getLocalMediaType !== null && this.getLocalMediaType.match(/(v|V)ideo/) !== null;
@@ -197,6 +276,13 @@
diff --git a/src/components/CscMedia.vue b/src/components/CscMedia.vue
index 83a8b4f4..38c298e8 100644
--- a/src/components/CscMedia.vue
+++ b/src/components/CscMedia.vue
@@ -3,18 +3,18 @@
-
+