diff --git a/web/components/manalink-card.tsx b/web/components/manalink-card.tsx index 7785d9f9..f3baeaee 100644 --- a/web/components/manalink-card.tsx +++ b/web/components/manalink-card.tsx @@ -20,65 +20,56 @@ export type ManalinkInfo = { } export function ManalinkCard(props: { - user?: User | null | undefined - className?: string info: ManalinkInfo - isClaiming?: boolean - onClaim?: () => void + className?: string preview?: boolean }) { - const { user, className, isClaiming, info, onClaim, preview = false } = props + const { className, info, preview = false } = props const { expiresTime, maxUses, uses, amount, message } = info return ( -
- -
- {maxUses != null - ? `${maxUses - uses}/${maxUses} uses left` - : `Unlimited use`} -
-
- {expiresTime != null - ? `Expires ${fromNow(expiresTime)}` - : 'Never expires'} -
- - - +
- - -
- {formatMoney(amount)} + +
+ {maxUses != null + ? `${maxUses - uses}/${maxUses} uses left` + : `Unlimited use`} +
+
+ {expiresTime != null + ? `Expires ${fromNow(expiresTime)}` + : 'Never expires'}
-
{message}
- {!preview && ( -
- -
- )} - -
+ + + +
+ {formatMoney(amount)} +
+
{message}
+ +
+
+ ) } @@ -89,81 +80,79 @@ export function ManalinkCardFromView(props: { }) { const { className, link, highlightedSlug } = props const { message, amount, expiresTime, maxUses, claims } = link - const [details, setDetails] = useState(false) return ( - <> - +
setDetails(!details)} > -
- {details && ( - - )} - -
- {maxUses != null - ? `${maxUses - claims.length}/${maxUses} uses left` - : `Unlimited use`} -
-
- {expiresTime != null - ? `Expires ${fromNow(expiresTime)}` - : 'Never expires'} -
- - -
- - -
- {formatMoney(amount)} -
- - -
-
{message || '\n\n'}
+ )} + +
+ {maxUses != null + ? `${maxUses - claims.length}/${maxUses} uses left` + : `Unlimited use`} +
+
+ {expiresTime != null + ? `Expires ${fromNow(expiresTime)}` + : 'Never expires'} +
+ +
+ + +
+ {formatMoney(amount)} +
+ + +
+
{message || '\n\n'}
- + ) } @@ -179,7 +168,7 @@ function ClaimsList(props: { link: Manalink; className: string }) { {link.claims.length > 0 ? ( <> {link.claims.map((claim) => ( - + ))} @@ -209,12 +198,24 @@ function Claim(props: { claim: Claim }) { function getManalinkGradient(amount: number) { if (amount < 20) { - return 'from-slate-300 via-slate-500 to-slate-800' + return 'from-indigo-200 via-indigo-500 to-indigo-800' } else if (amount >= 20 && amount < 50) { - return 'from-indigo-300 via-indigo-500 to-indigo-800' + return 'from-fuchsia-200 via-fuchsia-500 to-fuchsia-800' } else if (amount >= 50 && amount < 100) { - return 'from-violet-300 via-violet-500 to-violet-800' + return 'from-rose-100 via-rose-400 to-rose-700' } else if (amount >= 100) { - return 'from-indigo-300 via-violet-500 to-rose-400' + return 'from-amber-200 via-amber-500 to-amber-700' + } +} + +function getManalinkAmountColor(amount: number) { + if (amount < 20) { + return 'text-indigo-500' + } else if (amount >= 20 && amount < 50) { + return 'text-fuchsia-600' + } else if (amount >= 50 && amount < 100) { + return 'text-rose-600' + } else if (amount >= 100) { + return 'text-amber-600' } } diff --git a/web/components/manalinks/create-links-button.tsx b/web/components/manalinks/create-links-button.tsx index 99a41ce8..25b51bb2 100644 --- a/web/components/manalinks/create-links-button.tsx +++ b/web/components/manalinks/create-links-button.tsx @@ -37,6 +37,7 @@ export function CreateLinksButton(props: { message: newManalink.message, }) setHighlightedSlug(slug || '') + setTimeout(() => setHighlightedSlug(''), 3700) }} /> diff --git a/web/pages/link/[slug].tsx b/web/pages/link/[slug].tsx index d3691a67..119fec77 100644 --- a/web/pages/link/[slug].tsx +++ b/web/pages/link/[slug].tsx @@ -7,6 +7,8 @@ import { useManalink } from 'web/lib/firebase/manalinks' import { ManalinkCard } from 'web/components/manalink-card' import { useUser } from 'web/hooks/use-user' import { firebaseLogin } from 'web/lib/firebase/users' +import { Row } from 'web/components/layout/row' +import { Button } from 'web/components/button' export default function ClaimPage() { const user = useUser() @@ -29,33 +31,41 @@ export default function ClaimPage() { url="/send" />
- - <ManalinkCard - user={user} - info={info} - isClaiming={claiming} - onClaim={async () => { - setClaiming(true) - try { - if (user == null) { - await firebaseLogin() + <Row className="items-center justify-between"> + <Title text={`Claim M$${manalink.amount} mana`} /> + <div className="my-auto"> + <Button + onClick={async () => { + setClaiming(true) + try { + if (user == null) { + await firebaseLogin() + setClaiming(false) + return + } + if (user?.id == manalink.fromId) { + throw new Error("You can't claim your own manalink.") + } + await claimManalink({ slug: manalink.slug }) + user && router.push(`/${user.username}?claimed-mana=yes`) + } catch (e) { + console.log(e) + const message = + e && e instanceof Object + ? e.toString() + : 'An error occurred.' + setError(message) + } setClaiming(false) - return - } - if (user?.id == manalink.fromId) { - throw new Error("You can't claim your own manalink.") - } - await claimManalink({ slug: manalink.slug }) - user && router.push(`/${user.username}?claimed-mana=yes`) - } catch (e) { - console.log(e) - const message = - e && e instanceof Object ? e.toString() : 'An error occurred.' - setError(message) - } - setClaiming(false) - }} - /> + }} + disabled={claiming} + size="lg" + > + {user ? 'Claim' : 'Login'} + </Button> + </div> + </Row> + <ManalinkCard info={info} /> {error && ( <section className="my-5 text-red-500"> <p>Failed to claim manalink.</p>