diff --git a/src/api/conversations.js b/src/api/conversations.js index 7ab675fe..f6538781 100644 --- a/src/api/conversations.js +++ b/src/api/conversations.js @@ -5,8 +5,8 @@ import _ from 'lodash' import crypto from 'crypto-browserify' import { getJsonBody } from './utils' -export function getConversations(id, page, rows) { - let params = { subscriber_id: id, page: page, rows: rows, +export function getConversations(options) { + let params = { subscriber_id: options.id, page: options.page, rows: options.rows, order_by: 'timestamp', order_by_direction: 'desc' }; return new Promise((resolve, reject) => { Vue.http.get('api/conversations/', { params: params }) @@ -63,9 +63,3 @@ export function downloadFax(id) { }); }); } - - - - - - diff --git a/src/components/CscConversations.vue b/src/components/CscConversations.vue deleted file mode 100644 index 2a6b2a68..00000000 --- a/src/components/CscConversations.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/src/components/pages/Conversations.vue b/src/components/pages/Conversations/Conversations.vue similarity index 92% rename from src/components/pages/Conversations.vue rename to src/components/pages/Conversations/Conversations.vue index 1bcfc9ad..7c482370 100644 --- a/src/components/pages/Conversations.vue +++ b/src/components/pages/Conversations/Conversations.vue @@ -6,10 +6,10 @@ + + diff --git a/src/routes.js b/src/routes.js index bba6d323..3e96d842 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1,7 +1,7 @@ import DefaultLayout from './components/layouts/Default' import Home from './components/pages/Home' -import Conversations from './components/pages/Conversations' +import Conversations from './components/pages/Conversations/Conversations' import CallForwardAlways from './components/pages/CallForward/Always' import CallForwardCompanyHours from './components/pages/CallForward/CompanyHours' import CallForwardAfterHours from './components/pages/CallForward/AfterHours' diff --git a/src/store/call-blocking.js b/src/store/call-blocking.js index fb533930..fcab5efc 100644 --- a/src/store/call-blocking.js +++ b/src/store/call-blocking.js @@ -17,7 +17,6 @@ import { enableIncomingCallBlocking, getPrivacyCallBlocking } from '../api/call-blocking'; - export default { namespaced: true, state: { diff --git a/src/store/conversations.js b/src/store/conversations.js index 12e7a268..2a98e9c5 100644 --- a/src/store/conversations.js +++ b/src/store/conversations.js @@ -1,6 +1,12 @@ 'use strict'; -import { getConversations, downloadVoiceMail, downloadFax } from '../api/conversations' +import _ from 'lodash'; +import { i18n } from '../i18n'; +import { + getConversations, + downloadVoiceMail, + downloadFax +} from '../api/conversations' const RequestState = { button: 'button', @@ -9,6 +15,11 @@ const RequestState = { failed: 'failed' }; +const ReloadConfig = { + retryLimit: 5, + retryDelay: 5000 +}; + export default { namespaced: true, state: { @@ -19,7 +30,21 @@ export default { downloadVoiceMailState: RequestState.button, downloadVoiceMailError: null, downloadFaxState: RequestState.button, - downloadFaxError: null + downloadFaxError: null, + reloadConversationsState: RequestState.button, + reloadConversationsError: null + }, + getters: { + getSubscriberId(state, getters, rootState, rootGetters) { + return rootGetters['user/getSubscriberId']; + }, + reloadConversationsState(state) { + return state.reloadConversationsState; + }, + reloadConversationsError(state) { + return state.reloadConversationsError || + i18n.t('pages.conversations.reloadConversationsErrorMessage'); + } }, mutations: { loadConversations(state, options) { @@ -49,18 +74,63 @@ export default { downloadFaxFailed(state, error) { state.downloadFaxState = RequestState.failed; state.downloadFaxError = error; + }, + reloadConversationsRequesting(state) { + state.reloadConversationsState = RequestState.requesting; + state.reloadConversationsError = null; + }, + reloadConversationsSucceeded(state) { + state.reloadConversationsState = RequestState.succeeded; + state.reloadConversationsError = null; + }, + reloadConversationsFailed(state, error) { + state.reloadConversationsState = RequestState.failed; + state.reloadConversationsError = error; + }, + resetConversations(state) { + state.page = 1; + }, + reloadConversations(state, result) { + state.conversations = result; + state.page++; } }, actions: { + reloadConversations(context, retryCount) { + context.commit('resetConversations'); + let firstItem = context.state.conversations[0]; + if (retryCount < ReloadConfig.retryLimit) { + getConversations({ + id: context.getters.getSubscriberId, + page: context.state.page, + rows: context.state.rows + }).then((result) => { + if (_.isEqual(firstItem, result[0])) { + setTimeout(() => { + context.dispatch('reloadConversations', ++retryCount); + }, ReloadConfig.retryDelay); + } + else { + context.commit('reloadConversations', result); + context.commit('reloadConversationsSucceeded'); + } + }).catch(() => { + context.commit('reloadConversationsFailed'); + }); + } + }, loadConversations(context) { return new Promise((resolve, reject) => { - getConversations(localStorage.getItem('subscriberId'), context.state.page, context.state.rows) - .then((result) => { - context.commit('loadConversations', result); - resolve(); - }).catch((err)=>{ - reject(err); - }); + getConversations({ + id: context.getters.getSubscriberId, + page: context.state.page, + rows: context.state.rows + }).then((result) => { + context.commit('loadConversations', result); + resolve(); + }).catch((err)=>{ + reject(err); + }); }); }, downloadVoiceMail(context, id) {