import useStats from "@/hooks/useStats"; import {EMPLOYMENT_STATUS, User} from "@/interfaces/user"; import {groupBySession, averageScore} from "@/utils/stats"; import {RadioGroup} from "@headlessui/react"; import axios from "axios"; import clsx from "clsx"; import moment from "moment"; import {Divider} from "primereact/divider"; import {useState} from "react"; import ReactDatePicker from "react-datepicker"; import {BsFileEarmarkText, BsPencil, BsStar} from "react-icons/bs"; import {toast} from "react-toastify"; import Button from "./Low/Button"; import Checkbox from "./Low/Checkbox"; import CountrySelect from "./Low/CountrySelect"; import Input from "./Low/Input"; import ProfileSummary from "./ProfileSummary"; const expirationDateColor = (date: Date) => { const momentDate = moment(date); const today = moment(new Date()); if (today.add(1, "days").isAfter(momentDate)) return "!bg-mti-red-ultralight border-mti-red-light"; if (today.add(3, "days").isAfter(momentDate)) return "!bg-mti-rose-ultralight border-mti-rose-light"; if (today.add(7, "days").isAfter(momentDate)) return "!bg-mti-orange-ultralight border-mti-orange-light"; }; interface Props { user: User; onClose: (reload?: boolean) => void; onViewStudents?: () => void; onViewTeachers?: () => void; } const UserCard = ({user, onClose, onViewStudents, onViewTeachers}: Props) => { const [expiryDate, setExpiryDate] = useState(user.subscriptionExpirationDate); const {stats} = useStats(user.id); const updateUser = () => { if (!confirm(`Are you sure you want to update ${user.name}'s account?`)) return; axios .post<{user?: User; ok?: boolean}>(`/api/users/update?id=${user.id}`, {...user, subscriptionExpirationDate: expiryDate}) .then(() => { toast.success("User updated successfully!"); onClose(true); }) .catch(() => { toast.error("Something went wrong!", {toastId: "update-error"}); }); }; return ( <> , value: Object.keys(groupBySession(stats)).length, label: "Exams", }, { icon: , value: stats.length, label: "Exercises", }, { icon: , value: `${stats.length > 0 ? averageScore(stats) : 0}%`, label: "Average Score", }, ]} />
null} placeholder="Enter your name" defaultValue={user.name} disabled /> null} placeholder="Enter email address" defaultValue={user.email} disabled />
null} placeholder="Enter phone number" defaultValue={user.demographicInformation?.phone} disabled />
{EMPLOYMENT_STATUS.map(({status, label}) => ( {({checked}) => ( {label} )} ))}
{({checked}) => ( Male )} {({checked}) => ( Female )} {({checked}) => ( Other )}
setExpiryDate(checked ? user.subscriptionExpirationDate || new Date() : undefined)}> Enabled
{!expiryDate && (
{!expiryDate && "Unlimited"} {expiryDate && moment(expiryDate).format("DD/MM/YYYY")}
)} {expiryDate && ( moment(date).isAfter(new Date())} dateFormat="dd/MM/yyyy" selected={moment(expiryDate).toDate()} onChange={(date) => setExpiryDate(date)} /> )}
{user.corporateInformation && ( <>
null} placeholder="Enter company name" defaultValue={user.corporateInformation.companyInformation.name} disabled /> null} placeholder="Enter amount of users" defaultValue={user.corporateInformation.companyInformation.userAmount} disabled />
)}
{onViewStudents && ( )} {onViewTeachers && ( )}
); }; export default UserCard;