From 1e57afb1acc611a75de6569e11be2a6ba31e8366 Mon Sep 17 00:00:00 2001 From: zmeyer44 Date: Thu, 2 Nov 2023 10:50:49 -0400 Subject: [PATCH] merging all --- .../event/[naddr]/_components/Header.tsx | 15 +- .../event/[naddr]/_components/RSVPButton.tsx | 137 +++++++++++++++++- app/globals.css | 11 ++ 3 files changed, 146 insertions(+), 17 deletions(-) diff --git a/app/(app)/event/[naddr]/_components/Header.tsx b/app/(app)/event/[naddr]/_components/Header.tsx index e140416..7e4188b 100644 --- a/app/(app)/event/[naddr]/_components/Header.tsx +++ b/app/(app)/event/[naddr]/_components/Header.tsx @@ -27,7 +27,7 @@ import { btcToSats, formatNumber } from "@/lib/utils"; import { formatDate } from "@/lib/utils/dates"; import SmallCalendarIcon from "@/components/EventIcons/DateIcon"; import LocationIcon from "@/components/EventIcons/LocationIcon"; - +import BannerImage from "@/components/PageComponents/BannerImage"; const RSVPButton = dynamic(() => import("./RSVPButton"), { ssr: false, }); @@ -128,16 +128,7 @@ export default function Header({ event }: { event: NDKEvent }) {
- {!!image && ( - banner - )} + {!!image && }
@@ -154,7 +145,7 @@ export default function Header({ event }: { event: NDKEvent }) { {!!currentUser && currentUser.pubkey === pubkey && ( )} - {!isMember && } + {!isMember && } {/* {!isMember && (hasValidPayment ? ( diff --git a/app/(app)/event/[naddr]/_components/RSVPButton.tsx b/app/(app)/event/[naddr]/_components/RSVPButton.tsx index f44e9c5..d68697e 100644 --- a/app/(app)/event/[naddr]/_components/RSVPButton.tsx +++ b/app/(app)/event/[naddr]/_components/RSVPButton.tsx @@ -1,19 +1,146 @@ +import { useState } from "react"; + import { Button } from "@/components/ui/button"; -import { useModal } from "@/app/_providers/modal/provider"; +import { HiOutlineLightningBolt } from "react-icons/hi"; + import RSVPModal from "@/components/Modals/RSVP"; +import ConfirmModal from "@/components/Modals/Confirm"; + +import { type NDKEvent } from "@nostr-dev-kit/ndk"; +import { getTagAllValues, getTagValues } from "@/lib/nostr/utils"; +import { formatDate } from "@/lib/utils/dates"; + +import { useModal } from "@/app/_providers/modal/provider"; +import { btcToSats, formatNumber } from "@/lib/utils"; +import useCurrentUser from "@/lib/hooks/useCurrentUser"; +import { useNDK } from "@/app/_providers/ndk"; +import { toast } from "sonner"; + +import { sendZap, checkPayment } from "@/lib/actions/zap"; type RSVPButtonProps = { - eventReference: string; + event: NDKEvent; }; -export default function RSVPButton({ eventReference }: RSVPButtonProps) { +export default function RSVPButton({ event }: RSVPButtonProps) { const modal = useModal(); + const { currentUser } = useCurrentUser(); + const { ndk } = useNDK(); + const eventReference = event.encode(); + const name = getTagValues("name", event.tags); + const tickets = getTagValues("tickets", event.tags); + const price = getTagAllValues("price", event.tags); + const priceInBTC = parseFloat(getTagValues("price", event.tags) ?? "0"); + const [ticketPending, setTicketPending] = useState(false); + const [checkingPayment, setCheckingPayment] = useState(false); + const [hasValidPayment, setHasValidPayment] = useState(false); + async function handleBuyTicket() { + setTicketPending(true); + try { + if (!currentUser || !ndk?.signer) return; + + const result = await sendZap( + ndk!, + btcToSats(priceInBTC), + event.rawEvent(), + `Ticket payment: ${name}`, + ); + toast.success("Payment Sent!"); + void handleCheckPayment(); + } catch (err) { + console.log("error sending zap", err); + } finally { + setTicketPending(false); + } + } + + async function handleCheckPayment() { + if (!event || !currentUser || !ndk) return; + setCheckingPayment(true); + try { + const result = await checkPayment( + ndk, + event.tagId(), + currentUser.pubkey, + event.rawEvent(), + ); + console.log("Payment result", result); + if (result) { + setHasValidPayment(true); + } + } catch (err) { + console.log("error sending zap", err); + } finally { + setCheckingPayment(false); + } + } + if (!tickets) { + return ( + + ); + } + if (price) { + return ( + + ); + } return ( ); } diff --git a/app/globals.css b/app/globals.css index b2d3d42..4b169d1 100644 --- a/app/globals.css +++ b/app/globals.css @@ -130,3 +130,14 @@ input[type="time"]::-webkit-calendar-picker-indicator { background: none; display: none; } +/* Chrome, Safari, Edge, Opera */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +input[type="number"] { + -moz-appearance: textfield; +}