> For the complete documentation index, see [llms.txt](https://aleo-hooks.gitbook.io/aleo-hooks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aleo-hooks.gitbook.io/aleo-hooks/usewait.md).

# useWait

Wait until Aleo transaction will be finalized or fail

Possible transaction statuses:

```typescript
export enum TransactionStatus {
    DownloadingProverFiles = 'Downloading Prover Files',
    GeneratingTransaction = 'Generating Transaction',
    Broadcasting = 'Broadcasting',
    Failed = 'Failed',
    Completed = 'Completed',
    Finalized = 'Finalized',
}
```

Return value:

```typescript
{
    status: TransactionStatus,
    error: Error,
    wait: (
        transactionId: string, 
        onTransactionStatusChange?: (txStatus: TransactionStatus | null, stopPooling: () => void) => void
    ) => Promise<void>
}
```

Example (live demo <https://aleo-react-boilerplate.vercel.app/useWait>):

```tsx
import { FC, useCallback, useState } from 'react'
import { Button } from '../button'
import { Input } from '../input'
import { cn } from '@bem-react/classname'
import { useConnect, useWait } from 'aleo-hooks'

import './wait.scss'

const CnWait = cn('wait')

export const Wait: FC = () => {
    const { wait, status } = useWait({})
    const { connected } = useConnect()

    const [transactionId, setTransactionId] = useState('')

    const transactionIdChangeHandler = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
        setTransactionId(e.target.value)
    }, [])

    const submit = useCallback(() => {
        wait(transactionId)
    }, [wait, transactionId])

    return (
        <div className={CnWait()}>
            <h2>Wait for transaction</h2>

            <div className={CnWait('values')}>
                <div className={CnWait('valuesItem')}>Transaction status: {status}</div>
            </div>

            <div>
                <Input
                    value={transactionId}
                    onChange={transactionIdChangeHandler}
                    placeholder={'Enter transaction ID'}
                />

                <Button disabled={!connected} onClick={submit}>
                    {!connected ? 'Connect wallet first' : 'Wait for transaction'}
                </Button>
            </div>
        </div>
    )
}
```
