Commit f66f249d authored by Jordan Frankfurt's avatar Jordan Frankfurt

fix: fiat onramp polish (#36)

* fix: fiat onramp polish

* add 3 session render cap on FoR announcement
parent 08afd888
...@@ -3,7 +3,7 @@ import { useWeb3React } from '@web3-react/core' ...@@ -3,7 +3,7 @@ import { useWeb3React } from '@web3-react/core'
import fiatMaskUrl from 'assets/svg/fiat_mask.svg' import fiatMaskUrl from 'assets/svg/fiat_mask.svg'
import { BaseVariant } from 'featureFlags' import { BaseVariant } from 'featureFlags'
import { useFiatOnrampFlag } from 'featureFlags/flags/fiatOnramp' import { useFiatOnrampFlag } from 'featureFlags/flags/fiatOnramp'
import { MouseEvent, useCallback } from 'react' import { useCallback, useEffect, useState } from 'react'
import { X } from 'react-feather' import { X } from 'react-feather'
import { useToggleWalletDropdown } from 'state/application/hooks' import { useToggleWalletDropdown } from 'state/application/hooks'
import { useFiatOnrampAck } from 'state/user/hooks' import { useFiatOnrampAck } from 'state/user/hooks'
...@@ -91,18 +91,26 @@ const Body = styled(ThemedText.BodySmall)` ...@@ -91,18 +91,26 @@ const Body = styled(ThemedText.BodySmall)`
position: relative; position: relative;
` `
const ANNOUNCEMENT_RENDERED = 'FiatOnrampAnnouncement-rendered'
const ANNOUNCEMENT_DISMISSED = 'FiatOnrampAnnouncement-dismissed'
const MAX_RENDER_COUNT = 3
export function FiatOnrampAnnouncement() { export function FiatOnrampAnnouncement() {
const { account } = useWeb3React() const { account } = useWeb3React()
const [acks, acknowledge] = useFiatOnrampAck() const [acks, acknowledge] = useFiatOnrampAck()
const [locallyDismissed, setLocallyDismissed] = useState(false)
const handleClose = useCallback( useEffect(() => {
(e: MouseEvent<HTMLOrSVGElement>) => { if (!sessionStorage.getItem(ANNOUNCEMENT_RENDERED)) {
e.preventDefault() acknowledge({ renderCount: acks.renderCount + 1 })
e.stopPropagation() sessionStorage.setItem(ANNOUNCEMENT_RENDERED, 'true')
acknowledge({ user: false }) }
}, }, [acknowledge, acks.renderCount])
[acknowledge]
) const handleClose = useCallback(() => {
setLocallyDismissed(true)
sessionStorage.setItem(ANNOUNCEMENT_DISMISSED, 'true')
}, [])
const toggleWalletDropdown = useToggleWalletDropdown() const toggleWalletDropdown = useToggleWalletDropdown()
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
...@@ -111,7 +119,14 @@ export function FiatOnrampAnnouncement() { ...@@ -111,7 +119,14 @@ export function FiatOnrampAnnouncement() {
}, [acknowledge, toggleWalletDropdown]) }, [acknowledge, toggleWalletDropdown])
const fiatOnrampFlag = useFiatOnrampFlag() const fiatOnrampFlag = useFiatOnrampFlag()
if (!account || acks?.user || fiatOnrampFlag === BaseVariant.Control) { if (
!account ||
acks?.user ||
fiatOnrampFlag === BaseVariant.Control ||
locallyDismissed ||
sessionStorage.getItem(ANNOUNCEMENT_DISMISSED) ||
acks.renderCount >= MAX_RENDER_COUNT
) {
return null return null
} }
return ( return (
......
...@@ -23,9 +23,10 @@ export default function TopLevelModals() { ...@@ -23,9 +23,10 @@ export default function TopLevelModals() {
const location = useLocation() const location = useLocation()
const fiatOnrampFlagEnabled = useFiatOnrampFlag() === BaseVariant.Enabled const fiatOnrampFlagEnabled = useFiatOnrampFlag() === BaseVariant.Enabled
const pageShowsNftPromoBanner = const pageShowsNftPromoBanner =
location.pathname.startsWith('/swap') || !fiatOnrampFlagEnabled &&
(location.pathname.startsWith('/swap') ||
location.pathname.startsWith('/tokens') || location.pathname.startsWith('/tokens') ||
location.pathname.startsWith('/pool') location.pathname.startsWith('/pool'))
useAccountRiskCheck(account) useAccountRiskCheck(account)
const accountBlocked = Boolean(blockedAccountModalOpen && account) const accountBlocked = Boolean(blockedAccountModalOpen && account)
return ( return (
......
...@@ -4,6 +4,8 @@ import { useWeb3React } from '@web3-react/core' ...@@ -4,6 +4,8 @@ import { useWeb3React } from '@web3-react/core'
import { L2_CHAIN_IDS } from 'constants/chains' import { L2_CHAIN_IDS } from 'constants/chains'
import { SupportedLocale } from 'constants/locales' import { SupportedLocale } from 'constants/locales'
import { L2_DEADLINE_FROM_NOW } from 'constants/misc' import { L2_DEADLINE_FROM_NOW } from 'constants/misc'
import { BaseVariant } from 'featureFlags'
import { useFiatOnrampFlag } from 'featureFlags/flags/fiatOnramp'
import JSBI from 'jsbi' import JSBI from 'jsbi'
import { useCallback, useMemo } from 'react' import { useCallback, useMemo } from 'react'
import { shallowEqual } from 'react-redux' import { shallowEqual } from 'react-redux'
...@@ -107,8 +109,9 @@ export function useExpertModeManager(): [boolean, () => void] { ...@@ -107,8 +109,9 @@ export function useExpertModeManager(): [boolean, () => void] {
} }
interface FiatOnrampAcknowledgements { interface FiatOnrampAcknowledgements {
user: boolean renderCount: number
system: boolean system: boolean
user: boolean
} }
export function useFiatOnrampAck(): [ export function useFiatOnrampAck(): [
FiatOnrampAcknowledgements, FiatOnrampAcknowledgements,
...@@ -126,7 +129,8 @@ export function useFiatOnrampAck(): [ ...@@ -126,7 +129,8 @@ export function useFiatOnrampAck(): [
} }
export function useHideNFTWelcomeModal(): [boolean | undefined, () => void] { export function useHideNFTWelcomeModal(): [boolean | undefined, () => void] {
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const hideNFTWelcomeModal = useAppSelector((state) => state.user.hideNFTWelcomeModal) const fiatOnrampFlagEnabled = useFiatOnrampFlag() === BaseVariant.Enabled
const hideNFTWelcomeModal = useAppSelector((state) => state.user.hideNFTWelcomeModal) || fiatOnrampFlagEnabled
const hideModal = useCallback(() => { const hideModal = useCallback(() => {
dispatch(updateHideNFTWelcomeModal({ hideNFTWelcomeModal: true })) dispatch(updateHideNFTWelcomeModal({ hideNFTWelcomeModal: true }))
}, [dispatch]) }, [dispatch])
......
...@@ -9,7 +9,7 @@ import { SerializedPair, SerializedToken } from './types' ...@@ -9,7 +9,7 @@ import { SerializedPair, SerializedToken } from './types'
const currentTimestamp = () => new Date().getTime() const currentTimestamp = () => new Date().getTime()
export interface UserState { export interface UserState {
fiatOnrampAcknowledgments: { user: boolean; system: boolean } fiatOnrampAcknowledgments: { renderCount: number; system: boolean; user: boolean }
selectedWallet?: ConnectionType selectedWallet?: ConnectionType
...@@ -63,7 +63,7 @@ function pairKey(token0Address: string, token1Address: string) { ...@@ -63,7 +63,7 @@ function pairKey(token0Address: string, token1Address: string) {
} }
export const initialState: UserState = { export const initialState: UserState = {
fiatOnrampAcknowledgments: { user: false, system: false }, fiatOnrampAcknowledgments: { renderCount: 0, system: false, user: false },
selectedWallet: undefined, selectedWallet: undefined,
matchesDarkMode: false, matchesDarkMode: false,
userDarkMode: null, userDarkMode: null,
...@@ -87,7 +87,10 @@ const userSlice = createSlice({ ...@@ -87,7 +87,10 @@ const userSlice = createSlice({
name: 'user', name: 'user',
initialState, initialState,
reducers: { reducers: {
updateFiatOnrampAcknowledgments(state, { payload }: { payload: { user?: boolean; system?: boolean } }) { updateFiatOnrampAcknowledgments(
state,
{ payload }: { payload: Partial<{ renderCount: number; user: boolean; system: boolean }> }
) {
state.fiatOnrampAcknowledgments = { ...state.fiatOnrampAcknowledgments, ...payload } state.fiatOnrampAcknowledgments = { ...state.fiatOnrampAcknowledgments, ...payload }
}, },
updateSelectedWallet(state, { payload: { wallet } }) { updateSelectedWallet(state, { payload: { wallet } }) {
......
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