import { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { PATHS } from '@/shared/constants/paths'; import { Dialog } from '@/shared/ui/dialogs/dialog'; import { overlay } from 'overlay-kit'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { useAllTransactionDetailMutation } from '@/entities/transaction/api/use-all-transaction-detail-mutation'; import { AmountInfoSection } from '@/entities/transaction/ui/section/amount-info-section'; import { ImportantInfoSection } from '@/entities/transaction/ui/section/important-info-section'; import { PaymentInfoSection } from '@/entities/transaction/ui/section/payment-info-section'; import { TransactionInfoSection } from '@/entities/transaction/ui/section/transaction-info-section'; import { SettlementInfoSection } from '@/entities/transaction/ui/section/settlement-info-section'; import { PartCancelInfoSection } from '@/entities/transaction/ui/section/part-cancel-info-section'; import { TransactionCategory, AllTransactionDetailParams, DetailResponse, AmountInfo, ImportantInfo, PaymentInfo, TransactionInfo, SettlementInfo, PartCancelInfo, InfoSectionKeys } from '@/entities/transaction/model/types'; import { useTranslation } from 'react-i18next'; import { DetailMotionDuration, DetailMotionStyle, DetailMotionVariants } from '@/entities/common/model/constant'; import { FullMenuClose } from '@/entities/common/ui/full-menu-close'; import { checkGrant } from '@/shared/lib/check-grant'; import { showAlert } from '@/widgets/show-alert'; import { snackBar } from '@/shared/lib'; export interface AllTransactionDetailProps { detailOn: boolean; setDetailOn: (detailOn: boolean) => void; tid: string; serviceCode: string; }; /* 거래내역조회 31 */ const menuId = 31; export const AllTransactionDetail = ({ detailOn, setDetailOn, tid, serviceCode }: AllTransactionDetailProps) => { const { navigate } = useNavigate(); const { t } = useTranslation(); const [amountInfo, setAmountInfo] = useState(); const [importantInfo, setImportantInfo] = useState(); const [paymentInfo, setPaymentInfo] = useState(); const [transactionInfo, setTransactionInfo] = useState(); const [settlementInfo, setSettlementInfo] = useState(); const [partCancelInfo, setPartCancelInfo] = useState(); const [showAmountInfo, setShowAmountInfo] = useState(false); const [showPaymentInfo, setShowPaymentInfo] = useState(false); const [showTransactionInfo, setShowTransactionInfo] = useState(false); const [showSettlementInfo, setShowSettlementInfo] = useState(false); const [showPartCancelInfo, setShowPartCancelInfo] = useState(false); const { mutateAsync: allTransactionDetail } = useAllTransactionDetailMutation(); const callDetail = () => { let allTransactionDetailParams: AllTransactionDetailParams = { serviceCode: serviceCode, tid: tid }; allTransactionDetail(allTransactionDetailParams).then((rs: DetailResponse) => { setAmountInfo(rs.amountInfo); setImportantInfo(rs.importantInfo); setPaymentInfo(rs.paymentInfo); setTransactionInfo(rs.transactionInfo); setSettlementInfo(rs.settlementInfo); setPartCancelInfo(rs.partCancelInfo); }).catch((e: any) => { if(e.response?.data?.error?.message){ snackBar(e.response?.data?.error?.message); return; } }); }; useEffect(() => { if(!!detailOn && serviceCode && tid){ callDetail(); } }, [detailOn]); const onClickToNavigate = (path: string) => { let timeout = setTimeout(() => { clearTimeout(timeout); navigate(PATHS.transaction.allTransaction.cancel, { state: { serviceCode: serviceCode, tid: tid } }); }, 10); }; const onClickToCancel = () => { if(checkGrant(menuId, 'X')){ let msg = t('transaction.confirmCancel'); overlay.open(({ isOpen, close, unmount }) => { return ( onClickToNavigate(PATHS.transaction.allTransaction.cancel) } // onConfirmClick={ () => callCancelInfo() } message={ msg } buttonLabel={[t('common.cancel'), t('common.confirm')]} /> ); }); } else{ showAlert(t('common.nopermission')); } }; const onClickToClose = () => { setDetailOn(false); }; const onClickToOpenInfo = (infoSectionKey: InfoSectionKeys) => { if(infoSectionKey === InfoSectionKeys.Amount){ setShowAmountInfo(!showAmountInfo); } else if(infoSectionKey === InfoSectionKeys.Payment){ setShowPaymentInfo(!showPaymentInfo); } else if(infoSectionKey === InfoSectionKeys.Transaction){ setShowTransactionInfo(!showTransactionInfo); } else if(infoSectionKey === InfoSectionKeys.Settlement){ setShowSettlementInfo(!showSettlementInfo); } else if(infoSectionKey === InfoSectionKeys.PartCancel){ setShowPartCancelInfo(!showPartCancelInfo); } }; return ( <>
{ t('transaction.detailTitle') }
onClickToOpenInfo(infoSectionKey) } >
{ !!paymentInfo && <>
onClickToOpenInfo(infoSectionKey) } > } { !!transactionInfo && <>
onClickToOpenInfo(infoSectionKey) } > } { !!settlementInfo && <>
onClickToOpenInfo(infoSectionKey) } > } { !!partCancelInfo && <>
onClickToOpenInfo(infoSectionKey) } > }
); };