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] 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 @@