"use client"; import { useState } from "react"; import { format } from "date-fns"; import { tr } from "date-fns/locale"; import { CreditCard, Plus, MoreHorizontal, FileEdit, Trash2, StopCircle, RefreshCw } from "lucide-react"; import { Button, Card, CardContent, Badge } from "poyraz-ui/atoms"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "poyraz-ui/molecules"; export type SubscriptionRow = { id: string; name: string; amount: number; currency: string; billing_cycle: "monthly" | "yearly" | "weekly"; status: "active" | "cancelled"; category: string | null; next_billing_date: string | null; created_at: string; }; export function SubscriptionsClient({ subscriptions }: { subscriptions: SubscriptionRow[] }) { const [isAddModalOpen, setIsAddModalOpen] = useState(false); const formatCurrency = (amount: number, currency: string) => { return new Intl.NumberFormat("tr-TR", { style: "currency", currency }).format(amount); }; const getCycleBadge = (cycle: string) => { switch (cycle) { case "monthly": return "Aylık"; case "yearly": return "Yıllık"; case "weekly": return "Haftalık"; default: return cycle; } }; const activeMonthlyTotal = subscriptions .filter(s => s.status === "active") .reduce((acc, s) => { let monthlyEquivalent = s.amount; if (s.billing_cycle === "yearly") monthlyEquivalent = s.amount / 12; if (s.billing_cycle === "weekly") monthlyEquivalent = s.amount * 4.33; return acc + monthlyEquivalent; }, 0); return (

Abonelikler ve Masraflar

Sabit giderlerinizi ve tekrarlayan ödemelerinizi yönetin.

Aylık Tahmini Gider

{formatCurrency(activeMonthlyTotal, "TRY")}

Aktif aboneliklerin aylık ortalaması

{subscriptions.length === 0 ? ( ) : ( subscriptions.map((sub) => ( )) )}
Abonelik Adı Kategori Tutar Periyot Durum Sonraki Ödeme İşlemler
Henüz hiç abonelik bulunmuyor.
{sub.name} {sub.category || "-"} {formatCurrency(sub.amount, sub.currency)} {getCycleBadge(sub.billing_cycle)} {sub.status === "active" ? ( Aktif ) : ( İptal Edildi )} {sub.next_billing_date ? format(new Date(sub.next_billing_date), "dd MMM yyyy", { locale: tr }) : "-"} Düzenle {sub.status === "active" ? ( İptal Et ) : ( Yeniden Aktifleştir )} Sil
{isAddModalOpen && (

Yeni Abonelik Ekle

Bu özellik şu an geliştirme aşamasındadır.

)}
); }