mirror of
https://github.com/documenso/documenso.git
synced 2025-11-12 07:43:16 +10:00
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { redirect } from 'react-router';
|
|
|
|
import { extractCookieFromHeaders } from '@documenso/auth/server/lib/utils/cookies';
|
|
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
|
|
import { getTeams } from '@documenso/lib/server-only/team/get-teams';
|
|
import { formatDocumentsPath } from '@documenso/lib/utils/teams';
|
|
import { ZTeamUrlSchema } from '@documenso/trpc/server/team-router/schema';
|
|
|
|
import type { Route } from './+types/_index';
|
|
|
|
export async function loader({ request }: Route.LoaderArgs) {
|
|
const session = await getOptionalSession(request);
|
|
|
|
if (session.isAuthenticated) {
|
|
const teamUrlCookie = extractCookieFromHeaders('preferred-team-url', request.headers);
|
|
|
|
const referrer = request.headers.get('referer');
|
|
let isReferrerFromTeamUrl = false;
|
|
|
|
if (referrer) {
|
|
const referrerUrl = new URL(referrer);
|
|
|
|
if (referrerUrl.pathname.startsWith('/t/')) {
|
|
isReferrerFromTeamUrl = true;
|
|
}
|
|
}
|
|
|
|
const preferredTeamUrl =
|
|
teamUrlCookie && ZTeamUrlSchema.safeParse(teamUrlCookie).success ? teamUrlCookie : undefined;
|
|
|
|
// Early return for no preferred team.
|
|
if (!preferredTeamUrl || isReferrerFromTeamUrl) {
|
|
throw redirect('/documents');
|
|
}
|
|
|
|
const teams = await getTeams({ userId: session.user.id });
|
|
|
|
const currentTeam = teams.find((team) => team.url === preferredTeamUrl);
|
|
|
|
if (!currentTeam) {
|
|
throw redirect('/documents');
|
|
}
|
|
|
|
throw redirect(formatDocumentsPath(currentTeam.url));
|
|
}
|
|
|
|
throw redirect('/signin');
|
|
}
|