'use client' import Link from 'next/link' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Loader2, CheckCircle2, AlertTriangle } from 'lucide-react' import { daysBetween } from '@/lib/company/fiscal-year' import type { StoredAccount } from '../types' export interface SyncProgressSummary { imported: number duplicates: number requested_from: string returned_min_date: string | null returned_max_date: string | null } export interface SyncProgressError { message: string } export type SyncProgressState = | { kind: 'syncing' } | { kind: 'done'; summary: SyncProgressSummary } | { kind: 'failed'; error: SyncProgressError } interface BankSyncProgressDialogProps { open: boolean onOpenChange: (open: boolean) => void bankName: string accounts: StoredAccount[] state: SyncProgressState } export function BankSyncProgressDialog({ open, onOpenChange, bankName, accounts, state, }: BankSyncProgressDialogProps) { // Close-prevention while sync is in flight is handled inline below via the // onOpenChange guard + onPointerDownOutside + onEscapeKeyDown handlers. const enabledAccounts = accounts.filter((a) => a.enabled !== false) return ( ) } function DoneBody({ summary }: { summary: SyncProgressSummary }) { const requestedDays = daysBetween(summary.requested_from) const returnedDays = summary.returned_min_date && summary.returned_max_date ? daysBetween(summary.returned_min_date, new Date(summary.returned_max_date)) : 0 const wasTruncated = requestedDays - returnedDays > 7 return (
{summary.imported} nya transaktioner importerade.
{summary.returned_min_date && summary.returned_max_date && (Datum: {summary.returned_min_date} → {summary.returned_max_date}
)}