2025-02-10 22:31:38 +00:00
|
|
|
import { Header } from "../components/header";
|
|
|
|
|
import { auth } from "@/auth";
|
|
|
|
|
import { getUser } from "@/data/user";
|
|
|
|
|
import { prisma } from "@/prisma";
|
|
|
|
|
import { MemberTable } from "./components/memberTable";
|
|
|
|
|
import { MemberInviteForm } from "./components/memberInviteForm";
|
|
|
|
|
import { InviteTable } from "./components/inviteTable";
|
|
|
|
|
|
2025-02-12 21:51:44 +00:00
|
|
|
interface SettingsPageProps {
|
|
|
|
|
params: {
|
|
|
|
|
domain: string;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default async function SettingsPage({
|
|
|
|
|
params: { domain }
|
|
|
|
|
}: SettingsPageProps) {
|
2025-02-10 22:31:38 +00:00
|
|
|
const fetchData = async () => {
|
|
|
|
|
const session = await auth();
|
|
|
|
|
if (!session) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const user = await getUser(session.user.id);
|
2025-02-12 21:51:44 +00:00
|
|
|
if (!user) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const activeOrg = await prisma.org.findUnique({
|
|
|
|
|
where: {
|
|
|
|
|
domain,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!activeOrg) {
|
2025-02-10 22:31:38 +00:00
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const members = await prisma.user.findMany({
|
|
|
|
|
where: {
|
|
|
|
|
orgs: {
|
|
|
|
|
some: {
|
2025-02-12 21:51:44 +00:00
|
|
|
orgId: activeOrg.id,
|
2025-02-10 22:31:38 +00:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
include: {
|
|
|
|
|
orgs: {
|
|
|
|
|
where: {
|
2025-02-12 21:51:44 +00:00
|
|
|
orgId: activeOrg.id,
|
2025-02-10 22:31:38 +00:00
|
|
|
},
|
|
|
|
|
select: {
|
|
|
|
|
role: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const invites = await prisma.invite.findMany({
|
|
|
|
|
where: {
|
2025-02-12 21:51:44 +00:00
|
|
|
orgId: activeOrg.id,
|
2025-02-10 22:31:38 +00:00
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const memberInfo = members.map((member) => ({
|
|
|
|
|
name: member.name!,
|
|
|
|
|
role: member.orgs[0].role,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
const inviteInfo = invites.map((invite) => ({
|
|
|
|
|
id: invite.id,
|
|
|
|
|
email: invite.recipientEmail,
|
|
|
|
|
createdAt: invite.createdAt,
|
|
|
|
|
}));
|
|
|
|
|
|
2025-02-12 21:51:44 +00:00
|
|
|
return {
|
|
|
|
|
user,
|
|
|
|
|
memberInfo,
|
|
|
|
|
inviteInfo,
|
|
|
|
|
activeOrg,
|
|
|
|
|
};
|
2025-02-10 22:31:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const data = await fetchData();
|
|
|
|
|
if (!data) {
|
|
|
|
|
return <div>Error: Unable to fetch data</div>;
|
|
|
|
|
}
|
|
|
|
|
const { user, memberInfo, inviteInfo } = data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
<Header>
|
|
|
|
|
<h1 className="text-3xl">Settings</h1>
|
|
|
|
|
</Header>
|
|
|
|
|
<div>
|
2025-02-12 21:51:44 +00:00
|
|
|
<MemberInviteForm userId={user.id} />
|
2025-02-10 22:31:38 +00:00
|
|
|
<InviteTable initialInvites={inviteInfo} />
|
|
|
|
|
<MemberTable initialMembers={memberInfo} />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|