날짜 형식 처리 안정성 강화 및 트랜잭션 삭제 시 앱 먹통 문제 해결

This commit is contained in:
hansoo
2025-03-18 01:07:17 +09:00
parent 6f91afeebe
commit acb9ae3d70
23 changed files with 732 additions and 18 deletions

View File

@@ -94,9 +94,16 @@ export const useTransactionsOperations = (
// 사용자 인터페이스 응답성 감소 전에 이벤트 발생 처리
try {
window.dispatchEvent(new Event('transactionUpdated'));
// 상태 업데이트 바로 후 크로스 스레드 통신 방지
setTimeout(() => {
try {
window.dispatchEvent(new Event('transactionUpdated'));
} catch (innerError) {
console.warn('이벤트 발생 중 비치명적 오류:', innerError);
}
}, 0);
} catch (eventError) {
console.warn('이벤트 발생 중 비치명적 오류:', eventError);
console.warn('이벤트 디스패치 설정 오류:', eventError);
}
// UI 스레드 블록하지 않는 너비로 requestAnimationFrame 사용
@@ -146,9 +153,39 @@ export const useTransactionsOperations = (
// 삭제되었던 트랜잭션 다시 추가
const newState = [...prevState, transactionToDelete];
// 날짜 기준 정렬
// 날짜 기준 정렬 - 안전한 경로
return newState.sort((a, b) => {
return new Date(b.date).getTime() - new Date(a.date).getTime();
try {
// 날짜 형식이 다양할 수 있으므로 안전하게 처리
let dateA = new Date();
let dateB = new Date();
// 타입 안전성 확보
if (a.date && typeof a.date === 'string') {
// 이미 포맷팅된 날짜 문자열 감지
if (!a.date.includes('오늘,') && !a.date.includes('년')) {
const testDate = new Date(a.date);
if (!isNaN(testDate.getTime())) {
dateA = testDate;
}
}
}
if (b.date && typeof b.date === 'string') {
// 이미 포맷팅된 날짜 문자열 감지
if (!b.date.includes('오늘,') && !b.date.includes('년')) {
const testDate = new Date(b.date);
if (!isNaN(testDate.getTime())) {
dateB = testDate;
}
}
}
return dateB.getTime() - dateA.getTime();
} catch (error) {
console.error('날짜 정렬 오류:', error);
return 0; // 오류 발생 시 순서 유지
}
});
});
}