import "./CashuNuts.css"; import { useEffect, useState } from "react"; import { FormattedMessage, FormattedNumber } from "react-intl"; import { useUserProfile } from "@snort/system-react"; import useLogin from "@/Hooks/useLogin"; import Icon from "@/Icons/Icon"; interface Token { token: Array<{ mint: string; proofs: Array<{ amount: number; }>; }>; memo?: string; } export default function CashuNuts({ token }: { token: string }) { const { publicKey } = useLogin(s => ({ publicKey: s.publicKey })); const profile = useUserProfile(publicKey); async function copyToken(e: React.MouseEvent, token: string) { e.stopPropagation(); await navigator.clipboard.writeText(token); } async function redeemToken(e: React.MouseEvent, token: string) { e.stopPropagation(); const lnurl = profile?.lud16 ?? ""; const url = `https://redeem.cashu.me?token=${encodeURIComponent(token)}&lightning=${encodeURIComponent( lnurl, )}&autopay=yes`; window.open(url, "_blank"); } const [cashu, setCashu] = useState(); useEffect(() => { try { if (!token.startsWith("cashuA") || token.length < 10) { return; } import("@cashu/cashu-ts").then(({ getDecodedToken }) => { const tkn = getDecodedToken(token); setCashu(tkn); }); } catch { // ignored } }, [token]); if (!cashu) return <>{token}; const amount = cashu.token[0].proofs.reduce((acc, v) => acc + v.amount, 0); return (

{c}

, n: , }} />
{c}, url: new URL(cashu.token[0].mint).hostname, }} />
); }