diff --git a/package-lock.json b/package-lock.json index eebbca7..cd975b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "plotlink", - "version": "1.38.0", + "version": "1.39.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "plotlink", - "version": "1.38.0", + "version": "1.39.0", "workspaces": [ "packages/*" ], diff --git a/package.json b/package.json index af6351e..f6ecd8c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plotlink", - "version": "1.38.0", + "version": "1.39.0", "private": true, "workspaces": [ "packages/*" diff --git a/src/components/airdrop/ReferralCTA.tsx b/src/components/airdrop/ReferralCTA.tsx index 965e8a7..d90ab9e 100644 --- a/src/components/airdrop/ReferralCTA.tsx +++ b/src/components/airdrop/ReferralCTA.tsx @@ -1,10 +1,82 @@ "use client"; +import { useEffect, useState } from "react"; +import { useAccount } from "wagmi"; + export function ReferralCTA() { + const { address, isConnected } = useAccount(); + const [fetchState, setFetchState] = useState<{ code: string | null; addr: string | null }>({ code: null, addr: null }); + const [copied, setCopied] = useState(false); + + useEffect(() => { + if (!isConnected || !address) return; + + let cancelled = false; + fetch(`/api/airdrop/referral-code?address=${address.toLowerCase()}`) + .then(r => r.ok ? r.json() : null) + .then(d => { if (!cancelled) setFetchState({ code: d?.code ?? null, addr: address.toLowerCase() }); }) + .catch(() => { if (!cancelled) setFetchState({ code: null, addr: address.toLowerCase() }); }); + return () => { cancelled = true; }; + }, [isConnected, address]); + + const code = fetchState.addr === address?.toLowerCase() ? fetchState.code : null; + + if (!code) { + return ( +
+

Invite Friends

+

Your referral link will appear once activation is complete.

+
+ ); + } + + const refUrl = `https://plotlink.xyz/?ref=${code}`; + const shareText = `Join the PlotLink Buy-Back Sprint! Use my referral link to boost both our multipliers:`; + const xShareUrl = `https://x.com/intent/post?text=${encodeURIComponent(shareText)}&url=${encodeURIComponent(refUrl)}`; + + const handleCopy = async () => { + try { + await navigator.clipboard.writeText(refUrl); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } catch { + const input = document.createElement("input"); + input.value = refUrl; + document.body.appendChild(input); + input.select(); + document.execCommand("copy"); + document.body.removeChild(input); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } + }; + return ( -
-

Invite Friends

-

Share your referral link to boost your multiplier.

+
+

Invite Friends

+ +
+ {refUrl} + +
+ + + Share on X + + +

+ Each qualified referral adds +0.2 to your multiplier (up to 3.0×). +

); }