import { useMemo, useState } from "react"; import { faCopy } from "@fortawesome/free-regular-svg-icons"; import { faUpRightFromSquare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import ms from "ms"; import { createNotification } from "@app/components/notifications"; import { FormLabel, IconButton, Input, Modal, ModalContent } from "@app/components/v2"; import { PamResourceType, TPamAccount } from "@app/hooks/api/pam"; type Props = { account?: TPamAccount; isOpen: boolean; onOpenChange: (isOpen: boolean) => void; }; export const PamAccessAccountModal = ({ isOpen, onOpenChange, account }: Props) => { const [duration, setDuration] = useState("4h"); const isDurationValid = useMemo(() => duration && ms(duration || "1s") > 0, [duration]); const command = useMemo( () => account && account.resource.resourceType === PamResourceType.Postgres ? `infisical pam db access-account ${account.id} --duration ${duration}` : "", [account, duration] ); if (!account) return null; return ( setDuration(e.target.value)} placeholder="permanent" isError={!isDurationValid} />
{ navigator.clipboard.writeText(command); createNotification({ text: "Command copied to clipboard", type: "info" }); onOpenChange(false); }} className="w-10" >
Install the Infisical CLI
); };