From 6cc9cce3274725ae82f2ed512931019d3f3eb6e5 Mon Sep 17 00:00:00 2001 From: iamsivin Date: Wed, 4 Feb 2026 16:14:23 +0530 Subject: [PATCH] feat: Refactor reports filters --- .../components/ui/DatePicker/DatePicker.vue | 3 +- .../DatePicker/components/CalendarAction.vue | 8 +- .../DatePicker/components/CalendarMonth.vue | 2 +- .../ui/DatePicker/components/CalendarYear.vue | 2 +- .../components/DatePickerButton.vue | 17 +- .../components/ui/Dropdown/DropdownSearch.vue | 4 +- .../dashboard/i18n/locale/en/report.json | 27 +- .../dashboard/settings/reports/BotReports.vue | 12 +- .../dashboard/settings/reports/Index.vue | 12 +- .../settings/reports/ReportContainer.vue | 2 +- .../reports/components/FilterSelector.vue | 228 ------- .../reports/components/Filters/Agents.vue | 47 -- .../components/Filters/DateGroupBy.vue | 66 -- .../reports/components/Filters/DateRange.vue | 51 -- .../reports/components/Filters/Inboxes.vue | 42 -- .../reports/components/Filters/Labels.vue | 66 -- .../reports/components/Filters/Ratings.vue | 40 -- .../reports/components/Filters/Teams.vue | 42 -- .../Filters/v3/ActiveFilterChip.vue | 10 +- .../components/OverviewReportFilters.vue | 52 ++ .../reports/components/ReportFilters.vue | 613 ++++++++---------- .../reports/components/SummaryReports.vue | 4 +- .../reports/components/WootReports.vue | 115 +--- .../specs/Filters/FiltersAgents.spec.js | 57 -- .../specs/Filters/FiltersDateGroupBy.spec.js | 47 -- .../specs/Filters/FiltersDateRange.spec.js | 41 -- .../specs/Filters/FiltersInboxes.spec.js | 65 -- .../specs/Filters/FiltersLabels.spec.js | 67 -- .../specs/Filters/FiltersRatings.spec.js | 43 -- .../specs/Filters/FiltersTeams.spec.js | 65 -- .../dashboard/store/modules/labels.js | 2 +- 31 files changed, 436 insertions(+), 1416 deletions(-) delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/FilterSelector.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Agents.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateGroupBy.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Inboxes.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Labels.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Ratings.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Teams.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/OverviewReportFilters.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersAgents.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersDateGroupBy.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersDateRange.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersInboxes.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersLabels.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersRatings.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/reports/components/specs/Filters/FiltersTeams.spec.js diff --git a/app/javascript/dashboard/components/ui/DatePicker/DatePicker.vue b/app/javascript/dashboard/components/ui/DatePicker/DatePicker.vue index 886bc30a0..7d9e6f9ea 100644 --- a/app/javascript/dashboard/components/ui/DatePicker/DatePicker.vue +++ b/app/javascript/dashboard/components/ui/DatePicker/DatePicker.vue @@ -213,7 +213,7 @@ const closeDatePicker = () => { diff --git a/app/javascript/dashboard/components/ui/DatePicker/components/CalendarMonth.vue b/app/javascript/dashboard/components/ui/DatePicker/components/CalendarMonth.vue index c3ddb5bfd..500cefbdc 100644 --- a/app/javascript/dashboard/components/ui/DatePicker/components/CalendarMonth.vue +++ b/app/javascript/dashboard/components/ui/DatePicker/components/CalendarMonth.vue @@ -78,7 +78,7 @@ const selectMonth = index => { 'hover:bg-n-alpha-2 dark:hover:bg-n-solid-3': index !== activeMonthIndex, }" - @click="selectMonth(index)" + @click.stop="selectMonth(index)" > {{ month }} diff --git a/app/javascript/dashboard/components/ui/DatePicker/components/CalendarYear.vue b/app/javascript/dashboard/components/ui/DatePicker/components/CalendarYear.vue index 13a786e27..c90a2ab45 100644 --- a/app/javascript/dashboard/components/ui/DatePicker/components/CalendarYear.vue +++ b/app/javascript/dashboard/components/ui/DatePicker/components/CalendarYear.vue @@ -77,7 +77,7 @@ const selectYear = year => { 'bg-n-brand text-white hover:bg-n-blue-10': year === activeYear, 'hover:bg-n-alpha-2 dark:hover:bg-n-solid-3': year !== activeYear, }" - @click="selectYear(year)" + @click.stop="selectYear(year)" > {{ year }} diff --git a/app/javascript/dashboard/components/ui/DatePicker/components/DatePickerButton.vue b/app/javascript/dashboard/components/ui/DatePicker/components/DatePickerButton.vue index 950a9f020..91cf8abad 100644 --- a/app/javascript/dashboard/components/ui/DatePicker/components/DatePickerButton.vue +++ b/app/javascript/dashboard/components/ui/DatePicker/components/DatePickerButton.vue @@ -2,6 +2,7 @@ import { computed } from 'vue'; import { dateRanges } from '../helpers/DatePickerHelper'; import { format, isSameYear, isValid } from 'date-fns'; +import Icon from 'dashboard/components-next/icon/Icon.vue'; const props = defineProps({ selectedStartDate: Date, @@ -48,16 +49,22 @@ const openDatePicker = () => { diff --git a/app/javascript/dashboard/components/ui/Dropdown/DropdownSearch.vue b/app/javascript/dashboard/components/ui/Dropdown/DropdownSearch.vue index 7e5bf569e..6be49b99e 100644 --- a/app/javascript/dashboard/components/ui/Dropdown/DropdownSearch.vue +++ b/app/javascript/dashboard/components/ui/Dropdown/DropdownSearch.vue @@ -34,8 +34,8 @@ const value = defineModel({ diff --git a/app/javascript/dashboard/i18n/locale/en/report.json b/app/javascript/dashboard/i18n/locale/en/report.json index 504caff0f..2ffa0ef11 100644 --- a/app/javascript/dashboard/i18n/locale/en/report.json +++ b/app/javascript/dashboard/i18n/locale/en/report.json @@ -128,11 +128,16 @@ }, "AGENT_REPORTS": { "HEADER": "Agents Overview", - "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent's name to learn more.", "LOADING_CHART": "Loading chart data...", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "DOWNLOAD_AGENT_REPORTS": "Download agent reports", "FILTER_DROPDOWN_LABEL": "Select Agent", + "FILTERS": { + "INPUT_PLACEHOLDER": { + "AGENTS": "Search agents" + } + }, "METRICS": { "CONVERSATIONS": { "NAME": "Conversations", @@ -201,6 +206,11 @@ "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "DOWNLOAD_LABEL_REPORTS": "Download label reports", "FILTER_DROPDOWN_LABEL": "Select Label", + "FILTERS": { + "INPUT_PLACEHOLDER": { + "LABELS": "Search labels" + } + }, "METRICS": { "CONVERSATIONS": { "NAME": "Conversations", @@ -271,6 +281,11 @@ "FILTER_DROPDOWN_LABEL": "Select Inbox", "ALL_INBOXES": "All Inboxes", "SEARCH_INBOX": "Search Inbox", + "FILTERS": { + "INPUT_PLACEHOLDER": { + "INBOXES": "Search inboxes" + } + }, "METRICS": { "CONVERSATIONS": { "NAME": "Conversations", @@ -334,11 +349,19 @@ }, "TEAM_REPORTS": { "HEADER": "Team Overview", - "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "DESCRIPTION": "Get a snapshot of your team's performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", "LOADING_CHART": "Loading chart data...", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "DOWNLOAD_TEAM_REPORTS": "Download team reports", "FILTER_DROPDOWN_LABEL": "Select Team", + "FILTERS": { + "ADD_FILTER": "Add filter", + "CLEAR_ALL": "Clear all", + "NO_FILTER": "No filters available", + "INPUT_PLACEHOLDER": { + "TEAMS": "Search teams" + } + }, "METRICS": { "CONVERSATIONS": { "NAME": "Conversations", diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue index 11800a029..03b7290d6 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue @@ -1,7 +1,7 @@ - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Agents.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Agents.vue deleted file mode 100644 index 353c09bb8..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Agents.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateGroupBy.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateGroupBy.vue deleted file mode 100644 index 37139865f..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateGroupBy.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue deleted file mode 100644 index 9caab26dd..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Inboxes.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Inboxes.vue deleted file mode 100644 index 476c7a0a3..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Inboxes.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Labels.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Labels.vue deleted file mode 100644 index ede9e020c..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Labels.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Ratings.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Ratings.vue deleted file mode 100644 index 207de214f..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Ratings.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Teams.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Teams.vue deleted file mode 100644 index 606cdb2af..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Teams.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/ActiveFilterChip.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/ActiveFilterChip.vue index bd0a80984..e37a3bc2b 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/ActiveFilterChip.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/ActiveFilterChip.vue @@ -8,8 +8,8 @@ const props = defineProps({ required: true, }, id: { - type: Number, - required: true, + type: [Number, null], + default: null, }, type: { type: String, @@ -35,6 +35,10 @@ const props = defineProps({ type: Boolean, default: false, }, + showClearFilter: { + type: Boolean, + default: true, + }, }); const emit = defineEmits([ @@ -60,7 +64,7 @@ const closeDropdown = () => emit('closeDropdown'); +import { ref, onMounted } from 'vue'; +import { getUnixStartOfDay, getUnixEndOfDay } from 'helpers/DateHelper'; +import subDays from 'date-fns/subDays'; +import WootDatePicker from 'dashboard/components/ui/DatePicker/DatePicker.vue'; +import ToggleSwitch from 'dashboard/components-next/switch/Switch.vue'; + +const emit = defineEmits(['filterChange']); + +const customDateRange = ref([subDays(new Date(), 6), new Date()]); +const businessHoursSelected = ref(false); + +const emitChange = () => { + emit('filterChange', { + from: getUnixStartOfDay(customDateRange.value[0]), + to: getUnixEndOfDay(customDateRange.value[1]), + businessHours: businessHoursSelected.value, + }); +}; + +const onDateRangeChange = value => { + customDateRange.value = value; + emitChange(); +}; + +const onBusinessHoursToggle = () => { + emitChange(); +}; + +onMounted(() => { + emitChange(); +}); + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue index 02b286d07..61dd870e6 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue @@ -1,349 +1,306 @@ - diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/SummaryReports.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/SummaryReports.vue index 9b966c8fe..1ba67dc0e 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/SummaryReports.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/SummaryReports.vue @@ -1,5 +1,5 @@