import { Fragment, useState } from "react"; import { useTranslation } from "next-i18next"; import { faCheck, faCopy } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Dialog, Transition } from "@headlessui/react"; import addAPIKey from "~/pages/api/apiKey/addAPIKey"; import Button from "../buttons/Button"; import InputField from "../InputField"; import ListBox from "../Listbox"; const expiryMapping = { "1 day": 86400, "7 days": 604800, "1 month": 2592000, "6 months": 15552000, "12 months": 31104000, }; const crypto = require('crypto'); // TODO: convert to TS const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }) => { const [apiKey, setApiKey] = useState(""); const [apiKeyName, setApiKeyName] = useState(""); const [apiKeyExpiresIn, setApiKeyExpiresIn] = useState("1 day"); const [apiKeyCopied, setApiKeyCopied] = useState(false); const { t } = useTranslation(); const generateAPIKey = async () => { const newApiKey = await addAPIKey({ name: apiKeyName, expiresIn: expiryMapping[apiKeyExpiresIn] }); setApiKeys([...apiKeys, newApiKey.apiKeyData]) setApiKey(newApiKey.apiKey); }; function copyToClipboard() { // Get the text field var copyText = document.getElementById("apiKey"); // Select the text field copyText.select(); copyText.setSelectionRange(0, 99999); // For mobile devices // Copy the text inside the text field navigator.clipboard.writeText(copyText.value); setApiKeyCopied(true); setTimeout(() => setApiKeyCopied(false), 2000); // Alert the copied text // alert("Copied the text: " + copyText.value); } const closeAddApiKeyModal = () => { closeModal(); setApiKeyName(""); setApiKey(""); }; return (
{apiKey == "" ? ( {t("section-api-key:add-dialog.title")}

{t("section-api-key:add-dialog.description")}

) : ( {t("section-api-key:add-dialog.copy-service-token")}

{t( "section-api-key:add-dialog.copy-service-token-description" )}

{apiKey}
{t("common:click-to-copy")}
)}
); }; export default AddApiKeyDialog;