Files
reui-blocks/blocks/settings-integrations6.tsx
T

186 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { ExternalLink, Settings2, Trash2 } from "lucide-react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { cn } from "@/lib/utils";
interface IntegrationItem {
image: string;
title: string;
status: "active" | "inactive" | "error";
lastSync?: string;
className?: string;
}
interface SettingsIntegrations6Props {
className?: string;
heading?: string;
subHeading?: string;
integrations?: IntegrationItem[];
}
const SettingsIntegrations6 = ({
className,
heading = "یکپارچه‌سازی‌ها",
subHeading = "وضعیت همگام‌سازی سرویس‌های متصل به سامانه مدیریت ارتباط با مشتری را کنترل کنید.",
integrations = [
{
image:
"/block-media/shadcnblocks/block/logos/slack-icon.svg",
title: "Slack",
status: "active",
lastSync: "۲ دقیقه پیش",
},
{
image:
"/block-media/shadcnblocks/block/logos/google-icon.svg",
title: "Google Drive",
status: "active",
lastSync: "۵ دقیقه پیش",
},
{
image:
"/block-media/shadcnblocks/block/logos/notion-icon.svg",
title: "Notion",
status: "error",
lastSync: "ناموفق · ۱ ساعت پیش",
className: "dark:invert",
},
{
image:
"/block-media/shadcnblocks/block/logos/github-icon.svg",
title: "GitHub",
status: "active",
lastSync: "همین الان",
className: "dark:invert",
},
{
image:
"/block-media/shadcnblocks/block/logos/figma-icon.svg",
title: "Figma",
status: "inactive",
lastSync: "هنوز همگام نشده",
},
{
image:
"/block-media/shadcnblocks/block/logos/jira-icon.svg",
title: "Jira",
status: "active",
lastSync: "۱۰ دقیقه پیش",
},
],
}: SettingsIntegrations6Props) => {
const getStatusBadge = (status: IntegrationItem["status"]) => {
switch (status) {
case "active":
return (
<Badge variant="secondary" className="bg-green-100 text-green-800">
فعال
</Badge>
);
case "inactive":
return <Badge variant="secondary">غیرفعال</Badge>;
case "error":
return (
<Badge variant="secondary" className="bg-red-100 text-red-800">
خطا
</Badge>
);
}
};
return (
<section className={cn("py-32", className)}>
<div className="container max-w-4xl">
<div className="space-y-2 border-b pb-6">
<h2 className="text-xl font-semibold tracking-tight">{heading}</h2>
<p className="text-sm text-muted-foreground">{subHeading}</p>
</div>
<div className="mt-6">
<TooltipProvider>
<Table>
<TableHeader>
<TableRow>
<TableHead>سرویس</TableHead>
<TableHead>وضعیت</TableHead>
<TableHead>آخرین همگام‌سازی</TableHead>
<TableHead className="text-end">اقدامات</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{integrations.map((integration) => (
<TableRow key={integration.title}>
<TableCell>
<div className="flex items-center gap-3">
<img
src={integration.image}
alt={`آیکون ${integration.title}`}
className={cn("size-6", integration.className)}
/>
<span className="font-medium">{integration.title}</span>
</div>
</TableCell>
<TableCell>{getStatusBadge(integration.status)}</TableCell>
<TableCell className="text-muted-foreground">
{integration.lastSync}
</TableCell>
<TableCell className="text-end">
<div className="flex items-center justify-end gap-1">
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon">
<ExternalLink className="size-4" />
</Button>
</TooltipTrigger>
<TooltipContent>باز کردن سرویس</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon">
<Settings2 className="size-4" />
</Button>
</TooltipTrigger>
<TooltipContent>پیکربندی</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<Button
variant="ghost"
size="icon"
className="text-destructive hover:text-destructive"
>
<Trash2 className="size-4" />
</Button>
</TooltipTrigger>
<TooltipContent>حذف اتصال</TooltipContent>
</Tooltip>
</div>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TooltipProvider>
</div>
</div>
</section>
);
};
export { SettingsIntegrations6 };