diff --git a/app/components/Header.tsx b/app/components/Header.tsx new file mode 100644 index 0000000..fb377d6 --- /dev/null +++ b/app/components/Header.tsx @@ -0,0 +1,83 @@ +import { useState, Dispatch, SetStateAction } from "react"; +import { MagnifyingGlassIcon, XMarkIcon } from "@heroicons/react/24/outline"; + +interface IHeaderProps { + name: string; + setName: Dispatch>; + setSearchQuery: Dispatch>; +} + +const Header = ({ name, setName, setSearchQuery }: IHeaderProps) => { + const [mouseHover, setMouseHover] = useState(false); + return ( +
+ +
+ { + setName((prevName) => { + return event.target.value; + }); + }} + /> +
+ {name === "" ? ( + + ) : ( + setMouseHover(true)} + onMouseLeave={() => setMouseHover(false)} + onClick={() => { + setName(""); + setSearchQuery(""); + }} + /> + )} +
+
+
+ ); +}; + +const h1Class = [ + "font-bold", + "text-center", + "my-auto", + "text-2xl", + "md:text-5xl", +].join(" "); + +const searchBarClass = [ + "text-neutral-800", + "rounded-xl", + "my-6", + "md:my-auto", + "px-0", + "md:px-4", + "h-10", + "sm:h-12", + "text-xl", + "md:text-3xl", + "text-center", + "bg-[#F9F4DA]", + "text-[#231F20]", + "shadow-[10px_10px_#231F20,11px_11px_#F9F4DA]", + "border-2", + "border-[#F9F4DA]", + "text-shadow-[-1px_-1px_0_#666,1px_-1px_0_#666,-1px_1px_0_#666,1px_1px_0_#666", + "focus:ring-indigo-500", +].join(" "); + +export default Header; diff --git a/app/components/PageNavigation.tsx b/app/components/PageNavigation.tsx index cca5b6f..3ac1eb3 100644 --- a/app/components/PageNavigation.tsx +++ b/app/components/PageNavigation.tsx @@ -71,7 +71,7 @@ const PageNavigation = (props: IProps) => { } }} onBlur={() => setTempPageNo(originalPage)} - className="w-12 text-center text-2xl md:text-3xl bg-mainTextColor font-extrabold border-none rounded-md p-1" + className="w-12 text-center border-2 border-solid border-neutral-600 text-2xl md:text-3xl bg-mainTextColor font-extrabold rounded-md p-1" />{" "} of {Number.isNaN(props.lastPageNo) ? ". . ." : props.lastPageNo} diff --git a/app/page.tsx b/app/page.tsx index 8ece5bf..affa14f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,50 +1,18 @@ "use client"; import { useState, useEffect } from "react"; import { CharactersPage } from "./components/CharactersPage"; -import { MagnifyingGlassIcon, XMarkIcon } from "@heroicons/react/24/outline"; import { handleSearch } from "./utils/handleSearch"; +import Header from "./components/Header"; export default function Home() { const [pageNo, setPageNo] = useState(1); const [name, setName] = useState(""); const [searchQuery, setSearchQuery] = useState(""); - const [mouseHover, setMouseHover] = useState(false); - useEffect (() => handleSearch({ name, setSearchQuery, setPageNo }), [name]) + useEffect(() => handleSearch({ name, setSearchQuery, setPageNo }), [name]); return (
-
-

Rick and Morty Wiki

-
- { - setName((prevName) => { - return event.target.value; - }) - }} - /> -
- {name === "" ? ( - - ) : ( - setMouseHover(true)} - onMouseLeave={() => setMouseHover(false)} - onClick={() => { - setName(""); - setSearchQuery(""); - }} - /> - )} -
-
-
- +
{searchQuery === "" && ( )} @@ -59,6 +27,8 @@ export default function Home() { ); } +// tailwind classes + const mainClass = [ "min-h-screen", // "max-w-11/12", @@ -68,32 +38,3 @@ const mainClass = [ "selection:text-orange-500", "my-auto", ].join(" "); - -const h1Class = [ - "font-bold", - "text-center", - "my-auto", - "text-2xl", - "md:text-5xl", -].join(" "); - -const searchBarClass = [ - "text-neutral-800", - "rounded-xl", - "my-6", - "md:my-auto", - "px-0", - "md:px-4", - "h-10", - "sm:h-12", - "text-xl", - "md:text-3xl", - "text-center", - "bg-[#F9F4DA]", - "text-[#231F20]", - "shadow-[10px_10px_#231F20,11px_11px_#F9F4DA]", - "border-2", - "border-[#F9F4DA]", - "text-shadow-[-1px_-1px_0_#666,1px_-1px_0_#666,-1px_1px_0_#666,1px_1px_0_#666", - "focus:ring-indigo-500", -].join(" ");