Refactor: Inbox store, remove inboxes from sidebar (#387)
* Refactor: Inbox store, remove inboxes from sidebar * Add a new page for inbox settings * Show inboxes on sidebar * Add inbox_members API * Disable similar-code check * Fix codeclimate scss issues * Add widget_color update API and actions * Add specs for inbox store * Fix Facebook auth flow * Fix agent loading, inbox name
This commit is contained in:
parent
96f8070e79
commit
5ddc46c474
51 changed files with 1028 additions and 726 deletions
|
@ -4,7 +4,8 @@ const API_VERSION = `/api/v1`;
|
|||
|
||||
class ApiClient {
|
||||
constructor(url) {
|
||||
this.url = `${API_VERSION}/${url}`;
|
||||
this.apiVersion = API_VERSION;
|
||||
this.url = `${this.apiVersion}/${url}`;
|
||||
}
|
||||
|
||||
get() {
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
/* global axios */
|
||||
import endPoints from './endPoints';
|
||||
|
||||
export default {
|
||||
getLabels() {
|
||||
const urlData = endPoints('fetchLabels');
|
||||
return axios.get(urlData.url);
|
||||
},
|
||||
|
||||
getInboxes() {
|
||||
const urlData = endPoints('fetchInboxes');
|
||||
return axios.get(urlData.url);
|
||||
},
|
||||
|
||||
deleteInbox(id) {
|
||||
const urlData = endPoints('inbox').delete(id);
|
||||
return axios.delete(urlData.url);
|
||||
},
|
||||
|
||||
listInboxAgents(id) {
|
||||
const urlData = endPoints('inbox').agents.get(id);
|
||||
return axios.get(urlData.url);
|
||||
},
|
||||
|
||||
updateInboxAgents(inboxId, agentList) {
|
||||
const urlData = endPoints('inbox').agents.post();
|
||||
return axios.post(urlData.url, {
|
||||
user_ids: agentList,
|
||||
inbox_id: inboxId,
|
||||
});
|
||||
},
|
||||
};
|
|
@ -19,6 +19,13 @@ class FBChannel extends ApiClient {
|
|||
contact_id: contactId,
|
||||
});
|
||||
}
|
||||
|
||||
create(params) {
|
||||
return axios.post(
|
||||
`${this.apiVersion}/callbacks/register_facebook_page`,
|
||||
params
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default new FBChannel();
|
||||
|
|
|
@ -5,19 +5,6 @@
|
|||
import endPoints from './endPoints';
|
||||
|
||||
export default {
|
||||
// Get Inbox related to the account
|
||||
createChannel(channel, channelParams) {
|
||||
const urlData = endPoints('createChannel')(channel, channelParams);
|
||||
return axios.post(urlData.url, urlData.params);
|
||||
},
|
||||
|
||||
addAgentsToChannel(inboxId, agentsId) {
|
||||
const urlData = endPoints('addAgentsToChannel');
|
||||
urlData.params.inbox_id = inboxId;
|
||||
urlData.params.user_ids = agentsId;
|
||||
return axios.post(urlData.url, urlData.params);
|
||||
},
|
||||
|
||||
fetchFacebookPages(token) {
|
||||
const urlData = endPoints('fetchFacebookPages');
|
||||
urlData.params.omniauth_token = token;
|
||||
|
|
|
@ -24,26 +24,6 @@ const endPoints = {
|
|||
params: { inbox_id: null },
|
||||
},
|
||||
|
||||
fetchLabels: {
|
||||
url: 'api/v1/labels.json',
|
||||
},
|
||||
|
||||
fetchInboxes: {
|
||||
url: 'api/v1/inboxes.json',
|
||||
},
|
||||
|
||||
createChannel(channel, channelParams) {
|
||||
return {
|
||||
url: `api/v1/callbacks/register_${channel}_page.json`,
|
||||
params: channelParams,
|
||||
};
|
||||
},
|
||||
|
||||
addAgentsToChannel: {
|
||||
url: 'api/v1/inbox_members.json',
|
||||
params: { user_ids: [], inbox_id: null },
|
||||
},
|
||||
|
||||
fetchFacebookPages: {
|
||||
url: 'api/v1/callbacks/get_facebook_pages.json',
|
||||
params: { omniauth_token: '' },
|
||||
|
@ -69,26 +49,6 @@ const endPoints = {
|
|||
};
|
||||
},
|
||||
},
|
||||
|
||||
inbox: {
|
||||
delete(id) {
|
||||
return {
|
||||
url: `/api/v1/inboxes/${id}`,
|
||||
};
|
||||
},
|
||||
agents: {
|
||||
get(id) {
|
||||
return {
|
||||
url: `/api/v1/inbox_members/${id}.json`,
|
||||
};
|
||||
},
|
||||
post() {
|
||||
return {
|
||||
url: '/api/v1/inbox_members.json',
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default page => {
|
||||
|
|
17
app/javascript/dashboard/api/inboxMembers.js
Normal file
17
app/javascript/dashboard/api/inboxMembers.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* global axios */
|
||||
import ApiClient from './ApiClient';
|
||||
|
||||
class InboxMembers extends ApiClient {
|
||||
constructor() {
|
||||
super('inbox_members');
|
||||
}
|
||||
|
||||
create({ inboxId, agentList }) {
|
||||
return axios.post(this.url, {
|
||||
inbox_id: inboxId,
|
||||
user_ids: agentList,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default new InboxMembers();
|
9
app/javascript/dashboard/api/inboxes.js
Normal file
9
app/javascript/dashboard/api/inboxes.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
import ApiClient from './ApiClient';
|
||||
|
||||
class Inboxes extends ApiClient {
|
||||
constructor() {
|
||||
super('inboxes');
|
||||
}
|
||||
}
|
||||
|
||||
export default new Inboxes();
|
13
app/javascript/dashboard/api/specs/inboxes.spec.js
Normal file
13
app/javascript/dashboard/api/specs/inboxes.spec.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
import inboxes from '../inboxes';
|
||||
import ApiClient from '../ApiClient';
|
||||
|
||||
describe('#AgentAPI', () => {
|
||||
it('creates correct instance', () => {
|
||||
expect(inboxes).toBeInstanceOf(ApiClient);
|
||||
expect(inboxes).toHaveProperty('get');
|
||||
expect(inboxes).toHaveProperty('show');
|
||||
expect(inboxes).toHaveProperty('create');
|
||||
expect(inboxes).toHaveProperty('update');
|
||||
expect(inboxes).toHaveProperty('delete');
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue