+ {/* 검색창 스켈레톤 */}
+
+
+ {/* 테이블 헤더 */}
+
+ 이름
+
+ 초대자
+
+
+ 수락 여부
+
+
+
+ {/* 스켈레톤 행들 */}
+ {Array.from({ length: 3 }).map((_, index) => (
+
+ ))}
+
+ )
+ }
+
+ // 에러 상태
+ if (isError) {
+ return (
+
+ {/* 검색창 */}
+
+
+ {/* 테이블 헤더 */}
+
+ 이름
+
+ 초대자
+
+
+ 수락 여부
+
+
+
+ {/* 테이블 바디 */}
+
+ {searchQuery.trim() && filteredInvitations.length === 0 ? (
+ // 검색 결과 없음
+
+
+ `{searchQuery}`에 대한 검색 결과가 없습니다.
+
+
+ ) : (
+ // 검색 결과 표시
+ filteredInvitations.map((invitation) => (
+
+ ))
+ )}
+
+
+ {/* 무한 스크롤 로딩 인디케이터 - 검색 중에는 표시 안함 */}
+ {!searchQuery.trim() && isFetchingNextPage && (
+
+ )}
+
+ {/* 더 이상 데이터가 없을 때 */}
+ {!hasNextPage && allInvitations.length > 0 && (
+
+ )}
+
+ )
+}
diff --git a/src/app/mydashboard/components/InvitedDashboardTable/SearchInput.tsx b/src/app/mydashboard/components/InvitedDashboardTable/SearchInput.tsx
new file mode 100644
index 0000000..fd88d38
--- /dev/null
+++ b/src/app/mydashboard/components/InvitedDashboardTable/SearchInput.tsx
@@ -0,0 +1,36 @@
+'use client'
+
+import Image from 'next/image'
+
+interface SearchInputProps {
+ value: string
+ onChange: (value: string) => void
+ placeholder?: string
+}
+
+export default function SearchInput({
+ value,
+ onChange,
+ placeholder = '검색',
+}: SearchInputProps) {
+ return (
+