Files
community-rule/app/(app)/invite/[ruleId]/page.tsx
T

51 lines
1.4 KiB
TypeScript

import { notFound, redirect } from "next/navigation";
import { getSessionUser } from "../../../../lib/server/session";
import { getAcceptedStakeholderInviteView } from "../../../../lib/server/publishedRules";
import { inviteRuleCountsSpoken } from "../../../../lib/create/ruleInviteCardMeta";
import {
INVITE_COPY_VALUE,
invitedRulePath,
} from "../../../../lib/create/invitePaths";
import { InvitedRuleView } from "../_components/InvitedRuleView";
type PageProps = {
params: Promise<{ ruleId: string }>;
searchParams: Promise<{ copy?: string }>;
};
export default async function InviteRulePage({
params,
searchParams,
}: PageProps) {
const { ruleId } = await params;
const query = await searchParams;
const copy = query.copy === INVITE_COPY_VALUE;
const user = await getSessionUser();
if (!user) {
const next = invitedRulePath(ruleId, { copy });
redirect(`/login?next=${encodeURIComponent(next)}`);
}
const view = await getAcceptedStakeholderInviteView({
userId: user.id,
ruleId,
});
if (!view) {
notFound();
}
return (
<InvitedRuleView
ruleId={view.ruleId}
title={view.title}
summary={view.summary}
document={view.document}
updatedAt={view.updatedAt}
inviterEmail={view.inviterEmail}
viewerEmail={user.email}
countsSpoken={inviteRuleCountsSpoken(view.document)}
openCopyDialog={copy}
/>
);
}