import { faCircle } from "@fortawesome/free-regular-svg-icons"; import { faAngleDown, faCheck, faCodeBranch, faEye, faEyeSlash, faFileImport, faKey, faRotate, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { twMerge } from "tailwind-merge"; import { Button, Checkbox, TableContainer, Td, Tooltip, Tr } from "@app/components/v2"; import { useToggle } from "@app/hooks"; import { SecretType, SecretV3RawSanitized } from "@app/hooks/api/secrets/types"; import { WorkspaceEnv } from "@app/hooks/api/types"; import { getExpandedRowStyle } from "@app/pages/secret-manager/OverviewPage/components/utils"; import { SecretEditRow } from "./SecretEditRow"; import SecretRenameRow from "./SecretRenameRow"; type Props = { secretKey: string; secretPath: string; environments: { name: string; slug: string }[]; isSelected: boolean; onToggleSecretSelect: (key: string) => void; getSecretByKey: (slug: string, key: string) => SecretV3RawSanitized | undefined; onSecretCreate: (env: string, key: string, value: string) => Promise; onSecretUpdate: ( env: string, key: string, value: string, type?: SecretType, secretId?: string ) => Promise; onSecretDelete: (env: string, key: string, secretId?: string) => Promise; isImportedSecretPresentInEnv: (env: string, secretName: string) => boolean; getImportedSecretByKey: ( env: string, secretName: string ) => { secret?: SecretV3RawSanitized; environmentInfo?: WorkspaceEnv } | undefined; scrollOffset: number; }; export const SecretOverviewTableRow = ({ secretKey, environments = [], secretPath, getSecretByKey, onSecretUpdate, onSecretCreate, onSecretDelete, isImportedSecretPresentInEnv, getImportedSecretByKey, scrollOffset, onToggleSecretSelect, isSelected }: Props) => { const [isFormExpanded, setIsFormExpanded] = useToggle(); const totalCols = environments.length + 1; // secret key row const [isSecretVisible, setIsSecretVisible] = useToggle(); return ( <> setIsFormExpanded.toggle()} className="group">
{ onToggleSecretSelect(secretKey); }} onClick={(e) => { e.stopPropagation(); }} className={twMerge("hidden group-hover:flex", isSelected && "flex")} />
{secretKey}
{environments.map(({ slug }, i) => { const secret = getSecretByKey(slug, secretKey); const isSecretImported = isImportedSecretPresentInEnv(slug, secretKey); const isSecretPresent = Boolean(secret); const isSecretEmpty = secret?.value === ""; return (
{!isSecretEmpty && ( )} {isSecretEmpty && ( )}
); })} {isFormExpanded && (
{environments.map(({ name, slug }) => { const secret = getSecretByKey(slug, secretKey); const isCreatable = !secret; const isImportedSecret = isImportedSecretPresentInEnv(slug, secretKey); const importedSecret = getImportedSecretByKey(slug, secretKey); return ( ); })}
Environment Value
{name} {isImportedSecret && ( )} {secret?.isRotatedSecret && ( )} {secret?.valueOverride && ( )}
)} ); };