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.
635 lines
24 KiB
635 lines
24 KiB
|
|
'use strict';
|
|
|
|
import _ from 'lodash';
|
|
import { i18n } from '../i18n';
|
|
import {
|
|
getSourcesets,
|
|
getDestinationsets,
|
|
getTimesets,
|
|
getMappings,
|
|
deleteDestinationFromDestinationset,
|
|
addDestinationToDestinationset,
|
|
addDestinationToEmptyGroup,
|
|
addDestinationToExistingGroup,
|
|
changePositionOfDestination,
|
|
moveDestinationUp,
|
|
moveDestinationDown,
|
|
loadTimesetTimes,
|
|
deleteTimeFromTimeset,
|
|
deleteTimesetById,
|
|
resetTimesetByName,
|
|
createTimesetWithTime,
|
|
appendTimeToTimeset,
|
|
loadDestinations,
|
|
createSourcesetWithSource,
|
|
appendSourceToSourceset
|
|
} from '../api/call-forward';
|
|
|
|
const RequestState = {
|
|
button: 'button',
|
|
requesting: 'requesting',
|
|
succeeded: 'succeeded',
|
|
failed: 'failed'
|
|
};
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state: {
|
|
mappings: null,
|
|
sourcesets: [],
|
|
sourceset: [],
|
|
timesets: null,
|
|
destinationsets: null,
|
|
destinations: [],
|
|
loadDestinationState: RequestState.button,
|
|
loadDestinationError: null,
|
|
removeDestinationState: RequestState.button,
|
|
removeDestinationError: null,
|
|
lastRemovedDestination: null,
|
|
addDestinationState: RequestState.button,
|
|
addDestinationError: null,
|
|
lastAddedDestination: null,
|
|
changeDestinationState: RequestState.button,
|
|
changeDestinationError: null,
|
|
removeTimeState: RequestState.button,
|
|
removeTimeError: null,
|
|
lastRemovedDay: null,
|
|
resetTimeState: RequestState.button,
|
|
resetTimeError: null,
|
|
addTimeState: RequestState.button,
|
|
addTimeError: null,
|
|
addSourcesetState: RequestState.button,
|
|
addSourcesetError: null,
|
|
lastAddedSourceset: null,
|
|
addSourceState: RequestState.button,
|
|
addSourceError: null,
|
|
lastAddedSource: null,
|
|
activeForm: '',
|
|
formType: '',
|
|
destinationsetId: '',
|
|
groupName: '',
|
|
form: {
|
|
announcement_id: null,
|
|
destination: '',
|
|
priority: 1,
|
|
timeout: ''
|
|
},
|
|
timesetTimes: [],
|
|
timesetIsCompatible: true,
|
|
timesetExists: true,
|
|
timesetHasReverse: false,
|
|
timesetHasDuplicate: false,
|
|
timesetId: null,
|
|
activeTimeForm: false,
|
|
addSourceFormEnabled: false
|
|
},
|
|
getters: {
|
|
hasFaxCapability(state, getters, rootState, rootGetters) {
|
|
return rootGetters['user/hasFaxCapability'];
|
|
},
|
|
getSubscriberId(state, getters, rootState, rootGetters) {
|
|
return rootGetters['user/getSubscriberId'];
|
|
},
|
|
getForm(state) {
|
|
return state.form;
|
|
},
|
|
getFormType(state) {
|
|
return state.formType;
|
|
},
|
|
getGroupName(state) {
|
|
return state.groupName;
|
|
},
|
|
getDestinationsetId(state) {
|
|
return state.destinationsetId;
|
|
},
|
|
getTimesetId(state) {
|
|
return state.timesetId;
|
|
},
|
|
getTimesetTimes(state) {
|
|
return state.timesetTimes;
|
|
},
|
|
getTimesetTimesLength(state) {
|
|
return state.timesetTimes.length;
|
|
},
|
|
addTimeError(state) {
|
|
return state.addTimeError ||
|
|
i18n.t('pages.callForward.times.addTimeErrorMessage');
|
|
},
|
|
resetTimeError(state) {
|
|
return state.resetTimeError ||
|
|
i18n.t('pages.callForward.times.resetErrorMessage');
|
|
},
|
|
showDefinedAlert(state) {
|
|
return !state.timesetExists && !state.activeTimeForm && state.addTimeState !== 'succeeded';
|
|
},
|
|
destinationsLoaded(state) {
|
|
return state.destinations.length > 0;
|
|
},
|
|
showTimesAndDestinations(state) {
|
|
return state.timesetIsCompatible &&
|
|
!state.timesetHasReverse &&
|
|
!state.timesetHasDuplicate &&
|
|
state.timesetExists;
|
|
},
|
|
loadDestinationError(state) {
|
|
return state.loadDestinationError ||
|
|
i18n.t('pages.callForward.times.loadDestinationErrorMessage');
|
|
},
|
|
addSourcesetError(state) {
|
|
return state.addSourcesetError ||
|
|
i18n.t('pages.callForward.sources.addSourcesetErrorMessage');
|
|
},
|
|
addSourceError(state) {
|
|
return state.addSourceError ||
|
|
i18n.t('pages.callForward.sources.addSourceErrorMessage');
|
|
},
|
|
addSourceState(state) {
|
|
return state.addSourceState;
|
|
},
|
|
lastAddedSource(state) {
|
|
return state.lastAddedSource;
|
|
},
|
|
addSourceFormEnabled(state) {
|
|
return state.addSourceFormEnabled;
|
|
}
|
|
},
|
|
mutations: {
|
|
loadMappings(state, result) {
|
|
state.mappings = result;
|
|
},
|
|
loadSourcesets(state, result) {
|
|
state.sourcesets = result;
|
|
},
|
|
loadTimesets(state, result) {
|
|
state.timesets = result;
|
|
},
|
|
loadDestinations(state, result) {
|
|
state.destinations = result;
|
|
},
|
|
setActiveForm(state, value) {
|
|
state.activeForm = value;
|
|
},
|
|
setFormType(state, value) {
|
|
state.formType = value;
|
|
},
|
|
setDestinationsetId(state, value) {
|
|
state.destinationsetId = value;
|
|
},
|
|
setGroupName(state, value) {
|
|
state.groupName = value;
|
|
},
|
|
setPriority(state, value) {
|
|
state.form.priority = value;
|
|
},
|
|
setLastAddedDestination(state, value) {
|
|
state.lastAddedDestination = value;
|
|
},
|
|
setLastRemovedDestination(state, value) {
|
|
state.lastRemovedDestination = value;
|
|
},
|
|
resetFormState(state) {
|
|
state.form = {
|
|
announcement_id: null,
|
|
destination: '',
|
|
priority: 1,
|
|
timeout: ''
|
|
}
|
|
},
|
|
resetDestinationState(state) {
|
|
state.activeForm = '';
|
|
state.formType = '';
|
|
state.destinationsetId = '';
|
|
state.groupName = '';
|
|
state.addDestinationState = RequestState.button;
|
|
state.changeDestinationState = RequestState.button;
|
|
state.removeDestinationState = RequestState.button;
|
|
},
|
|
addDestinationRequesting(state) {
|
|
state.addDestinationState = RequestState.requesting;
|
|
state.addDestinationError = null;
|
|
},
|
|
addDestinationSucceeded(state) {
|
|
state.addDestinationState = RequestState.succeeded;
|
|
state.addDestinationError = null;
|
|
},
|
|
addDestinationFailed(state, error) {
|
|
state.addDestinationState = RequestState.failed;
|
|
state.addDestinationError = error;
|
|
},
|
|
changeDestinationRequesting(state) {
|
|
state.changeDestinationState = RequestState.requesting;
|
|
state.changeDestinationError = null;
|
|
},
|
|
changeDestinationSucceeded(state) {
|
|
state.changeDestinationState = RequestState.succeeded;
|
|
state.changeDestinationError = null;
|
|
},
|
|
changeDestinationFailed(state, error) {
|
|
state.changeDestinationState = RequestState.failed;
|
|
state.changeDestinationError = error;
|
|
},
|
|
removeDestinationRequesting(state) {
|
|
state.removeDestinationState = RequestState.requesting;
|
|
state.removeDestinationError = null;
|
|
},
|
|
removeDestinationSucceeded(state) {
|
|
state.removeDestinationState = RequestState.succeeded;
|
|
state.removeDestinationError = null;
|
|
},
|
|
removeDestinationFailed(state, error) {
|
|
state.removeDestinationState = RequestState.failed;
|
|
state.removeDestinationError = error;
|
|
},
|
|
removeTimeRequesting(state) {
|
|
state.removeTimeState = RequestState.requesting;
|
|
state.removeTimeError = null;
|
|
},
|
|
removeTimeSucceeded(state) {
|
|
state.removeTimeState = RequestState.succeeded;
|
|
state.removeTimeError = null;
|
|
},
|
|
removeTimeFailed(state, error) {
|
|
state.removeTimeState = RequestState.failed;
|
|
state.removeTimeError = error;
|
|
},
|
|
setLastRemovedDay(state, value) {
|
|
state.lastRemovedDay = value;
|
|
},
|
|
loadTimesSucceeded(state, result) {
|
|
state.timesetTimes = result.times;
|
|
state.timesetIsCompatible = result.timesetIsCompatible;
|
|
state.timesetExists = result.timesetExists;
|
|
state.timesetHasReverse = result.timesetHasReverse;
|
|
state.timesetHasDuplicate = result.timesetHasDuplicate;
|
|
state.timesetId = result.timesetId;
|
|
},
|
|
resetTimeRequesting(state) {
|
|
state.resetTimeState = RequestState.requesting;
|
|
state.resetTimeError = null;
|
|
},
|
|
resetTimeSucceeded(state) {
|
|
state.resetTimeState = RequestState.succeeded;
|
|
state.resetTimeError = null;
|
|
},
|
|
resetTimeFailed(state, error) {
|
|
state.resetTimeState = RequestState.failed;
|
|
state.resetTimeError = error;
|
|
},
|
|
addTimeRequesting(state) {
|
|
state.addTimeState = RequestState.requesting;
|
|
state.addTimeError = null;
|
|
},
|
|
addTimeSucceeded(state) {
|
|
state.addTimeState = RequestState.succeeded;
|
|
state.addTimeError = null;
|
|
},
|
|
addTimeFailed(state, error) {
|
|
state.addTimeState = RequestState.failed;
|
|
state.addTimeError = error;
|
|
},
|
|
setActiveTimeForm(state, value) {
|
|
state.activeTimeForm = value;
|
|
},
|
|
resetAddTimeState(state) {
|
|
state.addTimeState = RequestState.button;
|
|
},
|
|
resetTimesetState(state) {
|
|
state.timesetIsCompatible = true;
|
|
state.timesetExists = true;
|
|
state.timesetHasReverse = false;
|
|
state.timesetHasDuplicate = false;
|
|
state.activeTimeForm = false;
|
|
state.addTimeState = RequestState.button;
|
|
},
|
|
setSourceset(state, result) {
|
|
state.sourceset = result;
|
|
},
|
|
loadDestinationRequesting(state) {
|
|
state.loadDestinationState = RequestState.requesting;
|
|
state.loadDestinationError = null;
|
|
},
|
|
loadDestinationSucceeded(state) {
|
|
state.loadDestinationState = RequestState.succeeded;
|
|
state.loadDestinationError = null;
|
|
},
|
|
loadDestinationFailed(state, error) {
|
|
state.loadDestinationState = RequestState.failed;
|
|
state.loadDestinationError = error;
|
|
},
|
|
addSourcesetRequesting(state) {
|
|
state.addSourcesetState = RequestState.requesting;
|
|
state.addSourcesetError = null;
|
|
},
|
|
addSourcesetSucceeded(state) {
|
|
state.addSourcesetState = RequestState.succeeded;
|
|
state.addSourcesetError = null;
|
|
},
|
|
addSourcesetFailed(state, error) {
|
|
state.addSourcesetState = RequestState.failed;
|
|
state.addSourcesetError = error;
|
|
},
|
|
setLastAddedSourceset(state, value) {
|
|
state.lastAddedSourceset = value;
|
|
},
|
|
addSourceRequesting(state) {
|
|
state.addSourceState = RequestState.requesting;
|
|
state.addSourceError = null;
|
|
},
|
|
addSourceSucceeded(state) {
|
|
state.addSourceState = RequestState.succeeded;
|
|
state.addSourceError = null;
|
|
},
|
|
addSourceFailed(state, error) {
|
|
state.addSourceState = RequestState.failed;
|
|
state.addSourceError = error;
|
|
},
|
|
setLastAddedSource(state, value) {
|
|
state.lastAddedSource = value;
|
|
},
|
|
setAddSourceFormEnabled(state, value) {
|
|
state.addSourceFormEnabled = value;
|
|
}
|
|
},
|
|
actions: {
|
|
loadMappings(context) {
|
|
return new Promise((resolve, reject) => {
|
|
getMappings(localStorage.getItem('subscriberId'))
|
|
.then(result => {
|
|
context.commit('loadMappings', result);
|
|
}).catch(err => {
|
|
reject(err);
|
|
});
|
|
});
|
|
},
|
|
loadSourcesets(context) {
|
|
return new Promise((resolve, reject) => {
|
|
getSourcesets(localStorage.getItem('subscriberId'))
|
|
.then(result => {
|
|
context.commit('loadSourcesets', result);
|
|
}).catch(err => {
|
|
reject(err);
|
|
});
|
|
});
|
|
},
|
|
loadTimesets(context) {
|
|
return new Promise((resolve, reject) => {
|
|
getTimesets(localStorage.getItem('subscriberId'))
|
|
.then(result => {
|
|
context.commit('loadTimesets', result);
|
|
}).catch((err) => {
|
|
reject(err);
|
|
});
|
|
});
|
|
},
|
|
loadDestinationsets(context) {
|
|
return new Promise((resolve, reject) => {
|
|
getDestinationsets(localStorage.getItem('subscriberId'))
|
|
.then(result => {
|
|
context.commit('loadDestinationsets', result);
|
|
}).catch(err => {
|
|
reject(err);
|
|
});
|
|
});
|
|
},
|
|
deleteDestinationFromDestinationset(context, options) {
|
|
let removedDestination = options.removeDestination;
|
|
context.commit('removeDestinationRequesting');
|
|
return new Promise(() => {
|
|
deleteDestinationFromDestinationset(options)
|
|
.then(() => {
|
|
context.commit('setLastRemovedDestination', removedDestination);
|
|
context.commit('removeDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('removeDestinationFailed', err.message);
|
|
});
|
|
});
|
|
},
|
|
addDestinationToDestinationset(context, options) {
|
|
return new Promise((resolve, reject) => {
|
|
addDestinationToDestinationset(options)
|
|
.then((result) => {
|
|
resolve(result);
|
|
}).catch((err) => {
|
|
reject(err);
|
|
});
|
|
});
|
|
},
|
|
addDestination(context, options) {
|
|
let form = _.clone(context.getters.getForm);
|
|
let updatedOptions;
|
|
let type = context.getters.getFormType;
|
|
let timeset = null;
|
|
if (options.timeset === 'Company Hours' ||
|
|
options.timeset === 'After Hours') {
|
|
timeset = context.getters.getTimesetId;
|
|
}
|
|
context.commit('addDestinationRequesting');
|
|
if (type !== 'number') {
|
|
delete form.timeout;
|
|
form.destination = type;
|
|
}
|
|
else {
|
|
form.timeout = options.form.timeout;
|
|
form.destination = options.form.destination;
|
|
}
|
|
updatedOptions = {
|
|
subscriberId: context.getters.getSubscriberId,
|
|
data: form,
|
|
groupName: context.getters.getGroupName,
|
|
id: context.getters.getDestinationsetId,
|
|
timesetId: timeset,
|
|
sourcesetId: options.sourcesetId
|
|
};
|
|
if (options.destinations) {
|
|
return new Promise(() => {
|
|
addDestinationToExistingGroup(updatedOptions).then(() => {
|
|
context.commit('setLastAddedDestination', options.form.destination);
|
|
context.commit('addDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('addDestinationFailed', err.message);
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
return new Promise(() => {
|
|
addDestinationToEmptyGroup(updatedOptions).then(() => {
|
|
context.commit('setLastAddedDestination', options.form.destination);
|
|
context.commit('addDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('addDestinationFailed', err.message);
|
|
});
|
|
});
|
|
}
|
|
},
|
|
changePositionOfDestination(context, options) {
|
|
let clonedDestinations = _.cloneDeep(options.destinations);
|
|
let clonedDestination = _.clone(options.destinations[options.index]);
|
|
let lastIndex = clonedDestinations.length < 1 ?
|
|
0 : clonedDestinations.length - 1;
|
|
context.commit('changeDestinationRequesting');
|
|
if (options.direction === 'up' && options.prevId && options.index === 0) {
|
|
return new Promise(() => {
|
|
moveDestinationUp({
|
|
prevId: options.prevId,
|
|
id: options.id,
|
|
destination: clonedDestination
|
|
}).then(() => {
|
|
context.commit('changeDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('changeDestinationFailed', err.message);
|
|
});
|
|
});
|
|
}
|
|
else if (options.direction === 'down' && options.nextId && options.index === lastIndex) {
|
|
return new Promise(() => {
|
|
moveDestinationDown({
|
|
nextId: options.nextId,
|
|
id: options.id,
|
|
destination: clonedDestination
|
|
}).then(() => {
|
|
context.commit('changeDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('changeDestinationFailed', err.message);
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
let adjacentDestination = options.direction === 'up' ?
|
|
options.destinations[options.index-1] :
|
|
options.destinations[options.index+1];
|
|
let adjacentPriority = adjacentDestination ?
|
|
adjacentDestination.priority : 1;
|
|
let adjacentIndex = options.direction === 'up' ?
|
|
options.index - 1 :
|
|
options.index + 1;
|
|
clonedDestinations.splice(options.index, 1);
|
|
clonedDestinations.splice(adjacentIndex, 0, clonedDestination);
|
|
clonedDestinations[adjacentIndex].priority = adjacentPriority;
|
|
return new Promise(() => {
|
|
changePositionOfDestination({
|
|
destinations: clonedDestinations,
|
|
id: options.id,
|
|
subscriberId: context.getters.getSubscriberId
|
|
}).then(() => {
|
|
context.commit('changeDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('changeDestinationFailed', err.message);
|
|
});
|
|
});
|
|
}
|
|
},
|
|
loadTimesetTimes(context, options) {
|
|
loadTimesetTimes({
|
|
timeset: options.timeset,
|
|
subscriberId: context.getters.getSubscriberId
|
|
}).then((result) => {
|
|
context.commit('loadTimesSucceeded', result);
|
|
});
|
|
},
|
|
deleteTimeFromTimeset(context, options) {
|
|
context.commit('removeTimeRequesting');
|
|
let clonedTimes = _.cloneDeep(context.getters.getTimesetTimes);
|
|
let indexInt = parseInt(options.index);
|
|
clonedTimes.splice(indexInt, 1);
|
|
clonedTimes.forEach((time) => {
|
|
delete time.weekday;
|
|
delete time.from;
|
|
delete time.to;
|
|
});
|
|
deleteTimeFromTimeset({
|
|
subscriberId: context.getters.getSubscriberId,
|
|
timesetId: context.getters.getTimesetId,
|
|
times: clonedTimes
|
|
}).then(() => {
|
|
context.commit('setLastRemovedDay', options.removedDay);
|
|
context.commit('removeTimeSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('removeTimeFailed', err.message);
|
|
});
|
|
},
|
|
deleteTimesetById(context) {
|
|
context.commit('removeTimeRequesting');
|
|
deleteTimesetById(context.getters.getTimesetId).then(() => {
|
|
context.commit('resetAddTimeState');
|
|
context.commit('setActiveTimeForm', false);
|
|
context.commit('removeTimeSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('removeTimeFailed', err.message);
|
|
});
|
|
},
|
|
resetTimesetByName(context, name) {
|
|
context.commit('resetTimeRequesting');
|
|
resetTimesetByName({
|
|
id: context.getters.getSubscriberId,
|
|
name: name
|
|
}).then(() => {
|
|
context.commit('resetTimesetState');
|
|
context.commit('resetTimeSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('resetTimeFailed', err.message);
|
|
});
|
|
},
|
|
createTimesetWithTime(context, options) {
|
|
context.commit('addTimeRequesting');
|
|
createTimesetWithTime({
|
|
time: options.time,
|
|
weekday: options.weekday,
|
|
name: options.name,
|
|
subscriberId: context.getters.getSubscriberId
|
|
}).then(() => {
|
|
context.commit('addTimeSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('addTimeFailed', err.message);
|
|
});
|
|
},
|
|
appendTimeToTimeset(context, options) {
|
|
context.commit('addTimeRequesting');
|
|
appendTimeToTimeset({
|
|
time: options.time,
|
|
weekday: options.weekday,
|
|
id: context.getters.getTimesetId
|
|
}).then(() => {
|
|
context.commit('addTimeSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('addTimeFailed', err.message);
|
|
});
|
|
},
|
|
loadDestinations(context, options) {
|
|
context.commit('loadDestinationRequesting');
|
|
loadDestinations({
|
|
timeset: options.timeset,
|
|
subscriberId: context.getters.getSubscriberId
|
|
}).then((result) => {
|
|
context.commit('loadDestinations', result);
|
|
context.commit('loadDestinationSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('loadDestinationFailed', err.message);
|
|
});
|
|
},
|
|
createSourcesetWithSource(context, options) {
|
|
context.commit('addSourcesetRequesting');
|
|
createSourcesetWithSource({
|
|
sourcesetName: options.sourcesetName,
|
|
source: options.source,
|
|
subscriberId: context.getters.getSubscriberId,
|
|
mode: options.mode
|
|
}).then(() => {
|
|
context.commit('setLastAddedSourceset', options.sourcesetName);
|
|
context.commit('addSourcesetSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('addSourcesetFailed', err.message);
|
|
});
|
|
},
|
|
appendSourceToSourceset(context, options) {
|
|
context.commit('addSourceRequesting');
|
|
appendSourceToSourceset(options).then(() => {
|
|
context.commit('setLastAddedSource', options.source[0].source);
|
|
context.commit('addSourceSucceeded');
|
|
}).catch((err) => {
|
|
context.commit('addSourceFailed', err.message);
|
|
});
|
|
}
|
|
}
|
|
};
|