Untitled

 avatar
unknown
javascript
2 months ago
2.2 kB
4
Indexable
"use client";
import dynamic from "next/dynamic";
import "react-phone-input-2/lib/style.css";
import { useState } from "react";
import { User } from "@prisma/client";
import { useRouter } from "next/router";

const PhoneInput = dynamic(() => import("react-phone-input-2"), { ssr: false });

interface RegisterButtonProps {
  prop: (event: React.SyntheticEvent) => void;
}

export default function Register() {
  const [phone, setPhone] = useState<string>("");
  const { replace } = useRouter(); // Move useRouter to the top level

  const handleClick = async (e: React.SyntheticEvent) => {
    e.preventDefault();
    try {
      const data: User = await fetch("/api/register", {
        method: "POST",
        body: JSON.stringify({ phoneNumer: phone }),
        headers: {
          "Content-Type": "application/json",
        },
      }).then((res) => res.json());

      console.log("rerendering");
      replace(`/home/${data.userID}`);
    } catch (error) {
      console.error("data wasn't fetched", error);
    }
  };

  return (
    <div className="flex items-center justify-center h-screen bg-background">
      <form
        className="flex flex-col bg-white p-6 rounded shadow-md w-full max-w-sm"
        action=""
      >
        <h1 className="text-xl font-bold mb-4 text-center">WhatsApp Login</h1>

        <PhoneInput
          containerClass="phone-input"
          inputProps={{
            name: "phone",
            required: true,
            autoFocus: true,
          }}
          value={phone}
          onChange={(phone) => setPhone(phone)}
          isValid={(value, country) => {
            if (value.match(/12345/)) {
              return "Invalid value: " + value + ", " + country;
            } else if (value.match(/1234/)) {
              return false;
            } else {
              return true;
            }
          }}
        />

        <RegisterButton prop={handleClick} />
      </form>
    </div>
  );
}

function RegisterButton({ prop }: RegisterButtonProps) {
  return (
    <button
      onClick={prop}
      type="submit"
      className="mt-4 px-4 py-2 w-[90%] text-sm font-medium text-white bg-green-500 rounded-md hover:bg-green-600 pl-2 ml-4"
    >
      Log In
    </button>
  );
}
Leave a Comment