upgrade navigation and route prefetch responsiveness
This commit is contained in:
74
hooks/use-link-prefetch.ts
Normal file
74
hooks/use-link-prefetch.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
'use client';
|
||||
|
||||
import { useQueryClient } from '@tanstack/react-query';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { useCallback } from 'react';
|
||||
import {
|
||||
aiReportQueryOptions,
|
||||
companyAnalysisQueryOptions,
|
||||
filingsQueryOptions,
|
||||
holdingsQueryOptions,
|
||||
latestPortfolioInsightQueryOptions,
|
||||
portfolioSummaryQueryOptions,
|
||||
recentTasksQueryOptions,
|
||||
watchlistQueryOptions
|
||||
} from '@/lib/query/options';
|
||||
|
||||
function normalizeTicker(ticker: string) {
|
||||
return ticker.trim().toUpperCase();
|
||||
}
|
||||
|
||||
export function useLinkPrefetch() {
|
||||
const queryClient = useQueryClient();
|
||||
const router = useRouter();
|
||||
|
||||
const prefetchResearchTicker = useCallback((ticker: string) => {
|
||||
const normalizedTicker = normalizeTicker(ticker);
|
||||
if (!normalizedTicker) {
|
||||
return;
|
||||
}
|
||||
|
||||
const analysisHref = `/analysis?ticker=${encodeURIComponent(normalizedTicker)}`;
|
||||
const filingsHref = `/filings?ticker=${encodeURIComponent(normalizedTicker)}`;
|
||||
const financialsHref = `/financials?ticker=${encodeURIComponent(normalizedTicker)}`;
|
||||
|
||||
router.prefetch(analysisHref);
|
||||
router.prefetch(filingsHref);
|
||||
router.prefetch(financialsHref);
|
||||
|
||||
void queryClient.prefetchQuery(companyAnalysisQueryOptions(normalizedTicker));
|
||||
void queryClient.prefetchQuery(filingsQueryOptions({ ticker: normalizedTicker, limit: 120 }));
|
||||
}, [queryClient, router]);
|
||||
|
||||
const prefetchReport = useCallback((ticker: string, accessionNumber: string) => {
|
||||
const normalizedTicker = normalizeTicker(ticker);
|
||||
const normalizedAccession = accessionNumber.trim();
|
||||
|
||||
if (!normalizedTicker || !normalizedAccession) {
|
||||
return;
|
||||
}
|
||||
|
||||
const reportHref = `/analysis/reports/${encodeURIComponent(normalizedTicker)}/${encodeURIComponent(normalizedAccession)}`;
|
||||
router.prefetch(reportHref);
|
||||
|
||||
void queryClient.prefetchQuery(aiReportQueryOptions(normalizedAccession));
|
||||
void queryClient.prefetchQuery(companyAnalysisQueryOptions(normalizedTicker));
|
||||
}, [queryClient, router]);
|
||||
|
||||
const prefetchPortfolioSurfaces = useCallback(() => {
|
||||
router.prefetch('/portfolio');
|
||||
router.prefetch('/watchlist');
|
||||
|
||||
void queryClient.prefetchQuery(holdingsQueryOptions());
|
||||
void queryClient.prefetchQuery(portfolioSummaryQueryOptions());
|
||||
void queryClient.prefetchQuery(latestPortfolioInsightQueryOptions());
|
||||
void queryClient.prefetchQuery(watchlistQueryOptions());
|
||||
void queryClient.prefetchQuery(recentTasksQueryOptions(20));
|
||||
}, [queryClient, router]);
|
||||
|
||||
return {
|
||||
prefetchResearchTicker,
|
||||
prefetchReport,
|
||||
prefetchPortfolioSurfaces
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user