import React, { useLayoutEffect, useRef, useState } from "react"; import TextInput from "@/components/TextInput"; import { TokenExpiry } from "@linkwarden/types/global"; import toast from "react-hot-toast"; import Modal from "../Modal"; import { Button } from "@/components/ui/button"; import { useTranslation } from "next-i18next"; import { useAddToken } from "@linkwarden/router/tokens"; import CopyButton from "../CopyButton"; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, } from "@/components/ui/dropdown-menu"; import { Separator } from "../ui/separator"; type Props = { onClose: Function; }; export default function NewTokenModal({ onClose }: Props) { const { t } = useTranslation(); const [newToken, setNewToken] = useState(""); const addToken = useAddToken(); const initial = { name: "", expires: 0 as TokenExpiry, }; const [token, setToken] = useState(initial as any); const [submitLoader, setSubmitLoader] = useState(false); const submit = async () => { if (!submitLoader) { setSubmitLoader(true); const load = toast.loading(t("creating_token")); await addToken.mutateAsync(token, { onSettled: (data, error) => { setSubmitLoader(false); toast.dismiss(load); if (error) { toast.error(error.message); } else { setNewToken(data.secretKey); } }, }); } }; const getLabel = (expiry: TokenExpiry) => { switch (expiry) { case TokenExpiry.sevenDays: return t("7_days"); case TokenExpiry.oneMonth: return t("30_days"); case TokenExpiry.twoMonths: return t("60_days"); case TokenExpiry.threeMonths: return t("90_days"); case TokenExpiry.never: return t("no_expiration"); } }; const inputRef = useRef(null); useLayoutEffect(() => { inputRef.current?.focus(); }, []); return ( {newToken ? (

{t("access_token_created")}

{t("token_creation_notice")}

{newToken}
) : ( <>

{t("create_access_token")}

{t("name")}

setToken({ ...token, name: e.target.value })} placeholder={t("token_name_placeholder")} className="bg-base-200" />

{t("expires_in")}

setToken({ ...token, expires: Number(e), }) } > {t("7_days")} {t("30_days")} {t("60_days")} {t("90_days")} {t("no_expiration")}
)}
); }