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) {