From eaafc45f458cb9b3e62fb20f89672b1b66460349 Mon Sep 17 00:00:00 2001 From: Nithin David Thomas Date: Sat, 13 Feb 2021 14:58:05 +0530 Subject: [PATCH] feat: Show teams on sidebar (#1754) Co-authored-by: Pranav Raj S Co-authored-by: Sojan --- .../dashboard/api/inbox/conversation.js | 6 ++-- .../dashboard/components/ChatList.vue | 11 +++++++ .../dashboard/components/layout/Sidebar.vue | 32 +++++++++++++++++++ .../dashboard/i18n/default-sidebar.js | 2 ++ .../dashboard/i18n/locale/en/settings.json | 3 +- .../conversation/ConversationView.vue | 11 +++++++ .../conversation/conversation.routes.js | 19 +++++++++++ .../store/modules/specs/teams/fixtures.js | 8 +++++ .../store/modules/specs/teams/getters.spec.js | 14 +++++++- .../modules/specs/teams/mutations.spec.js | 1 + .../dashboard/store/modules/teams/getters.js | 6 ++++ app/views/api/v1/models/_team.json.jbuilder | 1 + 12 files changed, 110 insertions(+), 4 deletions(-) diff --git a/app/javascript/dashboard/api/inbox/conversation.js b/app/javascript/dashboard/api/inbox/conversation.js index 9f87d2aa5..159e77f0e 100644 --- a/app/javascript/dashboard/api/inbox/conversation.js +++ b/app/javascript/dashboard/api/inbox/conversation.js @@ -6,10 +6,11 @@ class ConversationApi extends ApiClient { super('conversations', { accountScoped: true }); } - get({ inboxId, status, assigneeType, page, labels }) { + get({ inboxId, status, assigneeType, page, labels, teamId }) { return axios.get(this.url, { params: { inbox_id: inboxId, + team_id: teamId, status, assignee_type: assigneeType, page, @@ -56,13 +57,14 @@ class ConversationApi extends ApiClient { return axios.post(`${this.url}/${conversationId}/unmute`); } - meta({ inboxId, status, assigneeType, labels }) { + meta({ inboxId, status, assigneeType, labels, teamId }) { return axios.get(`${this.url}/meta`, { params: { inbox_id: inboxId, status, assignee_type: assigneeType, labels, + team_id: teamId, }, }); } diff --git a/app/javascript/dashboard/components/ChatList.vue b/app/javascript/dashboard/components/ChatList.vue index 06850ff38..8637c071a 100644 --- a/app/javascript/dashboard/components/ChatList.vue +++ b/app/javascript/dashboard/components/ChatList.vue @@ -80,6 +80,10 @@ export default { type: String, default: '', }, + activeTeam: { + type: Object, + default: () => {}, + }, }, data() { return { @@ -128,12 +132,16 @@ export default { status: this.activeStatus, page: this.currentPage + 1, labels: this.label ? [this.label] : undefined, + teamId: this.activeTeam.name ? this.activeTeam.id : undefined, }; }, pageTitle() { if (this.inbox.name) { return this.inbox.name; } + if (this.activeTeam.name) { + return this.activeTeam.name; + } if (this.label) { return `#${this.label}`; } @@ -162,6 +170,9 @@ export default { }, }, watch: { + activeTeam() { + this.resetAndFetchData(); + }, conversationInbox() { this.resetAndFetchData(); }, diff --git a/app/javascript/dashboard/components/layout/Sidebar.vue b/app/javascript/dashboard/components/layout/Sidebar.vue index c2e6c9117..19c56c2af 100644 --- a/app/javascript/dashboard/components/layout/Sidebar.vue +++ b/app/javascript/dashboard/components/layout/Sidebar.vue @@ -13,6 +13,11 @@ :key="item.toState" :menu-item="item" /> + ({ + id: team.id, + label: team.name, + truncateLabel: true, + toState: frontendURL(`accounts/${this.accountId}/team/${team.id}`), + })), + }; + }, dashboardPath() { return frontendURL(`accounts/${this.accountId}/dashboard`); }, @@ -179,6 +206,7 @@ export default { this.$store.dispatch('labels/get'); this.$store.dispatch('inboxes/get'); this.$store.dispatch('notifications/unReadCount'); + this.$store.dispatch('teams/get'); this.setChatwootUser(); }, methods: { @@ -305,4 +333,8 @@ export default { margin-left: auto; margin-top: auto; } + +.teams-sidebar-menu + .nested.vertical.menu { + padding-left: calc(var(--space-medium) - var(--space-one)); +} diff --git a/app/javascript/dashboard/i18n/default-sidebar.js b/app/javascript/dashboard/i18n/default-sidebar.js index 6ff2741df..c4074e433 100644 --- a/app/javascript/dashboard/i18n/default-sidebar.js +++ b/app/javascript/dashboard/i18n/default-sidebar.js @@ -14,6 +14,8 @@ export const getSidebarItems = accountId => ({ 'profile_settings_index', 'label_conversations', 'conversations_through_label', + 'team_conversations', + 'conversations_through_team', 'notifications_index', ], menuItems: { diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index 779ad71c8..6b42cf3f2 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -124,7 +124,8 @@ "CANNED_RESPONSES": "Canned Responses", "INTEGRATIONS": "Integrations", "ACCOUNT_SETTINGS": "Account Settings", - "LABELS": "Labels" + "LABELS": "Labels", + "TEAMS": "Teams" }, "CREATE_ACCOUNT": { "NEW_ACCOUNT": "New Account", diff --git a/app/javascript/dashboard/routes/dashboard/conversation/ConversationView.vue b/app/javascript/dashboard/routes/dashboard/conversation/ConversationView.vue index 5323c538f..b6a7b6703 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/ConversationView.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/ConversationView.vue @@ -3,6 +3,7 @@