You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-csc-ui/src/components/pages/Voicebox/Voicebox.vue

320 lines
12 KiB

<template>
<csc-page class="csc-simple-page">
<div
class="row"
>
<div
class="col col-xs-12 col-md-6"
>
<csc-voicebox-settings
:attach="voiceboxAttach"
:delete="voiceboxDelete"
:pin="voiceboxPin"
:email="voiceboxEmail"
:deleteRequesting="isDeleteRequesting"
:attachRequesting="isAttachRequesting"
:pinRequesting="isPinRequesting"
:emailRequesting="isEmailRequesting"
:deleteLabel="deleteLabel"
:attachLabel="attachLabel"
/>
<csc-sound-file-upload
ref="uploadBusy"
icon="music_note"
file-types=".wav,.mp3"
:label="$t('voicebox.label.busyGreeting')"
:value="busyGreetingLabel"
:progress="uploadBusyProgress"
:uploading="uploadBusyGreetingRequesting"
:uploaded="busyGreetingId !== null"
@upload="uploadBusyGreeting"
@abort="abortBusy"
@reset="deleteBusy"
:file-url="playBusyGreetingUrl"
:loaded="playBusyGreetingLoaded"
@init="initBusyGreetingAudio"
/>
<csc-sound-file-upload
ref="uploadUnavail"
icon="music_note"
file-types=".wav,.mp3"
:label="$t('voicebox.label.unavailGreeting')"
:value="unavailGreetingLabel"
:progress="uploadUnavailProgress"
:uploading="uploadUnavailGreetingRequesting"
:uploaded="unavailGreetingId !== null"
@upload="uploadUnavailGreeting"
@abort="abortUnavail"
@reset="deleteUnavail"
:file-url="playUnavailGreetingUrl"
:loaded="playUnavailGreetingLoaded"
@init="initUnavailGreetingAudio"
/>
</div>
</div>
</csc-page>
</template>
<script>
import {
QBtn,
Dialog
} from 'quasar-framework'
import { mapGetters } from 'vuex'
import CscPage from '../../CscPage'
import CscVoiceboxSettings from './CscVoiceboxSettings'
import CscSoundFileUpload from '../../form/CscSoundFileUpload'
import {
startLoading,
stopLoading,
showToast,
showGlobalError
} from '../../../helpers/ui'
export default {
data () {
return {
platform: this.$q.platform.is
}
},
components: {
CscSoundFileUpload,
CscPage,
CscVoiceboxSettings,
QBtn
},
mounted() {
this.$store.dispatch('voicebox/getVoiceboxSettings');
this.loadBusyGreeting();
this.loadUnavailGreeting();
},
computed: {
...mapGetters('voicebox', [
'voiceboxAttach',
'voiceboxDelete',
'voiceboxEmail',
'voiceboxPin',
'deleteLabel',
'attachLabel',
'isDeleteRequesting',
'isAttachRequesting',
'isPinRequesting',
'isEmailRequesting',
'isSettingsLoaded',
'loadSettingsState',
'loadSettingsError',
'toggleDeleteState',
'toggleDeleteError',
'toggleAttachState',
'toggleAttachError',
'updatePinState',
'updatePinError',
'updateEmailState',
'updateEmailError',
'uploadBusyProgress',
'uploadUnavailProgress',
'uploadBusyGreetingState',
'uploadBusyGreetingError',
'uploadBusyGreetingRequesting',
'uploadUnavailGreetingState',
'uploadUnavailGreetingError',
'uploadUnavailGreetingRequesting',
'busyGreetingId',
'unavailGreetingId',
'deleteGreetingState',
'deleteGreetingError',
'busyGreetingLabel',
'unavailGreetingLabel',
'playBusyGreetingLoaded',
'playBusyGreetingUrl',
'playUnavailGreetingLoaded',
'playUnavailGreetingUrl'
]),
soundFileFormat() {
return this.platform.mozilla ? 'ogg' : 'mp3';
}
},
methods: {
resetBusyFile() {
this.$refs.uploadBusy.reset();
this.$store.commit('voicebox/resetBusyProgress');
},
resetUnavailFile() {
this.$refs.uploadUnavail.reset();
this.$store.commit('voicebox/resetUnavailProgress');
},
uploadBusyGreeting(file) {
this.$store.dispatch('voicebox/uploadBusyGreeting', {
file: file
});
},
uploadUnavailGreeting(file) {
this.$store.dispatch('voicebox/uploadUnavailGreeting', {
file: file
});
},
abortBusy() {
this.$store.dispatch('voicebox/abortUploadBusyGreeting');
},
abortUnavail() {
this.$store.dispatch('voicebox/abortUploadUnavailGreeting');
},
deleteBusy() {
let self = this;
let store = this.$store;
Dialog.create({
title: self.$t('voicebox.deleteCustomDialogTitle'),
message: self.$t('voicebox.deleteCustomDialogText', {
type: 'busy'
}),
buttons: [
{
label: self.$t('buttons.cancel'),
color: 'white'
},
{
label: self.$t('buttons.reset'),
color: 'primary',
handler () {
store.dispatch('voicebox/deleteGreeting', {
id: self.busyGreetingId,
type: 'busy'
})
}
}
]
});
},
deleteUnavail() {
let self = this;
let store = this.$store;
Dialog.create({
title: self.$t('voicebox.deleteCustomDialogTitle'),
message: self.$t('voicebox.deleteCustomDialogText', {
type: 'unavailable'
}),
buttons: [
{
label: self.$t('buttons.cancel'),
color: 'dark'
},
{
label: self.$t('buttons.reset'),
color: 'primary',
handler () {
store.dispatch('voicebox/deleteGreeting', {
id: self.unavailGreetingId,
type: 'unavail'
})
}
}
]
});
},
loadBusyGreeting() {
this.$store.dispatch('voicebox/loadBusyGreeting');
},
loadUnavailGreeting() {
this.$store.dispatch('voicebox/loadUnavailGreeting');
},
playBusyGreeting() {
this.$store.dispatch('voicebox/playBusyGreeting', this.soundFileFormat);
},
playUnavailGreeting() {
this.$store.dispatch('voicebox/playUnavailGreeting', this.soundFileFormat);
},
initBusyGreetingAudio() {
this.playBusyGreeting();
this.$refs.uploadBusy.setPlayingTrue();
this.$refs.uploadBusy.setPausedFalse();
},
initUnavailGreetingAudio() {
this.playUnavailGreeting();
this.$refs.uploadUnavail.setPlayingTrue();
this.$refs.uploadUnavail.setPausedFalse();
}
},
watch: {
loadSettingsState(state) {
if (state === 'failed') {
showGlobalError(this.loadSettingsError);
}
},
toggleDeleteState(state) {
if (state === 'succeeded') {
showToast(this.$t('voicebox.toggleDeleteSuccessMessage'));
}
else if (state === 'failed') {
showGlobalError(this.toggleDeleteError);
}
},
toggleAttachState(state) {
if (state === 'succeeded') {
showToast(this.$t('voicebox.toggleAttachSuccessMessage'));
}
else if (state === 'failed') {
showGlobalError(this.toggleAttachError);
}
},
updatePinState(state) {
if (state === 'succeeded') {
showToast(this.$t('voicebox.updatePinSuccessMessage'));
}
else if (state === 'failed') {
showGlobalError(this.updatePinError);
}
},
updateEmailState(state) {
if (state === 'succeeded') {
showToast(this.$t('voicebox.updateEmailSuccessMessage'));
}
else if (state === 'failed') {
showGlobalError(this.updateEmailError);
}
},
uploadBusyGreetingState(state) {
if (state === 'succeeded') {
showToast(this.$t('voicebox.uploadGreetingSuccessMessage'));
this.resetBusyFile();
}
else if (state === 'failed') {
showGlobalError(this.uploadBusyGreetingError);
if (this.uploadBusyProgress > 0) {
this.resetBusyFile();
}
}
},
uploadUnavailGreetingState(state) {
if (state === 'succeeded') {
showToast(this.$t('voicebox.uploadGreetingSuccessMessage'));
this.resetUnavailFile();
}
else if (state === 'failed') {
showGlobalError(this.uploadUnavailGreetingError);
if (this.uploadUnavailProgress > 0) {
this.resetUnavailFile();
}
}
},
deleteGreetingState(state) {
if (state === 'requesting') {
startLoading();
}
else if (state === 'succeeded') {
stopLoading();
showToast(this.$t('voicebox.deleteGreetingSuccessMessage'));
}
else if (state === 'failed') {
stopLoading();
showGlobalError(this.deleteGreetingError);
}
}
}
}
</script>
<style lang="stylus" rel="stylesheet/stylus">
@import '../../../themes/quasar.variables';
</style>