- 결제 관리 페이지 다국어화 (결제 정보, 통보 데이터) * 헤더 타이틀 및 탭 버튼 다국어화 - 결제 엔티티 컴포넌트 전체 다국어화 * payment-tab: 결제 정보/결제데이터 통보 탭 * info-wrap: 서비스 이용, 수수료 및 정산주기 섹션 * notification-data-wrap: 결제데이터 통보 조회 (신용카드, 계좌이체 등 5개 결제수단) * info-item: 수수료 및 정산주기 버튼 * notify-row: 통보 상세 정보 (시작일자, 관리자 메일, URL/IP 등) - 결제 바텀시트 컴포넌트 다국어화 * card-commission-bottom-sheet: 카드 수수료 (일반/무이자/머니포인트 탭, 할부개월) * transfer-commission-bottom-sheet: 계좌이체 수수료 (통화 표기 포함) * credit-card-list-bottom-sheet: 카드사 목록 * no-interest-info-bottom-sheet: 무이자 정보 (통화 표기 포함) - 통화 표기 개선 (한국어: 원 suffix / 영어: ₩ prefix) - 번역 키 추가: payment 네임스페이스 32개 키 - 계정 관리 페이지 헤더 타이틀 다국어화 적용 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
import { motion } from 'framer-motion';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { IMAGE_ROOT } from '@/shared/constants/common';
|
|
import { BottomSheetMotionDuration, BottomSheetMotionVaiants } from '@/entities/common/model/constant';
|
|
import { useStore } from '@/shared/model/store';
|
|
import { useState } from 'react';
|
|
|
|
export interface CreditCardListBottomSheetProps {
|
|
creditCardListBottomSheetOn: boolean;
|
|
setCreditCardListBottomSheetOn: (creditCardListBottomSheetOn: boolean) => void;
|
|
};
|
|
|
|
export const CreditCardListBottomSheet = ({
|
|
creditCardListBottomSheetOn,
|
|
setCreditCardListBottomSheetOn
|
|
}: CreditCardListBottomSheetProps) => {
|
|
const { t } = useTranslation();
|
|
const cardList = useStore.getState().CommonStore.creditCardList;
|
|
|
|
const [selectedCard, setSelectedCard] = useState<string>(cardList[0].desc1);
|
|
|
|
const onClickToClose = () => {
|
|
setCreditCardListBottomSheetOn(false);
|
|
};
|
|
|
|
return (
|
|
<>
|
|
{ creditCardListBottomSheetOn &&
|
|
<div className="bg-dim"></div>
|
|
}
|
|
<motion.div
|
|
className="bottomsheet"
|
|
initial="hidden"
|
|
animate={ (creditCardListBottomSheetOn)? 'visible': 'hidden' }
|
|
variants={ BottomSheetMotionVaiants }
|
|
transition={ BottomSheetMotionDuration }
|
|
>
|
|
<div className="bottomsheet-header">
|
|
<div className="bottomsheet-title">
|
|
<h2>{t('payment.cardCompany')}</h2>
|
|
<button
|
|
className="close-btn"
|
|
type="button"
|
|
>
|
|
<img
|
|
src={ IMAGE_ROOT + '/ico_close.svg' }
|
|
alt={t('common.close')}
|
|
onClick={ () => onClickToClose() }
|
|
/>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div className="bottomsheet-content">
|
|
<div className="card-list">
|
|
{
|
|
cardList.map((value, index) => (
|
|
<div className={ `card-option ${(value.desc1 === selectedCard)? 'selected': ''}` }>
|
|
<span className="name">{ value.desc1 }</span>
|
|
<i className="check"></i>
|
|
</div>
|
|
))
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
<div className="bottomsheet-footer">
|
|
<button
|
|
className="btn-50 btn-blue flex-1"
|
|
type="button"
|
|
>{t('common.confirm')}</button>
|
|
</div>
|
|
</motion.div>
|
|
</>
|
|
);
|
|
}; |