import "./ZapPool.css"; import { useMemo, useSyncExternalStore } from "react"; import { FormattedMessage, FormattedNumber } from "react-intl"; import { useUserProfile } from "@snort/system-react"; import { SnortPubKey } from "Const"; import ProfilePreview from "Element/ProfilePreview"; import useLogin from "Hooks/useLogin"; import { UploaderServices } from "Upload"; import { bech32ToHex, getRelayName, unwrap } from "SnortUtils"; import { ZapPoolController, ZapPoolRecipient, ZapPoolRecipientType } from "ZapPoolController"; import AsyncButton from "Element/AsyncButton"; import { useWallet } from "Wallet"; import { System } from "index"; const DataProviders = [ { name: "nostr.band", owner: bech32ToHex("npub1sx9rnd03vs34lp39fvfv5krwlnxpl90f3dzuk8y3cuwutk2gdhdqjz6g8m"), }, { name: "semisol.dev", owner: bech32ToHex("npub12262qa4uhw7u8gdwlgmntqtv7aye8vdcmvszkqwgs0zchel6mz7s6cgrkj"), }, { name: "nostr.watch", owner: bech32ToHex("npub1uac67zc9er54ln0kl6e4qp2y6ta3enfcg7ywnayshvlw9r5w6ehsqq99rx"), }, { name: "nostr.directory", owner: bech32ToHex("npub1teawtzxh6y02cnp9jphxm2q8u6xxfx85nguwg6ftuksgjctvavvqnsgq5u"), }, ]; function ZapTarget({ target }: { target: ZapPoolRecipient }) { const login = useLogin(); const profile = useUserProfile(System, target.pubkey); const hasAddress = profile?.lud16 || profile?.lud06; const defaultZapMount = Math.ceil(login.preferences.defaultZapAmount * (target.split / 100)); return (
% ( )
ZapPoolController.set({ ...target, split: e.target.valueAsNumber, }) } /> ) : ( ) } /> ); } export default function ZapPoolPage() { const login = useLogin(); const zapPool = useSyncExternalStore( c => ZapPoolController.hook(c), () => ZapPoolController.snapshot() ); const { wallet } = useWallet(); const relayConnections = useMemo(() => { return System.Sockets.map(a => { if (a.info?.pubkey && !a.ephemeral) { return { address: a.address, pubkey: a.info.pubkey, }; } }) .filter(a => a !== undefined) .map(unwrap); }, [login.relays]); const sumPending = zapPool.reduce((acc, v) => acc + v.sum, 0); return (

), }} />

), nOut: ( ), }} />

), }} />

{wallet && ( ZapPoolController.payout(wallet)}> )}

b.pubkey === bech32ToHex(SnortPubKey) && b.type === ZapPoolRecipientType.Generic) ?? { type: ZapPoolRecipientType.Generic, pubkey: bech32ToHex(SnortPubKey), split: 0, sum: 0, } } />

{relayConnections.map(a => (

{getRelayName(a.address)}

b.pubkey === a.pubkey && b.type === ZapPoolRecipientType.Relay) ?? { type: ZapPoolRecipientType.Relay, pubkey: a.pubkey, split: 0, sum: 0, } } />
))}

{UploaderServices.map(a => (

{a.name}

b.pubkey === a.owner && b.type === ZapPoolRecipientType.FileHost) ?? { type: ZapPoolRecipientType.FileHost, pubkey: a.owner, split: 0, sum: 0, } } />
))}

{DataProviders.map(a => (

{a.name}

b.pubkey === a.owner && b.type === ZapPoolRecipientType.DataProvider) ?? { type: ZapPoolRecipientType.DataProvider, pubkey: a.owner, split: 0, sum: 0, } } />
))}
); }