Change-Id: I1361d6547443e0234eebcffd65c5ccb7d189c341changes/03/41103/1
parent
4f77980f65
commit
4c3f090a0e
@ -1,516 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
import Vue from 'vue';
|
||||
import _ from 'lodash';
|
||||
import { i18n } from '../i18n';
|
||||
import {
|
||||
getConversations,
|
||||
downloadVoiceMail,
|
||||
downloadFax,
|
||||
playVoiceMail,
|
||||
getIncomingBlocked,
|
||||
getOutgoingBlocked
|
||||
} from '../api/conversations'
|
||||
import {
|
||||
addNumberToIncomingList,
|
||||
removeFromIncomingListByNumber,
|
||||
addNumberToOutgoingList,
|
||||
removeFromOutgoingListByNumber,
|
||||
toggleNumberInBothLists
|
||||
} from '../api/call-blocking'
|
||||
|
||||
const ROWS_PER_PAGE = 15;
|
||||
|
||||
const RequestState = {
|
||||
button: 'button',
|
||||
requesting: 'requesting',
|
||||
succeeded: 'succeeded',
|
||||
failed: 'failed'
|
||||
};
|
||||
|
||||
const ReloadConfig = {
|
||||
retryLimit: 5,
|
||||
retryDelay: 5000
|
||||
};
|
||||
|
||||
function linkCallsWithSameId(state) {
|
||||
let callId = null;
|
||||
let callIndex = null;
|
||||
state.items.forEach((item, index)=>{
|
||||
if(item.type === 'call' && item.call_type === 'call') {
|
||||
callId = item.call_id;
|
||||
callIndex = index;
|
||||
}
|
||||
else if (item.type === 'call' && item.call_id === callId) {
|
||||
let temp = state.items[callIndex];
|
||||
item.relatedCall = temp;
|
||||
state.items[callIndex] = item;
|
||||
state.items[index] = temp;
|
||||
callIndex = index;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: {
|
||||
page: 1,
|
||||
rows: 10,
|
||||
conversations: [],
|
||||
downloadVoiceMailState: RequestState.button,
|
||||
downloadVoiceMailError: null,
|
||||
downloadFaxState: RequestState.button,
|
||||
downloadFaxError: null,
|
||||
reloadItemsState: RequestState.button,
|
||||
reloadItemsError: null,
|
||||
playVoiceMailUrls: {},
|
||||
playVoiceMailStates: {},
|
||||
playVoiceMailErrors: {},
|
||||
currentPage: 0,
|
||||
reachedLastPage: false,
|
||||
nextPageState: RequestState.initiated,
|
||||
nextPageError: null,
|
||||
items: [],
|
||||
itemsReloaded: false,
|
||||
blockedNumbersIncoming: new Set(),
|
||||
blockedModeIncoming: null,
|
||||
blockedIncomingState: RequestState.initiated,
|
||||
blockedIncomingError: null,
|
||||
blockedNumbersOutgoing: new Set(),
|
||||
blockedModeOutgoing: null,
|
||||
blockedOutgoingState: RequestState.initiated,
|
||||
blockedOutgoingError: null,
|
||||
toggleBlockedState: RequestState.initiated,
|
||||
toggleBlockedError: null,
|
||||
lastToggledType: null
|
||||
},
|
||||
getters: {
|
||||
getSubscriberId(state, getters, rootState, rootGetters) {
|
||||
return rootGetters['user/getSubscriberId'];
|
||||
},
|
||||
reloadItemsState(state) {
|
||||
return state.reloadItemsState;
|
||||
},
|
||||
reloadItemsError(state) {
|
||||
return state.reloadItemsError ||
|
||||
i18n.t('pages.conversations.reloadItemsErrorMessage');
|
||||
},
|
||||
playVoiceMailState(state) {
|
||||
return (id) => {
|
||||
return state.playVoiceMailStates[id];
|
||||
}
|
||||
},
|
||||
playVoiceMailUrl(state) {
|
||||
return (id) => {
|
||||
return state.playVoiceMailUrls[id];
|
||||
}
|
||||
},
|
||||
currentPage(state) {
|
||||
return state.currentPage;
|
||||
},
|
||||
isLastPage(state) {
|
||||
return state.reachedLastPage;
|
||||
},
|
||||
rowsAlreadyLoaded(state) {
|
||||
return state.items.length;
|
||||
},
|
||||
items(state) {
|
||||
return state.items;
|
||||
},
|
||||
isNextPageRequesting(state) {
|
||||
return state.nextPageState === RequestState.requesting;
|
||||
},
|
||||
downloadFaxState(state) {
|
||||
return state.downloadFaxState;
|
||||
},
|
||||
downloadVoiceMailState(state) {
|
||||
return state.downloadVoiceMailState;
|
||||
},
|
||||
downloadFaxError(state) {
|
||||
return state.downloadFaxError;
|
||||
},
|
||||
downloadVoiceMailError(state) {
|
||||
return state.downloadVoiceMailError;
|
||||
},
|
||||
itemsReloaded(state) {
|
||||
return state.itemsReloaded;
|
||||
},
|
||||
isNumberIncomingBlocked(state) {
|
||||
return (number) => {
|
||||
if (state.blockedModeIncoming === 'whitelist') {
|
||||
return !state.blockedNumbersIncoming.has(number);
|
||||
}
|
||||
else {
|
||||
return state.blockedNumbersIncoming.has(number);
|
||||
}
|
||||
}
|
||||
},
|
||||
isNumberOutgoingBlocked(state) {
|
||||
return (number) => {
|
||||
if (state.blockedModeOutgoing === 'whitelist') {
|
||||
return !state.blockedNumbersOutgoing.has(number);
|
||||
}
|
||||
else {
|
||||
return state.blockedNumbersOutgoing.has(number);
|
||||
}
|
||||
}
|
||||
},
|
||||
blockedNumbersIncoming(state) {
|
||||
return state.blockedNumbersIncoming;
|
||||
},
|
||||
blockedNumbersOutgoing(state) {
|
||||
return state.blockedNumbersOutgoing;
|
||||
},
|
||||
blockedIncomingLoaded(state) {
|
||||
return state.blockedIncomingState === RequestState.succeeded;
|
||||
},
|
||||
blockedOutgoingLoaded(state) {
|
||||
return state.blockedOutgoingState === RequestState.succeeded;
|
||||
},
|
||||
isNumberIncomingWhitelisted(state) {
|
||||
return state.blockedModeIncoming === 'whitelist';
|
||||
},
|
||||
isNumberOutgoingWhitelisted(state) {
|
||||
return state.blockedModeOutgoing === 'whitelist';
|
||||
},
|
||||
actionToToggleIncomingNumber(state) {
|
||||
return (number) => {
|
||||
if (state.blockedNumbersIncoming.has(number)) {
|
||||
return 'remove';
|
||||
}
|
||||
else {
|
||||
return 'add';
|
||||
}
|
||||
}
|
||||
},
|
||||
actionToToggleOutgoingNumber(state) {
|
||||
return (number) => {
|
||||
if (state.blockedNumbersOutgoing.has(number)) {
|
||||
return 'remove';
|
||||
}
|
||||
else {
|
||||
return 'add';
|
||||
}
|
||||
}
|
||||
},
|
||||
toggleBlockedState(state) {
|
||||
return state.toggleBlockedState;
|
||||
},
|
||||
lastToggledType(state) {
|
||||
return state.lastToggledType;
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
downloadVoiceMailRequesting(state) {
|
||||
state.downloadVoiceMailState = RequestState.requesting;
|
||||
state.downloadVoiceMailError = null;
|
||||
},
|
||||
downloadVoiceMailSucceeded(state) {
|
||||
state.downloadVoiceMailState = RequestState.succeeded;
|
||||
state.downloadVoiceMailError = null;
|
||||
},
|
||||
downloadVoiceMailFailed(state, error) {
|
||||
state.downloadVoiceMailState = RequestState.failed;
|
||||
state.downloadVoiceMailError = error;
|
||||
},
|
||||
downloadFaxRequesting(state) {
|
||||
state.downloadFaxState = RequestState.requesting;
|
||||
state.downloadFaxError = null;
|
||||
},
|
||||
downloadFaxSucceeded(state) {
|
||||
state.downloadFaxState = RequestState.succeeded;
|
||||
state.downloadFaxError = null;
|
||||
},
|
||||
downloadFaxFailed(state, error) {
|
||||
state.downloadFaxState = RequestState.failed;
|
||||
state.downloadFaxError = error;
|
||||
},
|
||||
reloadItemsRequesting(state) {
|
||||
state.reloadItemsState = RequestState.requesting;
|
||||
state.reloadItemsError = null;
|
||||
state.itemsReloaded = false;
|
||||
},
|
||||
reloadItemsSucceeded(state, items) {
|
||||
state.reloadItemsState = RequestState.succeeded;
|
||||
state.reloadItemsError = null;
|
||||
state.items = items.items;
|
||||
linkCallsWithSameId(state);
|
||||
state.itemsReloaded = true;
|
||||
},
|
||||
reloadItemsFailed(state, error) {
|
||||
state.reloadItemsState = RequestState.failed;
|
||||
state.reloadItemsError = error;
|
||||
},
|
||||
playVoiceMailRequesting(state, id) {
|
||||
Vue.set(state.playVoiceMailStates, id, RequestState.requesting);
|
||||
Vue.set(state.playVoiceMailErrors, id, null);
|
||||
},
|
||||
playVoiceMailSucceeded(state, options) {
|
||||
Vue.set(state.playVoiceMailUrls, options.id, options.url);
|
||||
Vue.set(state.playVoiceMailStates, options.id, RequestState.succeeded);
|
||||
Vue.set(state.playVoiceMailErrors, options.id, null);
|
||||
},
|
||||
playVoiceMailFailed(state, id, err) {
|
||||
Vue.set(state.playVoiceMailUrls, id, null);
|
||||
Vue.set(state.playVoiceMailStates, id, RequestState.failed);
|
||||
Vue.set(state.playVoiceMailErrors, id, err);
|
||||
},
|
||||
resetList(state) {
|
||||
state.items = [];
|
||||
state.currentPage = 0;
|
||||
state.reachedLastPage = false;
|
||||
},
|
||||
nextPageRequesting(state) {
|
||||
state.nextPageState = RequestState.requesting;
|
||||
state.nextPageError = null;
|
||||
},
|
||||
nextPageSucceeded(state, items) {
|
||||
state.nextPageState = RequestState.succeeded;
|
||||
state.nextPageError = null;
|
||||
state.items = state.items.concat(items.items);
|
||||
state.reachedLastPage = items.items.length === 0;
|
||||
state.currentPage = state.currentPage + 1;
|
||||
linkCallsWithSameId(state);
|
||||
},
|
||||
nextPageFailed(state, error) {
|
||||
state.nextPageState = RequestState.failed;
|
||||
state.nextPageError = error;
|
||||
},
|
||||
blockedIncomingRequesting(state) {
|
||||
state.blockedIncomingState = RequestState.requesting;
|
||||
state.blockedIncomingError = null;
|
||||
state.blockedModeIncoming = null;
|
||||
state.blockedNumbersIncoming = new Set();
|
||||
},
|
||||
blockedIncomingSucceeded(state, options) {
|
||||
let mode = options.enabled ? 'whitelist' : 'blacklist';
|
||||
let numbers = options.list ? options.list : [];
|
||||
let numberSet = new Set(numbers);
|
||||
state.blockedIncomingState = RequestState.succeeded;
|
||||
state.blockedIncomingError = null;
|
||||
state.blockedNumbersIncoming = numberSet;
|
||||
state.blockedModeIncoming = mode;
|
||||
},
|
||||
blockedIncomingFailed(state, error) {
|
||||
state.blockedIncomingState = RequestState.failed;
|
||||
state.blockedIncomingError = error;
|
||||
},
|
||||
blockedOutgoingRequesting(state) {
|
||||
state.blockedOutgoingState = RequestState.requesting;
|
||||
state.blockedOutgoingError = null;
|
||||
},
|
||||
blockedOutgoingSucceeded(state, options) {
|
||||
let mode = options.enabled ? 'whitelist' : 'blacklist';
|
||||
let numbers = options.list ? options.list : [];
|
||||
let numberSet = new Set(numbers);
|
||||
state.blockedOutgoingState = RequestState.succeeded;
|
||||
state.blockedOutgoingError = null;
|
||||
state.blockedNumbersOutgoing = numberSet;
|
||||
state.blockedModeOutgoing = mode;
|
||||
},
|
||||
blockedOutgoingFailed(state, error) {
|
||||
state.blockedOutgoingState = RequestState.failed;
|
||||
state.blockedOutgoingError = error;
|
||||
},
|
||||
toggleBlockedRequesting(state) {
|
||||
state.toggleBlockedState = RequestState.requesting;
|
||||
state.toggleBlockedError = null;
|
||||
},
|
||||
toggleBlockedSucceeded(state, type) {
|
||||
let typePastTense = type ? type + 'ed' : 'toggled';
|
||||
state.toggleBlockedState = RequestState.succeeded;
|
||||
state.toggleBlockedError = null;
|
||||
state.lastToggledType = typePastTense;
|
||||
},
|
||||
toggleBlockedFailed(state, error, type) {
|
||||
let typePastTense = type ? type + 'ed' : 'toggled';
|
||||
state.toggleBlockedState = RequestState.failed;
|
||||
state.toggleBlockedError = error;
|
||||
state.lastToggledType = typePastTense;
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
reloadItems(context, options) {
|
||||
context.commit('reloadItemsRequesting');
|
||||
let rows = context.state.currentPage * ROWS_PER_PAGE;
|
||||
let firstStateItemTimestamp = context.state.items[0] ?
|
||||
context.state.items[0].start_time : null;
|
||||
if (options.retryCount < ReloadConfig.retryLimit) {
|
||||
getConversations({
|
||||
subscriberId: context.getters.getSubscriberId,
|
||||
page: 1,
|
||||
rows: rows,
|
||||
type: options.type
|
||||
}).then((result) => {
|
||||
let firstResultItemTimestamp = result.items[0] ?
|
||||
result.items[0].start_time : null;
|
||||
if (_.isEqual(firstStateItemTimestamp, firstResultItemTimestamp)) {
|
||||
setTimeout(() => {
|
||||
context.dispatch('reloadItems', {
|
||||
retryCount: ++options.retryCount,
|
||||
type: options.type
|
||||
});
|
||||
}, ReloadConfig.retryDelay);
|
||||
}
|
||||
else {
|
||||
context.commit('reloadItemsSucceeded', result);
|
||||
}
|
||||
}).catch((err) => {
|
||||
context.commit('reloadItemsFailed', err.message);
|
||||
});
|
||||
}
|
||||
},
|
||||
downloadVoiceMail(context, id) {
|
||||
context.commit('downloadVoiceMailRequesting');
|
||||
downloadVoiceMail(id).then(() => {
|
||||
context.commit('downloadVoiceMailSucceeded');
|
||||
}).catch((err) => {
|
||||
context.commit('downloadVoiceMailFailed', err.body.message);
|
||||
});
|
||||
},
|
||||
downloadFax(context, id) {
|
||||
context.commit('downloadFaxRequesting');
|
||||
downloadFax(id).then(() => {
|
||||
context.commit('downloadFaxSucceeded');
|
||||
}).catch((err)=>{
|
||||
context.commit('downloadFaxFailed', err.body.message);
|
||||
});
|
||||
},
|
||||
playVoiceMail(context, options) {
|
||||
context.commit('playVoiceMailRequesting', options.id);
|
||||
playVoiceMail(options).then((url) => {
|
||||
context.commit('playVoiceMailSucceeded', {
|
||||
id: options.id,
|
||||
url: url
|
||||
});
|
||||
}).catch((err) => {
|
||||
context.commit('playVoiceMailFailed', options.id, err.mesage);
|
||||
});
|
||||
},
|
||||
nextPage(context, type) {
|
||||
if (!context.getters.isLastPage) {
|
||||
context.commit('nextPageRequesting');
|
||||
getConversations({
|
||||
subscriberId: context.getters.getSubscriberId,
|
||||
page: context.getters.currentPage + 1,
|
||||
rows: ROWS_PER_PAGE,
|
||||
type: type
|
||||
}).then((result) => {
|
||||
context.commit('nextPageSucceeded', result);
|
||||
}).catch((err)=>{
|
||||
context.commit('nextPageFailed', err.message);
|
||||
});
|
||||
}
|
||||
},
|
||||
getBlockedNumbersIncoming(context) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
context.commit('blockedIncomingRequesting');
|
||||
getIncomingBlocked(id).then((data) => {
|
||||
context.commit('blockedIncomingSucceeded', data);
|
||||
}).catch((err)=>{
|
||||
context.commit('blockedIncomingFailed', err.message);
|
||||
});
|
||||
},
|
||||
getBlockedNumbersOutgoing(context) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
context.commit('blockedOutgoingRequesting');
|
||||
getOutgoingBlocked(id).then((data) => {
|
||||
context.commit('blockedOutgoingSucceeded', data);
|
||||
}).catch((err)=>{
|
||||
context.commit('blockedOutgoingFailed', err.message);
|
||||
});
|
||||
},
|
||||
getBlockedNumbers(context) {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
},
|
||||
toggleBlockIncoming(context, options) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
let isWhitelist = context.getters.isNumberIncomingWhitelisted;
|
||||
let isBlocked = context.getters.isNumberIncomingBlocked(options.number);
|
||||
context.commit('toggleBlockedRequesting');
|
||||
if ((isBlocked && isWhitelist) || (!isBlocked && !isWhitelist)) {
|
||||
addNumberToIncomingList(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else if ((isBlocked && !isWhitelist) || (!isBlocked && isWhitelist)) {
|
||||
removeFromIncomingListByNumber(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else {
|
||||
context.commit('toggleBlockedFailed', 'error while identifying blocked condition', options.type);
|
||||
}
|
||||
},
|
||||
toggleBlockOutgoing(context, options) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
let isWhitelist = context.getters.isNumberOutgoingWhitelisted;
|
||||
let isBlocked = context.getters.isNumberOutgoingBlocked(options.number);
|
||||
context.commit('toggleBlockedRequesting');
|
||||
if ((isBlocked && isWhitelist) || (!isBlocked && !isWhitelist)) {
|
||||
addNumberToOutgoingList(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else if ((isBlocked && !isWhitelist) || (!isBlocked && isWhitelist)) {
|
||||
removeFromOutgoingListByNumber(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else {
|
||||
context.commit('toggleBlockedFailed', 'error while identifying blocked condition', options.type);
|
||||
}
|
||||
},
|
||||
toggleBlockBoth(context, options) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
let inAction = context.getters.actionToToggleIncomingNumber(options.number);
|
||||
let outAction = context.getters.actionToToggleOutgoingNumber(options.number);
|
||||
context.commit('toggleBlockedRequesting');
|
||||
toggleNumberInBothLists({
|
||||
id: id,
|
||||
number: options.number,
|
||||
block_in_list: inAction,
|
||||
block_out_list: outAction
|
||||
}).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
@ -0,0 +1,221 @@
|
||||
import {
|
||||
deleteVoicemail,
|
||||
downloadFax,
|
||||
downloadVoiceMail,
|
||||
getConversations,
|
||||
getIncomingBlocked,
|
||||
getOutgoingBlocked,
|
||||
playVoiceMail
|
||||
} from "../../api/conversations";
|
||||
import _ from "lodash";
|
||||
import {
|
||||
addNumberToIncomingList,
|
||||
addNumberToOutgoingList,
|
||||
removeFromIncomingListByNumber,
|
||||
removeFromOutgoingListByNumber,
|
||||
toggleNumberInBothLists
|
||||
} from "../../api/call-blocking";
|
||||
|
||||
const ROWS_PER_PAGE = 15;
|
||||
|
||||
const ReloadConfig = {
|
||||
retryLimit: 5,
|
||||
retryDelay: 5000
|
||||
}
|
||||
|
||||
export default {
|
||||
reloadItems(context, options) {
|
||||
context.commit('reloadItemsRequesting');
|
||||
let rows = context.state.currentPage * ROWS_PER_PAGE;
|
||||
let firstStateItemTimestamp = context.state.items[0] ?
|
||||
context.state.items[0].start_time : null;
|
||||
if (options.retryCount < ReloadConfig.retryLimit) {
|
||||
getConversations({
|
||||
subscriberId: context.getters.getSubscriberId,
|
||||
page: 1,
|
||||
rows: rows,
|
||||
type: options.type
|
||||
}).then((result) => {
|
||||
let firstResultItemTimestamp = result.items[0] ?
|
||||
result.items[0].start_time : null;
|
||||
if (_.isEqual(firstStateItemTimestamp, firstResultItemTimestamp)) {
|
||||
setTimeout(() => {
|
||||
context.dispatch('reloadItems', {
|
||||
retryCount: ++options.retryCount,
|
||||
type: options.type
|
||||
});
|
||||
}, ReloadConfig.retryDelay);
|
||||
}
|
||||
else {
|
||||
context.commit('reloadItemsSucceeded', result);
|
||||
}
|
||||
}).catch((err) => {
|
||||
context.commit('reloadItemsFailed', err.message);
|
||||
});
|
||||
}
|
||||
},
|
||||
downloadVoiceMail(context, id) {
|
||||
context.commit('downloadVoiceMailRequesting');
|
||||
downloadVoiceMail(id).then(() => {
|
||||
context.commit('downloadVoiceMailSucceeded');
|
||||
}).catch((err) => {
|
||||
context.commit('downloadVoiceMailFailed', err.body.message);
|
||||
});
|
||||
},
|
||||
downloadFax(context, id) {
|
||||
context.commit('downloadFaxRequesting');
|
||||
downloadFax(id).then(() => {
|
||||
context.commit('downloadFaxSucceeded');
|
||||
}).catch((err)=>{
|
||||
context.commit('downloadFaxFailed', err.body.message);
|
||||
});
|
||||
},
|
||||
playVoiceMail(context, options) {
|
||||
context.commit('playVoiceMailRequesting', options.id);
|
||||
playVoiceMail(options).then((url) => {
|
||||
context.commit('playVoiceMailSucceeded', {
|
||||
id: options.id,
|
||||
url: url
|
||||
});
|
||||
}).catch((err) => {
|
||||
context.commit('playVoiceMailFailed', options.id, err.mesage);
|
||||
});
|
||||
},
|
||||
nextPage(context, type) {
|
||||
if (!context.getters.isLastPage) {
|
||||
context.commit('nextPageRequesting');
|
||||
getConversations({
|
||||
subscriberId: context.getters.getSubscriberId,
|
||||
page: context.getters.currentPage + 1,
|
||||
rows: ROWS_PER_PAGE,
|
||||
type: type
|
||||
}).then((result) => {
|
||||
context.commit('nextPageSucceeded', result);
|
||||
}).catch((err)=>{
|
||||
context.commit('nextPageFailed', err.message);
|
||||
});
|
||||
}
|
||||
},
|
||||
getBlockedNumbersIncoming(context) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
context.commit('blockedIncomingRequesting');
|
||||
getIncomingBlocked(id).then((data) => {
|
||||
context.commit('blockedIncomingSucceeded', data);
|
||||
}).catch((err)=>{
|
||||
context.commit('blockedIncomingFailed', err.message);
|
||||
});
|
||||
},
|
||||
getBlockedNumbersOutgoing(context) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
context.commit('blockedOutgoingRequesting');
|
||||
getOutgoingBlocked(id).then((data) => {
|
||||
context.commit('blockedOutgoingSucceeded', data);
|
||||
}).catch((err)=>{
|
||||
context.commit('blockedOutgoingFailed', err.message);
|
||||
});
|
||||
},
|
||||
getBlockedNumbers(context) {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
},
|
||||
toggleBlockIncoming(context, options) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
let isWhitelist = context.getters.isNumberIncomingWhitelisted;
|
||||
let isBlocked = context.getters.isNumberIncomingBlocked(options.number);
|
||||
context.commit('toggleBlockedRequesting');
|
||||
if ((isBlocked && isWhitelist) || (!isBlocked && !isWhitelist)) {
|
||||
addNumberToIncomingList(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else if ((isBlocked && !isWhitelist) || (!isBlocked && isWhitelist)) {
|
||||
removeFromIncomingListByNumber(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else {
|
||||
context.commit('toggleBlockedFailed', 'error while identifying blocked condition', options.type);
|
||||
}
|
||||
},
|
||||
toggleBlockOutgoing(context, options) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
let isWhitelist = context.getters.isNumberOutgoingWhitelisted;
|
||||
let isBlocked = context.getters.isNumberOutgoingBlocked(options.number);
|
||||
context.commit('toggleBlockedRequesting');
|
||||
if ((isBlocked && isWhitelist) || (!isBlocked && !isWhitelist)) {
|
||||
addNumberToOutgoingList(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else if ((isBlocked && !isWhitelist) || (!isBlocked && isWhitelist)) {
|
||||
removeFromOutgoingListByNumber(id, options.number).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
}
|
||||
else {
|
||||
context.commit('toggleBlockedFailed', 'error while identifying blocked condition', options.type);
|
||||
}
|
||||
},
|
||||
toggleBlockBoth(context, options) {
|
||||
let id = context.getters.getSubscriberId;
|
||||
let inAction = context.getters.actionToToggleIncomingNumber(options.number);
|
||||
let outAction = context.getters.actionToToggleOutgoingNumber(options.number);
|
||||
context.commit('toggleBlockedRequesting');
|
||||
toggleNumberInBothLists({
|
||||
id: id,
|
||||
number: options.number,
|
||||
block_in_list: inAction,
|
||||
block_out_list: outAction
|
||||
}).then(() => {
|
||||
context.commit('toggleBlockedSucceeded', options.type);
|
||||
}).then(() => {
|
||||
context.dispatch('getBlockedNumbersIncoming');
|
||||
context.dispatch('getBlockedNumbersOutgoing');
|
||||
}).then(() => {
|
||||
context.commit('resetList');
|
||||
context.dispatch('nextPage', null);
|
||||
}).catch((err) => {
|
||||
context.commit('toggleBlockedFailed', err.message, options.type);
|
||||
});
|
||||
},
|
||||
async deleteVoicemail(context, options) {
|
||||
context.commit('deletionRequesting')
|
||||
try {
|
||||
await deleteVoicemail(options.id)
|
||||
context.commit('deletionSucceeded')
|
||||
context.commit('resetList')
|
||||
await context.dispatch('nextPage', options.tab)
|
||||
}
|
||||
catch (err) {
|
||||
context.commit('deletionFailed', err.message)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,123 @@
|
||||
import {
|
||||
i18n
|
||||
} from "../../i18n";
|
||||
import {
|
||||
RequestState
|
||||
} from '../common'
|
||||
|
||||
export default {
|
||||
getSubscriberId(state, getters, rootState, rootGetters) {
|
||||
return rootGetters['user/getSubscriberId'];
|
||||
},
|
||||
reloadItemsState(state) {
|
||||
return state.reloadItemsState;
|
||||
},
|
||||
reloadItemsError(state) {
|
||||
return state.reloadItemsError ||
|
||||
i18n.t('pages.conversations.reloadItemsErrorMessage');
|
||||
},
|
||||
playVoiceMailState(state) {
|
||||
return (id) => {
|
||||
return state.playVoiceMailStates[id];
|
||||
}
|
||||
},
|
||||
playVoiceMailUrl(state) {
|
||||
return (id) => {
|
||||
return state.playVoiceMailUrls[id];
|
||||
}
|
||||
},
|
||||
currentPage(state) {
|
||||
return state.currentPage;
|
||||
},
|
||||
isLastPage(state) {
|
||||
return state.reachedLastPage;
|
||||
},
|
||||
rowsAlreadyLoaded(state) {
|
||||
return state.items.length;
|
||||
},
|
||||
items(state) {
|
||||
return state.items;
|
||||
},
|
||||
isNextPageRequesting(state) {
|
||||
return state.nextPageState === RequestState.requesting;
|
||||
},
|
||||
downloadFaxState(state) {
|
||||
return state.downloadFaxState;
|
||||
},
|
||||
downloadVoiceMailState(state) {
|
||||
return state.downloadVoiceMailState;
|
||||
},
|
||||
downloadFaxError(state) {
|
||||
return state.downloadFaxError;
|
||||
},
|
||||
downloadVoiceMailError(state) {
|
||||
return state.downloadVoiceMailError;
|
||||
},
|
||||
itemsReloaded(state) {
|
||||
return state.itemsReloaded;
|
||||
},
|
||||
isNumberIncomingBlocked(state) {
|
||||
return (number) => {
|
||||
if (state.blockedModeIncoming === 'whitelist') {
|
||||
return !state.blockedNumbersIncoming.has(number);
|
||||
}
|
||||
else {
|
||||
return state.blockedNumbersIncoming.has(number);
|
||||
}
|
||||
}
|
||||
},
|
||||
isNumberOutgoingBlocked(state) {
|
||||
return (number) => {
|
||||
if (state.blockedModeOutgoing === 'whitelist') {
|
||||
return !state.blockedNumbersOutgoing.has(number);
|
||||
}
|
||||
else {
|
||||
return state.blockedNumbersOutgoing.has(number);
|
||||
}
|
||||
}
|
||||
},
|
||||
blockedNumbersIncoming(state) {
|
||||
return state.blockedNumbersIncoming;
|
||||
},
|
||||
blockedNumbersOutgoing(state) {
|
||||
return state.blockedNumbersOutgoing;
|
||||
},
|
||||
blockedIncomingLoaded(state) {
|
||||
return state.blockedIncomingState === RequestState.succeeded;
|
||||
},
|
||||
blockedOutgoingLoaded(state) {
|
||||
return state.blockedOutgoingState === RequestState.succeeded;
|
||||
},
|
||||
isNumberIncomingWhitelisted(state) {
|
||||
return state.blockedModeIncoming === 'whitelist';
|
||||
},
|
||||
isNumberOutgoingWhitelisted(state) {
|
||||
return state.blockedModeOutgoing === 'whitelist';
|
||||
},
|
||||
actionToToggleIncomingNumber(state) {
|
||||
return (number) => {
|
||||
if (state.blockedNumbersIncoming.has(number)) {
|
||||
return 'remove';
|
||||
}
|
||||
else {
|
||||
return 'add';
|
||||
}
|
||||
}
|
||||
},
|
||||
actionToToggleOutgoingNumber(state) {
|
||||
return (number) => {
|
||||
if (state.blockedNumbersOutgoing.has(number)) {
|
||||
return 'remove';
|
||||
}
|
||||
else {
|
||||
return 'add';
|
||||
}
|
||||
}
|
||||
},
|
||||
toggleBlockedState(state) {
|
||||
return state.toggleBlockedState;
|
||||
},
|
||||
lastToggledType(state) {
|
||||
return state.lastToggledType;
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
|
||||
import state from './state'
|
||||
import getters from './getters'
|
||||
import mutations from './mutations'
|
||||
import actions from './actions'
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: state,
|
||||
getters: getters,
|
||||
mutations: mutations,
|
||||
actions: actions
|
||||
};
|
@ -0,0 +1,164 @@
|
||||
import Vue from "vue";
|
||||
import {
|
||||
RequestState
|
||||
} from '../common'
|
||||
|
||||
function linkCallsWithSameId(state) {
|
||||
let callId = null;
|
||||
let callIndex = null;
|
||||
state.items.forEach((item, index)=>{
|
||||
if(item.type === 'call' && item.call_type === 'call') {
|
||||
callId = item.call_id;
|
||||
callIndex = index;
|
||||
}
|
||||
else if (item.type === 'call' && item.call_id === callId) {
|
||||
let temp = state.items[callIndex];
|
||||
item.relatedCall = temp;
|
||||
state.items[callIndex] = item;
|
||||
state.items[index] = temp;
|
||||
callIndex = index;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default {
|
||||
downloadVoiceMailRequesting(state) {
|
||||
state.downloadVoiceMailState = RequestState.requesting;
|
||||
state.downloadVoiceMailError = null;
|
||||
},
|
||||
downloadVoiceMailSucceeded(state) {
|
||||
state.downloadVoiceMailState = RequestState.succeeded;
|
||||
state.downloadVoiceMailError = null;
|
||||
},
|
||||
downloadVoiceMailFailed(state, error) {
|
||||
state.downloadVoiceMailState = RequestState.failed;
|
||||
state.downloadVoiceMailError = error;
|
||||
},
|
||||
downloadFaxRequesting(state) {
|
||||
state.downloadFaxState = RequestState.requesting;
|
||||
state.downloadFaxError = null;
|
||||
},
|
||||
downloadFaxSucceeded(state) {
|
||||
state.downloadFaxState = RequestState.succeeded;
|
||||
state.downloadFaxError = null;
|
||||
},
|
||||
downloadFaxFailed(state, error) {
|
||||
state.downloadFaxState = RequestState.failed;
|
||||
state.downloadFaxError = error;
|
||||
},
|
||||
reloadItemsRequesting(state) {
|
||||
state.reloadItemsState = RequestState.requesting;
|
||||
state.reloadItemsError = null;
|
||||
state.itemsReloaded = false;
|
||||
},
|
||||
reloadItemsSucceeded(state, items) {
|
||||
state.reloadItemsState = RequestState.succeeded;
|
||||
state.reloadItemsError = null;
|
||||
state.items = items.items;
|
||||
linkCallsWithSameId(state);
|
||||
state.itemsReloaded = true;
|
||||
},
|
||||
reloadItemsFailed(state, error) {
|
||||
state.reloadItemsState = RequestState.failed;
|
||||
state.reloadItemsError = error;
|
||||
},
|
||||
playVoiceMailRequesting(state, id) {
|
||||
Vue.set(state.playVoiceMailStates, id, RequestState.requesting);
|
||||
Vue.set(state.playVoiceMailErrors, id, null);
|
||||
},
|
||||
playVoiceMailSucceeded(state, options) {
|
||||
Vue.set(state.playVoiceMailUrls, options.id, options.url);
|
||||
Vue.set(state.playVoiceMailStates, options.id, RequestState.succeeded);
|
||||
Vue.set(state.playVoiceMailErrors, options.id, null);
|
||||
},
|
||||
playVoiceMailFailed(state, id, err) {
|
||||
Vue.set(state.playVoiceMailUrls, id, null);
|
||||
Vue.set(state.playVoiceMailStates, id, RequestState.failed);
|
||||
Vue.set(state.playVoiceMailErrors, id, err);
|
||||
},
|
||||
resetList(state) {
|
||||
state.items = [];
|
||||
state.currentPage = 0;
|
||||
state.reachedLastPage = false;
|
||||
},
|
||||
nextPageRequesting(state) {
|
||||
state.nextPageState = RequestState.requesting;
|
||||
state.nextPageError = null;
|
||||
},
|
||||
nextPageSucceeded(state, items) {
|
||||
state.nextPageState = RequestState.succeeded;
|
||||
state.nextPageError = null;
|
||||
state.items = state.items.concat(items.items);
|
||||
state.reachedLastPage = items.items.length === 0;
|
||||
state.currentPage = state.currentPage + 1;
|
||||
linkCallsWithSameId(state);
|
||||
},
|
||||
nextPageFailed(state, error) {
|
||||
state.nextPageState = RequestState.failed;
|
||||
state.nextPageError = error;
|
||||
},
|
||||
blockedIncomingRequesting(state) {
|
||||
state.blockedIncomingState = RequestState.requesting;
|
||||
state.blockedIncomingError = null;
|
||||
state.blockedModeIncoming = null;
|
||||
state.blockedNumbersIncoming = new Set();
|
||||
},
|
||||
blockedIncomingSucceeded(state, options) {
|
||||
let mode = options.enabled ? 'whitelist' : 'blacklist';
|
||||
let numbers = options.list ? options.list : [];
|
||||
let numberSet = new Set(numbers);
|
||||
state.blockedIncomingState = RequestState.succeeded;
|
||||
state.blockedIncomingError = null;
|
||||
state.blockedNumbersIncoming = numberSet;
|
||||
state.blockedModeIncoming = mode;
|
||||
},
|
||||
blockedIncomingFailed(state, error) {
|
||||
state.blockedIncomingState = RequestState.failed;
|
||||
state.blockedIncomingError = error;
|
||||
},
|
||||
blockedOutgoingRequesting(state) {
|
||||
state.blockedOutgoingState = RequestState.requesting;
|
||||
state.blockedOutgoingError = null;
|
||||
},
|
||||
blockedOutgoingSucceeded(state, options) {
|
||||
let mode = options.enabled ? 'whitelist' : 'blacklist';
|
||||
let numbers = options.list ? options.list : [];
|
||||
let numberSet = new Set(numbers);
|
||||
state.blockedOutgoingState = RequestState.succeeded;
|
||||
state.blockedOutgoingError = null;
|
||||
state.blockedNumbersOutgoing = numberSet;
|
||||
state.blockedModeOutgoing = mode;
|
||||
},
|
||||
blockedOutgoingFailed(state, error) {
|
||||
state.blockedOutgoingState = RequestState.failed;
|
||||
state.blockedOutgoingError = error;
|
||||
},
|
||||
toggleBlockedRequesting(state) {
|
||||
state.toggleBlockedState = RequestState.requesting;
|
||||
state.toggleBlockedError = null;
|
||||
},
|
||||
toggleBlockedSucceeded(state, type) {
|
||||
let typePastTense = type ? type + 'ed' : 'toggled';
|
||||
state.toggleBlockedState = RequestState.succeeded;
|
||||
state.toggleBlockedError = null;
|
||||
state.lastToggledType = typePastTense;
|
||||
},
|
||||
toggleBlockedFailed(state, error, type) {
|
||||
let typePastTense = type ? type + 'ed' : 'toggled';
|
||||
state.toggleBlockedState = RequestState.failed;
|
||||
state.toggleBlockedError = error;
|
||||
state.lastToggledType = typePastTense;
|
||||
},
|
||||
deletionRequesting(state) {
|
||||
state.deletionState = RequestState.requesting
|
||||
state.deletionError = null
|
||||
},
|
||||
deletionSucceeded(state) {
|
||||
state.deletionState = RequestState.succeeded
|
||||
state.deletionError = null
|
||||
},
|
||||
deletionFailed(state, err) {
|
||||
state.deletionState = RequestState.failed
|
||||
state.deletionError = err
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
|
||||
import {
|
||||
RequestState
|
||||
} from '../common'
|
||||
|
||||
export default {
|
||||
page: 1,
|
||||
rows: 10,
|
||||
conversations: [],
|
||||
downloadVoiceMailState: RequestState.button,
|
||||
downloadVoiceMailError: null,
|
||||
downloadFaxState: RequestState.button,
|
||||
downloadFaxError: null,
|
||||
reloadItemsState: RequestState.button,
|
||||
reloadItemsError: null,
|
||||
playVoiceMailUrls: {},
|
||||
playVoiceMailStates: {},
|
||||
playVoiceMailErrors: {},
|
||||
currentPage: 0,
|
||||
reachedLastPage: false,
|
||||
nextPageState: RequestState.initiated,
|
||||
nextPageError: null,
|
||||
items: [],
|
||||
itemsReloaded: false,
|
||||
blockedNumbersIncoming: new Set(),
|
||||
blockedModeIncoming: null,
|
||||
blockedIncomingState: RequestState.initiated,
|
||||
blockedIncomingError: null,
|
||||
blockedNumbersOutgoing: new Set(),
|
||||
blockedModeOutgoing: null,
|
||||
blockedOutgoingState: RequestState.initiated,
|
||||
blockedOutgoingError: null,
|
||||
toggleBlockedState: RequestState.initiated,
|
||||
toggleBlockedError: null,
|
||||
lastToggledType: null,
|
||||
deletionState: RequestState.initiated,
|
||||
deletionError: null
|
||||
}
|
Loading…
Reference in new issue