diff --git a/app/FAQ/_components/ScreenQAPage.tsx b/app/FAQ/_components/ScreenQAPage.tsx index 208e671..d104d8d 100644 --- a/app/FAQ/_components/ScreenQAPage.tsx +++ b/app/FAQ/_components/ScreenQAPage.tsx @@ -22,7 +22,7 @@ const ScreenQAPage = () => { {QA_LIST.map((item) => (
diff --git a/app/_components/LoginMethodDrawer.tsx b/app/_components/LoginMethodDrawer.tsx index 223b2ea..4882437 100644 --- a/app/_components/LoginMethodDrawer.tsx +++ b/app/_components/LoginMethodDrawer.tsx @@ -29,7 +29,7 @@ //
// // 다른 로그인 방법 //
diff --git a/app/adminpage/dashboard/_components/AdminDashboard.tsx b/app/adminpage/dashboard/_components/AdminDashboard.tsx index bae76c1..2efdea6 100644 --- a/app/adminpage/dashboard/_components/AdminDashboard.tsx +++ b/app/adminpage/dashboard/_components/AdminDashboard.tsx @@ -24,7 +24,8 @@ export default function AdminDashboard() { } = useAdminOrders(); const { status: socketStatus } = useAdminOrderSocket(); - const orders = ordersData?.data ?? []; + // useAdminOrders가 이미 content 배열만 추출하여 반환하므로 바로 사용 + const orders = ordersData ?? []; // PENDING 주문을 먼저, 나머지는 뒤에 const sortedOrders = [...orders].sort((a, b) => { diff --git a/app/adminpage/dashboard/page.tsx b/app/adminpage/dashboard/page.tsx index fb22f65..9b89800 100644 --- a/app/adminpage/dashboard/page.tsx +++ b/app/adminpage/dashboard/page.tsx @@ -5,6 +5,11 @@ import { } from "@tanstack/react-query"; import { serverApi } from "@/lib/server-api"; import AdminDashboard from "./_components/AdminDashboard"; +import { + AdminOrder, + ApiResponse, + PaginatedResponse, +} from "@/hooks/admin/useAdminOrders"; export default async function AdminDashboardPage() { const queryClient = new QueryClient(); @@ -13,10 +18,25 @@ export default async function AdminDashboardPage() { await queryClient.prefetchQuery({ queryKey: ["adminOrders"], queryFn: async () => { - const res = await serverApi.get({ - path: "/api/v1/admin/payment/requests", - }); - return res.data; + let allOrders: AdminOrder[] = []; + let page = 0; + let hasNext = true; + + while (hasNext) { + const res = await serverApi.get< + ApiResponse> + >({ + path: `/api/v1/admin/payment/requests?page=${page}&size=100&sort=requestedAt,desc`, + }); + const responseData = res.data?.data; + if (!responseData) break; + + allOrders = [...allOrders, ...(responseData.content || [])]; + hasNext = responseData.hasNext; + page += 1; + } + + return allOrders; }, }); diff --git a/app/adminpage/main/_components/MenuCard.tsx b/app/adminpage/main/_components/MenuCard.tsx index ff03963..6ad91c8 100644 --- a/app/adminpage/main/_components/MenuCard.tsx +++ b/app/adminpage/main/_components/MenuCard.tsx @@ -36,7 +36,7 @@ export default function MenuCard({ item }: MenuCardProps) {

{item.title}

- + 준비 중
@@ -70,7 +70,7 @@ export default function MenuCard({ item }: MenuCardProps) {
{item.badge && ( - + {item.badge} diff --git a/app/adminpage/notices/_components/AdminNotices.tsx b/app/adminpage/notices/_components/AdminNotices.tsx index 7e01602..acb8d19 100644 --- a/app/adminpage/notices/_components/AdminNotices.tsx +++ b/app/adminpage/notices/_components/AdminNotices.tsx @@ -165,7 +165,7 @@ function NoticeForm({ placeholder="공지사항 제목을 입력하세요" className="rounded-xl border border-[#2a2d42] bg-[#0f1117] px-4 py-3 text-sm text-white placeholder:text-[#4a4e69] focus:border-[#10b981] focus:outline-none" /> - + {title.length}/200 @@ -396,7 +396,7 @@ export default function AdminNotices() { {notice.title} {status.label} diff --git a/app/adminpage/products/_components/AdminProducts.tsx b/app/adminpage/products/_components/AdminProducts.tsx index 77ef953..6781b1c 100644 --- a/app/adminpage/products/_components/AdminProducts.tsx +++ b/app/adminpage/products/_components/AdminProducts.tsx @@ -174,18 +174,18 @@ export default function AdminProducts() { {/* 상태 배지 */}
{product.isActive ? ( - + 판매 중 ) : ( - + 판매 중지 )} {product.isBundle && ( - + 번들 )} @@ -222,7 +222,7 @@ export default function AdminProducts() {

{formatPrice(product.price)}

-

+

순서: {product.displayOrder}

diff --git a/app/adminpage/stats/_components/AdminStats.tsx b/app/adminpage/stats/_components/AdminStats.tsx index dd692fd..7273e8d 100644 --- a/app/adminpage/stats/_components/AdminStats.tsx +++ b/app/adminpage/stats/_components/AdminStats.tsx @@ -328,7 +328,7 @@ export default function AdminStats() { {/* 중앙 성비 요약 라벨 */}
- + Dominant @@ -429,7 +429,7 @@ export default function AdminStats() {
- + 남성 평균 @@ -437,7 +437,7 @@ export default function AdminStats() {
- + 여성 평균 @@ -462,7 +462,7 @@ export default function AdminStats() {
- + 남성 평균 @@ -470,7 +470,7 @@ export default function AdminStats() {
- + 여성 평균 diff --git a/app/adminpage/users/_components/AdminMembers.tsx b/app/adminpage/users/_components/AdminMembers.tsx index 1837bf6..fddd594 100644 --- a/app/adminpage/users/_components/AdminMembers.tsx +++ b/app/adminpage/users/_components/AdminMembers.tsx @@ -312,7 +312,7 @@ export default function AdminMembers() { {member.nickname}
- 매칭권 + 매칭권 {member.matchingTicketCount}개 @@ -354,7 +354,7 @@ export default function AdminMembers() { height={18} />
- 옵션권 + 옵션권 {member.optionTicketCount}개 @@ -480,7 +480,7 @@ export default function AdminMembers() { height={20} /> 매칭권 - + (보유: {editingMember.matchingTicketCount}개)
@@ -572,7 +572,7 @@ export default function AdminMembers() { height={20} /> 옵션권 - + (보유: {editingMember.optionTicketCount}개)
@@ -670,7 +670,7 @@ export default function AdminMembers() { {/* 실시간 계산결과 미리보기 */}
-
+
최종 수량 변동 예상
diff --git a/app/chat-list/_components/ScreenChatList.tsx b/app/chat-list/_components/ScreenChatList.tsx index 860d7e8..c725e72 100644 --- a/app/chat-list/_components/ScreenChatList.tsx +++ b/app/chat-list/_components/ScreenChatList.tsx @@ -58,7 +58,7 @@ function ChatListRow({ item }: { item: ChatListItem }) { {item.unread && item.unreadCount !== undefined && item.unreadCount > 0 ? ( -
+
{item.unreadCount > 99 ? "99+" : item.unreadCount}
) : ( diff --git a/app/chat/[chatid]/_components/PartnerProfileModal.tsx b/app/chat/[chatid]/_components/PartnerProfileModal.tsx index da1889d..e424479 100644 --- a/app/chat/[chatid]/_components/PartnerProfileModal.tsx +++ b/app/chat/[chatid]/_components/PartnerProfileModal.tsx @@ -63,12 +63,12 @@ const PartnerProfileModal = ({ {/* 카드 + 닫기 버튼 그룹 */}
{/* 모달 컨테이너 (MatchingListCard 스타일 계승) */} -
+
{/* 카드 본체 (내부 내용에 따라 높이 조절, 최대 높이시 스크롤) */}
{/* 헤더 */}
-
+
-
+
diff --git a/app/chat/[chatid]/_components/ScreenChatRoom.tsx b/app/chat/[chatid]/_components/ScreenChatRoom.tsx index 0497bf7..e01fa3d 100644 --- a/app/chat/[chatid]/_components/ScreenChatRoom.tsx +++ b/app/chat/[chatid]/_components/ScreenChatRoom.tsx @@ -87,7 +87,7 @@ const IncomingMessage = ({
{message.text}
-
+
{message.time} {message.readCount === 1 && ( 1 @@ -102,7 +102,7 @@ const IncomingMessage = ({ const OutgoingMessage = ({ message }: { message: ChatMessage }) => { return (
-
+
{message.readCount === 1 && 1} {message.time}
@@ -391,7 +391,7 @@ export default function ScreenChatRoom({ chatId }: ScreenChatRoomProps) {
) : messages.length === 0 ? ( -
+
-
+
{
-

+

내가 생각하는 나의 장점을 골라주세요

@@ -111,7 +111,7 @@ const ScreenExtraInfoDetail = () => { {advantages.map((adv) => (
{adv}
@@ -128,7 +128,7 @@ const ScreenExtraInfoDetail = () => { key={opt.key} type="button" className={cn( - "flex h-[48px] min-w-0 flex-1 flex-col items-center justify-center rounded-[16px] border px-0 transition-colors", + "flex h-12 min-w-0 flex-1 flex-col items-center justify-center rounded-2xl border px-0 transition-colors", contactType === opt.key ? "border-gray-100 bg-[#FFFFFF]" : "border-[#E8E8E8]", diff --git a/app/hobby-select/_components/HobbySearchInput.tsx b/app/hobby-select/_components/HobbySearchInput.tsx index 09525c3..7a9d492 100644 --- a/app/hobby-select/_components/HobbySearchInput.tsx +++ b/app/hobby-select/_components/HobbySearchInput.tsx @@ -19,7 +19,7 @@ const HobbySearchInput = ({ onSearch }: HobbySearchInputProps) => { return (
{ const { refetch, isFetching } = useRequestStatus(); return ( -
+
{/* 커스텀 7도트 로더 영역 */}
@@ -34,7 +34,7 @@ const ChargeRequestWaiting = () => { {/* 텍스트 영역 */}
{/* 타이틀 행 */} -
+
대기중 diff --git a/app/main/_components/FloatingButton.tsx b/app/main/_components/FloatingButton.tsx index c4e4bed..fc3656a 100644 --- a/app/main/_components/FloatingButton.tsx +++ b/app/main/_components/FloatingButton.tsx @@ -74,15 +74,15 @@ const FloatingButton = ({ fixed = false }: FloatingButtonProps) => { className="flex shrink-0 items-center gap-1.5 transition-opacity hover:opacity-70 focus:outline-none" > - + 채팅 {/* 배지 영역을 항상 렌더링하고 너비/스케일/투명도를 동시 트랜지션 처리하여 좌우 흔들림 완벽 제거 */}
@@ -99,7 +99,7 @@ const FloatingButton = ({ fixed = false }: FloatingButtonProps) => { className="flex shrink-0 items-center gap-1.5 transition-opacity hover:opacity-70 focus:outline-none" > - + 마이 diff --git a/app/main/_components/FooterButtonList.tsx b/app/main/_components/FooterButtonList.tsx index e9a95c1..7045b38 100644 --- a/app/main/_components/FooterButtonList.tsx +++ b/app/main/_components/FooterButtonList.tsx @@ -12,7 +12,7 @@ const MatchingButton = () => { background: "linear-gradient(#ffffff, #ffffff) padding-box, linear-gradient(90deg, #E83ABC 0%, #FF775E 100%) border-box", }} - className="flex h-[13.11vh] w-full flex-col items-center justify-center gap-1 rounded-[24px] border border-transparent backdrop-blur-[50px]" + className="flex h-[13.11vh] w-full flex-col items-center justify-center gap-1 rounded-3xl border border-transparent backdrop-blur-[50px]" >
AI 매칭하기 @@ -41,7 +41,7 @@ const SearchMyListButton = () => { background: "radial-gradient(100% 99.65% at 0% -4.11%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.3) 100%)", }} - className="flex h-[56px] flex-1 items-center justify-center rounded-[16px] border-[1.5px] border-white/30 shadow-[0_0_8px_rgba(0,0,0,0.08)] backdrop-blur-[50px]" + className="flex h-14 flex-1 items-center justify-center rounded-2xl border-[1.5px] border-white/30 shadow-[0_0_8px_rgba(0,0,0,0.08)] backdrop-blur-[50px]" >
🔍 @@ -60,7 +60,7 @@ const QAButton = () => { background: "radial-gradient(100% 99.65% at 0% -4.11%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.3) 100%)", }} - className="flex h-[56px] flex-1 items-center justify-center rounded-[16px] border-[1.5px] border-white/30 shadow-[0_0_8px_rgba(0,0,0,0.08)] backdrop-blur-[50px]" + className="flex h-14 flex-1 items-center justify-center rounded-2xl border-[1.5px] border-white/30 shadow-[0_0_8px_rgba(0,0,0,0.08)] backdrop-blur-[50px]" >
📖 diff --git a/app/main/_components/NoContactSection.tsx b/app/main/_components/NoContactSection.tsx index 91061db..72d88b3 100644 --- a/app/main/_components/NoContactSection.tsx +++ b/app/main/_components/NoContactSection.tsx @@ -3,7 +3,7 @@ import React from "react"; const NoContactSection = () => { return ( -
+
아직 매칭된 상대가 없어요. diff --git a/app/main/_components/NoticeSection.tsx b/app/main/_components/NoticeSection.tsx index 960e3c0..9c5c190 100644 --- a/app/main/_components/NoticeSection.tsx +++ b/app/main/_components/NoticeSection.tsx @@ -16,9 +16,7 @@ const NoticeSection = ({ title, detail }: NoticeSectionProps) => { return (
{/* Header: 클릭 시 접힘/펼침 토글 */} @@ -30,9 +28,7 @@ const NoticeSection = ({ title, detail }: NoticeSectionProps) => { >
- - {title} - + {title}
(
{/* 프로필 이미지 (48x48 container, 44x44 image) */} -
+
e.stopPropagation()} >
@@ -290,7 +290,7 @@ const ProfileCard = ({ }; return ( -
+
{/* 카드 본체 */}
{ >
( -
+
{text} @@ -42,7 +42,7 @@ const CardHeader = ({ }) => (
{/* 프로필 이미지 (48x48 container, 44x44 image) */} -
+
e.stopPropagation()} >
@@ -262,7 +262,7 @@ const MatchingListCard = ({ }; return ( -
+
{/* 카드 본체 */}
!prev); }} - className="ml-auto flex items-center gap-1 rounded-full border border-white/20 bg-[linear-gradient(111.41deg,rgba(255,255,255,0.3)_5.28%,rgba(255,255,255,0.5)_101.41%)] px-[6px] py-[2px] backdrop-blur-[50px]" + className="ml-auto flex items-center gap-1 rounded-full border border-white/20 bg-[linear-gradient(111.41deg,rgba(255,255,255,0.3)_5.28%,rgba(255,255,255,0.5)_101.41%)] px-1.5 py-0.5 backdrop-blur-[50px]" > {isExpanded ? "접기" : "펼치기"} diff --git a/app/matching-list/_components/NoMatchingList.tsx b/app/matching-list/_components/NoMatchingList.tsx index 8676b9c..efdbb90 100644 --- a/app/matching-list/_components/NoMatchingList.tsx +++ b/app/matching-list/_components/NoMatchingList.tsx @@ -23,7 +23,7 @@ const NoMatchingList = ({ return (
{/* her image */} -
+
her -
+
{/* 옵션 리스트 */}
{SORT_OPTIONS.map((option) => { @@ -52,12 +52,12 @@ export default function SortDrawer({ key={option.value} type="button" onClick={() => setSelected(option.value)} - className={`flex w-full items-center justify-between rounded-[16px] px-4 py-[14px] transition-colors ${ + className={`flex w-full items-center justify-between rounded-2xl px-4 py-3.5 transition-colors ${ isActive ? "bg-[#F2F2F2]" : "bg-transparent" }`} > @@ -74,9 +74,9 @@ export default function SortDrawer({ diff --git a/app/matching-list/_components/YesMatchingList.tsx b/app/matching-list/_components/YesMatchingList.tsx index 077516b..d679609 100644 --- a/app/matching-list/_components/YesMatchingList.tsx +++ b/app/matching-list/_components/YesMatchingList.tsx @@ -108,7 +108,7 @@ const YesMatchingList = ({ return (
{/* 검색 바 */} -
+
{ const socialLabel = data.socialType === "KAKAO" ? "KakaoTalk" : "Instagram"; return ( -
+
{/* Header Section */}
-
+
{ return (
{/* Top Row: Home & Mail Buttons */} -
+
{/* Home Button */} diff --git a/app/matching/_components/ImportantOptionDrawer.tsx b/app/matching/_components/ImportantOptionDrawer.tsx index 2cd5508..bca34b8 100644 --- a/app/matching/_components/ImportantOptionDrawer.tsx +++ b/app/matching/_components/ImportantOptionDrawer.tsx @@ -208,11 +208,11 @@ export default function ImportantOptionDrawer({
-
+
중요한 옵션 선택 - + 닫기
@@ -233,7 +233,7 @@ export default function ImportantOptionDrawer({ )} > {!selectedOption ? ( -
+
{typingStep >= 1 && ( -
+
= 2 && ( @@ -299,7 +299,7 @@ export default function ImportantOptionDrawer({
- @@ -331,10 +331,10 @@ export default function ImportantOptionDrawer({ }
-
-
-
-
+
+
+
+
diff --git a/app/matching/_components/MatchingAgeOption.tsx b/app/matching/_components/MatchingAgeOption.tsx index bdf5bb0..f6245bc 100644 --- a/app/matching/_components/MatchingAgeOption.tsx +++ b/app/matching/_components/MatchingAgeOption.tsx @@ -89,7 +89,7 @@ export default function MatchingAgeOption({ )} >
@@ -99,10 +99,7 @@ export default function MatchingAgeOption({ !showCheck ? "opacity-100" : "opacity-0", )} > - +
diff --git a/app/matching/_components/MatchingImportantOptionSection.tsx b/app/matching/_components/MatchingImportantOptionSection.tsx index 969ab47..0d76122 100644 --- a/app/matching/_components/MatchingImportantOptionSection.tsx +++ b/app/matching/_components/MatchingImportantOptionSection.tsx @@ -79,7 +79,7 @@ export default function MatchingImportantOptionSection({ )} >
@@ -92,7 +92,7 @@ export default function MatchingImportantOptionSection({ )} >
diff --git a/app/matching/_components/MatchingOptionCard.tsx b/app/matching/_components/MatchingOptionCard.tsx index b26b700..d473a3f 100644 --- a/app/matching/_components/MatchingOptionCard.tsx +++ b/app/matching/_components/MatchingOptionCard.tsx @@ -44,10 +44,10 @@ export default function MatchingOptionCard({
{/* 드래그 핸들 아이콘 (Hamburger 형태) */} -