From 0477b8ca143a68e6d8cb8b5b72feb7c4deab184d Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Thu, 11 Apr 2024 21:34:31 +0530 Subject: [PATCH 1/5] fix: Widget iFrame is adding a white background (#9221) --- app/javascript/sdk/sdk.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/sdk/sdk.js b/app/javascript/sdk/sdk.js index 313bbb88a..95d132258 100644 --- a/app/javascript/sdk/sdk.js +++ b/app/javascript/sdk/sdk.js @@ -23,6 +23,7 @@ export const SDK_CSS = ` .woot-widget-holder iframe { border: 0; + color-scheme: normal; height: 100% !important; width: 100% !important; max-height: 100vh !important; From e8fe3c7c05fc8e62baddf0eb2b068a5e3b05998d Mon Sep 17 00:00:00 2001 From: Pranav Date: Thu, 11 Apr 2024 15:47:43 -0700 Subject: [PATCH 2/5] fix: Terminate IMAP connection after the job is complete (#9225) --- app/services/imap/base_fetch_email_service.rb | 16 +++++++++++++++- app/services/imap/fetch_email_service.rb | 2 +- .../imap/microsoft_fetch_email_service.rb | 2 +- spec/services/imap/fetch_email_service_spec.rb | 3 +++ .../imap/microsoft_fetch_email_service_spec.rb | 1 + 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/services/imap/base_fetch_email_service.rb b/app/services/imap/base_fetch_email_service.rb index 4f49dc980..1af3bdb5d 100644 --- a/app/services/imap/base_fetch_email_service.rb +++ b/app/services/imap/base_fetch_email_service.rb @@ -3,10 +3,17 @@ require 'net/imap' class Imap::BaseFetchEmailService pattr_initialize [:channel!] - def perform + def fetch_emails # Override this method end + def perform + inbound_emails = fetch_emails + terminate_imap_connection + + inbound_emails + end + private def authentication_type @@ -105,6 +112,13 @@ class Imap::BaseFetchEmailService imap end + def terminate_imap_connection + imap_client.logout + rescue Net::IMAP::Error => e + Rails.logger.info "Logout failed for #{channel.email} - #{e.message}." + imap_client.disconnect + end + def build_mail_from_string(raw_email_content) Mail.read_from_string(raw_email_content) end diff --git a/app/services/imap/fetch_email_service.rb b/app/services/imap/fetch_email_service.rb index f6d8de774..f602b3375 100644 --- a/app/services/imap/fetch_email_service.rb +++ b/app/services/imap/fetch_email_service.rb @@ -1,5 +1,5 @@ class Imap::FetchEmailService < Imap::BaseFetchEmailService - def perform + def fetch_emails fetch_mail_for_channel end diff --git a/app/services/imap/microsoft_fetch_email_service.rb b/app/services/imap/microsoft_fetch_email_service.rb index b6d3c03b8..ed3eb20f1 100644 --- a/app/services/imap/microsoft_fetch_email_service.rb +++ b/app/services/imap/microsoft_fetch_email_service.rb @@ -1,5 +1,5 @@ class Imap::MicrosoftFetchEmailService < Imap::BaseFetchEmailService - def perform + def fetch_emails return if channel.provider_config['access_token'].blank? fetch_mail_for_channel diff --git a/spec/services/imap/fetch_email_service_spec.rb b/spec/services/imap/fetch_email_service_spec.rb index 28a173951..46336bf0f 100644 --- a/spec/services/imap/fetch_email_service_spec.rb +++ b/spec/services/imap/fetch_email_service_spec.rb @@ -30,6 +30,7 @@ RSpec.describe Imap::FetchEmailService do allow(imap).to receive(:search).with(%w[SINCE 25-Oct-2020]).and_return([1]) allow(imap).to receive(:fetch).with([1], 'BODY.PEEK[HEADER]').and_return([email_header]) allow(imap).to receive(:fetch).with(1, 'RFC822').and_return([imap_fetch_mail]) + allow(imap).to receive(:logout) result = described_class.new(channel: imap_email_channel).perform @@ -39,6 +40,7 @@ RSpec.describe Imap::FetchEmailService do expect(imap).to have_received(:fetch).with([1], 'BODY.PEEK[HEADER]') expect(imap).to have_received(:fetch).with(1, 'RFC822') expect(logger).to have_received(:info).with("[IMAP::FETCH_EMAIL_SERVICE] Fetching mails from #{imap_email_channel.email}, found 1.") + expect(imap).to have_received(:logout) end end @@ -51,6 +53,7 @@ RSpec.describe Imap::FetchEmailService do allow(imap).to receive(:search).with(%w[SINCE 25-Oct-2020]).and_return([1]) allow(imap).to receive(:fetch).with([1], 'BODY.PEEK[HEADER]').and_return([email_header]) + allow(imap).to receive(:logout) result = described_class.new(channel: imap_email_channel).perform diff --git a/spec/services/imap/microsoft_fetch_email_service_spec.rb b/spec/services/imap/microsoft_fetch_email_service_spec.rb index 8f79b86b5..3a13ce0c6 100644 --- a/spec/services/imap/microsoft_fetch_email_service_spec.rb +++ b/spec/services/imap/microsoft_fetch_email_service_spec.rb @@ -35,6 +35,7 @@ RSpec.describe Imap::MicrosoftFetchEmailService do allow(imap).to receive(:search).with(%w[SINCE 25-Oct-2020]).and_return([1]) allow(imap).to receive(:fetch).with([1], 'BODY.PEEK[HEADER]').and_return([email_header]) allow(imap).to receive(:fetch).with(1, 'RFC822').and_return([imap_fetch_mail]) + allow(imap).to receive(:logout) result = described_class.new(channel: microsoft_channel).perform From 3b6ae772bfb4cdb9f66ed6fde55d2a2345e2e70d Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Fri, 12 Apr 2024 11:03:18 +0530 Subject: [PATCH 3/5] feat: SLA report filter (#9218) Co-authored-by: Shivam Mishra Co-authored-by: Muhsin Keloth --- app/javascript/dashboard/api/slaReports.js | 4 + .../dashboard/api/specs/slaReports.spec.js | 4 + .../dashboard/assets/scss/_date-picker.scss | 7 + .../assets/scss/plugins/_multiselect.scss | 23 ++ .../widgets/TableFooterPagination.vue | 2 +- .../dashboard/i18n/locale/en/report.json | 26 ++- .../dashboard/settings/reports/SLAReports.vue | 31 ++- .../Filters/v3/ActiveFilterChip.vue | 73 ++++++ .../components/Filters/v3/AddFilterChip.vue | 98 ++++++++ .../components/Filters/v3/FilterButton.vue | 35 ++- .../Filters/v3/FilterDropdownSearch.vue | 10 +- .../Filters/v3/FilterListDropdown.vue | 26 ++- .../Filters/v3/FilterListItemButton.vue | 2 +- .../reports/components/SLA/SLAFilter.vue | 210 ++++++++++++++++++ .../components/SLA/SLAReportFilters.vue | 41 ++-- .../SLA/helpers/SLAFilterHelpers.js | 37 +++ app/javascript/packs/application.js | 2 + enterprise/app/models/applied_sla.rb | 12 +- .../accounts/applied_slas_controller_spec.rb | 4 +- 19 files changed, 580 insertions(+), 67 deletions(-) create mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/ActiveFilterChip.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/AddFilterChip.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAFilter.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/helpers/SLAFilterHelpers.js diff --git a/app/javascript/dashboard/api/slaReports.js b/app/javascript/dashboard/api/slaReports.js index c187c58a3..36a3a895c 100644 --- a/app/javascript/dashboard/api/slaReports.js +++ b/app/javascript/dashboard/api/slaReports.js @@ -13,6 +13,7 @@ class SLAReportsAPI extends ApiClient { inbox_id, team_id, sla_policy_id, + label_list, page, } = {}) { return axios.get(this.url, { @@ -23,6 +24,7 @@ class SLAReportsAPI extends ApiClient { inbox_id, team_id, sla_policy_id, + label_list, page, }, }); @@ -54,6 +56,7 @@ class SLAReportsAPI extends ApiClient { assigned_agent_id, inbox_id, team_id, + label_list, sla_policy_id, } = {}) { return axios.get(`${this.url}/metrics`, { @@ -62,6 +65,7 @@ class SLAReportsAPI extends ApiClient { until: to, assigned_agent_id, inbox_id, + label_list, team_id, sla_policy_id, }, diff --git a/app/javascript/dashboard/api/specs/slaReports.spec.js b/app/javascript/dashboard/api/specs/slaReports.spec.js index 51ac8bfe4..e69f527b2 100644 --- a/app/javascript/dashboard/api/specs/slaReports.spec.js +++ b/app/javascript/dashboard/api/specs/slaReports.spec.js @@ -35,6 +35,7 @@ describe('#SLAReports API', () => { inbox_id: 1, team_id: 1, sla_policy_id: 1, + label_list: ['label1'], }); expect(axiosMock.get).toHaveBeenCalledWith('/api/v1/applied_slas', { params: { @@ -45,6 +46,7 @@ describe('#SLAReports API', () => { inbox_id: 1, team_id: 1, sla_policy_id: 1, + label_list: ['label1'], }, }); }); @@ -56,6 +58,7 @@ describe('#SLAReports API', () => { inbox_id: 1, team_id: 1, sla_policy_id: 1, + label_list: ['label1'], }); expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/applied_slas/metrics', @@ -67,6 +70,7 @@ describe('#SLAReports API', () => { inbox_id: 1, team_id: 1, sla_policy_id: 1, + label_list: ['label1'], }, } ); diff --git a/app/javascript/dashboard/assets/scss/_date-picker.scss b/app/javascript/dashboard/assets/scss/_date-picker.scss index 2132d5fd5..60c24b421 100644 --- a/app/javascript/dashboard/assets/scss/_date-picker.scss +++ b/app/javascript/dashboard/assets/scss/_date-picker.scss @@ -1,6 +1,13 @@ @import '~vue2-datepicker/scss/index'; .date-picker { + // To be removed one SLA reports date picker is created + &.small { + .mx-input { + @apply h-8 text-sm; + } + } + &.no-margin { .mx-input { @apply mb-0; diff --git a/app/javascript/dashboard/assets/scss/plugins/_multiselect.scss b/app/javascript/dashboard/assets/scss/plugins/_multiselect.scss index 9170715e0..99b006045 100644 --- a/app/javascript/dashboard/assets/scss/plugins/_multiselect.scss +++ b/app/javascript/dashboard/assets/scss/plugins/_multiselect.scss @@ -153,6 +153,29 @@ } .multiselect-wrap--small { + // To be removed one SLA reports date picker is created + &.tiny { + .multiselect.no-margin { + @apply min-h-[32px]; + } + + .multiselect__select { + @apply min-h-[32px] h-8; + + &::before { + @apply top-[60%]; + } + } + + .multiselect__tags { + @apply min-h-[32px] max-h-[32px]; + + .multiselect__single { + @apply pt-1 pb-1; + } + } + } + .multiselect__tags, .multiselect__input, .multiselect { diff --git a/app/javascript/dashboard/components/widgets/TableFooterPagination.vue b/app/javascript/dashboard/components/widgets/TableFooterPagination.vue index c048b2eb7..38ebdc69c 100644 --- a/app/javascript/dashboard/components/widgets/TableFooterPagination.vue +++ b/app/javascript/dashboard/components/widgets/TableFooterPagination.vue @@ -82,7 +82,7 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/AddFilterChip.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/AddFilterChip.vue new file mode 100644 index 000000000..48a1c2701 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/AddFilterChip.vue @@ -0,0 +1,98 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterButton.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterButton.vue index 2c9784705..3bbfb415c 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterButton.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterButton.vue @@ -4,23 +4,44 @@ defineProps({ type: String, default: '', }, + rightIcon: { + type: String, + default: '', + }, + leftIcon: { + type: String, + default: '', + }, }); diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterDropdownSearch.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterDropdownSearch.vue index ee090edf4..6a8d10724 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterDropdownSearch.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/FilterDropdownSearch.vue @@ -1,9 +1,5 @@