import type { TransactionsRecord } from "@olenbetong/appframe-updater"; import { useCallback, useEffect, useState } from "react"; type TransactionsLike = Pick; type UseTransactionsSelectionResult = { selectedPrimKeys: Set; toggleSelection: (primKey: string | null | undefined) => void; resetSelection: () => void; }; export function useTransactionsSelection(transactions: TransactionsLike[]): UseTransactionsSelectionResult { let [selectedPrimKeys, setSelectedPrimKeys] = useState>(new Set()); useEffect(() => { let availablePrimKeys = new Set(transactions.map((transaction) => transaction.PrimKey)); setSelectedPrimKeys((current) => { if (current.size === 0) { return current; } let next = new Set(); let changed = false; for (let key of current) { if (availablePrimKeys.has(key)) { next.add(key); } else { changed = true; } } return changed ? next : current; }); }, [transactions]); let toggleSelection = useCallback((primKey: string | null | undefined) => { if (!primKey) { return; } setSelectedPrimKeys((current) => { let next = new Set(current); if (next.has(primKey)) { next.delete(primKey); } else { next.add(primKey); } return next; }); }, []); let resetSelection = useCallback(() => { setSelectedPrimKeys(new Set()); }, []); return { selectedPrimKeys, toggleSelection, resetSelection }; }