import Button from "@/components/Low/Button"; import Checkbox from "@/components/Low/Checkbox"; import {PERMISSIONS} from "@/constants/userPermissions"; import {Type, User} from "@/interfaces/user"; import {USER_TYPE_LABELS} from "@/resources/user"; import axios from "axios"; import clsx from "clsx"; import {capitalize} from "lodash"; import moment from "moment"; import {useEffect, useState} from "react"; import ReactDatePicker from "react-datepicker"; import {toast} from "react-toastify"; import ShortUniqueId from "short-unique-id"; const USER_TYPE_PERMISSIONS: {[key in Type]: Type[]} = { student: [], teacher: [], agent: [], corporate: ["student", "teacher"], mastercorporate: ["student", "teacher", "corporate"], admin: ["student", "teacher", "agent", "corporate", "admin", "mastercorporate"], developer: ["student", "teacher", "agent", "corporate", "admin", "developer","mastercorporate"], }; export default function CodeGenerator({user}: {user: User}) { const [generatedCode, setGeneratedCode] = useState(); const [expiryDate, setExpiryDate] = useState( user?.subscriptionExpirationDate ? moment(user.subscriptionExpirationDate).toDate() : null, ); const [isExpiryDateEnabled, setIsExpiryDateEnabled] = useState(true); const [type, setType] = useState("student"); useEffect(() => { if (!isExpiryDateEnabled) setExpiryDate(null); }, [isExpiryDateEnabled]); const generateCode = (type: Type) => { const uid = new ShortUniqueId(); const code = uid.randomUUID(6); axios .post("/api/code", {type, codes: [code], expiryDate}) .then(({data, status}) => { if (data.ok) { toast.success(`Successfully generated a ${capitalize(type)} code!`, {toastId: "success"}); setGeneratedCode(code); return; } if (status === 403) { toast.error(data.reason, {toastId: "forbidden"}); } }) .catch(({response: {status, data}}) => { if (status === 403) { toast.error(data.reason, {toastId: "forbidden"}); return; } toast.error(`Something went wrong, please try again later!`, {toastId: "error"}); }); }; return (
{user && ( )} {user && (user.type === "developer" || user.type === "admin" || user.type === "corporate") && ( <>
Enabled
{isExpiryDateEnabled && ( moment(date).isAfter(new Date()) && (user.subscriptionExpirationDate ? moment(date).isBefore(user.subscriptionExpirationDate) : true) } dateFormat="dd/MM/yyyy" selected={expiryDate} onChange={(date) => setExpiryDate(date)} /> )} )}
{ if (generatedCode) navigator.clipboard.writeText(generatedCode); }}> {generatedCode}
{generatedCode && Give this code to the user to complete their registration}
); }