From 06faadab5f9b9bf237aa65fb34986e5172830816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Tue, 23 Jun 2026 14:56:36 -0300 Subject: [PATCH] Refresh client filter options reliably --- src/dataService.ts | 17 +++++++++++++++-- src/pages/Clients.tsx | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/dataService.ts b/src/dataService.ts index a39e2c4..af8e507 100644 --- a/src/dataService.ts +++ b/src/dataService.ts @@ -7,6 +7,7 @@ const IN_FLIGHT_CACHE_TTL_MS = 15 * 1000; type CacheOptions = { force?: boolean; + shouldCache?: (data: unknown) => boolean; }; type ApiCacheEntry = { @@ -37,7 +38,7 @@ const getCachedAnalytics = async (key: string, loader: () => Promise, opti try { const data = await promise; - if (data === null) { + if (data === null || options.shouldCache?.(data) === false) { analyticsCache.delete(key); } else { analyticsCache.set(key, { data, expiresAt: Date.now() + ANALYTICS_CACHE_TTL_MS }); @@ -209,7 +210,16 @@ const appendClientMetadataFilterParams = (params: URLSearchParams, filters?: Par if (filters.seller) params.set('seller', filters.seller); }; -export const fetchClientFilterOptions = async (dateRange: DateRange): Promise => { +const hasClientFilterOptions = (data: unknown) => { + const options = data as ClientFilterOptions | null; + return Boolean( + options?.marketplaces?.length || + options?.salesChannels?.length || + options?.sellers?.length + ); +}; + +export const fetchClientFilterOptions = async (dateRange: DateRange, options?: CacheOptions): Promise => { const path = `/analytics/clients/filters?${buildDateRangeParams(dateRange).toString()}`; return getCachedAnalytics(path, async () => { try { @@ -220,6 +230,9 @@ export const fetchClientFilterOptions = async (dateRange: DateRange): Promise { setRfmAnalytics(cachedRfm || null); } - const filterOptionsPromise = fetchClientFilterOptions(dateRange); + const filterOptionsPromise = fetchClientFilterOptions(dateRange, { force: true }); const clientsPromise = fetchClientAnalytics(dateRange, metadataFilters); const rfmPromise = fetchRfmAnalytics(dateRange, metadataFilters); const [options, clientsData] = await Promise.all([filterOptionsPromise, clientsPromise]);