diff --git a/src/components/CscCall.vue b/src/components/CscCall.vue index f13a74d2..520291f8 100644 --- a/src/components/CscCall.vue +++ b/src/components/CscCall.vue @@ -3,44 +3,62 @@ - - - - + + + + {{ $t('call.startNew') }} {{ $t('call.initiating') }} {{ $t('call.ringing') }} {{ $t('call.ended') }} - Incoming call + {{ $t('call.incoming') }} {{ $t('call.call') }} - + + + -
-
{{ getNumber | numberFormat }}
- - - - - - - -
- {{ 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 @@
- +