import SettingsLayout from "@/layouts/SettingsLayout"; import { useRouter } from "next/router"; import InviteModal from "@/components/ModalContent/InviteModal"; import { User as U } from "@prisma/client"; import { useEffect, useState } from "react"; import { useTranslation } from "next-i18next"; import getServerSideProps from "@/lib/client/getServerSideProps"; import { useUsers } from "@/hooks/store/admin/users"; import DeleteUserModal from "@/components/ModalContent/DeleteUserModal"; import { useUser } from "@/hooks/store/user"; import { dropdownTriggerer } from "@/lib/client/utils"; import clsx from "clsx"; import { signIn } from "next-auth/react"; import toast from "react-hot-toast"; interface User extends U { subscriptions: { active: boolean; }; } type UserModal = { isOpen: boolean; userId: number | null; }; export default function Billing() { const router = useRouter(); const { t } = useTranslation(); const { data: account } = useUser(); const { data: users = [] } = useUsers(); useEffect(() => { if (!process.env.NEXT_PUBLIC_STRIPE || account.parentSubscriptionId) router.push("/settings/account"); }, []); const [searchQuery, setSearchQuery] = useState(""); const [filteredUsers, setFilteredUsers] = useState(); useEffect(() => { if (users.length > 0) { setFilteredUsers(users); } }, [users]); const [deleteUserModal, setDeleteUserModal] = useState({ isOpen: false, userId: null, }); const [inviteModal, setInviteModal] = useState(false); return (

{t("billing_settings")}

{t("manage_subscription_intro")}{" "} {t("billing_portal")} .

{t("help_contact_intro")}{" "} support@linkwarden.app

{t("manage_seats")}

{ setSearchQuery(e.target.value); if (users) { setFilteredUsers( users.filter((user: any) => JSON.stringify(user) .toLowerCase() .includes(e.target.value.toLowerCase()) ) ); } }} className="border border-neutral-content bg-base-200 focus:border-primary py-1 rounded-md pl-9 pr-2 w-full max-w-[15rem] md:w-[15rem] md:max-w-full duration-200 outline-none" />
setInviteModal(true)} className="flex items-center btn btn-accent dark:border-violet-400 text-white btn-sm px-2 h-[2.15rem] relative" >

{t("invite_user")}

{process.env.NEXT_PUBLIC_EMAIL_PROVIDER === "true" && ( )} {process.env.NEXT_PUBLIC_STRIPE === "true" && ( )} {filteredUsers?.map((user, index) => ( {process.env.NEXT_PUBLIC_EMAIL_PROVIDER === "true" && ( )} {process.env.NEXT_PUBLIC_STRIPE === "true" && ( )} {user.id !== account.id && ( )} ))}
{t("email")}{t("status")}{t("date_added")}

{t("email")}

{user.email}

{t("status")}

{user.emailVerified ? (

{t("active")}

) : (

{t("pending")}

)}

{t("date_added")}

{new Date(user.createdAt).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", })}

    {!user.emailVerified ? (
  • { ( document?.activeElement as HTMLElement )?.blur(); signIn("invite", { email: user.email, callbackUrl: "/member-onboarding", redirect: false, }).then(() => toast.success(t("resend_invite_success")) ); }} className="whitespace-nowrap" > {t("resend_invite")}
  • ) : undefined}
  • { (document?.activeElement as HTMLElement)?.blur(); setDeleteUserModal({ isOpen: true, userId: user.id, }); }} className="whitespace-nowrap" > {t("remove_user")}

{t( account?.subscription?.quantity === 1 ? "seat_purchased" : "seats_purchased", { count: account?.subscription?.quantity } )}

{inviteModal && setInviteModal(false)} />} {deleteUserModal.isOpen && deleteUserModal.userId && ( setDeleteUserModal({ isOpen: false, userId: null })} userId={deleteUserModal.userId} /> )}
); } export { getServerSideProps };