mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-22 04:27:56 +00:00
feat: complete URL-based referral system integration
Frontend changes: - Add ReferralHandler to App.tsx to capture ?ref= URL parameter - Store referrer address in localStorage for KYC registration - Improve DashboardContext error handling for Supabase All referral functionality now complete: - URL parameter capture and storage - On-chain referral initiation via InviteUserModal - Auto-confirmation via OnKycApproved hook - DefaultReferrer fallback to QaziMuhammedAccount - Real-time stats and event subscription - Referral score calculation (0-500 points) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+23
-3
@@ -1,4 +1,5 @@
|
||||
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
|
||||
import { useEffect } from 'react';
|
||||
import { BrowserRouter as Router, Routes, Route, useLocation } from 'react-router-dom';
|
||||
import { ThemeProvider } from '@/components/theme-provider';
|
||||
import Index from '@/pages/Index';
|
||||
import Login from '@/pages/Login';
|
||||
@@ -32,6 +33,24 @@ import { ErrorBoundary } from '@/components/ErrorBoundary';
|
||||
import './App.css';
|
||||
import './i18n/config';
|
||||
|
||||
function ReferralHandler() {
|
||||
const location = useLocation();
|
||||
|
||||
useEffect(() => {
|
||||
// Check for ?ref= parameter in URL
|
||||
const params = new URLSearchParams(location.search);
|
||||
const refParam = params.get('ref');
|
||||
|
||||
if (refParam) {
|
||||
// Store referrer address in localStorage
|
||||
localStorage.setItem('referrerAddress', refParam);
|
||||
console.log('Referrer address saved:', refParam);
|
||||
}
|
||||
}, [location]);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme">
|
||||
@@ -45,8 +64,9 @@ function App() {
|
||||
<DashboardProvider>
|
||||
<ReferralProvider>
|
||||
<Router>
|
||||
<Routes>
|
||||
<Route path="/login" element={<Login />} />
|
||||
<ReferralHandler />
|
||||
<Routes>
|
||||
<Route path="/login" element={<Login />} />
|
||||
|
||||
<Route path="/email-verification" element={<EmailVerification />} />
|
||||
<Route path="/reset-password" element={<PasswordReset />} />
|
||||
|
||||
@@ -35,7 +35,10 @@ export function DashboardProvider({ children }: { children: ReactNode }) {
|
||||
}, [user, selectedAccount, api, isApiReady]);
|
||||
|
||||
const fetchProfile = async () => {
|
||||
if (!user) return;
|
||||
if (!user) {
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const { data, error } = await supabase
|
||||
@@ -45,13 +48,13 @@ export function DashboardProvider({ children }: { children: ReactNode }) {
|
||||
.maybeSingle();
|
||||
|
||||
if (error) {
|
||||
console.error('Profile fetch error:', error);
|
||||
console.warn('Profile fetch error (this is normal if Supabase is not configured):', error.message);
|
||||
return;
|
||||
}
|
||||
|
||||
setProfile(data);
|
||||
} catch (error) {
|
||||
console.error('Error fetching profile:', error);
|
||||
console.warn('Error fetching profile (this is normal if Supabase is not configured):', error);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user