|
| 1 | +"use client"; |
| 2 | + |
| 3 | +import type React from "react"; |
| 4 | +import { useEffect, useState } from "react"; |
| 5 | +import { useRecommended } from "~/api/user"; |
| 6 | + |
| 7 | +import { useModal } from "~/components/common/modal/ModalProvider"; |
| 8 | +import { HumanListItem } from "~/components/human/humanListItem"; |
| 9 | + |
| 10 | +const SearchPage: React.FC = () => { |
| 11 | + const [searchWord, setSearchWord] = useState(""); |
| 12 | + const { data: recommended } = useRecommended(); |
| 13 | + const { openModal } = useModal(); |
| 14 | + const [users, setUsers] = useState< |
| 15 | + | { |
| 16 | + id: number; |
| 17 | + guid: string; |
| 18 | + name: string; |
| 19 | + gender: string; |
| 20 | + grade: string; |
| 21 | + faculty: string; |
| 22 | + department: string; |
| 23 | + intro: string; |
| 24 | + pictureUrl: string; |
| 25 | + }[] |
| 26 | + | null |
| 27 | + >(null); |
| 28 | + |
| 29 | + useEffect(() => { |
| 30 | + if (recommended) { |
| 31 | + setUsers(recommended); |
| 32 | + } |
| 33 | + }, [recommended]); |
| 34 | + |
| 35 | + function searchByUserName() { |
| 36 | + const filteredUsers = recommended?.filter((user) => |
| 37 | + user.name.toLowerCase().includes(searchWord.toLowerCase()), |
| 38 | + ); |
| 39 | + setUsers(filteredUsers || null); |
| 40 | + } |
| 41 | + |
| 42 | + return ( |
| 43 | + <div className="flex min-h-screen items-center justify-center bg-gray-100"> |
| 44 | + <div className="card w-96 bg-white p-6 shadow-md"> |
| 45 | + <h2 className="mb-4 font-bold text-2xl">Search</h2> |
| 46 | + |
| 47 | + <div className="form-control mb-4"> |
| 48 | + <label htmlFor="searchInput" className="label"> |
| 49 | + <span className="label-text">Enter search term</span> |
| 50 | + </label> |
| 51 | + <input |
| 52 | + type="text" |
| 53 | + value={searchWord} |
| 54 | + onChange={(e) => setSearchWord(e.target.value)} |
| 55 | + placeholder="Type here" |
| 56 | + className="input input-bordered w-full" |
| 57 | + /> |
| 58 | + </div> |
| 59 | + |
| 60 | + <button |
| 61 | + type="button" |
| 62 | + onClick={searchByUserName} |
| 63 | + className="btn btn-primary w-full" |
| 64 | + > |
| 65 | + Search |
| 66 | + </button> |
| 67 | + {users?.map((user) => ( |
| 68 | + <HumanListItem |
| 69 | + key={user.id} |
| 70 | + id={user.id} |
| 71 | + name={user.name} |
| 72 | + pictureUrl={user.pictureUrl} |
| 73 | + onOpen={() => openModal(user)} |
| 74 | + hasDots |
| 75 | + ></HumanListItem> |
| 76 | + ))} |
| 77 | + </div> |
| 78 | + </div> |
| 79 | + ); |
| 80 | +}; |
| 81 | + |
| 82 | +export default SearchPage; |
0 commit comments