From 0b9a2ca8463224f4aa0d74be15e6f2e967a4013f Mon Sep 17 00:00:00 2001 From: Anton Standrik Date: Mon, 2 Jun 2025 18:04:08 +0300 Subject: [PATCH] fix: TopicData table is broken because of batching --- .../PaginatedTable/PaginatedTableContext.tsx | 6 ++- .../PaginatedTableWithLayout.tsx | 4 +- src/components/PaginatedTable/TableChunk.tsx | 3 ++ .../Diagnostics/TopicData/TopicData.tsx | 1 + src/store/reducers/tableData.ts | 46 ++++++++++++------- 5 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/components/PaginatedTable/PaginatedTableContext.tsx b/src/components/PaginatedTable/PaginatedTableContext.tsx index b7339f9cc..b6de1e23e 100644 --- a/src/components/PaginatedTable/PaginatedTableContext.tsx +++ b/src/components/PaginatedTable/PaginatedTableContext.tsx @@ -14,6 +14,7 @@ const defaultTableState: PaginatedTableState = { interface PaginatedTableStateContextType { // State tableState: PaginatedTableState; + noBatching?: boolean; // Granular setters setSortParams: (params: PaginatedTableState['sortParams']) => void; @@ -35,12 +36,14 @@ export const PaginatedTableStateContext = React.createContext; + noBatching?: boolean; } // Provider component export const PaginatedTableProvider = ({ children, initialState = {}, + noBatching, }: PaginatedTableStateProviderProps) => { // Use individual state variables for each field const [sortParams, setSortParams] = React.useState( @@ -71,12 +74,13 @@ export const PaginatedTableProvider = ({ const contextValue = React.useMemo( () => ({ tableState, + noBatching, setSortParams, setTotalEntities, setFoundEntities, setIsInitialLoad, }), - [tableState, setSortParams, setTotalEntities, setFoundEntities, setIsInitialLoad], + [tableState, noBatching], ); return ( diff --git a/src/components/PaginatedTable/PaginatedTableWithLayout.tsx b/src/components/PaginatedTable/PaginatedTableWithLayout.tsx index 0e5053d6c..4525dc72a 100644 --- a/src/components/PaginatedTable/PaginatedTableWithLayout.tsx +++ b/src/components/PaginatedTable/PaginatedTableWithLayout.tsx @@ -13,6 +13,7 @@ export interface PaginatedTableWithLayoutProps { error?: React.ReactNode; initialState?: Partial; fullHeight?: boolean; + noBatching?: boolean; } export const PaginatedTableWithLayout = ({ @@ -21,9 +22,10 @@ export const PaginatedTableWithLayout = ({ tableProps, error, initialState, + noBatching, fullHeight = true, }: PaginatedTableWithLayoutProps) => ( - + {controls} {error} diff --git a/src/components/PaginatedTable/TableChunk.tsx b/src/components/PaginatedTable/TableChunk.tsx index bc122bd04..0a7b3c1aa 100644 --- a/src/components/PaginatedTable/TableChunk.tsx +++ b/src/components/PaginatedTable/TableChunk.tsx @@ -6,6 +6,7 @@ import {getArray} from '../../utils'; import {useAutoRefreshInterval} from '../../utils/hooks'; import {ResponseError} from '../Errors/ResponseError'; +import {usePaginatedTableState} from './PaginatedTableContext'; import {EmptyTableRow, LoadingTableRow, TableRow} from './TableRow'; import i18n from './i18n'; import type { @@ -63,6 +64,7 @@ export const TableChunk = typedMemo(function TableChunk({ }: TableChunkProps) { const [isTimeoutActive, setIsTimeoutActive] = React.useState(true); const [autoRefreshInterval] = useAutoRefreshInterval(); + const {noBatching} = usePaginatedTableState(); const columnsIds = columns.map((column) => column.name); @@ -74,6 +76,7 @@ export const TableChunk = typedMemo(function TableChunk({ sortParams, columnsIds, tableName, + noBatching, }; tableDataApi.useFetchTableChunkQuery(queryParams, { diff --git a/src/containers/Tenant/Diagnostics/TopicData/TopicData.tsx b/src/containers/Tenant/Diagnostics/TopicData/TopicData.tsx index cdaaf4eb9..90e372a29 100644 --- a/src/containers/Tenant/Diagnostics/TopicData/TopicData.tsx +++ b/src/containers/Tenant/Diagnostics/TopicData/TopicData.tsx @@ -348,6 +348,7 @@ export function TopicData({scrollContainerRef, path, database}: TopicDataProps) scrollDependencies: [baseOffset, baseEndOffset, tableFilters], }} fullHeight + noBatching /> ) diff --git a/src/store/reducers/tableData.ts b/src/store/reducers/tableData.ts index 50517f9cc..447f06d73 100644 --- a/src/store/reducers/tableData.ts +++ b/src/store/reducers/tableData.ts @@ -13,35 +13,49 @@ interface PaginatedTableParams { sortParams?: SortParams; columnsIds: string[]; tableName: string; + noBatching?: boolean; } function endpoints(build: EndpointBuilder) { return { fetchTableChunk: build.query, PaginatedTableParams>({ queryFn: async ( - {offset, limit, sortParams, filters, columnsIds, fetchData, tableName}, + {offset, limit, sortParams, filters, columnsIds, fetchData, tableName, noBatching}, {signal}, ) => { try { - // Use the request batcher for potential merging - const result = await requestBatcher.queueRequest( - { - offset, + if (noBatching) { + const response = await fetchData({ limit, - sortParams, + offset, filters, + sortParams, columnsIds, - fetchData, - tableName, - }, - signal, - ); - - if ('error' in result) { - return {error: result.error}; - } - return result; + signal, + }); + return {data: response}; + } else { + // Use the request batcher for potential merging + const result = await requestBatcher.queueRequest( + { + offset, + limit, + sortParams, + filters, + columnsIds, + fetchData, + tableName, + }, + signal, + ); + + if ('error' in result) { + return {error: result.error}; + } + + return result; + } } catch (error) { return {error: error}; }