"use client"; import { useState, useTransition } from "react"; import { toast } from "sonner"; import { transferBetweenAccountsAction } from "@/app/(dashboard)/contas/actions"; import type { AccountData } from "@/app/(dashboard)/contas/data"; import { ContaCartaoSelectContent } from "@/components/lancamentos/select-items"; import { PeriodPicker } from "@/components/period-picker"; import { Button } from "@/components/ui/button"; import { CurrencyInput } from "@/components/ui/currency-input"; import { DatePicker } from "@/components/ui/date-picker"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useControlledState } from "@/hooks/use-controlled-state"; import { getTodayDateString } from "@/lib/utils/date"; interface TransferDialogProps { trigger?: React.ReactNode; accounts: AccountData[]; fromAccountId: string; currentPeriod: string; open?: boolean; onOpenChange?: (open: boolean) => void; } export function TransferDialog({ trigger, accounts, fromAccountId, currentPeriod, open, onOpenChange, }: TransferDialogProps) { const [dialogOpen, setDialogOpen] = useControlledState( open, false, onOpenChange, ); const [isPending, startTransition] = useTransition(); const [errorMessage, setErrorMessage] = useState(null); // Form state const [toAccountId, setToAccountId] = useState(""); const [amount, setAmount] = useState(""); const [date, setDate] = useState(getTodayDateString()); const [period, setPeriod] = useState(currentPeriod); // Available destination accounts (exclude source account) const availableAccounts = accounts.filter( (account) => account.id !== fromAccountId, ); // Source account info const fromAccount = accounts.find( (account) => account.id === fromAccountId, ); const handleSubmit = (event: React.FormEvent) => { event.preventDefault(); setErrorMessage(null); if (!toAccountId) { setErrorMessage("Selecione a conta de destino."); return; } if (toAccountId === fromAccountId) { setErrorMessage("Selecione uma conta de destino diferente da origem."); return; } if (!amount || parseFloat(amount.replace(",", ".")) <= 0) { setErrorMessage("Informe um valor válido maior que zero."); return; } startTransition(async () => { const result = await transferBetweenAccountsAction({ fromAccountId, toAccountId, amount, date: new Date(date), period, }); if (result.success) { toast.success(result.message); setDialogOpen(false); // Reset form setToAccountId(""); setAmount(""); setDate(getTodayDateString()); setPeriod(currentPeriod); return; } setErrorMessage(result.error); toast.error(result.error); }); }; return ( {trigger ? {trigger} : null} Transferir entre contas Registre uma transferência de valores entre suas contas.
{availableAccounts.length === 0 ? (
É necessário ter mais de uma conta cadastrada para realizar transferências.
) : ( )}
{errorMessage && (

{errorMessage}

)}
); }