From d12d8bc0b65af69c6f01ff517997eaca355e1ea5 Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Fri, 1 May 2026 11:21:10 -0300 Subject: [PATCH] =?UTF-8?q?feat(reports):=20mant=C3=A9m=20filtros=20do=20B?= =?UTF-8?q?otReports=20na=20URL=20sem=20trocar=20de=20rota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BotReports agora carrega inboxes no mount e passa navigate-on-entity-filter=false pro ReportFilters, que ganha prop pra atualizar a URL com os filtros aplicados sem disparar router.push pra outra rota. Permite compartilhar/recuperar visão filtrada do BotReports via URL. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../dashboard/settings/reports/BotReports.vue | 7 +++++++ .../reports/components/ReportFilters.vue | 21 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue index 1f3b186e9..fe70e0886 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue @@ -37,11 +37,17 @@ export default { }; }, }, + mounted() { + this.fetchInboxes(); + }, methods: { fetchAllData() { this.fetchBotSummary(); this.fetchChartData(); }, + fetchInboxes() { + this.$store.dispatch('inboxes/get'); + }, fetchBotSummary() { try { this.$store.dispatch('fetchBotSummary', this.getRequestPayload()); @@ -105,6 +111,7 @@ export default { filter-type="inboxes" show-group-by :show-business-hours="false" + :navigate-on-entity-filter="false" @filter-change="onFilterChange" /> 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 4b86aefba..2967cb9f0 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue @@ -12,7 +12,9 @@ import ToggleSwitch from 'dashboard/components-next/switch/Switch.vue'; import { GROUP_BY_FILTER } from '../constants'; import { DATE_RANGE_TYPES } from 'dashboard/components/ui/DatePicker/helpers/DatePickerHelper'; import { + generateFilterURLParams, generateReportURLParams, + parseFilterURLParams, parseReportURLParams, } from '../helpers/reportFilterHelper'; @@ -40,6 +42,10 @@ const props = defineProps({ type: Boolean, default: true, }, + navigateOnEntityFilter: { + type: Boolean, + default: true, + }, }); const emit = defineEmits(['filterChange']); @@ -176,8 +182,11 @@ const updateURLParams = () => { groupBy: isGroupByPossible.value ? groupBy.value.id : null, range: selectedDateRange.value, }); + const filterParams = props.showEntityFilter + ? generateFilterURLParams(appliedFilters.value) + : {}; - router.replace({ query: { ...params } }); + router.replace({ query: { ...params, ...filterParams } }); }; const emitChange = () => { @@ -235,6 +244,10 @@ const addFilter = item => { agents: 'agent_reports_show', }; + if (!props.navigateOnEntityFilter) { + return; + } + const routeName = routeNameMap[props.filterType]; if (routeName) { router.push({ @@ -308,6 +321,12 @@ const initializeFromURL = () => { if (props.showEntityFilter && route.params.id) { const filterKey = getFilterKey(); appliedFilters.value[filterKey] = Number(route.params.id); + } else if (props.showEntityFilter) { + const filterKey = getFilterKey(); + const filterParams = parseFilterURLParams(route.query); + if (filterParams[filterKey]) { + appliedFilters.value[filterKey] = filterParams[filterKey]; + } } };