import DeleteUserModal from "@/components/ModalContent/DeleteUserModal"; import NewUserModal from "@/components/ModalContent/NewUserModal"; import useUserStore from "@/store/admin/users"; import { User as U } from "@prisma/client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { useTranslation } from "next-i18next"; import getServerSideProps from "@/lib/client/getServerSideProps"; interface User extends U { subscriptions: { active: boolean; }; } type UserModal = { isOpen: boolean; userId: number | null; }; export default function Admin() { const { t } = useTranslation(); const { users, setUsers } = useUserStore(); const [searchQuery, setSearchQuery] = useState(""); const [filteredUsers, setFilteredUsers] = useState(); const [deleteUserModal, setDeleteUserModal] = useState({ isOpen: false, userId: null, }); const [newUserModal, setNewUserModal] = useState(false); useEffect(() => { setUsers(); }, []); return (

{t("user_administration")}

{ setSearchQuery(e.target.value); if (users) { setFilteredUsers( users.filter((user) => 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" />
setNewUserModal(true)} className="flex items-center btn btn-accent dark:border-violet-400 text-white btn-sm px-2 aspect-square relative" >
{filteredUsers && filteredUsers.length > 0 && searchQuery !== "" ? ( UserListing(filteredUsers, deleteUserModal, setDeleteUserModal) ) : searchQuery !== "" ? (

No users found with the given search query.

) : users && users.length > 0 ? ( UserListing(users, deleteUserModal, setDeleteUserModal) ) : (

No users found.

)} {newUserModal ? ( setNewUserModal(false)} /> ) : null}
); } const UserListing = ( users: User[], deleteUserModal: UserModal, setDeleteUserModal: Function ) => { return (
{process.env.NEXT_PUBLIC_EMAIL_PROVIDER === "true" && ( )} {process.env.NEXT_PUBLIC_STRIPE === "true" && } {users.map((user, index) => ( {process.env.NEXT_PUBLIC_EMAIL_PROVIDER === "true" && ( )} {process.env.NEXT_PUBLIC_STRIPE === "true" && ( )} ))}
UsernameEmailSubscribedCreated At
{index + 1} {user.username ? user.username : N/A}{user.email} {user.subscriptions?.active ? ( JSON.stringify(user.subscriptions?.active) ) : ( N/A )} {new Date(user.createdAt).toLocaleString()}
{deleteUserModal.isOpen && deleteUserModal.userId ? ( setDeleteUserModal({ isOpen: false, userId: null })} userId={deleteUserModal.userId} /> ) : null}
); }; export { getServerSideProps };