import dayjs from "dayjs"; import cn from "classnames"; import { useCallback, useState } from "react"; import { Alert } from "../Alert"; import { Button } from "../Button"; import { AddSkylinkToSponsorKeyForm } from "../forms/AddSkylinkToSponsorKeyForm"; import { CogIcon, TrashIcon } from "../Icons"; import { Modal } from "../Modal"; import { useAPIKeyEdit } from "./useAPIKeyEdit"; import { useAPIKeyRemoval } from "./useAPIKeyRemoval"; export const APIKey = ({ apiKey, onRemoved, onEdited, onRemovalError }) => { const { id, name, createdAt, skylinks } = apiKey; const isSponsorKey = apiKey.public === "true"; const [error, setError] = useState(null); const onSkylinkListEdited = useCallback(() => { setError(null); onEdited(); }, [onEdited]); const onSkylinkListEditFailure = (errorMessage) => setError(errorMessage); const { removalError, removalInitiated, prompt: promptRemoval, abort: abortRemoval, confirm: confirmRemoval, } = useAPIKeyRemoval({ key: apiKey, onSuccess: onRemoved, onFailure: onRemovalError, }); const { editInitiated, prompt: promptEdit, abort: abortEdit, addSkylink, removeSkylink, } = useAPIKeyEdit({ key: apiKey, onSkylinkListUpdate: onSkylinkListEdited, onSkylinkListUpdateFailure: onSkylinkListEditFailure, }); const closeEditModal = useCallback(() => { setError(null); abortEdit(); }, [abortEdit]); const skylinksNumber = skylinks?.length ?? 0; const isNotConfigured = isSponsorKey && skylinksNumber === 0; const skylinksPhrasePrefix = skylinksNumber === 0 ? "No" : skylinksNumber; const skylinksPhrase = `${skylinksPhrasePrefix} ${skylinksNumber === 1 ? "skylink" : "skylinks"} sponsored`; return (
  • {name || "unnamed key"} {isSponsorKey && ( )} {dayjs(createdAt).format("MMM DD, YYYY")} {isSponsorKey && ( )} {removalInitiated && (

    Delete API key

    Are you sure you want to delete the following API key?

    {name || id}

    {removalError && {removalError}}
    )} {editInitiated && (

    Sponsored skylinks

    {skylinks?.length > 0 ? (
      {skylinks.map((skylink) => (
    • {skylink}
    • ))}
    ) : ( No skylinks here yet. You can add the first one below 🙃 )}
    {error && {error}}
    )}
  • ); };