Rewrite context routes to use useQueryLoader pattern
Replace loaderFromQueryLoader/loadQuery in route definitions with useQueryLoader inside dedicated Loader components, matching the compliance-page pattern. Use index routes instead of redirect hacks. Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -1,113 +1,46 @@
|
||||
import { lazy } from "@probo/react-lazy";
|
||||
import {
|
||||
type AppRoute,
|
||||
loaderFromQueryLoader,
|
||||
withQueryRef,
|
||||
} from "@probo/routes";
|
||||
import { Fragment } from "react";
|
||||
import { loadQuery } from "react-relay";
|
||||
import { type LoaderFunctionArgs, redirect } from "react-router";
|
||||
import type { AppRoute } from "@probo/routes";
|
||||
|
||||
import type { ContextPageLoaderQuery } from "#/__generated__/core/ContextPageLoaderQuery.graphql";
|
||||
import type { MeetingDetailPageQuery } from "#/__generated__/core/MeetingDetailPageQuery.graphql";
|
||||
import type { MeetingsPageQuery } from "#/__generated__/core/MeetingsPageQuery.graphql";
|
||||
import { LinkCardSkeleton } from "#/components/skeletons/LinkCardSkeleton";
|
||||
import { PageSkeleton } from "#/components/skeletons/PageSkeleton";
|
||||
import { coreEnvironment } from "#/environments";
|
||||
import { contextPageQuery } from "#/pages/organizations/context/ContextPageLoader";
|
||||
import { meetingDetailPageQuery } from "#/pages/organizations/meetings/MeetingDetailPage";
|
||||
import { meetingsPageQuery } from "#/pages/organizations/meetings/MeetingsPage";
|
||||
|
||||
const meetingTabs = (prefix: string) => {
|
||||
return [
|
||||
{
|
||||
path: `${prefix}`,
|
||||
loader: ({
|
||||
params: { organizationId, meetingId },
|
||||
}: LoaderFunctionArgs) => {
|
||||
const basePath = `/organizations/${organizationId}/context/meetings/${meetingId}`;
|
||||
const redirectPath = `${basePath}/minutes`;
|
||||
// eslint-disable-next-line
|
||||
throw redirect(redirectPath);
|
||||
},
|
||||
Component: Fragment,
|
||||
},
|
||||
{
|
||||
path: `${prefix}minutes`,
|
||||
Fallback: LinkCardSkeleton,
|
||||
Component: lazy(
|
||||
() => import("../pages/organizations/meetings/tabs/MeetingMinutesTab"),
|
||||
),
|
||||
},
|
||||
];
|
||||
};
|
||||
|
||||
export const contextRoutes = [
|
||||
{
|
||||
path: "context",
|
||||
Fallback: PageSkeleton,
|
||||
Component: lazy(
|
||||
() => import("#/pages/organizations/context/ContextLayout"),
|
||||
() => import("#/pages/organizations/context/ContextLayoutLoader"),
|
||||
),
|
||||
children: [
|
||||
{
|
||||
path: "",
|
||||
loader: ({
|
||||
params: { organizationId },
|
||||
}: LoaderFunctionArgs) => {
|
||||
// eslint-disable-next-line
|
||||
throw redirect(`/organizations/${organizationId}/context/overview`);
|
||||
},
|
||||
Component: Fragment,
|
||||
},
|
||||
{
|
||||
path: "overview",
|
||||
Fallback: PageSkeleton,
|
||||
loader: loaderFromQueryLoader(({ organizationId }) =>
|
||||
loadQuery<ContextPageLoaderQuery>(
|
||||
coreEnvironment,
|
||||
contextPageQuery,
|
||||
{ organizationId },
|
||||
),
|
||||
),
|
||||
Component: withQueryRef(
|
||||
lazy(
|
||||
() => import("#/pages/organizations/context/ContextPageLoader"),
|
||||
),
|
||||
index: true,
|
||||
Fallback: LinkCardSkeleton,
|
||||
Component: lazy(
|
||||
() => import("#/pages/organizations/context/ContextPageLoader"),
|
||||
),
|
||||
},
|
||||
{
|
||||
path: "meetings",
|
||||
Fallback: PageSkeleton,
|
||||
loader: loaderFromQueryLoader(({ organizationId }) =>
|
||||
loadQuery<MeetingsPageQuery>(
|
||||
coreEnvironment,
|
||||
meetingsPageQuery,
|
||||
{ organizationId },
|
||||
),
|
||||
),
|
||||
Component: withQueryRef(
|
||||
lazy(
|
||||
() => import("#/pages/organizations/meetings/MeetingsPage"),
|
||||
),
|
||||
Fallback: LinkCardSkeleton,
|
||||
Component: lazy(
|
||||
() => import("#/pages/organizations/meetings/MeetingsPageLoader"),
|
||||
),
|
||||
},
|
||||
{
|
||||
path: "meetings/:meetingId",
|
||||
Fallback: PageSkeleton,
|
||||
loader: loaderFromQueryLoader(({ meetingId }) =>
|
||||
loadQuery<MeetingDetailPageQuery>(
|
||||
coreEnvironment,
|
||||
meetingDetailPageQuery,
|
||||
{ meetingId },
|
||||
),
|
||||
Component: lazy(
|
||||
() => import("#/pages/organizations/meetings/MeetingDetailPageLoader"),
|
||||
),
|
||||
Component: withQueryRef(
|
||||
lazy(
|
||||
() => import("../pages/organizations/meetings/MeetingDetailPage"),
|
||||
),
|
||||
),
|
||||
children: [...meetingTabs("")],
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
Fallback: LinkCardSkeleton,
|
||||
Component: lazy(
|
||||
() => import("#/pages/organizations/meetings/tabs/MeetingMinutesTab"),
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user