+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('Always') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/router/routes.js b/src/router/routes.js
index 3c7185ed..512b0c75 100644
--- a/src/router/routes.js
+++ b/src/router/routes.js
@@ -27,6 +27,7 @@ import CscPageFaxSettings from 'src/pages/CscPageFaxSettings'
import CscPageUserSettings from 'src/pages/CscPageUserSettings'
import CscPageError404 from 'src/pages/CscPageError404'
import CscRecoverPassword from 'src/pages/CscRecoverPassword'
+import CscPageCf from 'pages/CscPageCf'
const getToken = (route) => {
return {
@@ -60,6 +61,13 @@ export default function routes (app) {
path: 'new-call-forward',
component: CscPageNewCallForward
},
+ {
+ path: 'call-forwarding',
+ component: CscPageCf,
+ meta: {
+ title: i18n.t('Call Forwarding')
+ }
+ },
{
path: 'call-forward/always',
component: CscPageCallForwardAlways,
diff --git a/src/store/call-forwarding/actions.js b/src/store/call-forwarding/actions.js
new file mode 100644
index 00000000..3c1e8906
--- /dev/null
+++ b/src/store/call-forwarding/actions.js
@@ -0,0 +1,525 @@
+import {
+ cfCreateOfficeHours, cfCreateOfficeHoursSameTimes,
+ cfCreateSourceSet,
+ cfCreateTimeSetDate,
+ cfCreateTimeSetDateRange,
+ cfCreateTimeSetWeekdays,
+ cfDeleteDestinationSet,
+ cfDeleteSourceSet,
+ cfDeleteTimeSet,
+ cfLoadDestinationSets,
+ cfLoadMappingsFull,
+ cfLoadSourceSets,
+ cfLoadTimeSets, cfUpdateOfficeHours, cfUpdateOfficeHoursSameTimes,
+ cfUpdateSourceSet,
+ cfUpdateTimeSetDate,
+ cfUpdateTimeSetDateRange,
+ cfUpdateTimeSetWeekdays
+} from 'src/api/call-forwarding'
+import {
+ v4
+} from 'uuid'
+import {
+ patchReplace,
+ patchReplaceFull,
+ post, put
+} from 'src/api/common'
+import _ from 'lodash'
+
+const DEFAULT_RING_TIMEOUT = 60
+const DEFAULT_PRIORITY = 0
+const WAIT_IDENTIFIER = 'csc-cf-mappings-full'
+
+function createDefaultDestination (destination) {
+ let finalDestination = 'Number'
+ if (destination) {
+ finalDestination = destination
+ }
+ return {
+ destination: finalDestination,
+ priority: DEFAULT_PRIORITY,
+ timeout: DEFAULT_RING_TIMEOUT
+ }
+}
+
+export async function loadMappingsFull ({ dispatch, commit, rootGetters }) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const res = await cfLoadMappingsFull(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: res[0],
+ destinationSets: res[1].items,
+ sourceSets: res[2].items,
+ timeSets: res[3].items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function createMapping ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ let type = payload.type
+ if (payload.type === 'cfu' && state.mappings.cft && state.mappings.cft.length > 0) {
+ type = 'cft'
+ }
+ const mappings = _.cloneDeep(state.mappings[type])
+ const destinationSetId = await post({
+ resource: 'cfdestinationsets',
+ body: {
+ name: 'csc-' + v4(),
+ subscriber_id: rootGetters['user/getSubscriberId'],
+ destinations: [createDefaultDestination()]
+ }
+ })
+ mappings.push({
+ destinationset_id: destinationSetId
+ })
+ const res = await Promise.all([
+ patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: type,
+ value: mappings
+ }),
+ cfLoadDestinationSets(rootGetters['user/getSubscriberId'])
+ ])
+ commit('dataSucceeded', {
+ mappings: res[0],
+ destinationSets: res[1].items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function deleteMapping ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const mappings = _.cloneDeep(state.mappings[payload.type])
+ const updatedMappings = mappings.reduce(($updatedMappings, value, index) => {
+ if (index !== payload.index) {
+ $updatedMappings.push(value)
+ }
+ return $updatedMappings
+ }, [])
+ const patchRes = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.type,
+ value: updatedMappings
+ })
+ await cfDeleteDestinationSet(payload.destinationset_id)
+ const destinationSets = await cfLoadDestinationSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: patchRes,
+ destinationSets: destinationSets.items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function toggleMapping ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const updatedMappings = _.cloneDeep(state.mappings[payload.type])
+ updatedMappings[payload.index].enabled = !updatedMappings[payload.index].enabled
+ const patchRes = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.type,
+ value: updatedMappings
+ })
+ commit('dataSucceeded', {
+ mappings: patchRes
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function updateDestination ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const destinations = _.cloneDeep(state.destinationSetMap[payload.destinationSetId].destinations)
+ destinations[payload.destinationIndex].destination = payload.destination
+ await patchReplace({
+ resource: 'cfdestinationsets',
+ resourceId: payload.destinationSetId,
+ fieldPath: 'destinations',
+ value: destinations
+ })
+ const destinationSets = await cfLoadDestinationSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ destinationSets: destinationSets.items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function addDestination ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const destinations = _.cloneDeep(state.destinationSetMap[payload.destinationSetId].destinations)
+ destinations.push(createDefaultDestination(payload.destination))
+ await patchReplace({
+ resource: 'cfdestinationsets',
+ resourceId: payload.destinationSetId,
+ fieldPath: 'destinations',
+ value: destinations
+ })
+ const destinationSets = await cfLoadDestinationSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ destinationSets: destinationSets.items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function removeDestination ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const destinations = _.cloneDeep(state.destinationSetMap[payload.destinationSetId].destinations)
+ const updatedDestinations = destinations.reduce(($updatedDestinations, value, index) => {
+ if (index !== payload.destinationIndex) {
+ $updatedDestinations.push(value)
+ }
+ return $updatedDestinations
+ }, [])
+ await patchReplace({
+ resource: 'cfdestinationsets',
+ resourceId: payload.destinationSetId,
+ fieldPath: 'destinations',
+ value: updatedDestinations
+ })
+ const destinationSets = await cfLoadDestinationSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ destinationSets: destinationSets.items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function updateDestinationTimeout ({ dispatch, commit, state, rootGetters }, payload) {
+ dispatch('wait/start', WAIT_IDENTIFIER, { root: true })
+ const destinations = _.cloneDeep(state.destinationSetMap[payload.destinationSetId].destinations)
+ destinations[payload.destinationIndex].timeout = payload.destinationTimeout
+ await patchReplace({
+ resource: 'cfdestinationsets',
+ resourceId: payload.destinationSetId,
+ fieldPath: 'destinations',
+ value: destinations
+ })
+ const destinationSets = await cfLoadDestinationSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ destinationSets: destinationSets.items
+ })
+ dispatch('wait/end', WAIT_IDENTIFIER, { root: true })
+}
+
+export async function loadSourceSets ({ dispatch, commit, rootGetters }) {
+ dispatch('wait/start', 'csc-cf-sourcesets', { root: true })
+ const sourceSets = await cfLoadSourceSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ sourceSets: sourceSets.items
+ })
+ dispatch('wait/end', 'csc-cf-sourcesets', { root: true })
+}
+
+export async function createSourceSet ({ dispatch, commit, rootGetters, state }, payload) {
+ try {
+ dispatch('wait/start', 'csc-cf-source-set-create', { root: true })
+ const sourceSetId = await cfCreateSourceSet(rootGetters['user/getSubscriberId'], payload)
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].sourceset_id = sourceSetId
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ const sourceSets = await cfLoadSourceSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ sourceSets: sourceSets.items
+ })
+ } finally {
+ dispatch('wait/end', 'csc-cf-source-set-create', { root: true })
+ }
+}
+
+export async function updateSourceSet ({ dispatch, commit, rootGetters, state }, payload) {
+ try {
+ dispatch('wait/start', 'csc-cf-source-set-create', { root: true })
+ await cfUpdateSourceSet(rootGetters['user/getSubscriberId'], payload)
+ const sourceSets = await cfLoadSourceSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ sourceSets: sourceSets.items
+ })
+ } finally {
+ dispatch('wait/end', 'csc-cf-source-set-create', { root: true })
+ }
+}
+
+export async function deleteSourceSet ({ dispatch, commit, rootGetters, state }, payload) {
+ try {
+ dispatch('wait/start', 'csc-cf-source-set-create', { root: true })
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].sourceset_id = null
+ updatedMapping[payload.mapping.index].sourceset = null
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ await cfDeleteSourceSet(payload.id)
+ const sourceSets = await cfLoadSourceSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ sourceSets: sourceSets.items
+ })
+ } finally {
+ dispatch('wait/end', 'csc-cf-source-set-create', { root: true })
+ }
+}
+
+export async function assignSourceSet ({ dispatch, commit, rootGetters, state }, payload) {
+ try {
+ dispatch('wait/start', 'csc-cf-source-set-create', { root: true })
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].sourceset_id = payload.id
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ commit('dataSucceeded', {
+ mappings: updatedMappings
+ })
+ } finally {
+ dispatch('wait/end', 'csc-cf-source-set-create', { root: true })
+ }
+}
+
+export async function unassignSourceSet ({ dispatch, commit, rootGetters, state }, payload) {
+ try {
+ dispatch('wait/start', 'csc-cf-source-set-create', { root: true })
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].sourceset_id = null
+ updatedMapping[payload.mapping.index].sourceset = null
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ commit('dataSucceeded', {
+ mappings: updatedMappings
+ })
+ } finally {
+ dispatch('wait/end', 'csc-cf-source-set-create', { root: true })
+ }
+}
+
+export async function createTimeSetDate ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ const timeSetId = await cfCreateTimeSetDate(rootGetters['user/getSubscriberId'], payload.date)
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].timeset_id = timeSetId
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function updateTimeSetDate ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ await cfUpdateTimeSetDate(payload.id, payload.date)
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function deleteTimeSet ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].timeset_id = null
+ updatedMapping[payload.mapping.index].timeset = null
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ await cfDeleteTimeSet(payload.id)
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function ringPrimaryNumber ({ commit, rootGetters, state }) {
+ const mappings = _.cloneDeep(state.mappings)
+ mappings.cft = mappings.cfu
+ mappings.cfu = []
+ mappings.cft_ringtimeout = 60
+ const updatedMappings = await put({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ body: mappings
+ })
+ commit('dataSucceeded', {
+ mappings: updatedMappings
+ })
+}
+
+export async function doNotRingPrimaryNumber ({ commit, rootGetters, state }) {
+ const mappings = _.cloneDeep(state.mappings)
+ mappings.cfu = mappings.cft
+ mappings.cft = []
+ mappings.cft_ringtimeout = null
+ const updatedMappings = await put({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ body: mappings
+ })
+ commit('dataSucceeded', {
+ mappings: updatedMappings
+ })
+}
+
+export async function updateRingTimeout ({ commit, rootGetters, state }, ringTimeout) {
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: 'cft_ringtimeout',
+ value: ringTimeout
+ })
+ commit('dataSucceeded', {
+ mappings: updatedMappings
+ })
+}
+
+export async function createTimeSetDateRange ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ const timeSetId = await cfCreateTimeSetDateRange(rootGetters['user/getSubscriberId'], payload.date)
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].timeset_id = timeSetId
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function updateTimeSetDateRange ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ await cfUpdateTimeSetDateRange(payload.id, payload.date)
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function createTimeSetWeekdays ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ const timeSetId = await cfCreateTimeSetWeekdays(rootGetters['user/getSubscriberId'], payload.weekdays)
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].timeset_id = timeSetId
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function updateTimeSetWeekdays ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ await cfUpdateTimeSetWeekdays(payload.id, payload.weekdays)
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function createOfficeHours ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ const timeSetId = await cfCreateOfficeHours(rootGetters['user/getSubscriberId'], payload.times)
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].timeset_id = timeSetId
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ if (payload.id) {
+ await cfDeleteTimeSet(payload.id)
+ }
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function updateOfficeHours ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ await cfUpdateOfficeHours(payload.id, payload.times)
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function createOfficeHoursSameTimes ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ const timeSetId = await cfCreateOfficeHoursSameTimes(
+ rootGetters['user/getSubscriberId'],
+ payload.times,
+ payload.weekdays
+ )
+ const updatedMapping = _.cloneDeep(state.mappings[payload.mapping.type])
+ updatedMapping[payload.mapping.index].timeset_id = timeSetId
+ const updatedMappings = await patchReplaceFull({
+ resource: 'cfmappings',
+ resourceId: rootGetters['user/getSubscriberId'],
+ fieldPath: payload.mapping.type,
+ value: updatedMapping
+ })
+ if (payload.id) {
+ await cfDeleteTimeSet(payload.id)
+ }
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ mappings: updatedMappings,
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
+
+export async function updateOfficeHoursSameTimes ({ dispatch, commit, rootGetters, state }, payload) {
+ dispatch('wait/start', 'csc-cf-time-set-create', { root: true })
+ await cfUpdateOfficeHoursSameTimes(payload.id, payload.times, payload.weekdays)
+ const timeSets = await cfLoadTimeSets(rootGetters['user/getSubscriberId'])
+ commit('dataSucceeded', {
+ timeSets: timeSets.items
+ })
+ dispatch('wait/end', 'csc-cf-time-set-create', { root: true })
+}
diff --git a/src/store/call-forwarding/getters.js b/src/store/call-forwarding/getters.js
new file mode 100644
index 00000000..0bdf1501
--- /dev/null
+++ b/src/store/call-forwarding/getters.js
@@ -0,0 +1,19 @@
+import _ from 'lodash'
+
+export function groups (state) {
+ const types = ['cfu', 'cft', 'cfna', 'cfb']
+ const mappings = []
+ types.forEach((type) => {
+ state.mappings[type].forEach((mapping, index) => {
+ const clonedMapping = _.clone(mapping)
+ clonedMapping.type = type
+ clonedMapping.index = index
+ mappings.push(clonedMapping)
+ })
+ })
+ return mappings
+}
+
+export function ringTimeout (state) {
+ return state.mappings.cft_ringtimeout
+}
diff --git a/src/store/call-forwarding/index.js b/src/store/call-forwarding/index.js
new file mode 100644
index 00000000..04179f02
--- /dev/null
+++ b/src/store/call-forwarding/index.js
@@ -0,0 +1,12 @@
+import state from './state'
+import * as getters from './getters'
+import * as mutations from './mutations'
+import * as actions from './actions'
+
+export default {
+ namespaced: true,
+ state,
+ getters,
+ mutations,
+ actions
+}
diff --git a/src/store/call-forwarding/mutations.js b/src/store/call-forwarding/mutations.js
new file mode 100644
index 00000000..93cda72b
--- /dev/null
+++ b/src/store/call-forwarding/mutations.js
@@ -0,0 +1,29 @@
+
+export function dataSucceeded (state, res) {
+ if (res.destinationSets) {
+ const destinationSetMap = {}
+ res.destinationSets.forEach((destinationSet) => {
+ destinationSetMap[destinationSet.id] = destinationSet
+ })
+ state.destinationSetMap = destinationSetMap
+ }
+ if (res.sourceSets) {
+ const sourceSetMap = {}
+ res.sourceSets.forEach((sourceSet) => {
+ sourceSetMap[sourceSet.id] = sourceSet
+ })
+ state.sourceSetMap = sourceSetMap
+ state.sourceSets = res.sourceSets
+ }
+ if (res.timeSets) {
+ const timeSetMap = {}
+ res.timeSets.forEach((timeSet) => {
+ timeSetMap[timeSet.id] = timeSet
+ })
+ state.timeSetMap = timeSetMap
+ state.timeSets = res.timeSets
+ }
+ if (res.mappings) {
+ state.mappings = res.mappings
+ }
+}
diff --git a/src/store/call-forwarding/state.js b/src/store/call-forwarding/state.js
new file mode 100644
index 00000000..63606512
--- /dev/null
+++ b/src/store/call-forwarding/state.js
@@ -0,0 +1,20 @@
+export default function () {
+ return {
+ mappings: {
+ cfb: [],
+ cfna: [],
+ cfo: [],
+ cfr: [],
+ cfs: [],
+ cft: [],
+ cft_ringtimeout: null,
+ cfu: []
+ },
+ destinationSets: null,
+ destinationSetMap: {},
+ sourceSets: null,
+ sourceSetMap: {},
+ timeSets: null,
+ timeSetMap: {}
+ }
+}
diff --git a/src/store/index.js b/src/store/index.js
index 5b27ac10..ecd0bdea 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -7,6 +7,7 @@ import _ from 'lodash'
import CallBlockingModule from './call-blocking'
import CallForwardModule from './call-forward'
+import CallForwardingModule from './call-forwarding'
import NewCallForwardModule from './new-call-forward'
import CallModule, { errorVisibilityTimeout } from './call'
import ConversationsModule from './conversations'
@@ -70,7 +71,8 @@ export default function (/* { ssrContext } */) {
pbxDevices: PbxDevicesModule,
pbxCallQueues: PbxCallQueuesModule,
pbxSoundSets: PbxSoundSetsModule,
- pbxMsConfigs: PbxMsConfigsModule
+ pbxMsConfigs: PbxMsConfigsModule,
+ callForwarding: CallForwardingModule
},
state: {
diff --git a/src/store/user.js b/src/store/user.js
index 039bfcb3..1774fdd6 100644
--- a/src/store/user.js
+++ b/src/store/user.js
@@ -153,13 +153,13 @@ export default {
if (state.subscriber === null) {
return null
}
- return state.subscriber.primaryNumber
+ return state.subscriber.primary_number
},
aliasNumbers (state) {
if (state.subscriber === null) {
return []
}
- return state.subscriber.aliasNumbers
+ return state.subscriber.alias_numbers
}
},
mutations: {
diff --git a/yarn.lock b/yarn.lock
index 469cf522..4a8c7cac 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -11805,6 +11805,11 @@ utils-merge@1.0.1:
resolved "https://npm-registry.sipwise.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+uuid@8.3.1:
+ version "8.3.1"
+ resolved "https://npm-registry.sipwise.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31"
+ integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==
+
uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0:
version "3.4.0"
resolved "https://npm-registry.sipwise.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"