From 2ef767d60fc349163210e8a8f39a9e779c332d4d Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 8 May 2024 08:48:36 +0530 Subject: [PATCH] feat: exporting contacts takes the filters into account (#9347) - This PR allows contacts to be exported using the current filter in CRM view Co-authored-by: Sojan Jose --- .../api/v1/accounts/contacts_controller.rb | 5 +- app/javascript/dashboard/api/contacts.js | 4 +- .../dashboard/i18n/locale/en/contact.json | 1 + .../contacts/components/ContactsView.vue | 15 ++- .../dashboard/contacts/components/Header.vue | 17 ++-- .../store/modules/contacts/actions.js | 5 +- app/jobs/account/contacts_export_job.rb | 52 +++++++---- app/services/contacts/filter_service.rb | 10 +- config/routes.rb | 2 +- .../v1/accounts/contacts_controller_spec.rb | 48 +++++++--- spec/jobs/account/contacts_export_job_spec.rb | 92 +++++++++++++++++-- spec/services/contacts/filter_service_spec.rb | 27 +++--- 12 files changed, 213 insertions(+), 65 deletions(-) diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index 729db34b5..250c64a86 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -46,7 +46,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController def export column_names = params['column_names'] - Account::ContactsExportJob.perform_later(Current.account.id, column_names, Current.user.email) + filter_params = { :payload => params.permit!['payload'], :label => params.permit!['label'] } + Account::ContactsExportJob.perform_later(Current.account.id, Current.user.id, column_names, filter_params) head :ok, message: I18n.t('errors.contacts.export.success') end @@ -61,7 +62,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController def show; end def filter - result = ::Contacts::FilterService.new(params.permit!, current_user).perform + result = ::Contacts::FilterService.new(Current.account, Current.user, params.permit!).perform contacts = result[:contacts] @contacts_count = result[:count] @contacts = fetch_contacts(contacts) diff --git a/app/javascript/dashboard/api/contacts.js b/app/javascript/dashboard/api/contacts.js index 61312dd24..85c4bba1d 100644 --- a/app/javascript/dashboard/api/contacts.js +++ b/app/javascript/dashboard/api/contacts.js @@ -77,8 +77,8 @@ class ContactAPI extends ApiClient { return axios.delete(`${this.url}/${contactId}/avatar`); } - exportContacts() { - return axios.get(`${this.url}/export`); + exportContacts(queryPayload) { + return axios.post(`${this.url}/export`, queryPayload); } } diff --git a/app/javascript/dashboard/i18n/locale/en/contact.json b/app/javascript/dashboard/i18n/locale/en/contact.json index ebd2556e4..4db7fce93 100644 --- a/app/javascript/dashboard/i18n/locale/en/contact.json +++ b/app/javascript/dashboard/i18n/locale/en/contact.json @@ -84,6 +84,7 @@ "CONFIRM": { "TITLE": "Export Contacts", "MESSAGE": "Are you sure you want to export all contacts?", + "FILTERED_MESSAGE": "Are you sure you want to export all the filtered contacts?", "YES": "Yes, Export", "NO": "No, Cancel" } diff --git a/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue b/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue index 41e0dff56..1a824f587 100644 --- a/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue +++ b/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue @@ -1,5 +1,5 @@