core/apps/webapp/app/components/integrations/integration-card.tsx
Harshith Mullapudi 038acea669
Feat: added integration connect and mcp oAuth (#20)
* Feat: added integration connect and mcp oAuth

* Feat: add mcp support to chat

* Fix: UI for integrations and logs

* Fix: ui

* Fix: proxy server

* Feat: enhance MCP tool integration and loading functionality

* Fix: added header

* Fix: Linear integration sync

---------

Co-authored-by: Manoj K <saimanoj58@gmail.com>
2025-07-17 12:41:32 +05:30

59 lines
1.6 KiB
TypeScript

import React from "react";
import { Link } from "@remix-run/react";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "~/components/ui/card";
import { getIcon, type IconType } from "~/components/icon-utils";
import { Badge } from "../ui/badge";
interface IntegrationCardProps {
integration: {
id: string;
name: string;
description?: string;
icon: string;
slug?: string;
};
isConnected: boolean;
}
export function IntegrationCard({
integration,
isConnected,
}: IntegrationCardProps) {
const Component = getIcon(integration.icon as IconType);
return (
<Link
to={`/home/integration/${integration.slug || integration.id}`}
className="bg-background-3 h-full rounded-lg"
>
<Card className="transition-all">
<CardHeader className="p-4">
<div className="bg-background-2 mb-2 flex h-6 w-6 items-center justify-center rounded">
<Component size={18} />
</div>
<CardTitle className="text-base">{integration.name}</CardTitle>
<CardDescription className="line-clamp-2 text-xs">
{integration.description || `Connect to ${integration.name}`}
</CardDescription>
</CardHeader>
{isConnected && (
<CardFooter className="p-3">
<div className="flex w-full items-center justify-end">
<Badge className="h-6 rounded bg-green-100 p-2 text-xs text-green-800">
Connected
</Badge>
</div>
</CardFooter>
)}
</Card>
</Link>
);
}