flotilla/src/app/components/ZapButton.svelte

37 lines
1.1 KiB
Svelte
Raw Normal View History

2025-07-07 22:28:36 +00:00
<script lang="ts">
2025-07-17 22:29:26 +00:00
import type {Snippet} from "svelte"
import type {TrustedEvent} from "@welshman/util"
import {session, deriveZapperForPubkey} from "@welshman/app"
2025-07-07 22:28:36 +00:00
import Button from "@lib/components/Button.svelte"
import Zap from "@app/components/Zap.svelte"
import InfoZapperError from "@app/components/InfoZapperError.svelte"
import WalletConnect from "@app/components/WalletConnect.svelte"
import {pushModal} from "@app/util/modal"
2025-07-07 22:28:36 +00:00
2025-07-17 22:29:26 +00:00
type Props = {
url: string
event: TrustedEvent
children: Snippet
replaceState?: boolean
class?: string
}
const {url, event, children, replaceState, ...props}: Props = $props()
2025-07-07 22:28:36 +00:00
const zapper = deriveZapperForPubkey(event.pubkey)
const onClick = () => {
if (!$zapper?.allowsNostr) {
2025-07-17 22:29:26 +00:00
pushModal(InfoZapperError, {url, pubkey: event.pubkey, eventId: event.id}, {replaceState})
} else if ($session?.wallet) {
2025-07-17 22:29:26 +00:00
pushModal(Zap, {url, pubkey: event.pubkey, eventId: event.id}, {replaceState})
2025-07-07 22:28:36 +00:00
} else {
2025-07-17 22:29:26 +00:00
pushModal(WalletConnect, {}, {replaceState})
2025-07-07 22:28:36 +00:00
}
}
</script>
<Button onclick={onClick} {...props}>
{@render children?.()}
</Button>