diff --git a/src/api/pbx-config.js b/src/api/pbx-config.js index 1e169256..c9b3bc44 100644 --- a/src/api/pbx-config.js +++ b/src/api/pbx-config.js @@ -721,3 +721,65 @@ export function getSoundFilesGrouped(options) { export function removeSoundSet(id) { return Vue.http.delete('api/soundsets/' + id); } + +export function getSoundSet(id) { + return new Promise((resolve, reject)=>{ + get({ + path: 'api/soundsets/' + id + }).then((soundSet)=>{ + resolve(soundSet); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function editSoundSetFields(id, fields) { + return new Promise((resolve, reject)=>{ + Promise.resolve().then(()=>{ + return getSoundSet(id); + }).then((result)=>{ + let prefs = Object.assign(result, fields); + delete fields._links; + return Vue.http.put('api/soundsets/' + id, prefs); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function setSoundSetName(id, value) { + return editSoundSetFields(id, { name: value }); +} + +export function setSoundSetDescription(id, value) { + return editSoundSetFields(id, { description: value }); +} + +export function setSoundSetContractDefault(id, value) { + return editSoundSetFields(id, { contract_default: value }); +} + +export function getSoundSetWithFiles(id) { + return new Promise((resolve, reject)=>{ + let soundSet; + Promise.resolve().then(()=>{ + return getSoundSet(id); + }).then((result)=>{ + delete result._links; + soundSet = result; + return getSoundFilesGrouped({ + params: { + set_id: id + } + }); + }).then((data)=>{ + Object.assign(soundSet, data); + resolve(soundSet); + }).catch((err)=>{ + reject(err); + }); + }); +} diff --git a/src/components/pages/PbxConfiguration/CscPbxGroups.vue b/src/components/pages/PbxConfiguration/CscPbxGroups.vue index 2abd26c3..b9459af8 100644 --- a/src/components/pages/PbxConfiguration/CscPbxGroups.vue +++ b/src/components/pages/PbxConfiguration/CscPbxGroups.vue @@ -88,14 +88,18 @@ diff --git a/src/locales/en.json b/src/locales/en.json index 314c521d..b991bcaa 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -442,7 +442,8 @@ "noSoundUploaded": "No sound uploaded", "playingInLoop": "Playing in loop", "playInLoop": "Play sound in loop", - "dontPlayInLoop": "Don't play sound in loop" + "dontPlayInLoop": "Don't play sound in loop", + "defaultForSubscribers": "Default For Subscribers" }, "callBlocking": { "privacyEnabledToast": "Your number is hidden to the callee", diff --git a/src/store/pbx-config/actions.js b/src/store/pbx-config/actions.js index 6f7d542f..b58228e3 100644 --- a/src/store/pbx-config/actions.js +++ b/src/store/pbx-config/actions.js @@ -40,7 +40,11 @@ import { removeCallQueue, getAllSoundSets, getSoundFilesGrouped, - removeSoundSet + removeSoundSet, + setSoundSetName, + setSoundSetDescription, + setSoundSetContractDefault, + getSoundSetWithFiles } from '../../api/pbx-config' export default { @@ -593,5 +597,56 @@ export default { }).catch((err) => { context.commit('removeItemFailed', err.message); }); + }, + saveSoundSetName(context, set) { + context.commit('updateItemRequesting', set); + context.commit('lastUpdatedField', {name: set.name, type: 'sound set name'}); + setSoundSetName(set.id, set.name).then(() => { + return context.dispatch('reloadSoundSet', set); + }).then(() => { + context.commit('updateItemSucceeded'); + }).catch((err) => { + context.commit('updateItemFailed', err.message); + }); + }, + saveSoundSetDescription(context, set) { + context.commit('updateItemRequesting', set); + context.commit('lastUpdatedField', {name: set.name, type: 'sound set name'}); + setSoundSetDescription(set.id, set.description).then(() => { + return context.dispatch('reloadSoundSet', set); + }).then(() => { + context.commit('updateItemSucceeded'); + }).catch((err) => { + context.commit('updateItemFailed', err.message); + }); + }, + saveContractDefault(context, set) { + let defaultName = set.contract_default ? 'on' : 'off'; + context.commit('updateItemRequesting', set); + context.commit('lastUpdatedField', {name: defaultName, type: 'default for subscribers'}); + setSoundSetContractDefault(set.id, set.contract_default).then(() => { + return context.dispatch('reloadSoundSet', set); + }).then(() => { + context.commit('updateItemSucceeded'); + }).catch((err) => { + context.commit('updateItemFailed', err.message); + }); + }, + reloadSoundSet(context, set) { + return new Promise((resolve, reject) => { + context.commit('soundSetReloading', set); + getSoundSetWithFiles(set.id).then(($set) => { + context.commit('soundSetReloaded', $set); + }).catch((err)=>{ + context.commit('soundSetReloadingFailed', { + set: set, + error: err.message + }); + }).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }); } } diff --git a/src/store/pbx-config/mutations.js b/src/store/pbx-config/mutations.js index 13d0d0b7..ee7e3f10 100644 --- a/src/store/pbx-config/mutations.js +++ b/src/store/pbx-config/mutations.js @@ -473,10 +473,12 @@ export default { reactiveSet(state[type + 'Errors'], id, error); }, listSoundSetsRequesting(state) { + state.listState = RequestState.requesting; state.listSoundSetsState = RequestState.requesting; state.listSoundSetsError = null; }, listSoundSetsSucceeded(state, sets) { + state.listState = RequestState.succeeded; state.listSoundSetsState = RequestState.succeeded; state.listSoundSetsError = null; state.soundSets = {}; @@ -487,6 +489,7 @@ export default { }); }, listSoundSetsFailed(state, error) { + state.listState = RequestState.failed; state.listSoundSetsState = RequestState.failed; state.listSoundSetsError = error; }, @@ -503,5 +506,24 @@ export default { id = id + ""; reactiveSet(state.soundSetFilesStates, id, RequestState.failed); reactiveSet(state.soundSetFilesErrors, id, error); + }, + soundSetReloading(state, set) { + state.soundSetReloadingState = RequestState.requesting; + state.soundSetReloadingError = null; + state.soundSetReloading = set; + }, + soundSetReloaded(state, set) { + state.soundSetReloadingState = RequestState.succeeded; + state.soundSetReloadingError = null; + Vue.set(state.soundSets, set.id, set); + for (let i = 0; i < state.soundSetsOrdered.length; i++) { + if(state.soundSetsOrdered[i].id === set.id) { + state.soundSetsOrdered[i] = set; + } + } + }, + soundSetReloadingFailed(state, err) { + state.soundSetReloadingState = RequestState.failed; + state.soundSetReloadingError = err; } } diff --git a/src/store/pbx-config/state.js b/src/store/pbx-config/state.js index 2e9f223d..b0715582 100644 --- a/src/store/pbx-config/state.js +++ b/src/store/pbx-config/state.js @@ -84,5 +84,8 @@ export default { soundSets: {}, soundSetsOrdered: [], soundSetFilesStates: {}, - soundSetFilesErrors: {} + soundSetFilesErrors: {}, + soundSetReloading: null, + soundSetReloadingState: RequestState.initiated, + soundSetReloadingError: null }