You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
대시보드 지출 테이블의 타입 혼용 문제를 해결하고, 불필요한 커스텀 훅을 제거하며, 총 지출 금액을 클라이언트 계산 대신 서버 응답 값으로 교체합니다.
1. selected → isSelected 타입 분리
ExpenseData는 서버 응답을 그대로 담는 타입이므로 UI 전용 선택 상태가 포함되어선 안 됩니다.
ExpenseData에서 selected?: boolean | null 제거
EditableExpenseRow(화면용 타입)에 isSelected: boolean 추가
SelectedCell.accessor 타입을 keyof ExpenseData → keyof EditableExpenseRow로 변경
UseExpenseTableReturn의 sortedRows, rowKey, columns 타입도 동일하게 수정
관련 훅, 상수, 테스트 코드 전체 반영
// Before: 서버 타입에 UI 상태가 섞여 있음exporttypeExpenseData={selected?: boolean|null;
...
};// After: UI 상태는 화면용 타입에만exporttypeEditableExpenseRow=ExpenseData&{
...
isSelected: boolean;};
2. 단일 용도 커스텀 훅 제거
한 곳에서만 사용되는 단순 로직을 별도 훅으로 분리할 필요가 없어 인라인으로 정리했습니다.
useExpenseCategoryUpdate 삭제 → useExpenseTable 내 useCallback으로 인라인
useScrollToTopOnSave 삭제 → useExpenseTable 내 useCallback으로 인라인
관련 타입 UseExpenseCategoryUpdateParams 제거
3. 총 지출 금액을 서버 응답(total)으로 교체
기존 문제:calculateTotalExpense는 현재 화면에 로드된 rows만 합산하므로, 무한 스크롤로 일부 페이지만 로드된 경우 실제 합계와 다른 값을 표시함
변경 흐름:
API 응답 (total: 기간 내 전체 지출 합계)
↓ useExpensesV2 — total 상태 관리 및 반환
↓ DashboardTable
↓ EditableDataTable (total prop)
↓ ExpenseTableToolbar — "지출 합계" 표시
useExpensesV2에서 첫 페이지 fetch 시 result.total을 상태로 저장, 반환
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚩 연관 이슈
closed #516
⏰ 우선순위(P1,P2,P3)
P1
🔧 작업 내용
대시보드 지출 테이블의 타입 혼용 문제를 해결하고, 불필요한 커스텀 훅을 제거하며, 총 지출 금액을 클라이언트 계산 대신 서버 응답 값으로 교체합니다.
1.
selected→isSelected타입 분리ExpenseData는 서버 응답을 그대로 담는 타입이므로 UI 전용 선택 상태가 포함되어선 안 됩니다.ExpenseData에서selected?: boolean | null제거EditableExpenseRow(화면용 타입)에isSelected: boolean추가SelectedCell.accessor타입을keyof ExpenseData→keyof EditableExpenseRow로 변경UseExpenseTableReturn의sortedRows,rowKey,columns타입도 동일하게 수정2. 단일 용도 커스텀 훅 제거
한 곳에서만 사용되는 단순 로직을 별도 훅으로 분리할 필요가 없어 인라인으로 정리했습니다.
useExpenseCategoryUpdate삭제 →useExpenseTable내useCallback으로 인라인useScrollToTopOnSave삭제 →useExpenseTable내useCallback으로 인라인UseExpenseCategoryUpdateParams제거3. 총 지출 금액을 서버 응답(
total)으로 교체기존 문제:
calculateTotalExpense는 현재 화면에 로드된 rows만 합산하므로, 무한 스크롤로 일부 페이지만 로드된 경우 실제 합계와 다른 값을 표시함변경 흐름:
useExpensesV2에서 첫 페이지 fetch 시result.total을 상태로 저장, 반환calculateTotalExpense함수, export, 관련 테스트 제거4. 파일명 수정
UseExpenseTableColumns.tsx→useExpenseTableColumns.tsx(훅 네이밍 컨벤션 준수)📝 고민 내용
loadMore시total갱신 여부무한 스크롤로 다음 페이지를 불러올 때(
loadMore)total은 갱신하지 않습니다. 서버의total은 기간·필터 조건 기준 전체 합계이므로 페이지가 달라져도 값이 동일하며, 조회 조건이 바뀔 때(첫 페이지 fetch)만 갱신하는 것이 맞다고 판단했습니다.미저장 변경 시 total 실시간 반영
사용자가 cost를 수정하거나 행을 추가/삭제하면 화면의 총합계가 즉시 반영됩니다.
서버
total은 미로드 페이지를 포함한 전체 합계이므로, 클라이언트 변경분(delta)을useState로 누적하여 더하는 방식으로 구현했습니다.