From 2da5efad98f61c48fb14471f9f3aefe1f67be38c Mon Sep 17 00:00:00 2001 From: YINGMEI Date: Thu, 30 Jan 2025 23:24:53 +0900 Subject: [PATCH 1/2] feat: add partial approve related logic in funding detail frame --- .../components/PartialApproveReasonToast.tsx | 105 ++++++++++++++++++ .../constants/fundingProgressStatus.ts | 1 - .../detail/frames/FundingDetailFrame.tsx | 15 ++- .../funding/services/useGetFunding.ts | 94 +++++++++++++++- .../funding/services/useGetFundingDeadline.ts | 4 +- .../funding/services/useGetTermFundingList.ts | 54 +++++---- .../services/_mock/mockManageClub.ts | 8 ++ 7 files changed, 246 insertions(+), 35 deletions(-) create mode 100644 packages/web/src/common/components/PartialApproveReasonToast.tsx diff --git a/packages/web/src/common/components/PartialApproveReasonToast.tsx b/packages/web/src/common/components/PartialApproveReasonToast.tsx new file mode 100644 index 000000000..47046030d --- /dev/null +++ b/packages/web/src/common/components/PartialApproveReasonToast.tsx @@ -0,0 +1,105 @@ +import React from "react"; + +import styled from "styled-components"; + +import colors from "@sparcs-clubs/web/styles/themes/colors"; +import { formatDotDetailDate } from "@sparcs-clubs/web/utils/Date/formatDate"; + +import FlexWrapper from "./FlexWrapper"; +import Icon from "./Icon"; + +import Typography from "./Typography"; + +interface Reason { + datetime: Date; + reason: React.ReactNode; +} + +interface PartialApproveReasonToastProps { + title: string; + reasons: Reason[]; +} + +const ForceBorderRadius = styled.div` + position: sticky; + top: 0px; + border-radius: 8px; + width: 100%; + overflow: hidden; + border: 1px solid ${({ theme }) => theme.colors.GREEN[600]}; + background: ${({ theme }) => theme.colors.GREEN[100]}; + z-index: ${({ theme }) => theme.zIndices.toast}; +`; + +const PartialApproveReasonToastInner = styled.div` + color: ${({ theme }) => theme.colors.BLACK}; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 8px; + width: 100%; + max-height: 300px; + overflow-y: auto; + + .PartialApproveReasonToast-title { + padding: 12px 16px 0 16px; + + position: sticky; + top: 0; + display: flex; + align-items: center; + gap: 8px; + background: ${({ theme }) => theme.colors.GREEN[100]}; + z-index: ${({ theme }) => theme.zIndices.toast + 1}; + } + + .PartialApproveReasonToast-reasons { + display: flex; + width: 100%; + padding: 0 16px 12px 44px; + flex-direction: column; + gap: 8px; + flex: 1 0 0; + } + + .PartialApproveReasonToast-sticky-title { + position: sticky; + top: 0; + background: ${({ theme }) => theme.colors.GREEN[100]}; + z-index: ${({ theme }) => theme.zIndices.toast + 1}; + } +`; + +const PartialApproveReasonToast: React.FC = ({ + title, + reasons, +}) => ( + + +
+ + + {title} + +
+
+ {reasons.map(reason => ( + + + {formatDotDetailDate(reason.datetime)} + + + {reason.reason} + + + ))} +
+
+
+); + +export default PartialApproveReasonToast; diff --git a/packages/web/src/features/manage-club/funding/constants/fundingProgressStatus.ts b/packages/web/src/features/manage-club/funding/constants/fundingProgressStatus.ts index 1113ead70..f404d5065 100644 --- a/packages/web/src/features/manage-club/funding/constants/fundingProgressStatus.ts +++ b/packages/web/src/features/manage-club/funding/constants/fundingProgressStatus.ts @@ -61,7 +61,6 @@ const getFundingProgress = ( }, ], }; - // TODO. 부분 승인 케이스 수정 필요 case FundingStatusEnum.Partial: return { labels: ["신청 완료", "동아리 연합회 부분 승인"], diff --git a/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx b/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx index 3e7f330b1..728689e87 100644 --- a/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx +++ b/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx @@ -13,6 +13,7 @@ import Card from "@sparcs-clubs/web/common/components/Card"; import FlexWrapper from "@sparcs-clubs/web/common/components/FlexWrapper"; import Modal from "@sparcs-clubs/web/common/components/Modal"; import CancellableModalContent from "@sparcs-clubs/web/common/components/Modal/CancellableModalContent"; +import PartialApproveReasonToast from "@sparcs-clubs/web/common/components/PartialApproveReasonToast"; import ProgressStatus from "@sparcs-clubs/web/common/components/ProgressStatus"; import RejectReasonToast from "@sparcs-clubs/web/common/components/RejectReasonToast"; @@ -135,7 +136,6 @@ const FundingDetailFrame: React.FC = ({ clubId }) => { {!isPastFunding && ( - // TODO. 부분 승인 케이스 추가 = ({ clubId }) => { } optional={ funding.comments && - funding.comments.length > 0 && ( + funding.comments.length > 0 && + (funding.fundingStatusEnum === FundingStatusEnum.Partial ? ( + ({ + datetime: comment.createdAt, + reason: comment.content, + }))} + /> + ) : ( ({ @@ -161,7 +170,7 @@ const FundingDetailFrame: React.FC = ({ clubId }) => { reason: comment.content, }))} /> - ) + )) } /> )} diff --git a/packages/web/src/features/manage-club/funding/services/useGetFunding.ts b/packages/web/src/features/manage-club/funding/services/useGetFunding.ts index 5780575bb..0df80a372 100644 --- a/packages/web/src/features/manage-club/funding/services/useGetFunding.ts +++ b/packages/web/src/features/manage-club/funding/services/useGetFunding.ts @@ -1,6 +1,7 @@ import apiFnd002, { ApiFnd002ResponseOk, } from "@sparcs-clubs/interface/api/funding/endpoint/apiFnd002"; +import { FundingStatusEnum } from "@sparcs-clubs/interface/common/enum/funding.enum"; import { useQuery } from "@tanstack/react-query"; import { @@ -26,5 +27,96 @@ export const useGetFunding = (fundingId: number) => }); defineAxiosMock(mock => { - mock.onGet(apiFnd002.url(1)).reply(() => [200, {}]); + const fundingStatus = FundingStatusEnum.Partial; + const mockFundingDetail = { + id: 1, + club: { + id: 112, + }, + activityD: { + id: 5, + }, + fundingStatusEnum: fundingStatus, + purposeActivity: { + id: 3335, + activityStatusEnum: 2, + activityTypeEnum: 1, + club: { + id: 112, + name: "술박스", + }, + name: "ffsgdgfd", + commentedAt: null, + editedAt: "2025-01-22T23:07:21.000Z", + updatedAt: "2025-01-25T04:35:48.000Z", + }, + name: "ㅁㄹㅁㄴㅇㄹㅁㄴㅇㄹ", + expenditureDate: "2024-08-07T09:00:00.000Z", + expenditureAmount: 234234, + approvedAmount: 0, + tradeEvidenceFiles: [ + { + id: "b5884fb8-672d-45cf-a4de-5d1ce34a35f4", + name: "websiteplanet-dummy-540X400.png", + extension: "png", + size: 8141, + userId: 8608, + url: "https://ar-002-clubs-v2-dev.s3.ap-northeast-2.amazonaws.com/file/8608.1737884920000.websiteplanet-dummy-540X400.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAZWM3SVKMLN74ARWD%2F20250130%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250130T133654Z&X-Amz-Expires=600&X-Amz-Signature=210bbac945b25b631498baca8ac0efa1df5cf06768c9287aa4f1d79a04541e9a&X-Amz-SignedHeaders=host&x-id=GetObject", + }, + ], + tradeDetailFiles: [ + { + id: "c0c3fe89-66bd-441f-89e1-069ec53cdfbc", + name: "websiteplanet-dummy-540X400 (1).png", + extension: "png", + size: 8110, + userId: 8608, + url: "https://ar-002-clubs-v2-dev.s3.ap-northeast-2.amazonaws.com/file/8608.1737884926000.websiteplanet-dummy-540X400%20%281%29.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAZWM3SVKMLN74ARWD%2F20250130%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250130T133654Z&X-Amz-Expires=600&X-Amz-Signature=2cb8499190a6de332edc28793c08f7702e84a596ba033a0bbf1044eab8ffc2e8&X-Amz-SignedHeaders=host&x-id=GetObject", + }, + ], + tradeDetailExplanation: "ㅇㅎㅇㅎㄹㅇㅎ", + isFixture: false, + isTransportation: false, + isNonCorporateTransaction: false, + isFoodExpense: false, + isLaborContract: true, + laborContract: { + explanation: "ㅇㄴㄹㅇ", + files: [ + { + id: "4c991eb5-a5d9-4df9-a5cc-9dbf87d1c67a", + name: "websiteplanet-dummy-540X400 (1).png", + extension: "png", + size: 8110, + userId: 8608, + url: "https://ar-002-clubs-v2-dev.s3.ap-northeast-2.amazonaws.com/file/8608.1737884935000.websiteplanet-dummy-540X400%20%281%29.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAZWM3SVKMLN74ARWD%2F20250130%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250130T133654Z&X-Amz-Expires=600&X-Amz-Signature=0d291445afba29cc48a30136ca4d9b52ee89a4f4102df8418e4a6002e95ad7c4&X-Amz-SignedHeaders=host&x-id=GetObject", + }, + ], + }, + isExternalEventParticipationFee: false, + isPublication: false, + isProfitMakingActivity: false, + isJointExpense: false, + isEtcExpense: false, + editedAt: "2025-01-26T18:48:59.000Z", + commentedAt: new Date(), + createdAt: "2025-01-26T18:48:59.000Z", + updatedAt: "2025-01-29T22:41:08.000Z", + comments: [ + { + id: 1, + funding: { id: 1 }, + chargedExecutive: { id: 123 }, + content: "대충 어떤 부분 승인 사유", + fundingStatusEnum: fundingStatus, + approvedAmount: 1230, + createdAt: new Date(), + }, + ], + }; + + const baseUrl = `/student/fundings/funding/`; + mock + .onGet(new RegExp(`^${baseUrl}\\d+$`)) + .reply(() => [200, mockFundingDetail]); }); diff --git a/packages/web/src/features/manage-club/funding/services/useGetFundingDeadline.ts b/packages/web/src/features/manage-club/funding/services/useGetFundingDeadline.ts index 96f2c85c6..d0ee5eca1 100644 --- a/packages/web/src/features/manage-club/funding/services/useGetFundingDeadline.ts +++ b/packages/web/src/features/manage-club/funding/services/useGetFundingDeadline.ts @@ -22,7 +22,7 @@ defineAxiosMock(mock => { mock.onGet(apiFnd007.url()).reply(() => [ 200, { - targetTerm: { + targetDuration: { id: 1, year: 2023, name: "여름가을", @@ -31,7 +31,7 @@ defineAxiosMock(mock => { }, deadline: { id: 1, - activityDeadlineEnum: FundingDeadlineEnum.Revision, + deadlineEnum: FundingDeadlineEnum.Revision, startDate: new Date("2024-07-01"), endDate: new Date("2024-12-30"), }, diff --git a/packages/web/src/features/manage-club/funding/services/useGetTermFundingList.ts b/packages/web/src/features/manage-club/funding/services/useGetTermFundingList.ts index c0d36e6ae..86b612d79 100644 --- a/packages/web/src/features/manage-club/funding/services/useGetTermFundingList.ts +++ b/packages/web/src/features/manage-club/funding/services/useGetTermFundingList.ts @@ -2,6 +2,10 @@ import apiFnd006, { ApiFnd006RequestQuery, ApiFnd006ResponseOk, } from "@sparcs-clubs/interface/api/funding/endpoint/apiFnd006"; +import { + ActivityStatusEnum, + ActivityTypeEnum, +} from "@sparcs-clubs/interface/common/enum/activity.enum"; import { FundingStatusEnum } from "@sparcs-clubs/interface/common/enum/funding.enum"; import { useQuery } from "@tanstack/react-query"; @@ -35,7 +39,7 @@ const useGetTermFundingList = ( export default useGetTermFundingList; -const baseUrl = `/student/fundings/semesters/semester/`; +const baseUrl = `/student/fundings/activity-durations/activity-duration/`; defineAxiosMock(mock => { mock.onGet(new RegExp(`^${baseUrl}\\d+$`)).reply(() => [ @@ -48,7 +52,13 @@ defineAxiosMock(mock => { name: "개발개발한 어떠한 활동", expenditureAmount: 300000, approvedAmount: 200000, - purposeActivity: { id: 1, name: "지출목적" }, + purposeActivity: { + id: 1, + name: "지출목적", + activityStatusEnum: ActivityStatusEnum.Applied, + activityTypeEnum: ActivityTypeEnum.matchedExternalActivity, + club: { id: 1 }, + }, }, { id: 2, @@ -56,7 +66,13 @@ defineAxiosMock(mock => { name: "개발개발한 어떠한 활동", expenditureAmount: 300000, approvedAmount: 200000, - purposeActivity: { id: 1, name: "지출목적" }, + purposeActivity: { + id: 1, + name: "지출목적", + activityStatusEnum: ActivityStatusEnum.Applied, + activityTypeEnum: ActivityTypeEnum.matchedExternalActivity, + club: { id: 1 }, + }, }, { id: 3, @@ -64,31 +80,13 @@ defineAxiosMock(mock => { name: "개발개발한 어떠한 활동", expenditureAmount: 300000, approvedAmount: 200000, - purposeActivity: { id: 1, name: "지출목적" }, - }, - { - id: 4, - fundingStatusEnum: FundingStatusEnum.Rejected, - name: "개발개발한 어떠한 활동", - expenditureAmount: 300000, - approvedAmount: 200000, - purposeActivity: { id: 1, name: "지출목적" }, - }, - { - id: 5, - fundingStatusEnum: FundingStatusEnum.Rejected, - name: "개발개발한 어떠한 활동", - expenditureAmount: 300000, - approvedAmount: 200000, - purposeActivity: { id: 1, name: "지출목적" }, - }, - { - id: 6, - fundingStatusEnum: FundingStatusEnum.Approved, - name: "개발개발한 어떠한 활동", - expenditureAmount: 300000, - approvedAmount: 200000, - purposeActivity: { id: 1, name: "지출목적" }, + purposeActivity: { + id: 1, + name: "지출목적", + activityStatusEnum: ActivityStatusEnum.Applied, + activityTypeEnum: ActivityTypeEnum.matchedExternalActivity, + club: { id: 1 }, + }, }, ], }, diff --git a/packages/web/src/features/manage-club/services/_mock/mockManageClub.ts b/packages/web/src/features/manage-club/services/_mock/mockManageClub.ts index 4789cdad1..bbb282eda 100644 --- a/packages/web/src/features/manage-club/services/_mock/mockManageClub.ts +++ b/packages/web/src/features/manage-club/services/_mock/mockManageClub.ts @@ -233,6 +233,14 @@ const mockupManageFunding: NewFundingData[] = [ expenditureAmount: 300000, approvedAmount: 100000, }, + { + id: 6, + fundingStatusEnum: FundingStatusEnum.Partial, + name: "개발개발한 어떠한 활동", + activityName: "모니터", + expenditureAmount: 300000, + approvedAmount: 100000, + }, ]; const mockupPastManageFunding: Funding[] = [ From 1c4edd6c5569973c2a67d2b3521ea8e0838da26d Mon Sep 17 00:00:00 2001 From: YINGMEI Date: Fri, 31 Jan 2025 04:19:46 +0900 Subject: [PATCH 2/2] fix: update funding progress toast section --- ...ReasonToast.tsx => ApproveReasonToast.tsx} | 26 +++---- .../common/components/RejectReasonToast.tsx | 4 +- packages/web/src/constants/tableTagList.ts | 2 +- .../components/FundingStatusSection.tsx | 69 +++++++++++++++++++ .../detail/frames/FundingDetailFrame.tsx | 46 ++----------- .../funding/services/useGetFunding.ts | 22 +++++- 6 files changed, 113 insertions(+), 56 deletions(-) rename packages/web/src/common/components/{PartialApproveReasonToast.tsx => ApproveReasonToast.tsx} (78%) create mode 100644 packages/web/src/features/manage-club/funding/detail/components/FundingStatusSection.tsx diff --git a/packages/web/src/common/components/PartialApproveReasonToast.tsx b/packages/web/src/common/components/ApproveReasonToast.tsx similarity index 78% rename from packages/web/src/common/components/PartialApproveReasonToast.tsx rename to packages/web/src/common/components/ApproveReasonToast.tsx index 47046030d..e0fc2e9cc 100644 --- a/packages/web/src/common/components/PartialApproveReasonToast.tsx +++ b/packages/web/src/common/components/ApproveReasonToast.tsx @@ -13,9 +13,10 @@ import Typography from "./Typography"; interface Reason { datetime: Date; reason: React.ReactNode; + status?: string; } -interface PartialApproveReasonToastProps { +interface ApproveReasonToastProps { title: string; reasons: Reason[]; } @@ -31,7 +32,7 @@ const ForceBorderRadius = styled.div` z-index: ${({ theme }) => theme.zIndices.toast}; `; -const PartialApproveReasonToastInner = styled.div` +const ApproveReasonToastInner = styled.div` color: ${({ theme }) => theme.colors.BLACK}; display: flex; flex-direction: column; @@ -41,7 +42,7 @@ const PartialApproveReasonToastInner = styled.div` max-height: 300px; overflow-y: auto; - .PartialApproveReasonToast-title { + .ApproveReasonToast-title { padding: 12px 16px 0 16px; position: sticky; @@ -53,7 +54,7 @@ const PartialApproveReasonToastInner = styled.div` z-index: ${({ theme }) => theme.zIndices.toast + 1}; } - .PartialApproveReasonToast-reasons { + .ApproveReasonToast-reasons { display: flex; width: 100%; padding: 0 16px 12px 44px; @@ -62,7 +63,7 @@ const PartialApproveReasonToastInner = styled.div` flex: 1 0 0; } - .PartialApproveReasonToast-sticky-title { + .ApproveReasonToast-sticky-title { position: sticky; top: 0; background: ${({ theme }) => theme.colors.GREEN[100]}; @@ -70,19 +71,19 @@ const PartialApproveReasonToastInner = styled.div` } `; -const PartialApproveReasonToast: React.FC = ({ +const ApproveReasonToast: React.FC = ({ title, reasons, }) => ( - -
+ +
{title}
-
+
{reasons.map(reason => ( = ({ key={formatDotDetailDate(reason.datetime)} > - {formatDotDetailDate(reason.datetime)} + {formatDotDetailDate(reason.datetime)}{" "} + {reason.status && `• ${reason.status}`} {reason.reason} @@ -98,8 +100,8 @@ const PartialApproveReasonToast: React.FC = ({ ))}
- + ); -export default PartialApproveReasonToast; +export default ApproveReasonToast; diff --git a/packages/web/src/common/components/RejectReasonToast.tsx b/packages/web/src/common/components/RejectReasonToast.tsx index b699e752f..0c3513e80 100644 --- a/packages/web/src/common/components/RejectReasonToast.tsx +++ b/packages/web/src/common/components/RejectReasonToast.tsx @@ -13,6 +13,7 @@ import Typography from "./Typography"; interface Reason { datetime: Date; reason: React.ReactNode; + status?: string; } interface RejectReasonToastProps { @@ -90,7 +91,8 @@ const RejectReasonToast: React.FC = ({ key={formatDotDetailDate(reason.datetime)} > - {formatDotDetailDate(reason.datetime)} + {formatDotDetailDate(reason.datetime)}{" "} + {reason.status && `• ${reason.status} 사유`} {reason.reason} diff --git a/packages/web/src/constants/tableTagList.ts b/packages/web/src/constants/tableTagList.ts index de1bd872b..e8dd2a082 100644 --- a/packages/web/src/constants/tableTagList.ts +++ b/packages/web/src/constants/tableTagList.ts @@ -99,7 +99,7 @@ const FundingTagList: { [FundingStatusEnum.Committee]: { text: "운위", color: "YELLOW" }, [FundingStatusEnum.Approved]: { text: "승인", color: "GREEN" }, [FundingStatusEnum.Rejected]: { text: "반려", color: "RED" }, - [FundingStatusEnum.Partial]: { text: "부분 승인", color: "PURPLE" }, + [FundingStatusEnum.Partial]: { text: "부분", color: "PURPLE" }, }; // TODO: interface enum 사용 diff --git a/packages/web/src/features/manage-club/funding/detail/components/FundingStatusSection.tsx b/packages/web/src/features/manage-club/funding/detail/components/FundingStatusSection.tsx new file mode 100644 index 000000000..fb7165ff7 --- /dev/null +++ b/packages/web/src/features/manage-club/funding/detail/components/FundingStatusSection.tsx @@ -0,0 +1,69 @@ +import React, { useMemo } from "react"; + +import { IFundingCommentResponse } from "@sparcs-clubs/interface/api/funding/type/funding.type"; +import { FundingStatusEnum } from "@sparcs-clubs/interface/common/enum/funding.enum"; + +import ApproveReasonToast from "@sparcs-clubs/web/common/components/ApproveReasonToast"; +import ProgressStatus from "@sparcs-clubs/web/common/components/ProgressStatus"; + +import RejectReasonToast from "@sparcs-clubs/web/common/components/RejectReasonToast"; + +import { FundingTagList } from "@sparcs-clubs/web/constants/tableTagList"; +import { getFundingProgress } from "@sparcs-clubs/web/features/manage-club/funding/constants/fundingProgressStatus"; +import { getTagDetail } from "@sparcs-clubs/web/utils/getTagDetail"; + +interface FundingStatusSectionProps { + status: FundingStatusEnum; + editedAt: Date; + commentedAt?: Date; + comments: IFundingCommentResponse[]; +} + +const FundingStatusSection: React.FC = ({ + status, + editedAt, + commentedAt = undefined, + comments, +}) => { + const progressStatus = getFundingProgress(status, editedAt, commentedAt); + + const ToastSection = useMemo(() => { + if (status === FundingStatusEnum.Rejected) { + return ( + ({ + datetime: comment.createdAt, + reason: comment.content, + status: getTagDetail(comment.fundingStatusEnum, FundingTagList) + .text, + }))} + /> + ); + } + + return ( + ({ + datetime: comment.createdAt, + reason: comment.content, + status: + comment.fundingStatusEnum === FundingStatusEnum.Partial + ? `${getTagDetail(comment.fundingStatusEnum, FundingTagList).text}승인` + : getTagDetail(comment.fundingStatusEnum, FundingTagList).text, + }))} + /> + ); + }, [comments, status]); + + return ( + 0 && ToastSection} + /> + ); +}; + +export default FundingStatusSection; diff --git a/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx b/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx index 728689e87..5f73609ec 100644 --- a/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx +++ b/packages/web/src/features/manage-club/funding/detail/frames/FundingDetailFrame.tsx @@ -13,11 +13,7 @@ import Card from "@sparcs-clubs/web/common/components/Card"; import FlexWrapper from "@sparcs-clubs/web/common/components/FlexWrapper"; import Modal from "@sparcs-clubs/web/common/components/Modal"; import CancellableModalContent from "@sparcs-clubs/web/common/components/Modal/CancellableModalContent"; -import PartialApproveReasonToast from "@sparcs-clubs/web/common/components/PartialApproveReasonToast"; -import ProgressStatus from "@sparcs-clubs/web/common/components/ProgressStatus"; -import RejectReasonToast from "@sparcs-clubs/web/common/components/RejectReasonToast"; -import { getFundingProgress } from "@sparcs-clubs/web/features/manage-club/funding/constants/fundingProgressStatus"; import { useDeleteFunding } from "@sparcs-clubs/web/features/manage-club/funding/services/useDeleteFunding"; import { useGetFunding } from "@sparcs-clubs/web/features/manage-club/funding/services/useGetFunding"; import useGetFundingDeadline from "@sparcs-clubs/web/features/manage-club/funding/services/useGetFundingDeadline"; @@ -27,6 +23,7 @@ import { isActivityReportUnverifiable } from "@sparcs-clubs/web/features/manage- import BasicEvidenceList from "../components/BasicEvidenceList"; import FixtureEvidenceList from "../components/FixtureEvidenceList"; import FundingInfoList from "../components/FundingInfoList"; +import FundingStatusSection from "../components/FundingStatusSection"; import NonCorpEvidenceList from "../components/NonCorpEvidenceList"; import OtherEvidenceList from "../components/OtherEvidenceList"; import TransportationEvidenceList from "../components/TransportationEvidenceList"; @@ -136,42 +133,11 @@ const FundingDetailFrame: React.FC = ({ clubId }) => { {!isPastFunding && ( - 0 && - (funding.fundingStatusEnum === FundingStatusEnum.Partial ? ( - ({ - datetime: comment.createdAt, - reason: comment.content, - }))} - /> - ) : ( - ({ - datetime: comment.createdAt, - reason: comment.content, - }))} - /> - )) - } + )} diff --git a/packages/web/src/features/manage-club/funding/services/useGetFunding.ts b/packages/web/src/features/manage-club/funding/services/useGetFunding.ts index 0df80a372..a06072921 100644 --- a/packages/web/src/features/manage-club/funding/services/useGetFunding.ts +++ b/packages/web/src/features/manage-club/funding/services/useGetFunding.ts @@ -27,7 +27,7 @@ export const useGetFunding = (fundingId: number) => }); defineAxiosMock(mock => { - const fundingStatus = FundingStatusEnum.Partial; + const fundingStatus = FundingStatusEnum.Approved; const mockFundingDetail = { id: 1, club: { @@ -103,12 +103,30 @@ defineAxiosMock(mock => { createdAt: "2025-01-26T18:48:59.000Z", updatedAt: "2025-01-29T22:41:08.000Z", comments: [ + { + id: 1, + funding: { id: 1 }, + chargedExecutive: { id: 123 }, + content: "대충 어떤 반려 사유", + fundingStatusEnum: FundingStatusEnum.Rejected, + approvedAmount: 1230, + createdAt: new Date(2024, 11, 10), + }, { id: 1, funding: { id: 1 }, chargedExecutive: { id: 123 }, content: "대충 어떤 부분 승인 사유", - fundingStatusEnum: fundingStatus, + fundingStatusEnum: FundingStatusEnum.Partial, + approvedAmount: 1230, + createdAt: new Date(2024, 12, 20), + }, + { + id: 1, + funding: { id: 1 }, + chargedExecutive: { id: 123 }, + content: "대충 어떤 승인 사유", + fundingStatusEnum: FundingStatusEnum.Approved, approvedAmount: 1230, createdAt: new Date(), },