import { SetStateAction, useEffect, useState } from "react"; import Image from "next/image"; import { WorkspaceEnv } from "@app/hooks/api/types"; import getSecretsForProject from "../utilities/secrets/getSecretsForProject"; import { Modal, ModalContent } from "../v2"; interface Secrets { label: string; secret: string; } interface CompareSecretsModalProps { compareModal: boolean; setCompareModal: React.Dispatch>; selectedEnv: WorkspaceEnv; workspaceEnvs: WorkspaceEnv[]; workspaceId: string; currentSecret: { key: string; value: string; }; } const CompareSecretsModal = ({ compareModal, setCompareModal, selectedEnv, workspaceEnvs, workspaceId, currentSecret }: CompareSecretsModalProps) => { const [secrets, setSecrets] = useState([]); const getEnvSecrets = async () => { const workspaceEnvironments = workspaceEnvs?.filter((env) => env !== selectedEnv); const newSecrets = await Promise.all( workspaceEnvironments.map(async (env) => { // #TODO: optimize this query somehow... const allSecrets = await getSecretsForProject({ env: env.slug, workspaceId }); const secret = allSecrets.find((item) => item.key === currentSecret.key)?.value ?? "Not found"; return { label: env.name, secret }; }) ); setSecrets([{ label: selectedEnv.name, secret: currentSecret.value }, ...newSecrets]); }; useEffect(() => { if (compareModal) { (async () => { await getEnvSecrets(); })(); } }, [compareModal]); return ( e.preventDefault()}>
{secrets.length === 0 ? (
infisical loading indicator
) : ( secrets.map((item) => (

{item.label}

)) )}
); }; export default CompareSecretsModal;