Skip to content

Commit 4094ac4

Browse files
committed
todo add logic to add user in referral handler
1 parent 5988ff0 commit 4094ac4

File tree

8 files changed

+413
-9
lines changed

8 files changed

+413
-9
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
"@radix-ui/react-dropdown-menu": "^2.1.16",
2020
"@radix-ui/react-label": "^2.1.7",
2121
"@radix-ui/react-progress": "^1.1.7",
22+
"@radix-ui/react-radio-group": "^1.3.8",
2223
"@radix-ui/react-scroll-area": "^1.2.10",
2324
"@radix-ui/react-separator": "^1.1.7",
2425
"@radix-ui/react-slot": "^1.2.3",
26+
"@radix-ui/react-switch": "^1.2.6",
2527
"@tailwindcss/vite": "^4.1.3",
2628
"@types/react-dom": "^19.1.6",
2729
"alpinejs": "^3.13.5",

pnpm-lock.yaml

Lines changed: 53 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import React, { useEffect } from 'react';
2+
import { EXTERNAL } from '@/constant';
3+
import { getUserProfile } from '@/lib/utils';
4+
5+
interface ReferralHandlerProps {
6+
children?: React.ReactNode;
7+
}
8+
9+
export default function ReferralHandler({ children }: ReferralHandlerProps) {
10+
useEffect(() => {
11+
async function handleReferralCode() {
12+
try {
13+
// Check for ref parameter in URL
14+
const urlParams = new URLSearchParams(window.location.search);
15+
const refCode = urlParams.get('ref');
16+
17+
if (refCode) {
18+
// Store referral code in localStorage
19+
localStorage.setItem('ref_code', refCode);
20+
}
21+
22+
23+
// Check if user is logged in and handle claimed referral codes
24+
const user = await getUserProfile(EXTERNAL.directus_url);
25+
26+
if (user) {
27+
const storedRefCode = localStorage.getItem('ref_code');
28+
29+
if (storedRefCode) {
30+
console.log('Referral code handling initiated.');
31+
32+
// get data if currently passed ref code
33+
const checkUrl = `${EXTERNAL.directus_url}/items/referral_code?filter[code][_eq]=${encodeURIComponent(storedRefCode)}&fields=*,user_claimed&limit=1`;
34+
35+
const response = await fetch(checkUrl, {
36+
credentials: 'include',
37+
headers: { 'Accept': 'application/json' }
38+
});
39+
40+
if (response.ok) {
41+
const result = await response.json();
42+
console.log(result);
43+
44+
// Check if the current user is in the user_claimed many-to-many relationship
45+
if (result.data && result.data.length > 0) {
46+
const referralCode = result.data[0];
47+
const isAlreadyClaimed = referralCode.user_claimed?.some((userId: string) => userId === user.id);
48+
49+
if (isAlreadyClaimed) {
50+
console.log('user already claimed ref code before');
51+
52+
localStorage.removeItem('ref_code');
53+
}
54+
// TODO
55+
}
56+
}
57+
}
58+
}
59+
} catch (error) {
60+
console.error('Error handling referral code:', error);
61+
}
62+
}
63+
64+
handleReferralCode();
65+
}, []);
66+
67+
// Just render children if provided, otherwise render nothing
68+
return children ? <>{children}</> : null;
69+
}

0 commit comments

Comments
 (0)