From 4d668d8db34c1909b7d2ff1d6d36f03ceb193b5c Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Wed, 11 Aug 2021 20:29:33 +0530 Subject: [PATCH] feat: Dedicated tab for campaigns (#2741) --- Gemfile.lock | 3 + .../components/widgets/InboxIconWithName.vue | 38 +++ .../dashboard/i18n/default-sidebar.js | 33 ++ .../dashboard/i18n/locale/en/campaign.json | 21 +- .../dashboard/i18n/locale/en/settings.json | 7 +- .../components => campaigns}/AddCampaign.vue | 152 +++++---- .../components => campaigns}/Campaign.vue | 45 +-- .../CampaignsTable.vue | 31 +- .../components => campaigns}/EditCampaign.vue | 71 +++- .../dashboard/settings/campaigns/Index.vue | 52 +++ .../settings/campaigns/campaigns.routes.js | 44 +++ .../dashboard/settings/inbox/Settings.vue | 25 +- .../dashboard/settings/settings.routes.js | 2 + .../dashboard/store/modules/campaigns.js | 11 +- .../dashboard/store/modules/inboxes.js | 5 +- .../store/modules/specs/campaigns/fixtures.js | 309 +----------------- .../modules/specs/campaigns/getters.spec.js | 55 +++- .../store/modules/specs/inboxes/fixtures.js | 12 + .../modules/specs/inboxes/getters.spec.js | 5 + app/javascript/shared/mixins/campaignMixin.js | 9 +- .../shared/mixins/specs/campaignMixin.spec.js | 51 ++- jest.config.js | 1 + 22 files changed, 477 insertions(+), 505 deletions(-) create mode 100644 app/javascript/dashboard/components/widgets/InboxIconWithName.vue rename app/javascript/dashboard/routes/dashboard/settings/{inbox/components => campaigns}/AddCampaign.vue (78%) rename app/javascript/dashboard/routes/dashboard/settings/{inbox/components => campaigns}/Campaign.vue (72%) rename app/javascript/dashboard/routes/dashboard/settings/{inbox/components => campaigns}/CampaignsTable.vue (89%) rename app/javascript/dashboard/routes/dashboard/settings/{inbox/components => campaigns}/EditCampaign.vue (76%) create mode 100644 app/javascript/dashboard/routes/dashboard/settings/campaigns/Index.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/campaigns/campaigns.routes.js diff --git a/Gemfile.lock b/Gemfile.lock index 853cba537..30c6c022a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -363,6 +363,8 @@ GEM connection_pool (~> 2.2) netrc (0.11.0) nio4r (2.5.7) + nokogiri (1.11.7-arm64-darwin) + racc (~> 1.4) nokogiri (1.11.7-x86_64-darwin) racc (~> 1.4) nokogiri (1.11.7-x86_64-linux) @@ -626,6 +628,7 @@ GEM zeitwerk (2.4.2) PLATFORMS + arm64-darwin-20 x86_64-darwin-21 x86_64-linux diff --git a/app/javascript/dashboard/components/widgets/InboxIconWithName.vue b/app/javascript/dashboard/components/widgets/InboxIconWithName.vue new file mode 100644 index 000000000..5c8163589 --- /dev/null +++ b/app/javascript/dashboard/components/widgets/InboxIconWithName.vue @@ -0,0 +1,38 @@ + + + + diff --git a/app/javascript/dashboard/i18n/default-sidebar.js b/app/javascript/dashboard/i18n/default-sidebar.js index 03d93b491..75a0675cc 100644 --- a/app/javascript/dashboard/i18n/default-sidebar.js +++ b/app/javascript/dashboard/i18n/default-sidebar.js @@ -47,6 +47,13 @@ export const getSidebarItems = accountId => ({ toState: frontendURL(`accounts/${accountId}/reports`), toStateName: 'settings_account_reports', }, + campaigns: { + icon: 'ion-speakerphone', + label: 'CAMPAIGNS', + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/campaigns`), + toStateName: 'settings_account_campaigns', + }, settings: { icon: 'ion-settings', label: 'SETTINGS', @@ -105,6 +112,32 @@ export const getSidebarItems = accountId => ({ }, }, }, + campaigns: { + routes: ['settings_account_campaigns', 'one_off'], + menuItems: { + back: { + icon: 'ion-ios-arrow-back', + label: 'HOME', + hasSubMenu: false, + toStateName: 'home', + toState: frontendURL(`accounts/${accountId}/dashboard`), + }, + ongoingCampaigns: { + icon: 'ion-arrow-swap', + label: 'ONGOING', + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/campaigns/ongoing`), + toStateName: 'settings_account_campaigns', + }, + onOffCampaigns: { + icon: 'ion-radio-waves', + label: 'ONE_OFF', + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/campaigns/one_off`), + toStateName: 'one_off', + }, + }, + }, settings: { routes: [ 'agent_list', diff --git a/app/javascript/dashboard/i18n/locale/en/campaign.json b/app/javascript/dashboard/i18n/locale/en/campaign.json index 95ed4d199..a348f2bb3 100644 --- a/app/javascript/dashboard/i18n/locale/en/campaign.json +++ b/app/javascript/dashboard/i18n/locale/en/campaign.json @@ -2,7 +2,10 @@ "CAMPAIGN": { "HEADER": "Campaigns", "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.", - "HEADER_BTN_TXT": "Create a campaign", + "HEADER_BTN_TXT": { + "ONE_OFF": "Create a one off campaign", + "ONGOING": "Create a ongoing campaign" + }, "ADD": { "TITLE": "Create a campaign", "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.", @@ -25,6 +28,11 @@ "PLACEHOLDER": "Select the customer labels", "ERROR": "Audience is required" }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, "MESSAGE": { "LABEL": "Message", "PLACEHOLDER": "Please enter the message of campaign", @@ -80,6 +88,7 @@ "TABLE_HEADER": { "TITLE": "Title", "MESSAGE": "Message", + "INBOX": "Inbox", "STATUS": "Status", "SENDER": "Sender", "URL": "URL", @@ -101,6 +110,16 @@ "SENDER": { "BOT": "Bot" } + }, + "ONE_OFF": { + "HEADER": "One off campaigns", + "404": "There are no one off campaigns created", + "INBOXES_NOT_FOUND": "Please create an sms inbox and start adding campaigns" + }, + "ONGOING": { + "HEADER": "Ongoing campaigns", + "404": "There are no ongoing campaigns created", + "INBOXES_NOT_FOUND": "Please create an website inbox and start adding campaigns" } } } diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index 34ce3e4d4..6bbd35e32 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -127,8 +127,8 @@ "SIDEBAR": { "CONVERSATIONS": "Conversations", "REPORTS": "Reports", - "CONTACTS": "Contacts", "SETTINGS": "Settings", + "CONTACTS": "Contacts", "HOME": "Home", "AGENTS": "Agents", "INBOXES": "Inboxes", @@ -142,7 +142,10 @@ "ALL_CONTACTS": "All Contacts", "TAGGED_WITH": "Tagged with", "REPORTS_OVERVIEW": "Overview", - "CSAT": "CSAT" + "CSAT": "CSAT", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off" }, "CREATE_ACCOUNT": { "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/components/AddCampaign.vue b/app/javascript/dashboard/routes/dashboard/settings/campaigns/AddCampaign.vue similarity index 78% rename from app/javascript/dashboard/routes/dashboard/settings/inbox/components/AddCampaign.vue rename to app/javascript/dashboard/routes/dashboard/settings/campaigns/AddCampaign.vue index 498c5c099..cf56f66e9 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/components/AddCampaign.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/campaigns/AddCampaign.vue @@ -44,14 +44,16 @@ -