"use client"; import React, { Dispatch, SetStateAction } from "react"; import Icon from "@/components/Icons/Icon"; import { useForm } from "react-hook-form"; import { yupResolver } from "@hookform/resolvers/yup"; import { signUpValidationSchema } from "@/utils/form"; import { companySizeList } from "@/constants"; import pb from "@/lib/pocketbase"; import { createCheckoutSession, login } from "@/app/actions"; import { toast } from "react-toastify"; import { Price, User } from "@/types"; import { useRouter } from "next/navigation"; function ModalSignUp({ setUser, }: { setUser: Dispatch>; }) { const { register, handleSubmit, reset, formState: { errors, isSubmitting }, } = useForm({ resolver: yupResolver(signUpValidationSchema), }); const router = useRouter(); const generateCheckoutPage = async (price: Price, type: string) => { try { const checkoutSessionResponse = await createCheckoutSession( price.price_id, type ); console.log(checkoutSessionResponse); router.push(checkoutSessionResponse.url); } catch (error) { if (error instanceof Error) { toast.error(error.message, { position: "bottom-left", autoClose: 5000, hideProgressBar: false, closeOnClick: true, pauseOnHover: true, draggable: true, progress: undefined, theme: "colored", }); } } }; const onSubmit = async (data: any) => { data = { emailVisibility: false, lastSeen: new Date(), role: "Admin", displayName: `${data.firstName} ${data.lastName}`, passwordConfirm: data.password, ...data, }; try { //create organisation const organisation = await pb.collection("organisation").create({ name: data.organisation, organisationSize: data.organisationSize, }); //create user const user = await pb .collection("user") .create({ ...data, organisation: organisation.id }); //login user if ( (await login({ email: data.email, password: data.password })).success ) { reset(); document.getElementById("sign-up-modal")?.click(); const price = localStorage.getItem("price"); const type = localStorage.getItem("type"); setUser(user as User); console.log("price", price); console.log("type", type); price ? generateCheckoutPage(JSON.parse(price), type ?? "") : router.push("/account"); } } catch (error) { if (error instanceof Error) { toast.error( Object.values((error as any).data.data) .map((x: any) => x.message) .join(), { position: "bottom-left", autoClose: 5000, hideProgressBar: false, closeOnClick: true, pauseOnHover: true, draggable: true, progress: undefined, theme: "colored", } ); } } }; return ( <> { reset(); }} /> ); } export default ModalSignUp;