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

Commit

Permalink
Claim refactor index redux (#2077)
Browse files Browse the repository at this point in the history
* Refactored to use redux instead of context

* Use one state property for claim status instead of multiple

* Remove some left commented-out code
  • Loading branch information
nenadV91 authored Jan 11, 2022
1 parent f92674b commit 224dab3
Show file tree
Hide file tree
Showing 12 changed files with 292 additions and 296 deletions.
27 changes: 14 additions & 13 deletions src/custom/pages/Claim/CanUserClaimMessage.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
import { Trans } from '@lingui/macro'
import { ButtonSecondary } from 'components/Button'
import { ExternalLink } from 'theme'
import useClaimState from './state'
import { IntroDescription } from './styled'
import { ClaimCommonTypes } from './types'
import { useClaimDispatchers, useClaimState } from 'state/claim/hooks'
import { ClaimStatus } from 'state/claim/actions'

type ClaimIntroductionProps = Pick<ClaimCommonTypes, 'hasClaims'> & {
isAirdropOnly: boolean
}

export default function CanUserClaimMessage({ hasClaims, isAirdropOnly }: ClaimIntroductionProps) {
const {
state: { activeClaimAccount, claimAttempting, claimConfirmed },
dispatchers,
} = useClaimState()

const canClaim = !claimAttempting && !claimConfirmed && hasClaims && isAirdropOnly
const { activeClaimAccount, claimStatus } = useClaimState()
const { setActiveClaimAccount } = useClaimDispatchers()

// only show when active claim account
if (!activeClaimAccount) return null
if (!activeClaimAccount || claimStatus !== ClaimStatus.DEFAULT) return null

if (canClaim) {
if (isAirdropOnly && hasClaims) {
return (
<IntroDescription>
<p>
Expand All @@ -33,17 +30,21 @@ export default function CanUserClaimMessage({ hasClaims, isAirdropOnly }: ClaimI
</p>
</IntroDescription>
)
} else {
}

if (!hasClaims) {
return (
<IntroDescription>
<IntroDescription center>
<Trans>
Unfortunately this account is not eligible for any vCOW claims.{' '}
<ButtonSecondary onClick={() => dispatchers?.setActiveClaimAccount('')} padding="0">
Unfortunately this account is not eligible for any vCOW claims. <br />
<ButtonSecondary onClick={() => setActiveClaimAccount('')} padding="0">
Try another account
</ButtonSecondary>{' '}
or <ExternalLink href="https://cow.fi/">read more about vCOW</ExternalLink>
</Trans>
</IntroDescription>
)
}

return null
}
13 changes: 6 additions & 7 deletions src/custom/pages/Claim/ClaimAddress.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,18 @@ import { ButtonSecondary } from 'components/Button'
import Circle from 'assets/images/blue-loader.svg'
import { CustomLightSpinner, TYPE } from 'theme'
import { CheckAddress, InputField, InputFieldTitle, InputErrorText } from './styled'
import useClaimState from './state'
import { ClaimCommonTypes } from './types'
import useENS from 'hooks/useENS'
import { useClaimDispatchers, useClaimState } from 'state/claim/hooks'
import { ClaimStatus } from 'state/claim/actions'

type ClaimAddressProps = Pick<ClaimCommonTypes, 'account'> & {
toggleWalletModal: () => void
}

export default function ClaimAddress({ account, toggleWalletModal }: ClaimAddressProps) {
const {
state: { activeClaimAccount, claimConfirmed, inputAddress },
dispatchers,
} = useClaimState()
const { activeClaimAccount, claimStatus, inputAddress } = useClaimState()
const { setInputAddress } = useClaimDispatchers()

const { loading, address: resolvedAddress } = useENS(inputAddress)

Expand All @@ -30,10 +29,10 @@ export default function ClaimAddress({ account, toggleWalletModal }: ClaimAddres
const input = event.target.value
const withoutSpaces = input.replace(/\s+/g, '')

dispatchers?.setInputAddress(withoutSpaces)
setInputAddress(withoutSpaces)
}

if (activeClaimAccount || claimConfirmed) return null
if (activeClaimAccount || claimStatus === ClaimStatus.CONFIRMED) return null

return (
<CheckAddress>
Expand Down
16 changes: 9 additions & 7 deletions src/custom/pages/Claim/ClaimNav.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { useMemo } from 'react'
import { ButtonSecondary } from 'components/Button'
import { shortenAddress } from 'utils'
import useClaimState from './state'
import { TopNav, ClaimAccount, ClaimAccountButtons } from './styled'
import { ClaimCommonTypes } from './types'
import { useClaimDispatchers, useClaimState } from 'state/claim/hooks'
import { ClaimStatus } from 'state/claim/actions'

// should be updated
const DUMMY_IDENTICON =
Expand All @@ -11,10 +13,10 @@ const DUMMY_IDENTICON =
type ClaimNavProps = Pick<ClaimCommonTypes, 'account' | 'handleChangeAccount'>

export default function ClaimNav({ account, handleChangeAccount }: ClaimNavProps) {
const {
state: { activeClaimAccount, activeClaimAccountENS, claimAttempting },
dispatchers,
} = useClaimState()
const { activeClaimAccount, activeClaimAccountENS, claimStatus } = useClaimState()
const { setActiveClaimAccount } = useClaimDispatchers()

const isAttempting = useMemo(() => claimStatus === ClaimStatus.ATTEMPTING, [claimStatus])

if (!activeClaimAccount) return null

Expand All @@ -28,12 +30,12 @@ export default function ClaimNav({ account, handleChangeAccount }: ClaimNavProps

<ClaimAccountButtons>
{!!account && account !== activeClaimAccount && (
<ButtonSecondary disabled={claimAttempting} onClick={() => dispatchers?.setActiveClaimAccount(account)}>
<ButtonSecondary disabled={isAttempting} onClick={() => setActiveClaimAccount(account)}>
Your claims
</ButtonSecondary>
)}

<ButtonSecondary disabled={claimAttempting} onClick={handleChangeAccount}>
<ButtonSecondary disabled={isAttempting} onClick={handleChangeAccount}>
Change account
</ButtonSecondary>
</ClaimAccountButtons>
Expand Down
9 changes: 4 additions & 5 deletions src/custom/pages/Claim/ClaimSummary.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
import { Trans } from '@lingui/macro'
import CowProtocolLogo from 'components/CowProtocolLogo'
import { formatSmart } from 'utils/format'
import useClaimState from './state'
import { useClaimState } from 'state/claim/hooks'
import { ClaimSummary as ClaimSummaryWrapper, ClaimSummaryTitle, ClaimTotal } from './styled'
import { ClaimCommonTypes } from './types'
import { ClaimStatus } from 'state/claim/actions'

type ClaimSummaryProps = Pick<ClaimCommonTypes, 'hasClaims'> & {
unclaimedAmount: ClaimCommonTypes['tokenCurrencyAmount'] | undefined
}

export default function ClaimSummary({ hasClaims, unclaimedAmount }: ClaimSummaryProps) {
const {
state: { activeClaimAccount, claimAttempting, claimConfirmed, claimSubmitted, isInvestFlowActive },
} = useClaimState()
const { activeClaimAccount, claimStatus, isInvestFlowActive } = useClaimState()

const hasClaimSummary = !claimAttempting && !claimConfirmed && !claimSubmitted && !isInvestFlowActive
const hasClaimSummary = claimStatus === ClaimStatus.DEFAULT && !isInvestFlowActive

if (!hasClaimSummary) return null

Expand Down
10 changes: 4 additions & 6 deletions src/custom/pages/Claim/EligibleBanner.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { Trans } from '@lingui/macro'
import useClaimState from './state'
import { useClaimState } from 'state/claim/hooks'
import { CheckIcon, EligibleBanner as EligibleBannerWrapper } from './styled'
import { ClaimStatus } from 'state/claim/actions'

export default function EligibleBanner({ hasClaims }: { hasClaims: boolean }) {
const {
state: { claimAttempting, claimConfirmed, claimSubmitted, activeClaimAccount, isInvestFlowActive },
} = useClaimState()
const { claimStatus, activeClaimAccount, isInvestFlowActive } = useClaimState()

const isEligible =
!claimAttempting && !claimConfirmed && !claimSubmitted && !!activeClaimAccount && !isInvestFlowActive && hasClaims
const isEligible = claimStatus === ClaimStatus.DEFAULT && !!activeClaimAccount && !isInvestFlowActive && hasClaims

if (!isEligible) return null

Expand Down
Loading

0 comments on commit 224dab3

Please sign in to comment.