Terminando la interfaz - P谩gina "crear evento"

En la parte superior de la p谩gina create-event, importe el connectButton de rainbowkit, useAccount de wagmi y el componente Alert.

import { ConnectButton } from "@rainbow-me/rainbowkit";
import { useAccount } from "wagmi";
import Alert from "../components/Alert";

En la parte superior de CreateEvent, justo debajo de export default function CreateEvent() { configuramos nuestra variable account con useAccount:

const { data: account } = useAccount();

Tambi茅n podemos configurar variables state para realizar un seguimiento de nuestros mensajes de alerta, con el fin de que nuestros usuarios puedan ver si su evento se cre贸 con 茅xito o no. Agregue las siguientes l铆neas justo debajo de la l铆nea useAccount que aparece arriba:

const [success, setSuccess] = useState(null);
const [message, setMessage] = useState(null);
const [loading, setLoading] = useState(null);
const [eventID, setEventID] = useState(null);

En nuestra funci贸n createEvent, justo antes de ejecutar el registro en la consola del "Minting..." y el hash de la transacci贸n, podemos establecer el estado de loading como verdadero. Una vez que la transacci贸n se ha realizado exitosamente, podemos establecer nuestra variable exitosa como verdadera, establecer "cargando" como falso y configurar nuestro mensaje de confirmaci贸n exitosa.

setLoading(true);
console.log("Minting...", txn.hash);
console.log("Minted -- ", txn.hash);
let wait = await txn.wait();
setEventID(wait.events[0].args[0]);
setSuccess(true);
setLoading(false);
setMessage("Your event has been created successfully.");

Si detectamos un error, podemos configurar el mensaje para mostrar el error.

setSuccess(false);
setMessage(`There was an error creating your event: ${error.message}`);
setLoading(false);

As铆 es como su funci贸n createEvent debe verse ahora:

const createEvent = async (cid) => {
  try {
    const memoryContract = connectContract();

    if (memoryContract) {
      let eventDateAndTime = new Date(`${eventDate} ${eventTime}`);
      let eventTimestamp = eventDateAndTime.getTime();
      let eventDataCID = cid;

      const txn = await memoryContract.createNewMemory(
        eventDataCID,
        eventTimestamp,
        sPublic,
        friends,
        { gasLimit: 900000 }
      );
      setLoading(true);
      console.log("Minting...", txn.hash);
      await txn.wait();
      console.log("Minted -- ", txn.hash);
      let wait = await txn.wait();
      setEventID(wait.events[0].args[0]);
      setSuccess(true);
      setLoading(false);
      setMessage("Your event has been created successfully.");
    } else {
      console.log("Error getting contract.");
    }
  } catch (error) {
    console.log(error);
    setSuccess(false);
    setMessage(`There was an error creating your event: ${error.message}`);
    setLoading(false);
  }
};

Ahora podemos configurar el componente Alert para que se muestre en funci贸n del de la operaci贸n y del estado de carga. Podemos agregar esto dentro de la secci贸n.

{
  loading && (
    <Alert
      alertType={"loading"}
      alertBody={"Please wait"}
      triggerAlert={true}
      color={"white"}
    />
  );
}
{
  success && (
    <Alert
      alertType={"success"}
      alertBody={message}
      triggerAlert={true}
      color={"palegreen"}
    />
  );
}
{
  success === false && (
    <Alert
      alertType={"failed"}
      alertBody={message}
      triggerAlert={true}
      color={"palevioletred"}
    />
  );
}

Tambi茅n podemos empaquetar nuestro formulario y encabezado en una declaraci贸n condicional para que no se muestre si el usuario crea un evento exitosamente.

{
  !success && (
    <h1 className="text-3xl tracking-tight font-extrabold text-gray-900 sm:text-4xl md:text-5xl mb-4">
      Create your virtual event
    </h1>
  );
}

Tambi茅n podemos ocultar el formulario si el usuario no ha conectado su billetera.

{
  account && !success && <form>...</form>;
}

Podemos descomentar la secci贸n que le pide al usuario que conecte su billetera, y solo mostrar esto si el usuario a煤n no ha conectado su billetera.

{
  !account && (
    <section className="flex flex-col items-start py-8">
      <p className="mb-4">Please connect your wallet to create events.</p>
      <ConnectButton />
    </section>
  );
}

Si el evento es creado exitosamente, podemos mostrarle al usuario un mensaje de confirmaci贸n y un enlace a la p谩gina de su evento. Podemos agregar esto en la parte inferior de la secci贸n.

{
  success && eventID && (
    <div>
      Success! Please wait a few minutes, then check out your event page{" "}
      <span className="font-bold">
        <Link href={`/event/${eventID}`}>here</Link>
      </span>
    </div>
  );
}

隆Y eso es todo! Pruebe la p谩gina para ver si puede crear correctamente un nuevo evento.

Si encuentra alg煤n error, puede ver una copia completa de esta p谩gina aqu铆: https://github.com/womenbuildweb3/Web3RSVP-frontend/blob/main/pages/create-event.js


Escritoras: Sarah Schwartz, Traductoras: Dami, Brenda, Caro Meneses

Last updated