cyb/src/hooks/contract/useExecuteContractWithWaitAndAdviser.ts

import { Coin } from '@cosmjs/launchpad';
import useWaitForTransaction from 'src/hooks/useWaitForTransaction';
import useAdviserTexts from '../../features/adviser/useAdviserTexts';
import useExecuteContract from './useExecuteContract';

export type Props = {
  contractAddress: string;
  query: any;
  funds?: Coin[] | undefined;
  onSuccess?: (response: any) => void;
};

function useExecuteContractWithWaitAndAdviser({
  contractAddress,
  query,
  funds,
  onSuccess,
  successMessage,
}: Props) {
  const { isLoading, isReady, error, mutate, transactionHash } = useExecuteContract({
    contractAddress,
    query,
    funds,
  });

  const waitForTx = useWaitForTransaction({
    hash: transactionHash,
    onSuccess,
  });

  const e = error || waitForTx.error;
  useAdviserTexts({
    isLoading: isLoading || waitForTx.isLoading,
    loadingText: isLoading
      ? 'Wallet confirmation'
      : waitForTx.isLoading
        ? 'Transaction confirmation'
        : undefined,
    error: e,
    successText: !!waitForTx.data && successMessage,
    txHash: e && transactionHash,
    priority: true,
  });

  return {
    mutate,
    isReady,
    isLoading: isLoading || waitForTx.isLoading,
  };
}

export default useExecuteContractWithWaitAndAdviser;

Neighbours