From b0bcb4758d8bbc94458c1184fd72b332d0e35579 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sun, 12 Apr 2026 19:21:19 +0900 Subject: [PATCH 01/17] =?UTF-8?q?feat:=20SettlementGroup=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EB=B0=8F=20getSettlementList=20API=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/entities/group/api/group.ts | 13 +++++++++++++ src/entities/group/model/group.type.ts | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/entities/group/api/group.ts b/src/entities/group/api/group.ts index a48ba2c9..dc8ffce1 100644 --- a/src/entities/group/api/group.ts +++ b/src/entities/group/api/group.ts @@ -4,6 +4,9 @@ import { CreateGroupData, Group, GroupHeaderResponse, + SettlementGroup, + SettlementSort, + SettlementStatus, } from '@/entities/group/model/group.type'; export const getGroupList = async (): Promise => { @@ -47,3 +50,13 @@ export const getGroupHeader = ( .get(`/group/header?groupToken=${groupToken}`) .then((res) => res.data); }; + +export const getSettlementList = ( + status: SettlementStatus, + sort: SettlementSort, + limit = 100 +): Promise => { + return axiosInstance + .get('/groups', { params: { status, sort, limit } }) + .then((res) => res.data); +}; diff --git a/src/entities/group/model/group.type.ts b/src/entities/group/model/group.type.ts index 6443f59b..dc9023fc 100644 --- a/src/entities/group/model/group.type.ts +++ b/src/entities/group/model/group.type.ts @@ -28,3 +28,17 @@ export interface GroupHeaderResponse { bank: string; accountNumber: string; } + +export type SettlementStatus = 'ALL' | 'IN_PROGRESS' | 'COMPLETED'; +export type SettlementSort = 'LATEST' | 'OLDEST'; + +export interface SettlementGroup { + groupId: number; + groupCode: string; + name: string; + totalAmount: number; + totalMemberCount: number; + completedMemberCount: number; + createdAt: string; + completedAt: string | null; +} From 3b155aa7a9207f44314a587a8e52a75e466092e6 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sun, 12 Apr 2026 19:21:22 +0900 Subject: [PATCH 02/17] =?UTF-8?q?feat:=20useGetSettlementList=20hook=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/features/home/api/useGetSettlementList.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/features/home/api/useGetSettlementList.ts diff --git a/src/features/home/api/useGetSettlementList.ts b/src/features/home/api/useGetSettlementList.ts new file mode 100644 index 00000000..09072822 --- /dev/null +++ b/src/features/home/api/useGetSettlementList.ts @@ -0,0 +1,12 @@ +import { useQuery } from '@tanstack/react-query'; +import { getSettlementList } from '@/entities/group/api/group'; +import type { SettlementSort, SettlementStatus } from '@/entities/group/model/group.type'; + +const useGetSettlementList = (status: SettlementStatus, sort: SettlementSort) => { + return useQuery({ + queryKey: ['settlementList', status, sort], + queryFn: () => getSettlementList(status, sort), + }); +}; + +export default useGetSettlementList; From fc1c4ba003343e6f5a6c33d4f1f890f2d7246411 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sun, 12 Apr 2026 19:21:26 +0900 Subject: [PATCH 03/17] =?UTF-8?q?feat:=20=ED=99=88=20=EC=A0=95=EC=82=B0=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20API=20=EC=97=B0=EA=B2=B0=20=EB=B0=8F=20moc?= =?UTF-8?q?k=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/pages/home/ui/HomePageSection/index.tsx | 62 ++++++--------------- 1 file changed, 17 insertions(+), 45 deletions(-) diff --git a/src/pages/home/ui/HomePageSection/index.tsx b/src/pages/home/ui/HomePageSection/index.tsx index 3f06eb87..e5832c13 100644 --- a/src/pages/home/ui/HomePageSection/index.tsx +++ b/src/pages/home/ui/HomePageSection/index.tsx @@ -9,6 +9,10 @@ import { useState } from 'react'; import CoinImg from '@/shared/assets/pngs/CoinImg.png'; import LinkMain from '@/shared/assets/pngs/link_main.png'; import CardMain from '@/shared/assets/pngs/card_main.png'; +import { format } from 'date-fns'; +import { ko } from 'date-fns/locale/ko'; +import useGetSettlementList from '@/features/home/api/useGetSettlementList'; +import type { SettlementStatus } from '@/entities/group/model/group.type'; import Flex from '@/shared/ui/Flex'; import Button from '@/shared/ui/Button'; @@ -17,38 +21,7 @@ import Chip from '@/shared/ui/Chip'; import * as S from './index.style'; import HomeExpenseItem from '../HomeExpenseItem'; -type SettlementType = 'IN_PROGRESS' | 'COMPLETED'; - -interface HomeExpenseItemType { - date: string; - groupName: string; - totalAmount: number; - paidMember: number; - totalMember: number; - id: number; -} -/** - * @Todo 진행중인 정산 내역 조회 API 함수 호출 - * 우선 mock data로 대체 - * */ -const settlementListMock: HomeExpenseItemType[] = [ - { - id: 1, - date: '2026년 2월 22일', - groupName: 'DND 데모데이', - totalAmount: 120000, - paidMember: 3, - totalMember: 6, - }, - { - id: 2, - date: '2026년 1월 14일', - groupName: 'DND 7조 첫모임', - totalAmount: 150000, - paidMember: 5, - totalMember: 6, - }, -]; +type SettlementType = SettlementStatus; export function MainHeader() { const theme = useTheme(); @@ -145,9 +118,9 @@ export function SettlementList() { setSortToggle(!sortToggle); }; - const settlementList = sortToggle - ? [...settlementListMock].reverse() - : settlementListMock; + const sort = sortToggle ? 'OLDEST' : 'LATEST'; + const { data } = useGetSettlementList(settlementType, sort); + const settlementList = data ?? []; return ( @@ -187,21 +160,20 @@ export function SettlementList() { /> - {settlementList.length > 0 && settlementType === 'IN_PROGRESS' && ( + {settlementList.length > 0 ? ( - {settlementList.map((data) => ( + {settlementList.map((item) => ( ))} - )} - {settlementType === 'COMPLETED' && ( + ) : ( Date: Sun, 12 Apr 2026 19:29:38 +0900 Subject: [PATCH 04/17] =?UTF-8?q?feat:=20=EC=9E=85=EA=B8=88=20=EC=8A=B9?= =?UTF-8?q?=EC=9D=B8/=EA=B1=B0=EC=A0=88=20API=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EB=B0=8F=20=ED=83=80=EC=9E=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/entities/payment/api/payment.ts | 8 +++++++- src/entities/payment/model/payment.type.ts | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/entities/payment/api/payment.ts b/src/entities/payment/api/payment.ts index a137f2f2..4a1a5b19 100644 --- a/src/entities/payment/api/payment.ts +++ b/src/entities/payment/api/payment.ts @@ -1,11 +1,17 @@ import axiosInstance from '@/shared/api/axios'; -import { PaymentList } from '@/entities/payment/model/payment.type'; +import { PaymentActionResult, PaymentList } from '@/entities/payment/model/payment.type'; const payment = { getAll: (): Promise => // TODO: 모의 데이터 제거 후 실제 API 연동 시 삭제 useMock: true 옵션 제거 // axiosInstance.get('/payments', { useMock: true }).then((res) => res.data), axiosInstance.get('/payments').then((res) => res.data), + + approve: (paymentRequestId: number): Promise => + axiosInstance.patch(`/payments/${paymentRequestId}/approve`).then((res) => res.data), + + reject: (paymentRequestId: number): Promise => + axiosInstance.patch(`/payments/${paymentRequestId}/reject`).then((res) => res.data), }; export default payment; diff --git a/src/entities/payment/model/payment.type.ts b/src/entities/payment/model/payment.type.ts index b96f7b0d..96f85c35 100644 --- a/src/entities/payment/model/payment.type.ts +++ b/src/entities/payment/model/payment.type.ts @@ -10,3 +10,15 @@ export interface PaymentRequest { export interface PaymentList { paymentRequests: PaymentRequest[]; } + +export type PaymentStatus = 'APPROVED' | 'REJECTED'; + +export interface PaymentActionResult { + id: number; + settlementId: number; + requestMemberId: number; + targetUserId: number; + requestedAt: string; + processedAt: string; + status: PaymentStatus; +} From ce17f2df50338e04eba58ef38cdd61b412fdda62 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sun, 12 Apr 2026 19:29:41 +0900 Subject: [PATCH 05/17] =?UTF-8?q?feat:=20useApprovePayment,=20useRejectPay?= =?UTF-8?q?ment=20hook=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../payment-management/api/useApprovePayment.ts | 14 ++++++++++++++ .../payment-management/api/useRejectPayment.ts | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/features/payment-management/api/useApprovePayment.ts create mode 100644 src/features/payment-management/api/useRejectPayment.ts diff --git a/src/features/payment-management/api/useApprovePayment.ts b/src/features/payment-management/api/useApprovePayment.ts new file mode 100644 index 00000000..5c8c98eb --- /dev/null +++ b/src/features/payment-management/api/useApprovePayment.ts @@ -0,0 +1,14 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import payment from '@/entities/payment/api/payment'; + +const useApprovePayment = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (paymentRequestId: number) => payment.approve(paymentRequestId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['payments'] }); + }, + }); +}; + +export default useApprovePayment; diff --git a/src/features/payment-management/api/useRejectPayment.ts b/src/features/payment-management/api/useRejectPayment.ts new file mode 100644 index 00000000..3b2d91c5 --- /dev/null +++ b/src/features/payment-management/api/useRejectPayment.ts @@ -0,0 +1,14 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import payment from '@/entities/payment/api/payment'; + +const useRejectPayment = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (paymentRequestId: number) => payment.reject(paymentRequestId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['payments'] }); + }, + }); +}; + +export default useRejectPayment; From f609888c82397c586a7c61164f0d1a9a3b142679 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sun, 12 Apr 2026 19:29:43 +0900 Subject: [PATCH 06/17] =?UTF-8?q?feat:=20=EC=9E=85=EA=B8=88=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=8A=B9=EC=9D=B8/?= =?UTF-8?q?=EA=B1=B0=EC=A0=88=20API=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../paymentManagement/PaymentManagementPage.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pages/paymentManagement/PaymentManagementPage.tsx b/src/pages/paymentManagement/PaymentManagementPage.tsx index d7e677be..a9446547 100644 --- a/src/pages/paymentManagement/PaymentManagementPage.tsx +++ b/src/pages/paymentManagement/PaymentManagementPage.tsx @@ -1,6 +1,8 @@ import { useMemo } from 'react'; import { ArrowLeft } from '@/shared/assets/svgs/icon'; import useGetPayments from '@/features/payment-management/api/useGetPayments'; +import useApprovePayment from '@/features/payment-management/api/useApprovePayment'; +import useRejectPayment from '@/features/payment-management/api/useRejectPayment'; import { groupPaymentRequestsByDate } from '@/features/payment-management/lib/groupPaymentRequestsBySection'; import PaymentAlert from '@/features/payment-management/ui/PaymentAlert'; import Header from '@/shared/ui/Header'; @@ -76,12 +78,15 @@ function PaymentManagementPage() { ); } - const handleReject = (_payment: PaymentRequest) => { - // TODO: 입금 거절 API 연동 + const { mutate: approvePayment } = useApprovePayment(); + const { mutate: rejectPayment } = useRejectPayment(); + + const handleReject = (payment: PaymentRequest) => { + rejectPayment(payment.paymentRequestId); }; - const handleConfirm = (_payment: PaymentRequest) => { - // TODO: 입금 확인 API 연동 + const handleConfirm = (payment: PaymentRequest) => { + approvePayment(payment.paymentRequestId); }; return ( From c80da53bd5ce51364fdf6c09d301edd1f4980d2a Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sun, 12 Apr 2026 21:26:07 +0900 Subject: [PATCH 07/17] =?UTF-8?q?chore:=20prettier=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=EC=95=88=EB=90=9C=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/home/api/useGetSettlementList.ts | 10 ++++++++-- src/pages/home/ui/HomePageSection/index.tsx | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/features/home/api/useGetSettlementList.ts b/src/features/home/api/useGetSettlementList.ts index 09072822..f6f112c9 100644 --- a/src/features/home/api/useGetSettlementList.ts +++ b/src/features/home/api/useGetSettlementList.ts @@ -1,8 +1,14 @@ import { useQuery } from '@tanstack/react-query'; import { getSettlementList } from '@/entities/group/api/group'; -import type { SettlementSort, SettlementStatus } from '@/entities/group/model/group.type'; +import type { + SettlementSort, + SettlementStatus, +} from '@/entities/group/model/group.type'; -const useGetSettlementList = (status: SettlementStatus, sort: SettlementSort) => { +const useGetSettlementList = ( + status: SettlementStatus, + sort: SettlementSort +) => { return useQuery({ queryKey: ['settlementList', status, sort], queryFn: () => getSettlementList(status, sort), diff --git a/src/pages/home/ui/HomePageSection/index.tsx b/src/pages/home/ui/HomePageSection/index.tsx index e5832c13..6658e5f8 100644 --- a/src/pages/home/ui/HomePageSection/index.tsx +++ b/src/pages/home/ui/HomePageSection/index.tsx @@ -165,7 +165,9 @@ export function SettlementList() { {settlementList.map((item) => ( Date: Sun, 12 Apr 2026 21:31:22 +0900 Subject: [PATCH 08/17] =?UTF-8?q?refactor:=20sortToggle=20boolean=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EB=A5=BC=20SettlementSort=20=EB=A6=AC?= =?UTF-8?q?=ED=84=B0=EB=9F=B4=20=ED=83=80=EC=9E=85=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/pages/home/ui/HomePageSection/index.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/pages/home/ui/HomePageSection/index.tsx b/src/pages/home/ui/HomePageSection/index.tsx index 6658e5f8..01267783 100644 --- a/src/pages/home/ui/HomePageSection/index.tsx +++ b/src/pages/home/ui/HomePageSection/index.tsx @@ -12,7 +12,7 @@ import CardMain from '@/shared/assets/pngs/card_main.png'; import { format } from 'date-fns'; import { ko } from 'date-fns/locale/ko'; import useGetSettlementList from '@/features/home/api/useGetSettlementList'; -import type { SettlementStatus } from '@/entities/group/model/group.type'; +import type { SettlementSort, SettlementStatus } from '@/entities/group/model/group.type'; import Flex from '@/shared/ui/Flex'; import Button from '@/shared/ui/Button'; @@ -104,7 +104,7 @@ export function SettlementBanner() { export function SettlementList() { const [settlementType, setSettlementType] = useState('IN_PROGRESS'); - const [sortToggle, setSortToggle] = useState(false); + const [sort, setSort] = useState('LATEST'); const theme = useTheme(); const handleSettlementTypeButtonClick = (type: SettlementType) => { @@ -115,10 +115,9 @@ export function SettlementList() { }; const handleSortOptionClick = () => { - setSortToggle(!sortToggle); + setSort((prev) => (prev === 'LATEST' ? 'OLDEST' : 'LATEST')); }; - const sort = sortToggle ? 'OLDEST' : 'LATEST'; const { data } = useGetSettlementList(settlementType, sort); const settlementList = data ?? []; @@ -148,13 +147,13 @@ export function SettlementList() { {/** @Todo Select 컴포넌트 개발 후 변경 */} - {settlementList.length > 0 ? ( + {isLoading ? ( + + + 정산 내역을 불러오는 중이에요. + + + ) : isError ? ( + + + 정산 내역을 불러오지 못했어요. + + + ) : settlementList.length > 0 ? ( {settlementList.map((item) => ( Date: Sat, 18 Apr 2026 18:59:19 +0900 Subject: [PATCH 11/17] =?UTF-8?q?chore:=20mutation=20=ED=9B=85=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=EC=9D=84=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B5=9C=EC=83=81?= =?UTF-8?q?=EB=8B=A8=EC=9C=BC=EB=A1=9C=20=EC=98=AC=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/paymentManagement/PaymentManagementPage.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/paymentManagement/PaymentManagementPage.tsx b/src/pages/paymentManagement/PaymentManagementPage.tsx index a9446547..416ce877 100644 --- a/src/pages/paymentManagement/PaymentManagementPage.tsx +++ b/src/pages/paymentManagement/PaymentManagementPage.tsx @@ -19,6 +19,8 @@ function PaymentManagementPage() { const { color } = useTheme(); const { data, isLoading, isError } = useGetPayments(); + const { mutate: approvePayment } = useApprovePayment(); + const { mutate: rejectPayment } = useRejectPayment(); const paymentSections = useMemo( () => @@ -78,9 +80,6 @@ function PaymentManagementPage() { ); } - const { mutate: approvePayment } = useApprovePayment(); - const { mutate: rejectPayment } = useRejectPayment(); - const handleReject = (payment: PaymentRequest) => { rejectPayment(payment.paymentRequestId); }; From 626da22ad1deb6a80b68334d639eed58ee37e5d9 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sat, 18 Apr 2026 19:07:02 +0900 Subject: [PATCH 12/17] =?UTF-8?q?chore:=20settlementType=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EB=8B=A4=EB=A5=B8=20=EB=AC=B8=EA=B5=AC?= =?UTF-8?q?=EB=A5=BC=20=EB=B3=B4=EC=97=AC=EC=A3=BC=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home/ui/HomePageSection/index.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/home/ui/HomePageSection/index.tsx b/src/pages/home/ui/HomePageSection/index.tsx index b88a0e52..b5bb7ec6 100644 --- a/src/pages/home/ui/HomePageSection/index.tsx +++ b/src/pages/home/ui/HomePageSection/index.tsx @@ -217,7 +217,9 @@ export function SettlementList() { > - 아직 진행중인 정산이 없어요. + {settlementType === 'IN_PROGRESS' + ? '아직 진행중인 정산이 없어요.' + : '완료된 정산이 없어요.'} )} From 6971d205cdea0a22537515ac52087643661f1d66 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sat, 18 Apr 2026 19:08:08 +0900 Subject: [PATCH 13/17] =?UTF-8?q?chore:=20husky=20=EB=8F=99=EC=9E=91?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- huskyTest.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 huskyTest.ts diff --git a/huskyTest.ts b/huskyTest.ts new file mode 100644 index 00000000..761dce8f --- /dev/null +++ b/huskyTest.ts @@ -0,0 +1,6 @@ +sdfksd;flkj;aflk +queueMicrotask +ㅇㄴ;ㄹ ㄴㅁㅇ;ㅏ +; ;]{ + +} \ No newline at end of file From 3f14ed76d66eba6bb0bb19ca90240d6e3bf6bfc0 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sat, 18 Apr 2026 19:30:59 +0900 Subject: [PATCH 14/17] =?UTF-8?q?chore:=20husky=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=9A=A9=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- huskyTest.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 huskyTest.ts diff --git a/huskyTest.ts b/huskyTest.ts deleted file mode 100644 index 761dce8f..00000000 --- a/huskyTest.ts +++ /dev/null @@ -1,6 +0,0 @@ -sdfksd;flkj;aflk -queueMicrotask -ㅇㄴ;ㄹ ㄴㅁㅇ;ㅏ -; ;]{ - -} \ No newline at end of file From 041f548ee7b152bb041377dead3c90346894b648 Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sat, 18 Apr 2026 19:34:48 +0900 Subject: [PATCH 15/17] =?UTF-8?q?chore:=20lint=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home/ui/HomePageSection/index.tsx | 125 +++++++++++--------- 1 file changed, 69 insertions(+), 56 deletions(-) diff --git a/src/pages/home/ui/HomePageSection/index.tsx b/src/pages/home/ui/HomePageSection/index.tsx index b5bb7ec6..6bb54366 100644 --- a/src/pages/home/ui/HomePageSection/index.tsx +++ b/src/pages/home/ui/HomePageSection/index.tsx @@ -127,45 +127,9 @@ export function SettlementList() { ); const settlementList = data ?? []; - return ( - - - 정산 내역 - - - - handleSettlementTypeButtonClick('IN_PROGRESS')} - label="진행 중인 정산" - /> - handleSettlementTypeButtonClick('COMPLETED')} - label="완료된 정산" - /> - - {/** @Todo Select 컴포넌트 개발 후 변경 */} - - - {isLoading ? ( + const renderSettlementContent = () => { + if (isLoading) { + return ( - ) : isError ? ( + ); + } + if (isError) { + return ( - ) : settlementList.length > 0 ? ( + ); + } + if (settlementList.length > 0) { + return ( {settlementList.map((item) => ( ))} - ) : ( - - + ); + } + return ( + + + + {settlementType === 'IN_PROGRESS' + ? '아직 진행중인 정산이 없어요.' + : '완료된 정산이 없어요.'} + + + ); + }; + + return ( + + + 정산 내역 + + + + handleSettlementTypeButtonClick('IN_PROGRESS')} + label="진행 중인 정산" + /> + handleSettlementTypeButtonClick('COMPLETED')} + label="완료된 정산" + /> + + {/** @Todo Select 컴포넌트 개발 후 변경 */} + + + {renderSettlementContent()} ); } From 51e11dfed9b4ee73f1e6ffb49876ed297fdbed2e Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sat, 18 Apr 2026 19:42:27 +0900 Subject: [PATCH 16/17] =?UTF-8?q?chore:=20=EB=A0=8C=EB=8D=94=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home/ui/HomePageSection/index.tsx | 159 +++++++++++--------- 1 file changed, 88 insertions(+), 71 deletions(-) diff --git a/src/pages/home/ui/HomePageSection/index.tsx b/src/pages/home/ui/HomePageSection/index.tsx index 6bb54366..581122db 100644 --- a/src/pages/home/ui/HomePageSection/index.tsx +++ b/src/pages/home/ui/HomePageSection/index.tsx @@ -104,6 +104,88 @@ export function SettlementBanner() { ); } +type SettlementContentProps = { + isLoading: boolean; + isError: boolean; + settlementList: NonNullable['data']>; + settlementType: SettlementType; +}; + +function SettlementContent({ + isLoading, + isError, + settlementList, + settlementType, +}: SettlementContentProps) { + if (isLoading) { + return ( + + + 정산 내역을 불러오는 중이에요. + + + ); + } + if (isError) { + return ( + + + 정산 내역을 불러오지 못했어요. + + + ); + } + if (settlementList.length > 0) { + return ( + + {settlementList.map((item) => ( + + ))} + + ); + } + return ( + + + + {settlementType === 'IN_PROGRESS' + ? '아직 진행중인 정산이 없어요.' + : '완료된 정산이 없어요.'} + + + ); +} + export function SettlementList() { const [settlementType, setSettlementType] = useState('IN_PROGRESS'); @@ -127,76 +209,6 @@ export function SettlementList() { ); const settlementList = data ?? []; - const renderSettlementContent = () => { - if (isLoading) { - return ( - - - 정산 내역을 불러오는 중이에요. - - - ); - } - if (isError) { - return ( - - - 정산 내역을 불러오지 못했어요. - - - ); - } - if (settlementList.length > 0) { - return ( - - {settlementList.map((item) => ( - - ))} - - ); - } - return ( - - - - {settlementType === 'IN_PROGRESS' - ? '아직 진행중인 정산이 없어요.' - : '완료된 정산이 없어요.'} - - - ); - }; - return ( @@ -235,7 +247,12 @@ export function SettlementList() { /> - {renderSettlementContent()} + ); } From 496a5f315cd02b1ec6e3d9dcad169b893390825b Mon Sep 17 00:00:00 2001 From: yeoeun-ex Date: Sat, 18 Apr 2026 21:28:40 +0900 Subject: [PATCH 17/17] =?UTF-8?q?chore:=20nvmrc=20=EB=85=B8=EB=93=9C?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index ec09f38d..829e9737 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.17.0 \ No newline at end of file +20.19.0 \ No newline at end of file