diff --git a/.env.example b/.env.example
index c5eb9bb..18871d6 100644
--- a/.env.example
+++ b/.env.example
@@ -1,3 +1,4 @@
REACT_APP_USDT_REFERRAL_FEES_ADDRESS=''
REACT_APP_USDC_REFERRAL_FEES_ADDRESS=''
+REACT_APP_ALLOW_REF_LINK=true
REACT_APP_EXCLUDE_MARKETS=[]
diff --git a/package.json b/package.json
index 842ecbc..bc34206 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
"@project-serum/pool": "0.2.2",
"@project-serum/serum": "^0.13.41",
"@project-serum/sol-wallet-adapter": "^0.2.0",
+ "@solana/spl-name-service": "^0.1.2",
"@solana/spl-token": "^0.1.6",
"@solana/web3.js": "0.86.1",
"@testing-library/jest-dom": "^4.2.4",
@@ -29,6 +30,7 @@
"immutable-tuple": "^0.4.10",
"nanoid": "^3.1.22",
"qrcode.react": "^1.0.0",
+ "query-string": "^7.0.1",
"react": "^16.13.1",
"react-app-polyfill": "^1.0.5",
"react-copy-to-clipboard": "^5.0.2",
diff --git a/src/App.tsx b/src/App.tsx
index b0f3280..ea706fd 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -7,6 +7,7 @@ import { Spin } from 'antd';
import ErrorBoundary from './components/ErrorBoundary';
import { Routes } from './routes';
import { PreferencesProvider } from './utils/preferences';
+import { ReferrerProvider } from './utils/referrer';
export default function App() {
return (
@@ -14,13 +15,15 @@ export default function App() {
-
-
- }>
-
-
-
-
+
+
+
+ }>
+
+
+
+
+
diff --git a/src/components/BasicLayout.js b/src/components/BasicLayout.js
index a97ea76..56cd621 100644
--- a/src/components/BasicLayout.js
+++ b/src/components/BasicLayout.js
@@ -1,10 +1,25 @@
import { Layout } from 'antd';
-import React from 'react';
+import React, { useEffect } from 'react';
import TopBar from './TopBar';
import { CustomFooter as Footer } from './Footer';
+import { useReferrer } from '../utils/referrer';
+import queryString from 'query-string';
+import { useLocation } from 'react-router-dom';
+import { notify } from '../utils/notifications';
const { Header, Content } = Layout;
export default function BasicLayout({ children }) {
+ const { refCode, setRefCode, allowRefLink } = useReferrer();
+ const { search } = useLocation();
+ const parsed = queryString.parse(search);
+
+ useEffect(() => {
+ if (!!parsed.refCode && parsed.refCode !== refCode && allowRefLink) {
+ notify({ message: `New referrer ${parsed.refCode} added` });
+ setRefCode(parsed.refCode);
+ }
+ }, [parsed, refCode, setRefCode, allowRefLink]);
+
return (
{
const smallScreen = !useBreakpoint().lg;
-
+ const { refCode, allowRefLink } = useReferrer();
return (