import FullPageLoadingState from '@/components/full-page-loading-state'; import { LinkButton } from '@/components/ui/button'; import { useTRPC } from '@/integrations/trpc/react'; import { cn } from '@/utils/cn'; import { FREE_PRODUCT_IDS } from '@openpanel/payments'; import { useSuspenseQuery } from '@tanstack/react-query'; import { Outlet, createFileRoute, notFound, useLocation, } from '@tanstack/react-router'; import { format } from 'date-fns'; const IGNORE_ORGANIZATION_IDS = ['.well-known', 'onboarding', 'assets']; const FILE_EXTENSIONS = [ 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'ico', 'js', 'xml', 'txt', 'json', 'webmanifest', ]; const isStaticFile = (path: string) => { return FILE_EXTENSIONS.some((extension) => path.endsWith(`.${extension}`)); }; export const Route = createFileRoute('/_app/$organizationId')({ component: Component, beforeLoad: async ({ context, params }) => { if (IGNORE_ORGANIZATION_IDS.includes(params.organizationId)) { throw notFound(); } if (isStaticFile(params.organizationId)) { throw notFound(); } }, loader: async ({ context, params }) => { await context.queryClient.prefetchQuery( context.trpc.organization.get.queryOptions({ organizationId: params.organizationId, }), ); }, pendingComponent: FullPageLoadingState, }); function Alert({ title, description, children, className, }: { title: string; description: string; children: React.ReactNode; className?: string; }) { const location = useLocation(); // Hide on billing page if (location.pathname.match(/\/.+\/billing/)) { return null; } return (
{title}
{description}
{children}
); } function Component() { const { organizationId } = Route.useParams(); const trpc = useTRPC(); const { data: organization } = useSuspenseQuery( trpc.organization.get.queryOptions({ organizationId, }), ); return ( <> {organization.subscriptionEndsAt && organization.isTrial && ( Upgrade from $2.5/month )} {organization.subscriptionEndsAt && organization.isExpired && ( Reactivate )} {organization.subscriptionEndsAt && organization.isWillBeCanceled && ( Reactivate )} {organization.subscriptionCanceledAt && organization.isCanceled && ( Reactivate )} {organization.subscriptionProductId && FREE_PRODUCT_IDS.includes(organization.subscriptionProductId) && ( Upgrade )} ); }