From 5c532c51dbdb5149ff4375557b7fdca32e010c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKangShinGyu=E2=80=9D?= <“rkdtlseb@naver.com”> Date: Sat, 10 Oct 2026 14:52:27 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat(Travel):=EA=B2=BD=EB=A1=9C=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=97=90=EC=84=9C=20=EC=9E=90=EC=A0=84=EA=B1=B0=20?= =?UTF-8?q?=EC=A0=9C=EC=99=B8(=EA=B8=B0=EC=A1=B4=20=EC=9E=90=EC=A0=84?= =?UTF-8?q?=EA=B1=B0=EB=8A=94=20=EC=9E=90=EB=8F=99=EC=B0=A8=EB=A1=9C=20fal?= =?UTF-8?q?lback),=20=EA=B3=A0=EB=A5=B8=20=EC=88=98=EB=8B=A8=EB=A7=8C=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EA=B3=84=EC=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../travel-time/PlanTravelTime.tsx | 22 +++--------- .../travel-time/TravelDirectionsCard.tsx | 34 +++++++------------ .../travel-time/TravelModeGlyph.tsx | 4 +-- src/lib/plan/schedule-bulk-hydration.test.ts | 18 ++++++++++ src/lib/plan/schedule-bulk-hydration.ts | 13 ++++--- src/lib/plan/scheduleTravelMode.test.ts | 28 +++++++++++++++ src/lib/plan/scheduleTravelMode.ts | 13 ++++--- 7 files changed, 81 insertions(+), 51 deletions(-) create mode 100644 src/lib/plan/scheduleTravelMode.test.ts diff --git a/src/app/(main)/plan/_components/travel-time/PlanTravelTime.tsx b/src/app/(main)/plan/_components/travel-time/PlanTravelTime.tsx index e02935a6..f9ea6def 100644 --- a/src/app/(main)/plan/_components/travel-time/PlanTravelTime.tsx +++ b/src/app/(main)/plan/_components/travel-time/PlanTravelTime.tsx @@ -129,13 +129,6 @@ export function PlanTravelTime({ fpTrim, ); - const deferredLazyEnabled = - routeQueryEnabled && - menuOpen && - rid.length > 0 && - Number.isFinite(scheduleId) && - Number.isFinite(segmentSourceItemId); - const menuDeferredModes = useMemo( () => SCHEDULE_TRAVEL_MODES.map((m) => m.value).filter( @@ -144,6 +137,8 @@ export function PlanTravelTime({ [selectedMode], ); + // 고르지 않은 수단은 조회하지 않는다(경로 조회 비용) — 예전에 고른 적이 있어 캐시에 남은 값만 보여 주고, + // 나머지는 그 수단을 골라야 계산한다 const deferredRouteQueries = useQueries({ queries: menuDeferredModes.map((mode) => persistedScheduleItemRouteQueryOptions( @@ -154,7 +149,7 @@ export function PlanTravelTime({ fpTrim, { segmentReady: routeQueryEnabled, - networkEnabled: deferredLazyEnabled, + networkEnabled: false, }, ), ), @@ -222,27 +217,18 @@ export function PlanTravelTime({ s.distanceMeters >= 0 ); }; + // 고르지 않은 수단은 조회하지 않으니 고른 수단만 불러오는 중을 표시한다 if (routeQueryEnabled) { out[selectedMode] = !hasSummary(selectedMode) && (selectedPending || selectedFetching); - menuDeferredModes.forEach((mode, i) => { - const q = deferredRouteQueries[i]; - out[mode] = - deferredLazyEnabled && - !hasSummary(mode) && - Boolean(q?.isPending || q?.isFetching); - }); } return out; }, [ modeRouteSummaries, routeQueryEnabled, selectedMode, - deferredLazyEnabled, selectedPending, selectedFetching, - menuDeferredModes, - deferredRouteQueries, ]); const primarySettled = !selectedPending && !selectedFetching; diff --git a/src/app/(main)/plan/_components/travel-time/TravelDirectionsCard.tsx b/src/app/(main)/plan/_components/travel-time/TravelDirectionsCard.tsx index 471fcd8b..a1cba967 100644 --- a/src/app/(main)/plan/_components/travel-time/TravelDirectionsCard.tsx +++ b/src/app/(main)/plan/_components/travel-time/TravelDirectionsCard.tsx @@ -132,12 +132,14 @@ export function TravelDirectionsCard({

이동 수단

+ {/* 아이콘 | 수단 | 시간·거리 세 칸을 모든 줄이 함께 써서(subgrid), 시간·거리가 가장 긴 수단 이름 뒤 오른쪽 끝에 맞춰진다 */}