@@ -39,13 +39,15 @@ const Page = () => {
3939 } ) ;
4040
4141 // 카드 업데이트를 위한 stats 가져오기 메서드
42- const fetchAndCalculate = async ( uid : string ) => {
42+ const fetchAndCalculate = async (
43+ uid : string ,
44+ preload ?: { plans : Plan [ ] ; items : PlanItem [ ] }
45+ ) => {
4346 try {
4447 // 1. 데이터 병렬 로드
45- const [ fetchedPlans , fetchedItems ] = await Promise . all ( [
46- fetchPlans ( uid ) ,
47- fetchAllPlanItems ( uid ) ,
48- ] ) ;
48+ const [ fetchedPlans , fetchedItems ] = preload
49+ ? [ preload . plans , preload . items ]
50+ : await Promise . all ( [ fetchPlans ( uid ) , fetchAllPlanItems ( uid ) ] ) ;
4951
5052 setPlans ( fetchedPlans ) ; // 플랜 목록 업데이트
5153
@@ -57,7 +59,7 @@ const Page = () => {
5759 const myItems = fetchedItems . filter (
5860 ( item : PlanItem ) => item . planId === plan . id
5961 ) ;
60- // ⚠️ 하위 항목이 하나라도 있는 경우에만 상태를 판별합니다.
62+ // 하위 항목이 하나라도 있는 경우에만
6163 if ( myItems . length > 0 ) {
6264 const isAllChecked = myItems . every (
6365 ( item : PlanItem ) => item . isChecked
@@ -97,7 +99,10 @@ const Page = () => {
9799 setPlans ( fetchedPlans ) ;
98100 setCurrentPage ( 1 ) ;
99101
100- await fetchAndCalculate ( currentUser . uid ) ;
102+ await fetchAndCalculate ( currentUser . uid , {
103+ plans : fetchedPlans ,
104+ items : fetchedItems ,
105+ } ) ;
101106 } catch ( err ) {
102107 console . error ( '플랜 목록 로딩 실패:' , err ) ;
103108 setPlans ( [ ] ) ;
0 commit comments