ensure server side loaders

This commit is contained in:
Nate Kelley 2025-10-08 17:00:42 -06:00
parent 39eb037b8b
commit 73a6412481
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
4 changed files with 31 additions and 17 deletions

View File

@ -153,6 +153,16 @@ export const prefetchGetChat = async (
return existingData || queryClient.getQueryData(query.queryKey); return existingData || queryClient.getQueryData(query.queryKey);
}; };
export const ensureChatData = async (
queryClient: QueryClient,
params: Parameters<typeof getChat>[0]
) => {
return await queryClient.ensureQueryData({
...chatQueryKeys.chatsGetChat(params.id),
queryFn: () => getChatQueryFn(params, queryClient),
});
};
export const useUpdateChat = (params?: { updateToServer?: boolean }) => { export const useUpdateChat = (params?: { updateToServer?: boolean }) => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const { updateToServer = true } = params || {}; const { updateToServer = true } = params || {};

View File

@ -1,22 +1,14 @@
import { GetChatScreenshotQuerySchema } from '@buster/server-shared/screenshots'; import { GetChatScreenshotQuerySchema } from '@buster/server-shared/screenshots';
import { createFileRoute, redirect } from '@tanstack/react-router'; import { createFileRoute } from '@tanstack/react-router';
import { prefetchGetChat } from '@/api/buster_rest/chats'; import { ensureChatData } from '@/api/buster_rest/chats';
import * as chatLayoutServerContext from '@/context/BusterAssets/chat-server/chatLayoutServer';
import { ChatLayout } from '@/layouts/ChatLayout'; import { ChatLayout } from '@/layouts/ChatLayout';
import { DEFAULT_CHAT_ONLY_LAYOUT } from '@/layouts/ChatLayout/config'; import { DEFAULT_CHAT_ONLY_LAYOUT } from '@/layouts/ChatLayout/config';
export const Route = createFileRoute('/screenshots/chats/$chatId/content')({ export const Route = createFileRoute('/screenshots/chats/$chatId/content')({
...chatLayoutServerContext,
validateSearch: GetChatScreenshotQuerySchema, validateSearch: GetChatScreenshotQuerySchema,
ssr: true, ssr: true,
beforeLoad: async ({ context, params }) => { loader: async ({ context, params }) => {
const chat = await prefetchGetChat({ id: params.chatId }, context.queryClient); await ensureChatData(context.queryClient, { id: params.chatId });
if (!chat) {
throw redirect({
to: '/app/home',
});
}
}, },
component: () => { component: () => {
return ( return (

View File

@ -9,11 +9,17 @@ export const Route = createFileRoute('/screenshots/dashboards/$dashboardId/conte
component: RouteComponent, component: RouteComponent,
ssr: true, ssr: true,
validateSearch: GetDashboardScreenshotQuerySchema, validateSearch: GetDashboardScreenshotQuerySchema,
beforeLoad: async ({ context, params, search }) => { beforeLoad: ({ search }) => {
return {
version_number: search.version_number,
};
},
loader: async ({ context, params }) => {
const { version_number } = context;
const dashboard = await prefetchGetDashboard({ const dashboard = await prefetchGetDashboard({
queryClient: context.queryClient, queryClient: context.queryClient,
id: params.dashboardId, id: params.dashboardId,
version_number: search.version_number, version_number: version_number,
}); });
if (!dashboard) { if (!dashboard) {

View File

@ -7,15 +7,21 @@ import { MetricViewChartController } from '@/controllers/MetricController/Metric
export const Route = createFileRoute('/screenshots/metrics/$metricId/content')({ export const Route = createFileRoute('/screenshots/metrics/$metricId/content')({
validateSearch: GetMetricScreenshotQuerySchema, validateSearch: GetMetricScreenshotQuerySchema,
ssr: true, ssr: true,
beforeLoad: async ({ context, params, search }) => { beforeLoad: ({ search }) => {
return {
version_number: search.version_number,
};
},
loader: async ({ context, params }) => {
const { version_number } = context;
const [metric, metricData] = await Promise.all([ const [metric, metricData] = await Promise.all([
prefetchGetMetric(context.queryClient, { prefetchGetMetric(context.queryClient, {
id: params.metricId, id: params.metricId,
version_number: search.version_number, version_number: version_number,
}), }),
ensureMetricData(context.queryClient, { ensureMetricData(context.queryClient, {
id: params.metricId, id: params.metricId,
version_number: search.version_number, version_number: version_number,
}), }),
]); ]);
if (!metric || !metricData) { if (!metric || !metricData) {