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 (