From 4df3539ba107d6ae0478b2fd0f6e475fc82d4ebd Mon Sep 17 00:00:00 2001 From: Thomas Trompette Date: Wed, 8 Apr 2026 16:34:09 +0200 Subject: [PATCH] Fix: Staled data on record table after merging records (#19457) Fix record table not refreshing after merging records The record table's virtualization state persists across navigations, so when the table remounts after a merge redirect, none of the existing reload conditions were satisfied and the table rendered stale data. Add an isInitializedOnMount local state to RecordTableVirtualizedInitialDataLoadEffect that guarantees a fresh triggerInitialRecordTableDataLoad on every mount, acting as a fallback when no other reload condition matches. --- .../RecordTableVirtualizedInitialDataLoadEffect.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/twenty-front/src/modules/object-record/record-table/virtualization/components/RecordTableVirtualizedInitialDataLoadEffect.tsx b/packages/twenty-front/src/modules/object-record/record-table/virtualization/components/RecordTableVirtualizedInitialDataLoadEffect.tsx index 291c1a3e36..28a46c6aea 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/virtualization/components/RecordTableVirtualizedInitialDataLoadEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/virtualization/components/RecordTableVirtualizedInitialDataLoadEffect.tsx @@ -14,7 +14,7 @@ import { useAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useAtomC import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; import isEmpty from 'lodash.isempty'; -import { useEffect } from 'react'; +import { useEffect, useState } from 'react'; // TODO: see if we can merge the initial and load more processes, to have only one load at scroll index effect export const RecordTableVirtualizedInitialDataLoadEffect = () => { @@ -25,6 +25,8 @@ export const RecordTableVirtualizedInitialDataLoadEffect = () => { const [lastRecordTableQueryIdentifier, setLastRecordTableQueryIdentifier] = useAtomComponentState(lastRecordTableQueryIdentifierComponentState); + const [isInitializedOnMount, setIsInitializedOnMount] = useState(false); + const visibleRecordFields = useAtomComponentSelectorValue( visibleRecordFieldsComponentSelector, ); @@ -105,6 +107,9 @@ export const RecordTableVirtualizedInitialDataLoadEffect = () => { shouldScrollToStart: isEmpty(lastFields), }); } + } else if (!isInitializedOnMount) { + setIsInitializedOnMount(true); + await triggerInitialRecordTableDataLoad(); } })(); }, [ @@ -122,6 +127,8 @@ export const RecordTableVirtualizedInitialDataLoadEffect = () => { lastContextStoreVirtualizedVisibleRecordFields, setLastContextStoreVirtualizedVisibleRecordFields, visibleRecordFields, + isInitializedOnMount, + setIsInitializedOnMount, ]); return <>;