import { Button, Card, Flex, Form, Grid, Icon, IconButton, Stepper, } from '@/components'; import { useTransactionCost } from '@/hooks'; import { FleekERC721 } from '@/integrations'; import { useMemo } from 'react'; import { ethers } from 'ethers'; import { CreateAccessPoint } from './create-ap.context'; import { useAccessPointFormContext } from './create-ap.form.context'; export const CreateAccessPointPreview = () => { const { prevStep } = Stepper.useContext(); const { prepare: { status: prepareStatus, data: prepareData, error: prepareError }, write: { status: writeStatus, write }, transaction: { status: transactionStatus }, } = CreateAccessPoint.useTransactionContext(); const { form: { appName: { value: [appName], }, }, } = useAccessPointFormContext(); const { nfa } = CreateAccessPoint.useContext(); const [cost, currency, isCostLoading] = useTransactionCost( prepareData?.request.value, prepareData?.request.gasLimit ); const message = useMemo(() => { if (isCostLoading || prepareStatus === 'loading') return 'Calculating cost...'; if (prepareError) { const parsedError = FleekERC721.parseError( (prepareError as any).error?.data.data ); if (parsedError.isIdentified) { return parsedError.message; } return 'An error occurred while preparing the transaction'; } const formattedCost = ethers.utils.formatEther(cost).slice(0, 9); return `Creating this Access Point will cost ${formattedCost} ${currency}.`; }, [prepareData, isCostLoading, prepareStatus]); const isLoading = useMemo( () => [prepareStatus, writeStatus, transactionStatus].some( (status) => status === 'loading' ), [prepareStatus, writeStatus, transactionStatus] ); return ( } css={{ mr: '$2' }} onClick={prevStep} /> } rightIcon={ } /> } /> NFA: {nfa.value} {appName} {message} ); };