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

Commit

Permalink
Fix for selectedAll field (#2226)
Browse files Browse the repository at this point in the history
* Fix for selectedAll field

* Refactored select claim logic
  • Loading branch information
nenadV91 authored Jan 20, 2022
1 parent 9615e5f commit 9367f94
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 52 deletions.
56 changes: 38 additions & 18 deletions src/custom/pages/Claim/ClaimsTable.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ClaimType, useClaimState, useClaimTimeInfo } from 'state/claim/hooks'
import { ClaimType, useClaimDispatchers, useClaimState, useClaimTimeInfo } from 'state/claim/hooks'
import styled from 'styled-components/macro'
import { ClaimTable, ClaimBreakdown, TokenLogo } from 'pages/Claim/styled'
import CowProtocolLogo from 'components/CowProtocolLogo'
Expand All @@ -7,26 +7,27 @@ import { ClaimStatus } from 'state/claim/actions'
import { formatSmart } from 'utils/format'
import { EnhancedUserClaimData } from './types'
import { useAllClaimingTransactionIndices } from 'state/enhancedTransactions/hooks'
import { useUserEnhancedClaimData } from 'state/claim/hooks'

import { CustomLightSpinner } from 'theme'
import Circle from 'assets/images/blue-loader.svg'
import { Countdown } from 'pages/Claim/Countdown'
import { getPaidClaims, getIndexes } from 'state/claim/hooks/utils'
import { useEffect } from 'react'

export type ClaimsTableProps = {
handleSelectAll: (event: React.ChangeEvent<HTMLInputElement>) => void
handleSelect: (event: React.ChangeEvent<HTMLInputElement>, index: number) => void
userClaimData: EnhancedUserClaimData[]
isAirdropOnly: boolean
hasClaims: boolean
}

// TODO: fix in other pr
type ClaimsTableRowProps = EnhancedUserClaimData &
Pick<ClaimsTableProps, 'handleSelect'> & {
selected: number[]
start: number | null
end: number | null
isPendingClaim: boolean
}
type ClaimsTableRowProps = EnhancedUserClaimData & {
handleSelect: (event: React.ChangeEvent<HTMLInputElement>, index: number) => void
selected: number[]
start: number | null
end: number | null
isPendingClaim: boolean
}

const ClaimTr = styled.tr<{ isPending?: boolean }>`
> td {
Expand Down Expand Up @@ -113,18 +114,37 @@ const ClaimsTableRow = ({
)
}

export default function ClaimsTable({
handleSelectAll,
handleSelect,
userClaimData,
isAirdropOnly,
hasClaims,
}: ClaimsTableProps) {
export default function ClaimsTable({ isAirdropOnly, hasClaims }: ClaimsTableProps) {
const { selectedAll, selected, activeClaimAccount, claimStatus, isInvestFlowActive } = useClaimState()

const { setSelectedAll, setSelected } = useClaimDispatchers()

const pendingClaimsSet = useAllClaimingTransactionIndices()

const userClaimData = useUserEnhancedClaimData(activeClaimAccount)

const { deployment: start, investmentDeadline, airdropDeadline } = useClaimTimeInfo()

const handleSelect = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {
const checked = event.target.checked
const output = [...selected]
checked ? output.push(index) : output.splice(output.indexOf(index), 1)
setSelected(output)
}

const handleSelectAll = (event: React.ChangeEvent<HTMLInputElement>) => {
const checked = event.target.checked
const paid = getIndexes(getPaidClaims(userClaimData))
setSelected(checked ? paid : [])
setSelectedAll(checked)
}

const paidClaims = getPaidClaims(userClaimData)

useEffect(() => {
setSelectedAll(selected.length === paidClaims.length)
}, [paidClaims.length, selected.length, setSelectedAll])

const showTable =
!isAirdropOnly && hasClaims && activeClaimAccount && claimStatus === ClaimStatus.DEFAULT && !isInvestFlowActive

Expand Down
29 changes: 2 additions & 27 deletions src/custom/pages/Claim/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useActiveWeb3React } from 'hooks/web3'
import { useUserEnhancedClaimData, useUserUnclaimedAmount, useClaimCallback, ClaimInput } from 'state/claim/hooks'
import { PageWrapper } from 'pages/Claim/styled'
import EligibleBanner from './EligibleBanner'
import { getFreeClaims, hasPaidClaim, getIndexes, getPaidClaims, hasFreeClaim } from 'state/claim/hooks/utils'
import { getFreeClaims, hasPaidClaim, getIndexes, hasFreeClaim } from 'state/claim/hooks/utils'
import { useWalletModalToggle } from 'state/application/hooks'
import Confetti from 'components/Confetti'

Expand Down Expand Up @@ -66,7 +66,6 @@ export default function Claim() {
setIsInvestFlowActive,
// claim row selection
setSelected,
setSelectedAll,
// reset claim ui
resetClaimUi,
} = useClaimDispatchers()
Expand All @@ -92,24 +91,6 @@ export default function Claim() {
// claim callback
const { claimCallback } = useClaimCallback(activeClaimAccount)

const handleSelect = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {
const checked = event.target.checked
const output = [...selected]
checked ? output.push(index) : output.splice(output.indexOf(index), 1)
setSelected(output)

if (!checked) {
setSelectedAll(false)
}
}

const handleSelectAll = (event: React.ChangeEvent<HTMLInputElement>) => {
const checked = event.target.checked
const paid = getIndexes(getPaidClaims(userClaimData))
setSelected(checked ? paid : [])
setSelectedAll(checked)
}

// handle change account
const handleChangeAccount = () => {
setActiveClaimAccount('')
Expand Down Expand Up @@ -240,13 +221,7 @@ export default function Claim() {
{/* Try claiming or inform succesfull claim */}
<ClaimingStatus />
{/* IS Airdrop + investing (advanced) */}
<ClaimsTable
isAirdropOnly={isAirdropOnly}
userClaimData={userClaimData}
handleSelect={handleSelect}
handleSelectAll={handleSelectAll}
hasClaims={hasClaims}
/>
<ClaimsTable isAirdropOnly={isAirdropOnly} hasClaims={hasClaims} />
{/* Investing vCOW flow (advanced) */}
<InvestmentFlow
isAirdropOnly={isAirdropOnly}
Expand Down
7 changes: 0 additions & 7 deletions src/custom/state/claim/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,6 @@ export default createReducer(initialState, (builder) =>
})
.addCase(setSelected, (state, { payload }) => {
state.selected = payload

// toggle selected all if all indiv selected
if (state.selected.length === payload.length) {
state.selectedAll = true
} else {
state.selectedAll = false
}
})
.addCase(setSelectedAll, (state, { payload }) => {
state.selectedAll = payload
Expand Down

0 comments on commit 9367f94

Please sign in to comment.