File tree Expand file tree Collapse file tree 3 files changed +18
-26
lines changed
Expand file tree Collapse file tree 3 files changed +18
-26
lines changed Original file line number Diff line number Diff line change 11"use client" ;
22
33import type React from "react" ;
4+ import { useState } from "react" ;
45import Search from "~/components/search/search" ;
56import Table from "~/components/search/table" ;
67
7- export default function SearchPage ( props : {
8+ export default function SearchPage ( {
9+ searchParams,
10+ } : {
811 searchParams ?: {
912 query ?: string ;
1013 page ?: string ;
1114 } ;
1215} ) {
13- const searchParams = props . searchParams ;
14- const query = searchParams ?. query || "" ;
16+ const [ query , setQuery ] = useState < string > ( searchParams ?. query ?? "" ) ;
1517
1618 return (
1719 < div className = "flex min-h-screen justify-center " >
1820 < div className = "w-full" >
1921 < h2 className = "m-5 mb-4 font-bold text-2xl" > ユーザー検索</ h2 >
20- < Search placeholder = "検索" />
22+ < Search placeholder = "検索" setSearchString = { setQuery } />
2123 < Table query = { query } />
2224 </ div >
2325 </ div >
Original file line number Diff line number Diff line change 11"use client" ;
22
3- import { usePathname , useRouter , useSearchParams } from "next/navigation" ;
3+ import { usePathname , useSearchParams } from "next/navigation" ;
44import { MdOutlineSearch } from "react-icons/md" ;
55
6- export default function Search ( { placeholder } : { placeholder : string } ) {
6+ type Props = { placeholder : string ; setSearchString : ( s : string ) => void } ;
7+ export default function Search ( { placeholder, setSearchString } : Props ) {
78 const searchParams = useSearchParams ( ) ;
89 const pathname = usePathname ( ) ;
9- const { replace } = useRouter ( ) ;
1010
1111 function handleSearch ( term : string ) {
12+ setSearchString ( term ) ;
1213 const params = new URLSearchParams ( searchParams ) ;
1314 if ( term ) {
1415 params . set ( "query" , term ) ;
1516 } else {
1617 params . delete ( "query" ) ;
1718 }
18- replace ( `${ pathname } ?${ params . toString ( ) } ` ) ;
19+ const newUrl = `${ pathname } ?${ params . toString ( ) } ` ;
20+ history . replaceState ( undefined , "" , newUrl ) ;
1921 }
2022
2123 return (
Original file line number Diff line number Diff line change 11"use client" ;
2- import type { User } from "common/types" ;
3- import { useEffect , useMemo , useState } from "react" ;
2+ import { useMemo } from "react" ;
43import { useAll , useMyID } from "~/api/user" ;
54import { useModal } from "../common/modal/ModalProvider" ;
65import { HumanListItem } from "../human/humanListItem" ;
@@ -11,27 +10,16 @@ export default function UserTable({ query }: { query: string }) {
1110 state : { data } ,
1211 } = useAll ( ) ;
1312 const { state } = useMyID ( ) ;
14- const [ users , setUsers ] = useState < User [ ] | null > ( null ) ;
15-
16- const filteredData = useMemo ( ( ) => {
13+ const initialData = useMemo ( ( ) => {
1714 return (
1815 data ?. filter ( ( item ) => item . id !== state . data && item . id !== 0 ) ?? null
1916 ) ;
2017 } , [ data , state . data ] ) ;
21-
22- useEffect ( ( ) => {
23- function searchByUserName ( query : string ) {
24- const filteredUsers = filteredData ?. filter ( ( user ) =>
18+ const users = query
19+ ? initialData ?. filter ( ( user ) =>
2520 user . name . toLowerCase ( ) . includes ( query . toLowerCase ( ) ) ,
26- ) ;
27- setUsers ( filteredUsers || null ) ;
28- }
29- if ( ! query ) {
30- setUsers ( filteredData ) ;
31- } else {
32- searchByUserName ( query ) ;
33- }
34- } , [ query , filteredData ] ) ;
21+ )
22+ : initialData ;
3523
3624 return (
3725 < div >
You can’t perform that action at this time.
0 commit comments