From 6c60b602404669551b580bf18a76d2d43b048e5a Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Sun, 27 Oct 2019 10:48:26 +0530 Subject: [PATCH] [Enhancement] Add ApiClient, refactor CannedResponse (#183) --- app/javascript/dashboard/api/ApiClient.js | 31 ++++ .../dashboard/api/cannedResponse.js | 120 ++----------- .../widgets/conversation/ReplyBox.vue | 128 +++++++++----- .../dashboard/settings/canned/AddCanned.vue | 71 +++++--- .../settings/canned/DeleteCanned.vue | 13 +- .../dashboard/settings/canned/EditCanned.vue | 80 +++++---- .../dashboard/settings/canned/Index.vue | 18 +- .../dashboard/store/modules/cannedResponse.js | 164 +++++++++--------- .../dashboard/store/mutation-types.js | 2 +- config/routes.rb | 2 +- 10 files changed, 309 insertions(+), 320 deletions(-) create mode 100644 app/javascript/dashboard/api/ApiClient.js diff --git a/app/javascript/dashboard/api/ApiClient.js b/app/javascript/dashboard/api/ApiClient.js new file mode 100644 index 0000000000000..0bbd13d9ccf71 --- /dev/null +++ b/app/javascript/dashboard/api/ApiClient.js @@ -0,0 +1,31 @@ +/* global axios */ + +const API_VERSION = `/api/v1`; + +class ApiClient { + constructor(url) { + this.url = `${API_VERSION}/${url}`; + } + + get() { + return axios.get(this.url); + } + + show(id) { + return axios.get(`${this.url}/${id}`); + } + + create(data) { + return axios.post(this.url, data); + } + + update(id, data) { + return axios.patch(`${this.url}/${id}`, data); + } + + delete(id) { + return axios.delete(`${this.url}/${id}`); + } +} + +export default ApiClient; diff --git a/app/javascript/dashboard/api/cannedResponse.js b/app/javascript/dashboard/api/cannedResponse.js index 6153c49223d34..3a17d27355cd5 100644 --- a/app/javascript/dashboard/api/cannedResponse.js +++ b/app/javascript/dashboard/api/cannedResponse.js @@ -1,112 +1,16 @@ -/* eslint no-console: 0 */ /* global axios */ -/* eslint no-undef: "error" */ -/* eslint no-unused-expressions: ["error", { "allowShortCircuit": true }] */ -import endPoints from './endPoints'; -export default { - getAllCannedResponses() { - const urlData = endPoints('cannedResponse').get(); - const fetchPromise = new Promise((resolve, reject) => { - axios - .get(urlData.url) - .then(response => { - resolve(response); - }) - .catch(error => { - reject(Error(error)); - }); - }); - return fetchPromise; - }, +import ApiClient from './ApiClient'; - searchCannedResponse({ searchKey }) { - let urlData = endPoints('cannedResponse').get(); - urlData = `${urlData.url}?search=${searchKey}`; - const fetchPromise = new Promise((resolve, reject) => { - axios - .get(urlData) - .then(response => { - resolve(response); - }) - .catch(error => { - reject(Error(error)); - }); - }); - return fetchPromise; - }, +class CannedResponse extends ApiClient { + constructor() { + super('canned_responses'); + } - addCannedResponse(cannedResponseObj) { - const urlData = endPoints('cannedResponse').post(); - const fetchPromise = new Promise((resolve, reject) => { - axios - .post(urlData.url, cannedResponseObj) - .then(response => { - resolve(response); - }) - .catch(error => { - reject(Error(error)); - }); - }); - return fetchPromise; - }, - editCannedResponse(cannedResponseObj) { - const urlData = endPoints('cannedResponse').put(cannedResponseObj.id); - const fetchPromise = new Promise((resolve, reject) => { - axios - .put(urlData.url, cannedResponseObj) - .then(response => { - resolve(response); - }) - .catch(error => { - reject(Error(error)); - }); - }); - return fetchPromise; - }, - deleteCannedResponse(responseId) { - const urlData = endPoints('cannedResponse').delete(responseId); - const fetchPromise = new Promise((resolve, reject) => { - axios - .delete(urlData.url) - .then(response => { - resolve(response); - }) - .catch(error => { - reject(Error(error)); - }); - }); - return fetchPromise; - }, - getLabels() { - const urlData = endPoints('fetchLabels'); - const fetchPromise = new Promise((resolve, reject) => { - axios - .get(urlData.url) - .then(response => { - resolve(response); - }) - .catch(error => { - reject(Error(error)); - }); - }); - return fetchPromise; - }, - // Get Inbox related to the account - getInboxes() { - const urlData = endPoints('fetchInboxes'); - const fetchPromise = new Promise((resolve, reject) => { - axios - .get(urlData.url) - .then(response => { - console.log('fetch inboxes success'); - resolve(response); - }) - .catch(error => { - console.log('fetch inboxes failure'); - reject(Error(error)); - }); - }); - return fetchPromise; - }, -}; + get({ searchKey }) { + const url = searchKey ? `${this.url}?search=${searchKey}` : this.url; + return axios.get(url); + } +} + +export default new CannedResponse(); diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index fca785e514ea7..38497daf13a2a 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -1,49 +1,71 @@