import { Card, Group, Text, Badge, Button, Stack, Switch } from "@mantine/core"; import { IconBrandGithub, IconBrandSlack, IconBrandGitlab, IconPuzzle, } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; import { IntegrationDefinition, Integration, } from "../types/integration.types"; const iconMap: Record = { github: IconBrandGithub, slack: IconBrandSlack, gitlab: IconBrandGitlab, }; type IntegrationCardProps = { definition: IntegrationDefinition; installation?: Integration; onInstall: (type: string) => void; onUninstall: (integrationId: string) => void; onConfigure: (integration: Integration) => void; onToggle: (integration: Integration, enabled: boolean) => void; }; export default function IntegrationCard({ definition, installation, onInstall, onUninstall, onConfigure, onToggle, }: IntegrationCardProps) { const { t } = useTranslation(); const Icon = iconMap[definition.icon] ?? IconPuzzle; const isInstalled = !!installation; return (
{definition.name} {definition.description}
{definition.capabilities.map((cap) => ( {cap} ))} {isInstalled ? ( onToggle(installation, e.currentTarget.checked)} size="sm" /> ) : ( )}
); }