From e850069b07827ad6933841416dc8041c8a518e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Tue, 28 Apr 2026 11:57:26 +0400 Subject: [PATCH] Fix consent records version coercion and cache key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add strict numeric validation to all version filter refetch paths and include orderBy in @connection filters to prevent cache collisions across sort orders. Signed-off-by: Émile Ré --- .../CookieBannerConsentRecordsPage.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/console/src/pages/organizations/cookie-banners/configuration/consent-records/CookieBannerConsentRecordsPage.tsx b/apps/console/src/pages/organizations/cookie-banners/configuration/consent-records/CookieBannerConsentRecordsPage.tsx index 58d16441f..4e95866fe 100644 --- a/apps/console/src/pages/organizations/cookie-banners/configuration/consent-records/CookieBannerConsentRecordsPage.tsx +++ b/apps/console/src/pages/organizations/cookie-banners/configuration/consent-records/CookieBannerConsentRecordsPage.tsx @@ -80,7 +80,7 @@ const consentRecordsFragment = graphql` ) @connection( key: "CookieBannerConsentRecordsPage_consentRecords" - filters: ["filter"] + filters: ["filter", "orderBy"] ) @required(action: THROW) { edges { node { @@ -119,13 +119,18 @@ export default function CookieBannerConsentRecordsPage({ const records = fragmentData.consentRecords.edges.map(edge => edge.node) ?? []; + const parseVersion = (v: string): number | null => { + if (!v || !/^\d+$/.test(v)) return null; + return parseInt(v, 10); + }; + const refetchFilters = (overrides: Record = {}) => { startTransition(() => { pagination.refetch( { action: actionFilter, visitorId: visitorIdFilter || null, - version: versionFilter ? parseInt(versionFilter, 10) : null, + version: parseVersion(versionFilter), ...overrides, }, { fetchPolicy: "network-only" }, @@ -149,7 +154,7 @@ export default function CookieBannerConsentRecordsPage({ return; } setVersionError(false); - refetchFilters({ version: versionFilter ? parseInt(versionFilter, 10) : null }); + refetchFilters({ version: parseVersion(versionFilter) }); }; const refetchWithFilters: ComponentProps["refetch"] = ({ order }) => { @@ -157,7 +162,7 @@ export default function CookieBannerConsentRecordsPage({ order: { direction: order.direction, field: order.field as CookieConsentRecordOrderField }, action: actionFilter, visitorId: visitorIdFilter || null, - version: versionFilter ? parseInt(versionFilter, 10) : null, + version: parseVersion(versionFilter), }); };