Commit 040d08dc authored by Max Alekseenko's avatar Max Alekseenko

implement ref code logic

parent 9737dbe2
import { useBoolean } from '@chakra-ui/react'; import { useBoolean } from '@chakra-ui/react';
import { useRouter } from 'next/router';
import React, { createContext, useContext, useEffect, useMemo, useCallback } from 'react'; import React, { createContext, useContext, useEffect, useMemo, useCallback } from 'react';
import type { RewardsUserBalancesResponse, RewardsUserDailyCheckResponse } from 'types/api/rewards'; import type { RewardsUserBalancesResponse, RewardsUserDailyCheckResponse } from 'types/api/rewards';
...@@ -6,6 +7,8 @@ import type { RewardsUserBalancesResponse, RewardsUserDailyCheckResponse } from ...@@ -6,6 +7,8 @@ import type { RewardsUserBalancesResponse, RewardsUserDailyCheckResponse } from
import config from 'configs/app'; import config from 'configs/app';
import useApiQuery from 'lib/api/useApiQuery'; import useApiQuery from 'lib/api/useApiQuery';
import * as cookies from 'lib/cookies'; import * as cookies from 'lib/cookies';
import getQueryParamString from 'lib/router/getQueryParamString';
import removeQueryParam from 'lib/router/removeQueryParam';
type Props = { type Props = {
children: React.ReactNode; children: React.ReactNode;
...@@ -36,6 +39,7 @@ const RewardsContext = createContext<TRewardsContext>({ ...@@ -36,6 +39,7 @@ const RewardsContext = createContext<TRewardsContext>({
}); });
export function RewardsContextProvider({ children }: Props) { export function RewardsContextProvider({ children }: Props) {
const router = useRouter();
const [ isLoginModalOpen, setIsLoginModalOpen ] = useBoolean(false); const [ isLoginModalOpen, setIsLoginModalOpen ] = useBoolean(false);
const [ apiToken, setApiToken ] = React.useState<string | undefined>(cookies.get(cookies.NAMES.REWARDS_API_TOKEN)); const [ apiToken, setApiToken ] = React.useState<string | undefined>(cookies.get(cookies.NAMES.REWARDS_API_TOKEN));
...@@ -63,6 +67,17 @@ export function RewardsContextProvider({ children }: Props) { ...@@ -63,6 +67,17 @@ export function RewardsContextProvider({ children }: Props) {
} }
}, [ balancesQuery.error, apiToken, saveApiToken ]); }, [ balancesQuery.error, apiToken, saveApiToken ]);
useEffect(() => {
const refCode = getQueryParamString(router.query.ref);
if (refCode) {
cookies.set(cookies.NAMES.REWARDS_REFERRAL_CODE, refCode);
removeQueryParam(router, 'ref');
if (!apiToken) {
setIsLoginModalOpen.on();
}
}
}, [ router, apiToken, setIsLoginModalOpen ]);
const value = useMemo(() => ({ const value = useMemo(() => ({
isLoginModalOpen, isLoginModalOpen,
openLoginModal: setIsLoginModalOpen.on, openLoginModal: setIsLoginModalOpen.on,
......
...@@ -6,6 +6,7 @@ export enum NAMES { ...@@ -6,6 +6,7 @@ export enum NAMES {
NAV_BAR_COLLAPSED='nav_bar_collapsed', NAV_BAR_COLLAPSED='nav_bar_collapsed',
API_TOKEN='_explorer_key', API_TOKEN='_explorer_key',
REWARDS_API_TOKEN='rewards_api_token', REWARDS_API_TOKEN='rewards_api_token',
REWARDS_REFERRAL_CODE='rewards_ref_code',
INVALID_SESSION='invalid_session', INVALID_SESSION='invalid_session',
CONFIRM_EMAIL_PAGE_VIEWED='confirm_email_page_viewed', CONFIRM_EMAIL_PAGE_VIEWED='confirm_email_page_viewed',
TXS_SORT='txs_sort', TXS_SORT='txs_sort',
......
...@@ -3,6 +3,7 @@ import { useRouter } from 'next/router'; ...@@ -3,6 +3,7 @@ import { useRouter } from 'next/router';
import type { ChangeEvent } from 'react'; import type { ChangeEvent } from 'react';
import React, { useCallback, useState, useEffect } from 'react'; import React, { useCallback, useState, useEffect } from 'react';
import * as cookies from 'lib/cookies';
import InputPlaceholder from 'ui/shared/InputPlaceholder'; import InputPlaceholder from 'ui/shared/InputPlaceholder';
import LinkExternal from 'ui/shared/links/LinkExternal'; import LinkExternal from 'ui/shared/links/LinkExternal';
import useWallet from 'ui/snippets/walletMenu/useWallet'; import useWallet from 'ui/snippets/walletMenu/useWallet';
...@@ -17,9 +18,10 @@ type Props = { ...@@ -17,9 +18,10 @@ type Props = {
const LoginStepContent = ({ goNext, closeModal }: Props) => { const LoginStepContent = ({ goNext, closeModal }: Props) => {
const router = useRouter(); const router = useRouter();
const { connect, isWalletConnected } = useWallet({ source: 'Merits' }); const { connect, isWalletConnected } = useWallet({ source: 'Merits' });
const [ isSwitchChecked, setIsSwitchChecked ] = useBoolean(false); const savedRefCode = cookies.get(cookies.NAMES.REWARDS_REFERRAL_CODE);
const [ isSwitchChecked, setIsSwitchChecked ] = useBoolean(Boolean(savedRefCode));
const [ isLoading, setIsLoading ] = useBoolean(false); const [ isLoading, setIsLoading ] = useBoolean(false);
const [ refCode, setRefCode ] = useState(''); const [ refCode, setRefCode ] = useState(savedRefCode || '');
const [ refCodeError, setRefCodeError ] = useBoolean(false); const [ refCodeError, setRefCodeError ] = useBoolean(false);
const dividerColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200'); const dividerColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200');
const login = useLogin(); const login = useLogin();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment