@@ -28,14 +28,15 @@ const enterRoomRequest = async (params) => {
2828}
2929
3030const RoomList = ( ) => {
31- const [ searchTerm , setSearchTerm ] = useState ( "" )
32- const [ currentPage , setCurrentPage ] = useState ( 1 )
33- const [ rooms , setRooms ] = useState ( [ ] )
34- const [ filteredRooms , setFilteredRooms ] = useState ( [ ] )
35- const [ isModalOpen , setIsModalOpen ] = useState ( false )
36- const [ isFullModalOpen , setIsFullModalOpen ] = useState ( false )
37- const [ isPasswordModalOpen , setIsPasswordModalOpen ] = useState ( false )
38- const [ selectedRoom , setSelectedRoom ] = useState ( null )
31+ const [ searchTerm , setSearchTerm ] = useState ( "" ) ;
32+ const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
33+ const [ rooms , setRooms ] = useState ( [ ] ) ;
34+ const [ filteredRooms , setFilteredRooms ] = useState ( [ ] ) ;
35+ const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
36+ const [ isFullModalOpen , setIsFullModalOpen ] = useState ( false ) ;
37+ const [ isPasswordModalOpen , setIsPasswordModalOpen ] = useState ( false ) ;
38+ const [ selectedRoom , setSelectedRoom ] = useState ( null ) ;
39+ const [ searchOn , setSearchOn ] = useState ( false ) ;
3940 const navigate = useNavigate ( ) ;
4041 const ROOMS_PER_PAGE = 8 // 한 페이지당 8개
4142
@@ -61,18 +62,25 @@ const RoomList = () => {
6162
6263 useEffect ( ( ) => {
6364 if ( data ) {
64- setRooms ( data . rooms )
65- setFilteredRooms ( data . rooms )
65+ setRooms ( data . rooms ) ;
66+ setFilteredRooms ( data . rooms ) ;
6667 }
6768 } , [ data ] )
6869
6970 const handleSearch = ( ) => {
70- // 검색 로직 구현
71- const filtered = rooms . filter ( ( room ) => room . title . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) )
72- setFilteredRooms ( filtered )
73- setCurrentPage ( 1 ) // 검색 시 첫 페이지로 이동
71+ const filtered = rooms . filter ( ( room ) => room . roomName . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ) ;
72+ setFilteredRooms ( filtered ) ;
73+ setCurrentPage ( 1 ) ; // 검색 시 첫 페이지로 이동
74+ setSearchOn ( true ) ;
7475 }
7576
77+ const handleReset = ( ) => {
78+ setSearchTerm ( '' ) ;
79+ setFilteredRooms ( rooms ) ;
80+ setCurrentPage ( 1 ) ; // 검색 시 첫 페이지로 이동
81+ setSearchOn ( false ) ;
82+ } ;
83+
7684 const handleCreateRoom = ( newRoomData ) => {
7785 createRoomMutate ( newRoomData ) ;
7886 setIsModalOpen ( false ) ;
@@ -91,10 +99,6 @@ const RoomList = () => {
9199 enterRoomMutate ( { roomId : room . roomId , password : password } ) ;
92100 }
93101
94- const handlePageChange = ( page ) => {
95- setCurrentPage ( page )
96- }
97-
98102 const handleKeyPress = ( e ) => {
99103 if ( e . key === "Enter" ) {
100104 handleSearch ( )
@@ -117,14 +121,24 @@ const RoomList = () => {
117121 { /* Search Section */ }
118122 < section className = { styles . searchSection } >
119123 < div className = { styles . searchInputGroup } >
120- < input
121- type = "text"
122- className = { styles . searchInput }
123- placeholder = "방 제목을 입력하세요..."
124- value = { searchTerm }
125- onChange = { ( e ) => setSearchTerm ( e . target . value ) }
126- onKeyPress = { handleKeyPress }
127- />
124+ < div className = { styles . searchInputWrapper } >
125+ < input
126+ type = "text"
127+ className = { styles . searchInput }
128+ placeholder = "방 제목을 입력하세요..."
129+ value = { searchTerm }
130+ onChange = { ( e ) => {
131+ setSearchTerm ( e . target . value ) ;
132+ setSearchOn ( false ) ;
133+ } }
134+ onKeyPress = { handleKeyPress }
135+ />
136+ { searchTerm && (
137+ < button className = { styles . clearButton } onClick = { handleReset } >
138+ ✕
139+ </ button >
140+ ) }
141+ </ div >
128142 < button className = { styles . searchButton } onClick = { handleSearch } >
129143 검색
130144 </ button >
@@ -135,7 +149,7 @@ const RoomList = () => {
135149 </ section >
136150
137151 { /* 검색 결과 정보 */ }
138- { searchTerm && (
152+ { searchTerm && searchOn && (
139153 < div className = { styles . searchInfo } >
140154 < p >
141155 "{ searchTerm } " 검색 결과: { filteredRooms . length } 개의 방
0 commit comments