mirror of https://github.com/buster-so/buster.git
ensure server side loaders
This commit is contained in:
parent
39eb037b8b
commit
73a6412481
|
@ -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 || {};
|
||||||
|
|
|
@ -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 (
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue