@crypto-dex-sdk/parachains-amplitude
Version:
Zenlink Parachains Impl for Amplitude
75 lines (65 loc) • 2.11 kB
text/typescript
import type { ParachainId } from '@crypto-dex-sdk/chain'
import type { TransactionRequest } from '@crypto-dex-sdk/polkadot'
import type { Dispatch, SetStateAction } from 'react'
import { useAccount, useApi, useSendTransaction } from '@crypto-dex-sdk/polkadot'
import { useNotifications } from '@crypto-dex-sdk/shared'
import { t } from '@lingui/macro'
import { useCallback, useMemo } from 'react'
interface UseClaimFarmingRewardsReviewParams {
chainId: ParachainId
farmAddress?: string
pid: number
}
type UseClaimFarmingRewardsReview = (params: UseClaimFarmingRewardsReviewParams) => {
isWritePending: boolean
sendTransaction: (() => void) | undefined
farmAddress: string | undefined
}
export const useClaimFarmingRewardsReview: UseClaimFarmingRewardsReview = ({
chainId,
pid,
}) => {
const api = useApi(chainId)
const { account } = useAccount()
const [, { createPendingNotification }] = useNotifications(account?.address)
const prepare = useCallback(
(setRequest: Dispatch<SetStateAction<TransactionRequest | undefined>>) => {
if (!chainId || !api || !account)
return
try {
const args = [pid]
const extrinsic = [api.tx.farming.claim(...args)]
const ts = new Date().getTime()
const notification: TransactionRequest['notification'] = {
type: 'burn',
chainId,
summary: {
pending: t`Claiming Rewards`,
completed: t`Successfully claimed rewards`,
failed: t`Something went wrong when claim rewards`,
},
timestamp: ts,
groupTimestamp: ts,
}
setRequest({
extrinsic,
account,
notification,
})
}
catch (e: unknown) {}
},
[account, api, chainId, pid],
)
const { sendTransaction, isLoading: isWritePending } = useSendTransaction({
chainId,
createPendingNotification,
prepare,
onSuccess: () => {},
})
return useMemo(() => ({
isWritePending,
sendTransaction,
farmAddress: undefined,
}), [isWritePending, sendTransaction])
}