Skip to content
This repository was archived by the owner on Jun 24, 2022. It is now read-only.

[Affiliate] Close all affiliate banners after a successful trade #1748

Merged
merged 13 commits into from
Nov 5, 2021
14 changes: 13 additions & 1 deletion src/custom/components/AffiliateStatusCheck/index.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import React, { useCallback, useEffect, useState } from 'react'
import { useHistory } from 'react-router-dom'
import { useActiveWeb3React } from 'hooks/web3'
import { useOrders } from 'state/orders/hooks'
import NotificationBanner from 'components/NotificationBanner'
import { useReferralAddress, useUploadReferralDocAndSetDataHash } from 'state/affiliate/hooks'
import { useAppDispatch } from 'state/hooks'
import { hasTrades } from 'utils/trade'
import { retry, RetryOptions } from 'utils/retry'
import { isOrderRecent } from 'utils/trade'
import { SupportedChainId } from 'constants/chains'

type AffiliateStatus = 'NOT_CONNECTED' | 'OWN_LINK' | 'ALREADY_TRADED' | 'ACTIVE' | 'UNSUPPORTED_NETWORK'
Expand All @@ -22,11 +24,15 @@ const STATUS_TO_MESSAGE_MAPPING: Record<AffiliateStatus, string> = {

const DEFAULT_RETRY_OPTIONS: RetryOptions = { n: 3, minWait: 1000, maxWait: 3000 }

// One minute in MS (milliseconds not Microsoft)
const MINUTE_MS = 60_0000

export default function AffiliateStatusCheck() {
const appDispatch = useAppDispatch()
const uploadReferralDocAndSetDataHash = useUploadReferralDocAndSetDataHash()
const history = useHistory()
const { account, chainId } = useActiveWeb3React()
const allNonEmptyOrders = useOrders({ chainId })
const referralAddress = useReferralAddress()
const [affiliateState, setAffiliateState] = useState<AffiliateStatus | null>()
const [error, setError] = useState('')
Expand Down Expand Up @@ -85,8 +91,14 @@ export default function AffiliateStatusCheck() {
return
}

const hasJustTraded = allNonEmptyOrders.filter((order) => isOrderRecent(order, MINUTE_MS)).length >= 1
if (hasJustTraded) {
setAffiliateState(null)
return
}

uploadDataDoc()
}, [referralAddress, account, history, chainId, appDispatch, uploadDataDoc])
}, [referralAddress, account, history, chainId, appDispatch, uploadDataDoc, allNonEmptyOrders])

if (error) {
return (
Expand Down
12 changes: 1 addition & 11 deletions src/custom/hooks/useRecentActivity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { useActiveWeb3React } from 'hooks/web3'
import { Order, OrderStatus } from 'state/orders/actions'
import { TransactionDetails } from 'state/transactions/reducer'
import { SupportedChainId as ChainId } from 'constants/chains'
import { isOrderRecent } from 'utils/trade'

export type TransactionAndOrder =
| (Order & { addedTime: number })
Expand All @@ -31,17 +32,6 @@ enum TxReceiptStatus {
CONFIRMED,
}

// One FULL day in MS (milliseconds not Microsoft)
const DAY_MS = 86_400_000

/**
* Returns whether a order happened in the last day (86400 seconds * 1000 milliseconds / second)
* @param order
*/
function isOrderRecent(order: Order): boolean {
return Date.now() - Date.parse(order.creationTime) < DAY_MS
}

/**
* useRecentActivity
* @description returns all RECENT (last day) transaction and orders in 2 arrays: pending and confirmed
Expand Down
13 changes: 12 additions & 1 deletion src/custom/utils/trade.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { CurrencyAmount, Currency, Token } from '@uniswap/sdk-core'
import { isAddress, shortenAddress } from 'utils'
import { OrderStatus, OrderKind, ChangeOrderStatusParams } from 'state/orders/actions'
import { OrderStatus, OrderKind, ChangeOrderStatusParams, Order } from 'state/orders/actions'
import { AddUnserialisedPendingOrderParams } from 'state/orders/hooks'

import { signOrder, signOrderCancellation, UnsignedOrder } from 'utils/signatures'
Expand Down Expand Up @@ -156,3 +156,14 @@ export async function hasTrades(chainId: ChainId, address: string): Promise<bool

return trades.length > 0
}

// One FULL day in MS (milliseconds not Microsoft)
const DAY_MS = 86_400_000

/**
* Returns whether a order happened in the last day (86400 seconds * 1000 milliseconds / second)
* @param order
*/
export function isOrderRecent(order: Order, time: number = DAY_MS): boolean {
return Date.now() - Date.parse(order.creationTime) < time
}