From 65ebdd7dde44ff7d26df2a048303d7713518c837 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Thu, 15 Jun 2023 10:10:33 +0100 Subject: [PATCH] Extracted the Input into its own component --- src/components/Low/Input.tsx | 61 +++++++++++++++++++++++++++++++ src/components/Navbar.tsx | 2 +- src/pages/login.tsx | 31 ++-------------- src/pages/register.tsx | 71 ++++++------------------------------ 4 files changed, 76 insertions(+), 89 deletions(-) create mode 100644 src/components/Low/Input.tsx diff --git a/src/components/Low/Input.tsx b/src/components/Low/Input.tsx new file mode 100644 index 00000000..3ea53ddf --- /dev/null +++ b/src/components/Low/Input.tsx @@ -0,0 +1,61 @@ +import {useState} from "react"; + +interface Props { + type: "email" | "text" | "password"; + required?: boolean; + label?: string; + placeholder?: string; + name: string; + onChange: (value: string) => void; +} + +export default function Input({type, label, placeholder, name, required = false, onChange}: Props) { + const [showPassword, setShowPassword] = useState(false); + + if (type === "password") { + return ( +
+ {label && ( + + )} +
+ onChange(e.target.value)} + placeholder={placeholder} + className="w-full px-8 py-6 text-sm font-normal placeholder:text-mti-gray-cool bg-white rounded-full border border-mti-gray-platinum focus:outline-none" + /> +

setShowPassword((prev) => !prev)} + className="text-xs cursor-pointer absolute bottom-1/2 translate-y-1/2 right-8"> + {showPassword ? "Hide" : "Show"} +

+
+
+ ); + } + + return ( +
+ {label && ( + + )} + onChange(e.target.value)} + placeholder={placeholder} + className="px-8 py-6 text-sm font-normal placeholder:text-mti-gray-cool bg-white rounded-full border border-mti-gray-platinum focus:outline-none" + required={required} + /> +
+ ); +} diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 2b7d76a6..09d5aa8a 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -11,7 +11,7 @@ export default function Navbar({user}: Props) {

eCrop

- +
{user.name} {user.name} diff --git a/src/pages/login.tsx b/src/pages/login.tsx index e93569fd..65410776 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -9,6 +9,7 @@ import {Divider} from "primereact/divider"; import Button from "@/components/Low/Button"; import {BsArrowRepeat} from "react-icons/bs"; import Link from "next/link"; +import Input from "@/components/Low/Input"; export default function Login() { const [email, setEmail] = useState(""); @@ -62,34 +63,8 @@ export default function Login() {
-
- - setEmail(e.target.value)} - placeholder="Enter email address" - className="px-8 py-6 text-sm font-normal placeholder:text-mti-gray-cool bg-white rounded-full shadow-xl shadow-mti-gray-anti-flash focus:outline-none" - /> -
-
- -
- setPassword(e.target.value)} - placeholder="Password" - className="w-full px-8 py-6 text-sm font-normal placeholder:text-mti-gray-cool bg-white rounded-full shadow-xl shadow-mti-gray-anti-flash focus:outline-none" - /> -

setShowPassword((prev) => !prev)} - className="text-xs cursor-pointer absolute bottom-1/2 translate-y-1/2 right-8"> - {showPassword ? "Hide" : "Show"} -

-
-
+ setEmail(e)} placeholder="Enter email address" /> + setPassword(e)} placeholder="Password" />