import { ReactNode } from "react"; import { subject } from "@casl/ability"; import { faEdit } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { ProjectPermissionCan } from "@app/components/permissions"; import { GenericFieldLabel } from "@app/components/secret-syncs"; import { IconButton } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ProjectPermissionSub } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { SECRET_SYNC_INITIAL_SYNC_BEHAVIOR_MAP } from "@app/helpers/secretSyncs"; import { SecretSync, TSecretSync } from "@app/hooks/api/secretSyncs"; import { AwsParameterStoreSyncOptionsSection } from "./AwsParameterStoreSyncOptionsSection"; import { AwsSecretsManagerSyncOptionsSection } from "./AwsSecretsManagerSyncOptionsSection"; import { RenderSyncOptionsSection } from "./RenderSyncOptionsSection"; type Props = { secretSync: TSecretSync; onEditOptions: VoidFunction; }; export const SecretSyncOptionsSection = ({ secretSync, onEditOptions }: Props) => { const { destination, syncOptions: { initialSyncBehavior, disableSecretDeletion, keySchema }, environment, folder } = secretSync; let AdditionalSyncOptionsComponent: ReactNode; switch (destination) { case SecretSync.AWSParameterStore: AdditionalSyncOptionsComponent = ( ); break; case SecretSync.AWSSecretsManager: AdditionalSyncOptionsComponent = ( ); break; case SecretSync.Render: AdditionalSyncOptionsComponent = ; break; case SecretSync.GitHub: case SecretSync.GCPSecretManager: case SecretSync.AzureKeyVault: case SecretSync.AzureAppConfiguration: case SecretSync.AzureDevOps: case SecretSync.Databricks: case SecretSync.Humanitec: case SecretSync.TerraformCloud: case SecretSync.Camunda: case SecretSync.Vercel: case SecretSync.Windmill: case SecretSync.HCVault: case SecretSync.TeamCity: case SecretSync.OCIVault: case SecretSync.OnePass: case SecretSync.Heroku: case SecretSync.Flyio: case SecretSync.GitLab: case SecretSync.CloudflarePages: case SecretSync.CloudflareWorkers: case SecretSync.Zabbix: case SecretSync.Railway: case SecretSync.Supabase: case SecretSync.Checkly: case SecretSync.DigitalOceanAppPlatform: case SecretSync.Netlify: case SecretSync.Bitbucket: case SecretSync.LaravelForge: AdditionalSyncOptionsComponent = null; break; default: throw new Error(`Unhandled Destination Review Fields: ${destination}`); } const permissionSubject = environment && folder ? subject(ProjectPermissionSub.SecretSyncs, { environment: environment.slug, secretPath: folder.path }) : ProjectPermissionSub.SecretSyncs; return (

Sync Options

{(isAllowed) => ( )}
{SECRET_SYNC_INITIAL_SYNC_BEHAVIOR_MAP[initialSyncBehavior](destination).name} {keySchema} {AdditionalSyncOptionsComponent} {disableSecretDeletion && ( Disabled )}
); };