From 858f8121c754b0f25936089e65afb43f709dcab3 Mon Sep 17 00:00:00 2001 From: Hans-Peter Herzog Date: Thu, 14 Jun 2018 09:25:02 +0200 Subject: [PATCH] TT#37555 Conversations: Fix and refactor conversation list and infinite scroll Change-Id: I42751d61c608c40b6a8df50980ea2a172dcedb80 --- npm-shrinkwrap.json | 6 + package.json | 6 +- src/api/call-forward.js | 2 +- src/api/conversations.js | 72 ++++---- src/components/CscCall.vue | 2 +- .../pages/Conversations/Conversations.vue | 113 +++++++++++- .../pages/Conversations/CscCallItem.vue | 160 +++++++++++++++++ .../pages/Conversations/CscCallOptionList.vue | 52 ++++++ .../pages/Conversations/CscConversation.vue | 161 ------------------ .../Conversations/CscConversationItem.vue | 58 +++++++ .../pages/Conversations/CscConversations.vue | 71 -------- .../pages/Conversations/CscFaxItem.vue | 107 ++++++++++++ .../pages/Conversations/CscVoiceMailItem.vue | 116 +++++++++++++ ...emailPlayer.vue => CscVoiceMailPlayer.vue} | 42 +++-- src/components/pages/Home.vue | 5 +- .../pages/PbxConfiguration/CscPbxDevice.vue | 4 +- src/filters/date.js | 40 +++++ src/filters/index.js | 2 + src/filters/number-format.js | 30 +++- src/helpers/date-helper.js | 85 +++++++++ src/locales/en.json | 5 +- src/store/conversations.js | 121 ++++++++----- src/themes/app.common.styl | 8 + t/Dockerfile | 2 +- t/api/conversations.js | 64 ++++--- t/unit/date-helper.js | 74 ++++++++ t/unit/number-format.js | 2 +- 27 files changed, 1043 insertions(+), 367 deletions(-) create mode 100644 src/components/pages/Conversations/CscCallItem.vue create mode 100644 src/components/pages/Conversations/CscCallOptionList.vue delete mode 100644 src/components/pages/Conversations/CscConversation.vue create mode 100644 src/components/pages/Conversations/CscConversationItem.vue delete mode 100644 src/components/pages/Conversations/CscConversations.vue create mode 100644 src/components/pages/Conversations/CscFaxItem.vue create mode 100644 src/components/pages/Conversations/CscVoiceMailItem.vue rename src/components/pages/Conversations/{CscVoicemailPlayer.vue => CscVoiceMailPlayer.vue} (75%) mode change 100644 => 100755 create mode 100644 src/helpers/date-helper.js create mode 100644 t/unit/date-helper.js diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 198765f1..bd91b43c 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -4037,6 +4037,12 @@ } } }, + "moment": { + "version": "2.22.2", + "from": "moment@latest", + "resolved": "https://npm-registry.sipwise.com/moment/-/moment-2.22.2.tgz", + "dev": true + }, "ms": { "version": "2.0.0", "from": "ms@2.0.0", diff --git a/package.json b/package.json index 5c635a59..99110250 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ngcp-csc-ui", "productName": "Customer Self-Care Web UI", - "version": "0.2.1", + "version": "0.3.1", "description": "Customer Self-Care Web UI", "author": "Hans-Peter Herzog ", "scripts": { @@ -9,7 +9,8 @@ "dev": "node build/script.dev.js", "build": "node build/script.build.js mat", "dev-build": "CSC_SOURCE_MAP=1 CSC_WATCH=1 node build/script.build.js mat", - "test": "karma start ./karma.js --single-run" + "test": "karma start ./karma.js --single-run", + "dev-test": "karma start ./karma.js" }, "dependencies": { "babel-runtime": "^6.25.0", @@ -66,6 +67,7 @@ "load-script": "1.0.0", "lodash": "4.17.4", "mocha": "^4.0.0", + "moment": "2.22.2", "opn": "^5.0.0", "optimize-css-assets-webpack-plugin": "^3.2.0", "postcss-loader": "^1.0.0", diff --git a/src/api/call-forward.js b/src/api/call-forward.js index ca3a5cdd..4884c86b 100644 --- a/src/api/call-forward.js +++ b/src/api/call-forward.js @@ -196,7 +196,7 @@ export function addNameIdAndTerminating(options) { destinationset.timesetId = options.timesetId; destinationset.destinations.forEach(destination => { let normalized = normalizeDestination(destination.destination); - if (!terminatingFlag && _.includes(['Voicemail', 'Fax2Mail', 'Manager Secretary', + if (!terminatingFlag && _.includes(['Voicebox', 'Fax2Mail', 'Manager Secretary', 'Custom Announcement', 'Conference'], normalized)) { terminatingFlag = true; destination.terminated = false; diff --git a/src/api/conversations.js b/src/api/conversations.js index 216706b5..362e804c 100644 --- a/src/api/conversations.js +++ b/src/api/conversations.js @@ -1,38 +1,50 @@ import { saveAs } from 'file-saver' import Vue from 'vue' -import _ from 'lodash' -import crypto from 'crypto-browserify' -import { getJsonBody } from './utils' +import { getList } from './common' + +// export function getConversations(id, page, rows) { +// return new Promise((resolve, reject) => { +// let params = { subscriber_id: id, page: page, rows: rows, +// order_by: 'timestamp', order_by_direction: 'desc' }; +// Vue.http.get('api/conversations/', { params: params }) +// .then(result => { +// let jsonBody = getJsonBody(result.body); +// if (_.has(jsonBody, "_embedded.ngcp:conversations")) { +// let list = []; +// _.forEach(jsonBody._embedded['ngcp:conversations'], function(item) { +// let inputString = `${item.type}${item.call_type}${item.id}`; +// let id = crypto.createHash('sha256').update(inputString).digest('base64'); +// item._id = id; +// delete item._links; +// if (item.type == 'call') { +// item.type = item.call_type != 'call' ? 'callforward' +// : item.type; +// } +// list.push(item); +// }); +// resolve(list); +// } +// else { +// reject(new Error('No items returned for this page.')) +// } +// }).catch((err) => { +// reject(err); +// }); +// }); +// } export function getConversations(id, page, rows) { - return new Promise((resolve, reject) => { - let params = { subscriber_id: id, page: page, rows: rows, - order_by: 'timestamp', order_by_direction: 'desc' }; - Vue.http.get('api/conversations/', { params: params }) - .then(result => { - let jsonBody = getJsonBody(result.body); - if (_.has(jsonBody, "_embedded.ngcp:conversations")) { - let list = []; - _.forEach(jsonBody._embedded['ngcp:conversations'], function(item) { - let inputString = `${item.type}${item.call_type}${item.id}`; - let id = crypto.createHash('sha256').update(inputString).digest('base64'); - item._id = id; - delete item._links; - if (item.type == 'call') { - item.type = item.call_type != 'call' ? 'callforward' - : item.type; - } - list.push(item); - }); - resolve(list); - } - else { - reject(new Error('No items returned for this page.')) - } - }).catch((err) => { - reject(err); - }); + return getList({ + path: 'api/conversations/', + root: '_embedded.ngcp:conversations', + params: { + subscriber_id: id, + page: page, + rows: rows, + order_by: 'timestamp', + order_by_direction: 'desc' + } }); } diff --git a/src/components/CscCall.vue b/src/components/CscCall.vue index 0d0521a0..f5d0eded 100644 --- a/src/components/CscCall.vue +++ b/src/components/CscCall.vue @@ -46,7 +46,7 @@ name="videocam" color="primary" size="26px"/> - {{ getNumber | numberFormat }} + {{ getNumber | destinationFormat }}
{{ getEndedReason }}
diff --git a/src/components/pages/Conversations/Conversations.vue b/src/components/pages/Conversations/Conversations.vue index 7c482370..63622553 100644 --- a/src/components/pages/Conversations/Conversations.vue +++ b/src/components/pages/Conversations/Conversations.vue @@ -1,33 +1,119 @@ + + diff --git a/src/components/pages/Conversations/CscCallOptionList.vue b/src/components/pages/Conversations/CscCallOptionList.vue new file mode 100644 index 00000000..53b55afc --- /dev/null +++ b/src/components/pages/Conversations/CscCallOptionList.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/pages/Conversations/CscConversation.vue b/src/components/pages/Conversations/CscConversation.vue deleted file mode 100644 index e7ea3b43..00000000 --- a/src/components/pages/Conversations/CscConversation.vue +++ /dev/null @@ -1,161 +0,0 @@ - - - - - diff --git a/src/components/pages/Conversations/CscConversationItem.vue b/src/components/pages/Conversations/CscConversationItem.vue new file mode 100644 index 00000000..f8f11da5 --- /dev/null +++ b/src/components/pages/Conversations/CscConversationItem.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/components/pages/Conversations/CscConversations.vue b/src/components/pages/Conversations/CscConversations.vue deleted file mode 100644 index 547ad3c7..00000000 --- a/src/components/pages/Conversations/CscConversations.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/src/components/pages/Conversations/CscFaxItem.vue b/src/components/pages/Conversations/CscFaxItem.vue new file mode 100644 index 00000000..f1174b94 --- /dev/null +++ b/src/components/pages/Conversations/CscFaxItem.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/components/pages/Conversations/CscVoiceMailItem.vue b/src/components/pages/Conversations/CscVoiceMailItem.vue new file mode 100644 index 00000000..9a8ce7b8 --- /dev/null +++ b/src/components/pages/Conversations/CscVoiceMailItem.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/components/pages/Conversations/CscVoicemailPlayer.vue b/src/components/pages/Conversations/CscVoiceMailPlayer.vue old mode 100644 new mode 100755 similarity index 75% rename from src/components/pages/Conversations/CscVoicemailPlayer.vue rename to src/components/pages/Conversations/CscVoiceMailPlayer.vue index 5e7463bf..bfc28fe2 --- a/src/components/pages/Conversations/CscVoicemailPlayer.vue +++ b/src/components/pages/Conversations/CscVoiceMailPlayer.vue @@ -1,21 +1,22 @@