import React from "react"; import { Button } from "src/components/ui/button"; import { Checkbox } from "src/components/ui/checkbox"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "src/components/ui/dialog"; import { Input } from "src/components/ui/input"; import { Label } from "src/components/ui/label"; import { ToggleGroup, ToggleGroupItem } from "src/components/ui/toggle-group"; import { defaultTransactionFilters, type TransactionFilters, } from "src/hooks/useTransactions"; const TYPE_OPTIONS: { label: string; value: string }[] = [ { label: "All", value: "all" }, { label: "Sent", value: "outgoing" }, { label: "Received", value: "incoming" }, ]; type TransactionsFilterDialogProps = { open: boolean; onOpenChange: (open: boolean) => void; filters: TransactionFilters; onFiltersChange: (filters: TransactionFilters) => void; }; export function TransactionsFilterDialog({ open, onOpenChange, filters, onFiltersChange, }: TransactionsFilterDialogProps) { const [searchTerm, setSearchTerm] = React.useState(""); const [type, setType] = React.useState("all"); const [minAmountSat, setMinAmountSat] = React.useState(""); const [hideFailed, setHideFailed] = React.useState(false); React.useEffect(() => { if (open) { setSearchTerm(filters.searchTerm ?? ""); setType(filters.type ?? "all"); setMinAmountSat(filters.minAmountSat ? String(filters.minAmountSat) : ""); setHideFailed(!!filters.hideFailed); } }, [open, filters]); function onSubmit(e: React.FormEvent) { e.preventDefault(); const parsedMinAmountSat = Number(minAmountSat); onFiltersChange({ searchTerm: searchTerm.trim() || undefined, type: type === "incoming" || type === "outgoing" ? type : undefined, minAmountSat: Number.isSafeInteger(parsedMinAmountSat) && parsedMinAmountSat > 0 ? parsedMinAmountSat : undefined, hideFailed, }); onOpenChange(false); } function onReset() { onFiltersChange({ ...defaultTransactionFilters }); onOpenChange(false); } return (
Filter Transactions Choose which payments appear in your transaction list.
setSearchTerm(e.target.value)} />
value && setType(value)} > {TYPE_OPTIONS.map((option) => ( {option.label} ))}
setMinAmountSat(e.target.value.trim())} />
setHideFailed(checked === true)} />
); }