Fix task poller callback staleness and normalize filings query
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
18
lib/api.ts
18
lib/api.ts
@@ -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 queryParams: {
|
||||||
|
ticker?: string;
|
||||||
|
limit?: number;
|
||||||
|
} = {};
|
||||||
|
|
||||||
|
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({
|
const result = await client.api.filings.get({
|
||||||
$query: {
|
$query: queryParams
|
||||||
ticker: query?.ticker,
|
|
||||||
limit: query?.limit
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
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
2
next-env.d.ts
vendored
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user