/* eslint-disable @next/next/no-img-element */ import Modal from "@/components/Modal"; import useStats from "@/hooks/useStats"; import useUsers from "@/hooks/useUsers"; import { User } from "@/interfaces/user"; import UserList from "@/pages/(admin)/Lists/UserList"; import { dateSorter } from "@/utils"; import moment from "moment"; import { useEffect, useState } from "react"; import { BsArrowLeft, BsPersonFill, BsBank, BsCurrencyDollar, } from "react-icons/bs"; import UserCard from "@/components/UserCard"; import useGroups from "@/hooks/useGroups"; import IconCard from "./IconCard"; import usePaymentStatusUsers from "@/hooks/usePaymentStatusUsers"; interface Props { user: User; } export default function AgentDashboard({ user }: Props) { const [page, setPage] = useState(""); const [selectedUser, setSelectedUser] = useState(); const [showModal, setShowModal] = useState(false); const { stats } = useStats(); const { users, reload } = useUsers(); const { groups } = useGroups(user.id); const { pending, done } = usePaymentStatusUsers(); useEffect(() => { setShowModal(!!selectedUser && page === ""); }, [selectedUser, page]); const corporateFilter = (user: User) => user.type === "corporate"; const referredCorporateFilter = (x: User) => x.type === "corporate" && !!x.corporateInformation && x.corporateInformation.referralAgent === user.id; const inactiveReferredCorporateFilter = (x: User) => referredCorporateFilter(x) && (x.status === "disabled" || moment().isAfter(x.subscriptionExpirationDate)); const UserDisplay = ({ displayUser, allowClick = true, }: { displayUser: User; allowClick?: boolean; }) => (
allowClick && setSelectedUser(displayUser)} className="flex w-full p-4 gap-4 items-center hover:bg-mti-purple-ultralight cursor-pointer transition ease-in-out duration-300" > {displayUser.name}
{displayUser.type === "corporate" ? displayUser.corporateInformation?.companyInformation?.name || displayUser.name : displayUser.name} {displayUser.email}
); const ReferredCorporateList = () => { return ( (
setPage("")} className="flex gap-2 items-center text-mti-purple-light cursor-pointer hover:text-mti-purple-dark transition ease-in-out duration-300" > Back

Referred Corporate ({total})

)} /> ); }; const InactiveReferredCorporateList = () => { return ( (
setPage("")} className="flex gap-2 items-center text-mti-purple-light cursor-pointer hover:text-mti-purple-dark transition ease-in-out duration-300" > Back

Inactive Referred Corporate ({total})

)} /> ); }; const CorporateList = () => { const filter = (x: User) => x.type === "corporate"; return ( (
setPage("")} className="flex gap-2 items-center text-mti-purple-light cursor-pointer hover:text-mti-purple-dark transition ease-in-out duration-300" > Back

Corporate ({total})

)} /> ); }; const CorporatePaidStatusList = ({ paid }: { paid: Boolean }) => { const list = paid ? done : pending; const filter = (x: User) => x.type === "corporate" && list.includes(x.id); return ( (
setPage("")} className="flex gap-2 items-center text-mti-purple-light cursor-pointer hover:text-mti-purple-dark transition ease-in-out duration-300" > Back

{paid ? "Payment Done" : "Pending Payment"} ({total})

)} /> ); }; const DefaultDashboard = () => ( <>
setPage("referredCorporate")} Icon={BsBank} label="Referred Corporate" value={users.filter(referredCorporateFilter).length} color="purple" /> setPage("inactiveReferredCorporate")} Icon={BsBank} label="Inactive Referred Corporate" value={users.filter(inactiveReferredCorporateFilter).length} color="rose" /> setPage("corporate")} Icon={BsBank} label="Corporate" value={users.filter(corporateFilter).length} color="purple" /> setPage("paymentdone")} Icon={BsCurrencyDollar} label="Payment Done" value={done.length} color="purple" /> setPage("paymentpending")} Icon={BsCurrencyDollar} label="Pending Payment" value={pending.length} color="rose" />
Latest Referred Corporate
{users .filter(referredCorporateFilter) .sort((a, b) => dateSorter(a, b, "desc", "registrationDate")) .map((x) => ( ))}
Latest corporate
{users .filter(corporateFilter) .sort((a, b) => dateSorter(a, b, "desc", "registrationDate")) .map((x) => ( ))}
Referenced corporate expiring in 1 month
{users .filter( (x) => referredCorporateFilter(x) && moment().isAfter( moment(x.subscriptionExpirationDate).subtract(30, "days") ) && moment().isBefore(moment(x.subscriptionExpirationDate)) ) .map((x) => ( ))}
); return ( <> setSelectedUser(undefined)}> <> {selectedUser && (
{ setSelectedUser(undefined); if (shouldReload) reload(); }} onViewStudents={ selectedUser.type === "corporate" || selectedUser.type === "teacher" ? () => setPage("students") : undefined } onViewTeachers={ selectedUser.type === "corporate" ? () => setPage("teachers") : undefined } user={selectedUser} />
)}
{page === "referredCorporate" && } {page === "corporate" && } {page === "inactiveReferredCorporate" && ( )} {page === "paymentdone" && } {page === "paymentpending" && } {page === "" && } ); }