useNotifyReceivedPayments.ts raw

   1  import React from "react";
   2  import { toast } from "sonner";
   3  import { useInfo } from "src/hooks/useInfo";
   4  import { useTransactions } from "src/hooks/useTransactions";
   5  import { Transaction } from "src/types";
   6  import { formatBitcoinAmount } from "src/utils/bitcoinFormatting";
   7  
   8  export function useNotifyReceivedPayments() {
   9    const { data: info } = useInfo();
  10    const { data: transactionsData } = useTransactions(undefined, true, 1);
  11    const [prevTransaction, setPrevTransaction] = React.useState<Transaction>();
  12  
  13    React.useEffect(() => {
  14      if (!transactionsData?.transactions?.length || !info) {
  15        return;
  16      }
  17      const latestTx = transactionsData.transactions[0];
  18      if (latestTx !== prevTransaction) {
  19        if (prevTransaction && latestTx.type === "incoming") {
  20          toast("Payment received", {
  21            description: formatBitcoinAmount(
  22              latestTx.amountMsat,
  23              info.bitcoinDisplayFormat
  24            ),
  25          });
  26        }
  27        setPrevTransaction(latestTx);
  28      }
  29    }, [prevTransaction, transactionsData, info]);
  30  }
  31