Fix task poller callback staleness and normalize filings query

This commit is contained in:
2026-02-27 01:03:59 -05:00
parent cff77ce193
commit e7320f3bdb
3 changed files with 23 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
'use client'; 'use client';
import { useEffect, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { getTask } from '@/lib/api'; import { getTask } from '@/lib/api';
import type { Task } from '@/lib/types'; import type { Task } from '@/lib/types';
@@ -12,6 +12,11 @@ type UseTaskPollerInput = {
export function useTaskPoller({ taskId, intervalMs = 2200, onTerminalState }: UseTaskPollerInput) { export function useTaskPoller({ taskId, intervalMs = 2200, onTerminalState }: UseTaskPollerInput) {
const [task, setTask] = useState<Task | null>(null); const [task, setTask] = useState<Task | null>(null);
const onTerminalStateRef = useRef(onTerminalState);
useEffect(() => {
onTerminalStateRef.current = onTerminalState;
}, [onTerminalState]);
useEffect(() => { useEffect(() => {
if (!taskId) { if (!taskId) {
@@ -33,7 +38,7 @@ export function useTaskPoller({ taskId, intervalMs = 2200, onTerminalState }: Us
setTask(latest); setTask(latest);
if (latest.status === 'completed' || latest.status === 'failed') { if (latest.status === 'completed' || latest.status === 'failed') {
onTerminalState?.(latest); onTerminalStateRef.current?.(latest);
return; return;
} }
} catch { } catch {
@@ -53,7 +58,7 @@ export function useTaskPoller({ taskId, intervalMs = 2200, onTerminalState }: Us
clearTimeout(timer); clearTimeout(timer);
} }
}; };
}, [taskId, intervalMs, onTerminalState]); }, [taskId, intervalMs]);
return task; return task;
} }

View File

@@ -153,11 +153,21 @@ export async function getLatestPortfolioInsight() {
} }
export async function listFilings(query?: { ticker?: string; limit?: number }) { export async function listFilings(query?: { ticker?: string; limit?: number }) {
const result = await client.api.filings.get({ const queryParams: {
$query: { ticker?: string;
ticker: query?.ticker, limit?: number;
limit: query?.limit } = {};
if (query?.ticker?.trim()) {
queryParams.ticker = query.ticker.trim().toUpperCase();
} }
if (query?.limit !== undefined) {
queryParams.limit = query.limit;
}
const result = await client.api.filings.get({
$query: queryParams
}); });
return await unwrapData<{ filings: Filing[] }>(result, 'Unable to fetch filings'); return await unwrapData<{ filings: Filing[] }>(result, 'Unable to fetch filings');

2
next-env.d.ts vendored
View File

@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.