fix: reenable member invites

This commit is contained in:
Henry
2025-05-22 12:18:56 +01:00
parent 82ec18e95e
commit 71c92eea27
16 changed files with 2183 additions and 231 deletions

View File

@@ -1,98 +0,0 @@
// import type { EmailOtpType } from "@supabase/supabase-js";
// import type { NextApiRequest } from "next";
// import { NextResponse } from "next/server";
// import { createDrizzleClient } from "@kan/db/client";
// import * as memberRepo from "@kan/db/repository/member.repo";
// import * as userRepo from "@kan/db/repository/user.repo";
// import { stripe } from "@kan/stripe";
// import { createNextApiClient } from "@kan/";
// export default async function handler(req: NextApiRequest) {
// if (req.method !== "GET") {
// return new NextResponse(null, {
// status: 405,
// headers: { Allow: "GET" },
// });
// }
// if (!req.url) {
// return new NextResponse(null, {
// status: 400,
// });
// }
// const url = new URL(req.url);
// const queryParams = Object.fromEntries(url.searchParams.entries());
// const tokenHash = queryParams.token_hash;
// const type = queryParams.type;
// const code = queryParams.code;
// const memberPublicId = queryParams.memberPublicId;
// let next = "/error";
// let authRes;
// const response = NextResponse.next();
// if ((tokenHash && type) ?? code) {
// const supabaseClient = createNextClient(req, response);
// if (tokenHash && type) {
// authRes = await supabaseClient.auth.verifyOtp({
// type: type as EmailOtpType,
// token_hash: tokenHash,
// });
// }
// if (code) {
// authRes = await supabaseClient.auth.exchangeCodeForSession(code);
// }
// const user = authRes?.data.user;
// const db = createDrizzleClient();
// if (user?.id && user.email) {
// const existingUser = await userRepo.getById(db, user.id);
// if (!existingUser) {
// const stripeCustomer = await stripe.customers.create({
// email: user.email,
// metadata: {
// userId: user.id,
// },
// });
// await userRepo.create(db, {
// id: user.id,
// email: user.email,
// stripeCustomerId: stripeCustomer.id,
// });
// }
// }
// if (memberPublicId) {
// const member = await memberRepo.getByPublicId(db, memberPublicId);
// if (member?.id) {
// await memberRepo.acceptInvite(db, member.id);
// }
// }
// if (authRes?.error) {
// console.error(authRes.error);
// } else {
// next = queryParams.next ?? "/boards";
// }
// }
// const redirectResponse = NextResponse.redirect(new URL(next, req.url));
// response.headers.getSetCookie().forEach((cookie) => {
// redirectResponse.headers.append("Set-Cookie", cookie);
// });
// return redirectResponse;
// }

View File

@@ -1,4 +1,4 @@
import { type NextApiRequest, type NextApiResponse } from "next";
import type { NextApiRequest, NextApiResponse } from "next";
import { createNextApiHandler } from "@trpc/server/adapters/next";
import { appRouter } from "@kan/api/root";
@@ -17,10 +17,7 @@ const nextApiHandler = createNextApiHandler({
: undefined,
});
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
export default function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method === "OPTIONS") {
res.writeHead(200);
return res.end();

View File

@@ -10,11 +10,7 @@ import { PageHead } from "~/components/PageHead";
import { useModal } from "~/providers/modal";
import { useWorkspace } from "~/providers/workspace";
import { api } from "~/utils/api";
import {
getAvatarUrl,
getInitialsFromName,
inferInitialsFromEmail,
} from "~/utils/helpers";
import { getAvatarUrl } from "~/utils/helpers";
import { DeleteMemberConfirmation } from "./components/DeleteMemberConfirmation";
import { InviteMemberForm } from "./components/InviteMemberForm";
@@ -46,10 +42,6 @@ export default function MembersPage() {
isLastRow?: boolean;
showSkeleton?: boolean;
}) => {
const initials = memberName
? getInitialsFromName(memberName)
: inferInitialsFromEmail(memberEmail ?? "");
return (
<tr className="rounded-b-lg">
<td className={twMerge("w-[65%]", isLastRow ? "rounded-bl-lg" : "")}>
@@ -192,9 +184,9 @@ export default function MembersPage() {
<TableRow
key={member.publicId}
memberPublicId={member.publicId}
memberName={member.user.name}
memberEmail={member.user.email}
memberImage={member.user.image}
memberName={member.user?.name}
memberEmail={member.user?.email ?? member.email}
memberImage={member.user?.image}
memberRole={member.role}
memberStatus={member.status}
isLastRow={index === data.members.length - 1}