diff --git a/src/lib/utils/referral.js b/src/lib/utils/referral.js index bb3bf3b6..208ccfad 100644 --- a/src/lib/utils/referral.js +++ b/src/lib/utils/referral.js @@ -4,9 +4,10 @@ export const REFERRAL_QUERY_PARAM = 'ref'; export const REFERRAL_DISCOUNT = 50; export const isReferralCode = (code) => /^[a-z0-9]{7}$/i.test(code || ''); -export function getReferralCode(url = browser ? window.location.href : '') { - if (!browser || !url) return null; +export function getReferralCode() { + if (!browser) return null; + + const code = new URL(window.location.href).searchParams.get(REFERRAL_QUERY_PARAM); - const code = new URL(url).searchParams.get(REFERRAL_QUERY_PARAM); return isReferralCode(code) ? code : null; } diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index dc04793b..fd799c10 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -7,7 +7,10 @@ import "@fontsource/inter/700.css"; import '@fontsource/jetbrains-mono/400.css'; + import { onMount } from "svelte"; import { get } from "svelte/store"; + import { page } from "$app/stores"; + import { replaceState, afterNavigate } from '$app/navigation'; import Badge from "$lib/components/Badge.svelte"; import Grid from "$lib/components/Grid.svelte"; @@ -32,9 +35,6 @@ showCart, } from "../store.js"; - import { onMount } from "svelte"; - import { page } from "$app/stores"; - let loading = false; async function openCart() { @@ -57,6 +57,14 @@ loading = false; } + afterNavigate(() => { + if (!$page.url.searchParams.has('ref')) return; + + const url = new URL($page.url); + url.searchParams.delete('ref'); + replaceState(url, $page.state); + }) + onMount(async () => { const referralCode = getReferralCode(); if (referralCode) await createCart(referralCode);