import { useEffect, useState } from 'react'; import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { HeaderType } from '@/entities/common/model/types'; import { useSetOnBack, useSetHeaderTitle, useSetHeaderType, useSetFooterMode } from '@/widgets/sub-layout/use-sub-layout'; import { ExtendedPeriodBottomSheet } from '@/entities/additional-service/ui/link-payment/bottom-sheet/extended-period-bottom-sheet'; import { LinkBreakBottomSheet } from '@/entities/additional-service/ui/link-payment/bottom-sheet/link-break-bottom-sheet'; import { LinkPaymentApplySuccessPage } from './link-payment-separate-approval-success-page'; import { LinkPaymentApplyFailPage } from './link-payment-separate-approval-fail'; interface SeparateApprovalItem { tid: string; merchantId: string; amount: number; status: string; validityPeriod: string; approvalCount: number; } export const LinkPaymentSeparateApprovalPage = () => { const { navigate } = useNavigate(); const [selectedItems, setSelectedItems] = useState([]); const [extendedPeriodBottomSheetOn, setExtendedPeriodBottomSheetOn] = useState(false); const [linkBreakBottomSheetOn, setLinkBreakBottomSheetOn] = useState(false); const [successPageOn, setSuccessPageOn] = useState(false); const [failPageOn, setFailPageOn] = useState(false); const [resultMessage, setResultMessage] = useState(''); const [errorMessage, setErrorMessage] = useState(''); const [mainItem] = useState({ tid: 'NLPDAR2025101315330', merchantId: '100,000', amount: 100000, status: '활성화', validityPeriod: '2025/10/13', approvalCount: 0 }); const [additionalItems] = useState([ { tid: '', merchantId: '(NNN,NNN)', amount: 0, status: '(결제상태)', validityPeriod: 'YYYY/MM/DD', approvalCount: 0 } ]); useSetHeaderTitle('분리승인 상세'); useSetHeaderType(HeaderType.RightClose); useSetOnBack(() => { navigate(PATHS.additionalService.linkPayment.shippingHistory); }); useSetFooterMode(false); const handleCheckboxChange = (tid: string) => { setSelectedItems(prev => { if (prev.includes(tid)) { return prev.filter(id => id !== tid); } else { return [...prev, tid]; } }); }; const handleMainCheckboxChange = () => { const mainTid = mainItem.tid; setSelectedItems(prev => { if (prev.includes(mainTid)) { return prev.filter(id => id !== mainTid); } else { return [...prev, mainTid]; } }); }; const handleAdditionalCheckboxChange = (index: number) => { const itemTid = `additional-${index}`; handleCheckboxChange(itemTid); }; const onClickToValidityPeriod = () => { // 기간연장 바텀시트 열기 setExtendedPeriodBottomSheetOn(true); }; const onClickToSendLink = () => { // 링크중단 바텀시트 열기 setLinkBreakBottomSheetOn(true); }; const handleExtendPeriod = () => { // 바텀시트 닫기 setExtendedPeriodBottomSheetOn(false); // 기간연장 API 호출 로직 console.log('기간연장 실행', selectedItems); // TODO: 실제 API 호출 const apiCallSuccess = true; // 임시로 성공으로 설정 if (apiCallSuccess) { setResultMessage('기간이 성공적으로 연장되었습니다'); setSuccessPageOn(true); } else { setErrorMessage('기간 연장에 실패했습니다'); setFailPageOn(true); } }; const handleLinkBreak = () => { // 바텀시트 닫기 setLinkBreakBottomSheetOn(false); // 링크중단 API 호출 로직 console.log('링크중단 실행', selectedItems); // TODO: 실제 API 호출 const apiCallSuccess = true; // 임시로 성공으로 설정 if (apiCallSuccess) { setResultMessage('링크가 성공적으로 중단되었습니다'); setSuccessPageOn(true); } else { setErrorMessage('링크 중단에 실패했습니다'); setFailPageOn(true); } }; useEffect(() => { // API 호출하여 데이터 로드 // const { mid, tid } = location.state || {}; }, []); return ( <>

※ 연장 기간: 최대 7일, 총 3번 연장 가능

※ 링크 중단: 유효기간 전, 결제를 마감하는 기능, 링크중단 시 원복 불가

{/* Main Item */}
[MAIN] {mainItem.tid}
  • • 거래금액: {mainItem.merchantId}
  • • 결제상태: {mainItem.status}
  • • 유효기간: {mainItem.validityPeriod}
  • • 연장횟수: {mainItem.approvalCount}
{/* Additional Items */} {additionalItems.map((item, index) => (
handleAdditionalCheckboxChange(index)} className="card-checkbox" />
(유형) 주문번호
  • • 거래금액: {item.merchantId}
  • • 결제상태: {item.status}
  • • 유효기간: {item.validityPeriod}
  • • 연장횟수: (N)
))}
); };