import Button from "@/components/Low/Button"; import {Type} from "@/interfaces/user"; import axios from "axios"; import clsx from "clsx"; import {capitalize} from "lodash"; import {useEffect, useState} from "react"; import {toast} from "react-toastify"; import ShortUniqueId from "short-unique-id"; import {useFilePicker} from "use-file-picker"; export default function BatchCodeGenerator() { const [emails, setEmails] = useState([]); const [isLoading, setIsLoading] = useState(false); const {openFilePicker, filesContent} = useFilePicker({ accept: ".txt", multiple: false, }); useEffect(() => { if (filesContent.length > 0) { const file = filesContent[0]; const emails = file.content .split("\n") .filter((x) => new RegExp(/^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$/).test(x)); if (emails.length === 0) { toast.error("Please upload a .txt file containing e-mails, one per line!"); return; } setEmails(emails); } }, [filesContent]); const generateCode = (type: Type) => { const uid = new ShortUniqueId(); const codes = emails.map(() => uid.randomUUID(6)); setIsLoading(true); axios .post("/api/code", {type, codes, emails}) .then(({data, status}) => { if (data.ok) { toast.success(`Successfully generated ${capitalize(type)} codes and they have been notified by e-mail!`, {toastId: "success"}); return; } if (status === 403) { toast.error(`You do not have permission to generate ${capitalize(type)} codes!`, {toastId: "forbidden"}); } }) .catch(({response: {status}}) => { if (status === 403) { toast.error(`You do not have permission to generate ${capitalize(type)} codes!`, {toastId: "forbidden"}); return; } toast.error(`Something went wrong, please try again later!`, {toastId: "error"}); }) .finally(() => setIsLoading(false)); }; return (
); }