TT#102703 CSC: Can select/persist/reset the preferred language

AC
Can select a language from a list of given languages
Can persist the preferred language
Can reset the language to "Domain default"

Change-Id: Ic1824a91b5a04e2b7ddb2c2ec4a89712e278ca2f
pull/4/head
Carlo Venusino 5 years ago
parent 507f9ee0af
commit b5cec06671

@ -9,6 +9,7 @@ import {
get, get,
patchAdd, patchAdd,
patchReplace, patchReplace,
patchRemove,
patchReplaceFull, patchReplaceFull,
patchAddFull patchAddFull
@ -27,6 +28,11 @@ export function getPreferences (id) {
}) })
} }
export async function getPreferencesDefs (id) {
const result = await Vue.http.get('api/subscriberpreferencedefs/')
return getJsonBody(result.body)
}
export async function setPreference (id, field, value) { export async function setPreference (id, field, value) {
try { try {
await replacePreference(id, field, value) await replacePreference(id, field, value)
@ -43,6 +49,13 @@ export async function setPreference (id, field, value) {
} }
} }
export async function removePreference (id, field) {
return await patchRemove({
path: 'api/subscriberpreferences/' + id,
fieldPath: field
})
}
export function addPreference (id, field, value) { export function addPreference (id, field, value) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
patchAdd({ patchAdd({

@ -6,5 +6,4 @@ export default ({ Vue, app }) => {
{ label: app.i18n.t('communication.quality.super'), value: 'super' } { label: app.i18n.t('communication.quality.super'), value: 'super' }
] ]
Vue.prototype.$faxQualityOptionsDefault = Vue.prototype.$faxQualityOptions[0] Vue.prototype.$faxQualityOptionsDefault = Vue.prototype.$faxQualityOptions[0]
Vue.prototype.$defaultVoicePromptLanguage = 'use domain default'
} }

@ -30,7 +30,7 @@
<q-item> <q-item>
<q-item-section> <q-item-section>
<q-select <q-select
v-model="language" v-model="selectedOption"
dense dense
emit-value emit-value
map-options map-options
@ -38,7 +38,8 @@
:readonly="dataLoading" :readonly="dataLoading"
:label="$t('callSettings.language')" :label="$t('callSettings.language')"
:title="$t('callSettings.languageHint')" :title="$t('callSettings.languageHint')"
:options="languages" :options="options"
@input="languageSelected()"
/> />
</q-item-section> </q-item-section>
<q-item-section <q-item-section
@ -76,12 +77,8 @@ export default {
}, },
data () { data () {
return { return {
languages: [ selectedOption: this.$defaultVoicePromptLanguage,
{ options: []
value: 0,
label: 'Domain default'
}
]
} }
}, },
computed: { computed: {
@ -90,7 +87,9 @@ export default {
]), ]),
...mapGetters('callSettings', [ ...mapGetters('callSettings', [
'musicOnHold', 'musicOnHold',
'language' 'language',
'defaultLanguage',
'languages'
]), ]),
...mapWaitingGetters({ ...mapWaitingGetters({
processingSubscriberPreferences: 'processing subscriberPreferences' processingSubscriberPreferences: 'processing subscriberPreferences'
@ -99,9 +98,11 @@ export default {
return !this.subscriberPreferencesInitialized || this.processingSubscriberPreferences return !this.subscriberPreferencesInitialized || this.processingSubscriberPreferences
} }
}, },
mounted () { async mounted () {
try { try {
this.loadSubscriberPreferencesAction() await this.loadSubscriberPreferencesAction()
this.options = await this.languages
this.selectedOption = this.language || await this.defaultLanguage
} catch (err) { } catch (err) {
showGlobalError(err?.message) showGlobalError(err?.message)
} }
@ -118,6 +119,13 @@ export default {
} catch (err) { } catch (err) {
showGlobalError(err?.message) showGlobalError(err?.message)
} }
},
async languageSelected () {
try {
await this.setLanguage(this.selectedOption)
} catch (err) {
showGlobalError(err?.message)
}
} }
} }
} }

@ -1,6 +1,8 @@
import { import {
getPreferences, getPreferences,
setPreference getPreferencesDefs,
setPreference,
removePreference
} from '../api/subscriber' } from '../api/subscriber'
export default { export default {
@ -16,8 +18,19 @@ export default {
musicOnHold (state) { musicOnHold (state) {
return state.subscriberPreferences.music_on_hold return state.subscriberPreferences.music_on_hold
}, },
language (state, context) { language (state) {
return state.subscriberPreferences.language || state.$defaultVoicePromptLanguage return state.subscriberPreferences.language
},
async defaultLanguage (state, getters) {
const languages = await getters.languages
return languages.find(lang => lang.default_val).label
},
async languages (state) {
const preferencesDefs = await getPreferencesDefs()
return preferencesDefs
.language
.enum_values
.map((lang) => { return { value: lang.value, label: lang.label, default_val: lang.default_val } })
} }
}, },
mutations: { mutations: {
@ -43,6 +56,22 @@ export default {
}, },
async setMusicOnHold (context, value) { async setMusicOnHold (context, value) {
await context.dispatch('fieldUpdateAction', { field: 'music_on_hold', value }) await context.dispatch('fieldUpdateAction', { field: 'music_on_hold', value })
},
async setLanguage (context, value) {
const subscriberId = context.getters.subscriberId
if (value) {
await setPreference(subscriberId, 'language', value)
context.commit('subscriberPreferencesUpdate', {
field: 'language',
value: value
})
} else {
await removePreference(subscriberId, 'language')
context.commit('subscriberPreferencesUpdate', {
field: 'language',
value: null
})
}
} }
} }
} }

Loading…
Cancel
Save