cyb/src/containers/governance/CreateProposal/CreateProposalActionBar.tsx

import { coin } from '@cosmjs/stargate';
import { TextProposal } from '@cybercongress/cyber-ts/cosmos/gov/v1beta1/gov';
import { useMutation } from '@tanstack/react-query';
import { useNavigate } from 'react-router-dom';
import { ActionBar } from 'src/components';
import { useSigningClient } from 'src/contexts/signerClient';
import useAdviserTexts from 'src/features/adviser/useAdviserTexts';
import useCurrentAddress from 'src/hooks/useCurrentAddress';
import useWaitForTransaction from 'src/hooks/useWaitForTransaction';
import { routes } from 'src/routes';

type Props = {
  proposal: TextProposal;
};

function CreateProposalActionBar({ proposal }: Props) {
  const { signingClient, signerReady } = useSigningClient();
  const currentAddress = useCurrentAddress();
  const navigate = useNavigate();

  console.log(proposal);

  // temp
  const proposalText = proposal?.description;

  const { data, isLoading, error, mutate } = useMutation({
    mutationKey: ['submitProposal'],
    mutationFn: async () => {
      return signingClient!.submitProposal(
        currentAddress,
        {
          typeUrl: '/cosmos.gov.v1beta1.TextProposal',

          value: {
            title: proposal.title,
            description: proposal.description,
          },
        },
        [coin(100000000, 'boot')],
        'auto'
      );
    },
    options: {
      skip: !signerReady,
    },
  });

  const waitForTransaction = useWaitForTransaction({
    hash: data?.transactionHash,
    onSuccess: () => {
      setTimeout(() => {
        navigate(routes.senate.path);
      }, 2000);
    },
  });

  useAdviserTexts({
    isLoading: isLoading || waitForTransaction.isLoading,
    error: error?.message || waitForTransaction.error?.message,
    successText: waitForTransaction.data ? 'Proposal submitted' : undefined,
  });

  console.log(data);
  console.log(waitForTransaction.data);

  return (
    <ActionBar
      button={{
        text: 'Submit',
        onClick: mutate,
        disabled: !signerReady || isLoading || !proposalText || !proposal.title,
      }}
    />
  );
}

export default CreateProposalActionBar;

Neighbours