g1t/apps/web/app/routes/settings/invites.tsx

34 lines1,273 bytesCodeBlame

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas1import 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, loadInvites } from "../../lib/invites.server";
6
7export function meta(args: Route.MetaArgs) {
8 return page(args, { title: "Invites · Settings · g1t" });
9}
10
11export async function loader({ request, context }: Route.LoaderArgs) {
12 const user = requireUser(context, request);
13 return { invites: await loadInvites(user), origin: new URL(request.url).origin };
14}
15
16export async function action({ request, context }: Route.ActionArgs) {
17 assertSameOrigin(request);
18 const user = requireUser(context, request);
19 const form = await request.formData();
20 // Making and revoking invites (lib/invites.server.ts).
21 const done = await inviteAction(user, form);
22 return { inviteCreated: done?.inviteCreated, inviteError: done?.inviteError };
23}
24
25export default function InviteSettings({ loaderData, actionData }: Route.ComponentProps) {
26 return (
27 <InvitesSection
28 overview={loaderData.invites}
29 origin={loaderData.origin}
30 created={actionData?.inviteCreated}
31 error={actionData?.inviteError}
32 />
33 );
34}