Skip to content
36 linesCodeBlameRaw
1import type { Route } from "./+types/invites";
2import { page } from "../../lib/meta";
3import { assertSameOrigin, requireUser } from "../../lib/session.server";
4import { InvitesSection } from "../../components/invites-section";
5import { inviteAction, loadBringInto, loadInvites } from "../../lib/invites.server";
6
7export function meta(args: Route.MetaArgs) {
8 return page(args, { title: "Invites to g1t · Settings · g1t" });
9}
10
11export async function loader({ request, context }: Route.LoaderArgs) {
12 const user = requireUser(context, request);
13 const [invites, bringInto] = await Promise.all([loadInvites(user), loadBringInto(user, request)]);
14 return { invites, bringInto, origin: new URL(request.url).origin };
15}
16
17export async function action({ request, context }: Route.ActionArgs) {
18 assertSameOrigin(request);
19 const user = requireUser(context, request);
20 const form = await request.formData();
21 // Making and revoking invites (lib/invites.server.ts).
22 const done = await inviteAction(user, form);
23 return { inviteCreated: done?.inviteCreated, inviteError: done?.inviteError };
24}
25
26export default function InviteSettings({ loaderData, actionData }: Route.ComponentProps) {
27 return (
28 <InvitesSection
29 overview={loaderData.invites}
30 origin={loaderData.origin}
31 bringInto={loaderData.bringInto}
32 created={actionData?.inviteCreated}
33 error={actionData?.inviteError}
34 />
35 );
36}