@@ -27,6 +27,7 @@ interface Dashboard {
2727export default function MyDashboardPage ( ) {
2828 const { user, isInitialized } = useAuthGuard ( ) ;
2929 const [ dashboardList , setDashboardList ] = useState < Dashboard [ ] > ( [ ] ) ;
30+ const [ searchKeyword , setSearchKeyword ] = useState ( "" ) ;
3031 const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
3132 const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
3233 const [ isEditMode , setIsEditMode ] = useState ( false ) ;
@@ -42,12 +43,18 @@ export default function MyDashboardPage() {
4243 useState ( false ) ;
4344 const itemsPerPage = 6 ;
4445
45- const totalPages = Math . ceil ( ( dashboardList . length + 1 ) / itemsPerPage ) ;
46+ const filteredDashboardList = dashboardList . filter ( ( dashboard ) =>
47+ dashboard . title . toLowerCase ( ) . includes ( searchKeyword . toLowerCase ( ) )
48+ ) ;
49+
50+ const totalPages = Math . ceil (
51+ ( filteredDashboardList . length + 1 ) / itemsPerPage
52+ ) ;
4653 const startIndex = ( currentPage - 1 ) * itemsPerPage ;
4754
4855 const currentItems = [
4956 < DashboardAddButton key = "add" onClick = { ( ) => setIsModalOpen ( true ) } /> ,
50- ...dashboardList . map ( ( dashboard ) => (
57+ ...filteredDashboardList . map ( ( dashboard ) => (
5158 < CardButton
5259 key = { dashboard . id }
5360 dashboardId = { dashboard . id }
@@ -112,8 +119,8 @@ export default function MyDashboardPage() {
112119
113120 const handleLeave = ( ) => {
114121 if ( ! selectedDashboardId ) return ;
115- setDashboardList (
116- ( prev ) => prev . filter ( ( d ) => d . id !== selectedDashboardId ) // 이 부분 실제 api로 변경
122+ setDashboardList ( ( prev ) =>
123+ prev . filter ( ( d ) => d . id !== selectedDashboardId )
117124 ) ;
118125 setIsDeleteModalOpen ( false ) ;
119126 setSelectedDashboardId ( null ) ;
@@ -138,10 +145,24 @@ export default function MyDashboardPage() {
138145 onToggleEditMode = { ( ) => setIsEditMode ( ( prev ) => ! prev ) }
139146 />
140147
141- < main className = "flex-1 overflow-auto px-[25px] pt-[40px] pb-10 bg-[#f9f9f9] space-y-10" >
148+ < main className = "flex-1 overflow-auto px-[25px] pt-[40px] pb-10 bg-[#f9f9f9] " >
149+ { /* 검색 입력창 */ }
150+ < section className = "w-full max-w-[1100px] px-4" >
151+ < input
152+ type = "text"
153+ value = { searchKeyword }
154+ onChange = { ( e ) => {
155+ setSearchKeyword ( e . target . value ) ;
156+ setCurrentPage ( 1 ) ;
157+ } }
158+ placeholder = "대시보드 이름을 입력하세요"
159+ className = "w-full max-w-[332px] px-4 py-2 border border-[var(--color-gray3)] border rounded-md outline-none"
160+ />
161+ </ section >
162+
142163 { /* 카드 영역 */ }
143164 < section className = "w-full max-w-[1100px] px-4" >
144- < div className = "flex flex-wrap gap-[16px] justify-start" >
165+ < div className = "flex flex-wrap gap-[16px] justify-start py-2 " >
145166 { currentItems . map ( ( item , index ) => (
146167 < div
147168 key = { index }
@@ -154,7 +175,7 @@ export default function MyDashboardPage() {
154175 </ section >
155176
156177 { totalPages > 1 && (
157- < div className = "w-full max-w-[1100px] flex justify-center items-center " >
178+ < div className = "w-full max-w-[1100px] flex justify-center items-center" >
158179 < PaginationButton
159180 direction = "left"
160181 disabled = { currentPage === 1 }
@@ -189,7 +210,6 @@ export default function MyDashboardPage() {
189210 />
190211 ) }
191212
192- { /*관리 모드에서 삭제 버튼 클릭 시 모달 오픈*/ }
193213 < DeleteModal
194214 isDeleteModalOpen = { isDeleteModalOpen }
195215 setIsDeleteModalOpen = { setIsDeleteModalOpen }
0 commit comments