import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { faCheck, faCopy } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, IconButton, Input, Modal, ModalContent, Tooltip } from "@app/components/v2"; import { useTimedReset } from "@app/hooks"; import { useCreateIdentityUniversalAuthClientSecret } from "@app/hooks/api"; import { UsePopUpState } from "@app/hooks/usePopUp"; const schema = z .object({ description: z.string(), ttl: z.string().refine((val) => Number(val) <= 315360000, { message: "TTL cannot be greater than 315360000" }), numUsesLimit: z.string() }) .required(); export type FormData = z.infer; type Props = { popUp: UsePopUpState<["clientSecret"]>; handlePopUpToggle: (popUpName: keyof UsePopUpState<["clientSecret"]>, state?: boolean) => void; }; export const IdentityClientSecretModal = ({ popUp, handlePopUpToggle }: Props) => { const { mutateAsync: createClientSecret } = useCreateIdentityUniversalAuthClientSecret(); const [token, setToken] = useState(""); const [copyTextToken, isCopyingToken, setCopyTextToken] = useTimedReset({ initialState: "Copy to clipboard" }); const hasToken = Boolean(token); const { control, handleSubmit, reset, formState: { isSubmitting } } = useForm({ resolver: zodResolver(schema), defaultValues: { description: "", ttl: "", numUsesLimit: "" } }); const popUpData = popUp?.clientSecret?.data as { identityId: string; }; const onFormSubmit = async ({ description, ttl, numUsesLimit }: FormData) => { const { clientSecret } = await createClientSecret({ identityId: popUpData.identityId, description, ttl: Number(ttl), numUsesLimit: Number(numUsesLimit) }); setToken(clientSecret); createNotification({ text: "Successfully created client secret", type: "success" }); reset(); }; return ( { handlePopUpToggle("clientSecret", isOpen); reset(); setToken(""); }} > {!hasToken ? (
( )} /> (
)} /> ( )} />
) : (

{token}

{ navigator.clipboard.writeText(token); setCopyTextToken("Copied"); }} >
)}
); };