TT#163508 Move "voicebox language" settings from "General" to "Voicebox"

Change-Id: Ib369fc3bfc03dba4d6e88a24d23626ac5c9d0301
pull/12/head
Hans-Peter Herzog 4 years ago
parent e864670def
commit 55d5deee03

@ -0,0 +1,72 @@
<template>
<q-item>
<q-item-section>
<q-select
v-model="selectedLanguage"
emit-value
map-options
:disable="loading"
:readonly="loading"
:label="$t('Language for voicemail and app server')"
:title="$t('Voice prompts language for voicemail, conference and application server')"
:options="languageOptions"
v-on="$listeners"
>
<template
#prepend
>
<q-icon
name="language"
/>
</template>
<template
#append
>
<csc-spinner
v-if="loading"
class="self-center"
/>
</template>
</q-select>
</q-item-section>
</q-item>
</template>
<script>
import CscSpinner from 'components/CscSpinner'
export default {
components: { CscSpinner },
props: {
defaultLanguageOption: {
type: Object,
default: null
},
languageOptions: {
type: Array,
default: null
},
value: {
type: String,
default: null
},
loading: {
type: Boolean,
default: false
}
},
data () {
return {
selectedLanguage: null
}
},
watch: {
value (newLanguage) {
if (this.defaultLanguageOption && newLanguage === undefined) {
this.selectedLanguage = this.defaultLanguageOption.value
} else {
this.selectedLanguage = newLanguage
}
}
}
}
</script>

@ -221,6 +221,7 @@
"Lamp/Key": "Lamp/Key", "Lamp/Key": "Lamp/Key",
"Lamps/Keys": "Lamps/Keys", "Lamps/Keys": "Lamps/Keys",
"Language": "Language", "Language": "Language",
"Language changed successfully": "Language changed successfully",
"Language for voicemail and app server": "Language for voicemail and app server", "Language for voicemail and app server": "Language for voicemail and app server",
"Last Modify Time": "Last Modify Time", "Last Modify Time": "Last Modify Time",
"Leave conference": "Leave conference", "Leave conference": "Leave conference",

@ -29,32 +29,6 @@
/> />
</q-item-section> </q-item-section>
</q-item> </q-item>
<q-item
v-if="hasSubscriberProfileAttribute('language')"
>
<q-item-section>
<q-select
v-model="selectedOption"
dense
emit-value
map-options
:disable="dataLoading"
:readonly="dataLoading"
:label="$t('Language for voicemail and app server')"
:title="$t('Voice prompts language for voicemail, conference and application server')"
:options="languages"
@input="languageSelected()"
/>
</q-item-section>
<q-item-section
side
>
<csc-spinner
v-if="dataLoading"
class="self-center"
/>
</q-item-section>
</q-item>
</q-list> </q-list>
</csc-page> </csc-page>
</template> </template>
@ -79,20 +53,12 @@ export default {
CscSpinner, CscSpinner,
CscPage CscPage
}, },
data () {
return {
selectedOption: this.$defaultVoicePromptLanguage
}
},
computed: { computed: {
...mapState('callSettings', [ ...mapState('callSettings', [
'subscriberPreferencesInitialized' 'subscriberPreferencesInitialized'
]), ]),
...mapGetters('callSettings', [ ...mapGetters('callSettings', [
'musicOnHold', 'musicOnHold'
'language',
'defaultLanguage',
'languages'
]), ]),
...mapGetters('user', [ ...mapGetters('user', [
'hasSubscriberProfileAttribute' 'hasSubscriberProfileAttribute'
@ -117,8 +83,7 @@ export default {
...mapWaitingActions('callSettings', { ...mapWaitingActions('callSettings', {
loadPreferencesDefsAction: 'processing subscriberPreferences', loadPreferencesDefsAction: 'processing subscriberPreferences',
loadSubscriberPreferencesAction: 'processing subscriberPreferences', loadSubscriberPreferencesAction: 'processing subscriberPreferences',
setMusicOnHold: 'processing subscriberPreferences', setMusicOnHold: 'processing subscriberPreferences'
setLanguage: 'processing subscriberPreferences'
}), }),
async toggleMusicOnHold () { async toggleMusicOnHold () {
try { try {
@ -126,13 +91,6 @@ export default {
} catch (err) { } catch (err) {
showGlobalError(err?.message || this.$t('Unknown error')) showGlobalError(err?.message || this.$t('Unknown error'))
} }
},
async languageSelected () {
try {
await this.setLanguage(this.selectedOption)
} catch (err) {
showGlobalError(err?.message || this.$t('Unknown error'))
}
} }
} }
} }

@ -6,6 +6,16 @@
<q-list <q-list
class="col col-xs-12 col-md-6" class="col col-xs-12 col-md-6"
> >
<csc-voicebox-language
:value="language"
:language-options="languages"
:default-language-option="{
label: defaultLanguage,
value: defaultLanguage
}"
:loading="$wait.is('processing subscriberPreferences')"
@input="selectLanguage"
/>
<q-item> <q-item>
<q-item-section> <q-item-section>
<csc-input-saveable <csc-input-saveable
@ -142,6 +152,7 @@ import {
mapState mapState
} from 'vuex' } from 'vuex'
import { import {
showGlobalError,
showToast showToast
} from 'src/helpers/ui' } from 'src/helpers/ui'
import CscPage from 'components/CscPage' import CscPage from 'components/CscPage'
@ -153,8 +164,11 @@ import {
numeric numeric
} from 'vuelidate/lib/validators' } from 'vuelidate/lib/validators'
import CscSpinner from 'components/CscSpinner' import CscSpinner from 'components/CscSpinner'
import CscVoiceboxLanguage from 'components/CscVoiceboxLanguage'
import { mapWaitingActions } from 'vue-wait'
export default { export default {
components: { components: {
CscVoiceboxLanguage,
CscSpinner, CscSpinner,
CscPage, CscPage,
CscInputSaveable, CscInputSaveable,
@ -218,6 +232,11 @@ export default {
'unavailableGreetingLabel', 'unavailableGreetingLabel',
'unavailableGreetingDeleting' 'unavailableGreetingDeleting'
]), ]),
...mapGetters('callSettings', [
'language',
'defaultLanguage',
'languages'
]),
soundFileIcon () { soundFileIcon () {
return 'music_note' return 'music_note'
}, },
@ -289,8 +308,12 @@ export default {
this.formData.delete = value this.formData.delete = value
} }
}, },
mounted () { async mounted () {
this.settingsLoadAction() await Promise.all([
this.loadPreferencesDefsAction(),
this.loadSubscriberPreferencesAction(),
this.settingsLoadAction()
])
this.formData.pin = this.pinValue this.formData.pin = this.pinValue
this.formData.email = this.emailValue this.formData.email = this.emailValue
this.formData.attach = this.attachValue this.formData.attach = this.attachValue
@ -316,6 +339,19 @@ export default {
'unavailableGreetingPlay', 'unavailableGreetingPlay',
'unavailableGreetingDelete' 'unavailableGreetingDelete'
]), ]),
...mapWaitingActions('callSettings', {
loadPreferencesDefsAction: 'processing subscriberPreferences',
loadSubscriberPreferencesAction: 'processing subscriberPreferences',
setLanguage: 'processing subscriberPreferences'
}),
async selectLanguage (language) {
try {
await this.setLanguage(language)
showToast(this.$t('Language changed successfully'))
} catch (err) {
showGlobalError(err?.message || this.$t('Unknown error'))
}
},
pinInput () { pinInput () {
this.pinInitialize() this.pinInitialize()
this.$v.formData.pin.$touch() this.$v.formData.pin.$touch()

@ -25,7 +25,7 @@ export default {
}, },
defaultLanguage (state, getters) { defaultLanguage (state, getters) {
const languages = getters.languages const languages = getters.languages
return languages.find(lang => lang.default_val).label return languages && languages.find(lang => lang.default_val).label
}, },
languages (state) { languages (state) {
return state.preferencesDefs return state.preferencesDefs

Loading…
Cancel
Save