From 07a2771476782664532967dd53d6de9d4e8bbbe9 Mon Sep 17 00:00:00 2001 From: Austin Chen Date: Mon, 9 May 2022 16:24:28 -0400 Subject: [PATCH] Barebones endpoint to claim mana --- web/lib/firebase/manalinks.ts | 24 ++++++++++++++++++++- web/pages/send/[slug].tsx | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 web/pages/send/[slug].tsx diff --git a/web/lib/firebase/manalinks.ts b/web/lib/firebase/manalinks.ts index d595e6d3..c2ee8cc4 100644 --- a/web/lib/firebase/manalinks.ts +++ b/web/lib/firebase/manalinks.ts @@ -1,4 +1,11 @@ -import { collection, orderBy, query, setDoc, where } from 'firebase/firestore' +import { + collection, + getDoc, + orderBy, + query, + setDoc, + where, +} from 'firebase/firestore' import { doc } from 'firebase/firestore' import { Manalink } from '../../../common/manalink' import { db } from './init' @@ -53,6 +60,21 @@ function listUserManalinks(fromId?: string) { ) } +export async function getManalink(slug: string) { + const docSnap = await getDoc(doc(db, 'manalinks', slug)) + return docSnap.data() as Manalink +} + +export function useManalink(slug: string) { + const [manalink, setManalink] = useState(null) + useEffect(() => { + if (slug) { + getManalink(slug).then(setManalink) + } + }, [slug]) + return manalink +} + export function listenForUserManalinks( fromId: string | undefined, setLinks: (links: Manalink[]) => void diff --git a/web/pages/send/[slug].tsx b/web/pages/send/[slug].tsx new file mode 100644 index 00000000..bbd32025 --- /dev/null +++ b/web/pages/send/[slug].tsx @@ -0,0 +1,39 @@ +import { useRouter } from 'next/router' +import { Page } from 'web/components/page' +import { SEO } from 'web/components/SEO' +import { Title } from 'web/components/title' +import { claimManalink } from 'web/lib/firebase/api-call' +import { useManalink } from 'web/lib/firebase/manalinks' + +export default function ClaimPage() { + const router = useRouter() + const { slug } = router.query as { slug: string } + const manalink = useManalink(slug) + + if (!manalink) { + return <> + } + + return ( + + + + <p> + You can claim {manalink.amount} mana from {manalink.fromId} by clicking + the button below. + </p> + <button + className="btn" + onClick={async () => { + await claimManalink(manalink.slug) + }} + > + Claim + </button> + </Page> + ) +}