import moment from 'moment'; import { motion } from 'framer-motion'; import { DetailMotionDuration, DetailMotionStyle, DetailMotionVariants } from '@/entities/common/model/constant'; import { useEffect, useState } from 'react'; import { getArsOrderStatusName, getArsPaymentStatusName } from '@/entities/additional-service/model/ars/constant'; import { ArsPaymentMethod, ExtensionArsDetailParams, ExtensionArsDetailResponse, ExtensionArsResendParams, ExtensionArsResendResponse } from "@/entities/additional-service/model/ars/types"; import { useTranslation } from "react-i18next"; import { FullMenuClose } from '@/entities/common/ui/full-menu-close'; import { useExtensionArsDetailMutation } from '@/entities/additional-service/api/ars/use-extension-ars-detail-mutation'; import { useExtensionArsResendMutation } from '@/entities/additional-service/api/ars/use-extension-ars-resend-mutation'; import { snackBar } from '@/shared/lib'; import { ArsResendSmsBottomSheet } from '../resend-sms-bottom-sheet'; import { showAlert } from '@/widgets/show-alert'; export interface ArsDetailProps { detailOn: boolean; setDetailOn: (detailOn: boolean) => void; mid: string; tid: string; }; export const ArsDetail = ({ detailOn, setDetailOn, mid, tid }: ArsDetailProps) => { const { t } = useTranslation(); const [detail, setDetail] = useState(); const [bottomSheetOn, setBottomSheetOn] = useState(false); const { mutateAsync: extensionArsDetail } = useExtensionArsDetailMutation(); const { mutateAsync: extensionArsResend } = useExtensionArsResendMutation(); const callDetail = () => { let arsDetailParams: ExtensionArsDetailParams = { mid: mid, tid: tid }; extensionArsDetail(arsDetailParams).then((rs: ExtensionArsDetailResponse) => { setDetail(rs); }).catch((e: any) => { if (e.response?.data?.error?.message) { showAlert(e.response?.data?.error?.message); return; } }); } const arsResend = () => { let arsResendParams: ExtensionArsResendParams = { mid: mid, tid: tid }; extensionArsResend(arsResendParams).then((rs: ExtensionArsResendResponse) => { if (rs.status) { snackBar(t('additionalService.ars.smsResendSuccess')); setBottomSheetOn(false); callDetail(); // 상세 정보 갱신 } else { const errorMessage = rs.error?.message || t('additionalService.ars.smsResendFailed'); snackBar(`[${t('common.failed')}] ${errorMessage}`); } }).catch((error) => { const errorMessage = error?.response?.data?.error?.message || error?.message || t('additionalService.ars.smsResendError'); snackBar(`[${t('common.failed')}] ${errorMessage}`); }); } const onClickToOpenResendBottomSheet = () => { setBottomSheetOn(true); }; const onClickToClose = () => { setDetailOn(false); }; const getDate = (date?: string) => { return (date) ? moment(date.substr(0, 8)).format('YYYY.MM.DD') : ''; }; useEffect(() => { if (!!mid && !!tid) { callDetail(); } }, [mid, tid]); return ( <>
{t('additionalService.ars.detailTitle')}
{t('home.money', { value: new Intl.NumberFormat('en-US').format(Number(detail?.amount) || 0) })}
{detail?.corpName}
{getDate(detail?.paymentDate)}
{t('additionalService.ars.transactionInfo')}
  • {t('transaction.fields.mid')} {detail?.mid}
  • {t('additionalService.ars.paymentMethod')} {detail?.arsPaymentMethod}
  • {t('additionalService.ars.paymentStatus')} {getArsPaymentStatusName(t)(detail?.paymentStatus)}
  • {t('additionalService.ars.orderStatus')} {getArsOrderStatusName(t)(detail?.orderStatus)}
  • {t('additionalService.ars.orderDateTime')} { detail?.paymentDate ? moment(detail.paymentDate, 'YYYYMMDDHHmmss').format('YYYY.MM.DD HH:mm:ss') : '-' }
  • {t('additionalService.ars.productName')} {detail?.goodsName}
  • {t('additionalService.ars.orderNumber')} {detail?.tid}
  • {t('additionalService.ars.buyer')} {detail?.buyerName}
  • {t('additionalService.ars.phoneNumber')} {detail?.maskPhoneNumber}
  • {t('additionalService.ars.email')} {detail?.email}
  • {t('additionalService.ars.sendVerificationCode')} {detail?.smsVerificationCode}
{detail?.arsPaymentMethod === ArsPaymentMethod.SMS && (
)}
) }