fix: [card] 수정 모드 진입 시 폼 데이터 초기화 문제 해결
- card prop 변경 시 formData를 동기화하는 useEffect 추가 - buildFormData 헬퍼 함수로 중복 코드 제거 - useState 초기값은 최초 1회만 적용되는 React 특성 대응
This commit is contained in:
@@ -79,6 +79,29 @@ const FORM_TO_API_FIELD: Record<string, string> = {
|
||||
memo: 'memo',
|
||||
};
|
||||
|
||||
// card prop → formData 변환 헬퍼
|
||||
function buildFormData(card?: CardType): CardFormData {
|
||||
return {
|
||||
cardCompany: card?.cardCompany || '',
|
||||
cardType: card?.cardType || '',
|
||||
cardNumber: card?.cardNumber || '',
|
||||
cardName: card?.cardName || '',
|
||||
alias: card?.alias || '',
|
||||
expiryDate: card?.expiryDate || '',
|
||||
csv: card?.csv || '',
|
||||
paymentDay: card?.paymentDay || '',
|
||||
pinPrefix: '',
|
||||
totalLimit: card?.totalLimit || 0,
|
||||
usedAmount: card?.usedAmount || 0,
|
||||
remainingLimit: card?.remainingLimit || 0,
|
||||
status: card?.status || 'active',
|
||||
userId: card?.user?.id || '',
|
||||
departmentId: card?.user?.departmentId || '',
|
||||
positionId: card?.user?.positionId || '',
|
||||
memo: card?.memo || '',
|
||||
};
|
||||
}
|
||||
|
||||
interface CardDetailProps {
|
||||
card?: CardType;
|
||||
mode: 'create' | 'view' | 'edit';
|
||||
@@ -108,25 +131,14 @@ export function CardDetail({ card, mode: initialMode, isLoading }: CardDetailPro
|
||||
}
|
||||
}, [mode]);
|
||||
|
||||
const [formData, setFormData] = useState<CardFormData>({
|
||||
cardCompany: card?.cardCompany || '',
|
||||
cardType: card?.cardType || '',
|
||||
cardNumber: card?.cardNumber || '',
|
||||
cardName: card?.cardName || '',
|
||||
alias: card?.alias || '',
|
||||
expiryDate: card?.expiryDate || '',
|
||||
csv: card?.csv || '',
|
||||
paymentDay: card?.paymentDay || '',
|
||||
pinPrefix: '',
|
||||
totalLimit: card?.totalLimit || 0,
|
||||
usedAmount: card?.usedAmount || 0,
|
||||
remainingLimit: card?.remainingLimit || 0,
|
||||
status: card?.status || 'active',
|
||||
userId: card?.user?.id || '',
|
||||
departmentId: card?.user?.departmentId || '',
|
||||
positionId: card?.user?.positionId || '',
|
||||
memo: card?.memo || '',
|
||||
});
|
||||
const [formData, setFormData] = useState<CardFormData>(() => buildFormData(card));
|
||||
|
||||
// card prop 변경 시 formData 동기화 (API 로딩 완료 후)
|
||||
useEffect(() => {
|
||||
if (card) {
|
||||
setFormData(buildFormData(card));
|
||||
}
|
||||
}, [card]);
|
||||
|
||||
const isViewMode = mode === 'view';
|
||||
const isCreateMode = mode === 'create';
|
||||
@@ -193,27 +205,7 @@ export function CardDetail({ card, mode: initialMode, isLoading }: CardDetailPro
|
||||
router.push('/ko/hr/card-management');
|
||||
} else {
|
||||
setMode('view');
|
||||
if (card) {
|
||||
setFormData({
|
||||
cardCompany: card.cardCompany || '',
|
||||
cardType: card.cardType || '',
|
||||
cardNumber: card.cardNumber || '',
|
||||
cardName: card.cardName || '',
|
||||
alias: card.alias || '',
|
||||
expiryDate: card.expiryDate || '',
|
||||
csv: card.csv || '',
|
||||
paymentDay: card.paymentDay || '',
|
||||
pinPrefix: '',
|
||||
totalLimit: card.totalLimit || 0,
|
||||
usedAmount: card.usedAmount || 0,
|
||||
remainingLimit: card.remainingLimit || 0,
|
||||
status: card.status || 'active',
|
||||
userId: card.user?.id || '',
|
||||
departmentId: card.user?.departmentId || '',
|
||||
positionId: card.user?.positionId || '',
|
||||
memo: card.memo || '',
|
||||
});
|
||||
}
|
||||
setFormData(buildFormData(card));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user