@@ -12,7 +12,8 @@ import { EnvironmentParamSchema } from "~/utils/pathBuilder";
1212import { findProjectBySlug } from "~/models/project.server" ;
1313import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server" ;
1414import { getRunFiltersFromRequest } from "~/presenters/RunFilters.server" ;
15- import { LogsListPresenter , type LogLevel } from "~/presenters/v3/LogsListPresenter.server" ;
15+ import { LogsListPresenter } from "~/presenters/v3/LogsListPresenter.server" ;
16+ import type { LogLevel } from "~/utils/logUtils" ;
1617import { $replica } from "~/db.server" ;
1718import { clickhouseClient } from "~/services/clickhouseInstance.server" ;
1819import {
@@ -153,7 +154,6 @@ export default function Page() {
153154 < LogsList
154155 list = { list }
155156 rootOnlyDefault = { rootOnlyDefault }
156- filters = { filters }
157157 isAdmin = { isAdmin }
158158 showDebug = { showDebug }
159159 />
@@ -174,7 +174,6 @@ function LogsList({
174174} : {
175175 list : Awaited < UseDataFunctionReturn < typeof loader > [ "data" ] > ;
176176 rootOnlyDefault : boolean ;
177- filters : TaskRunListSearchFilters ;
178177 isAdmin : boolean ;
179178 showDebug : boolean ;
180179} ) {
@@ -213,17 +212,17 @@ function LogsList({
213212 setNextCursor ( list . pagination . next ) ;
214213 } , [ list . logs , list . pagination . next ] ) ;
215214
215+ // Memoize existing IDs to avoid creating a new Set on every render
216+ const existingIds = useMemo ( ( ) => new Set ( accumulatedLogs . map ( ( log ) => log . id ) ) , [ accumulatedLogs ] ) ;
217+
216218 // Append new logs when fetcher completes (with deduplication)
217219 useEffect ( ( ) => {
218220 if ( fetcher . data && fetcher . state === "idle" ) {
219- setAccumulatedLogs ( ( prev ) => {
220- const existingIds = new Set ( prev . map ( ( log ) => log . id ) ) ;
221- const newLogs = fetcher . data ! . logs . filter ( ( log ) => ! existingIds . has ( log . id ) ) ;
222- return [ ...prev , ...newLogs ] ;
223- } ) ;
221+ const newLogs = fetcher . data . logs . filter ( ( log ) => ! existingIds . has ( log . id ) ) ;
222+ setAccumulatedLogs ( ( prev ) => [ ...prev , ...newLogs ] ) ;
224223 setNextCursor ( fetcher . data . pagination . next ) ;
225224 }
226- } , [ fetcher . data , fetcher . state ] ) ;
225+ } , [ fetcher . data , fetcher . state , existingIds ] ) ;
227226
228227 // Build resource URL for loading more
229228 const loadMoreUrl = useMemo ( ( ) => {
0 commit comments