Skip to content

Commit e930c37

Browse files
committed
refactor(planner): 다이얼로그 열림 시 폼 초기화 및 추천 시간 로직 debounce 적용
1 parent 2c30d98 commit e930c37

1 file changed

Lines changed: 26 additions & 6 deletions

File tree

src/components/planner/dialogs/AddScheduleDialog.tsx

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"use client";
2-
import { useMemo, useTransition } from "react";
2+
import { useEffect, useMemo, useTransition } from "react";
33
import { useWatch, type FieldErrors } from "react-hook-form";
44
import { useRouter } from "next/navigation";
55
import { toast } from "sonner";
@@ -32,6 +32,7 @@ import { useWarningTime } from "@/hooks/planner/useWarningTime";
3232
import { WarningTimeDialog } from "./WarningTimeDialog";
3333
import ScheduleDetailField from "./fields/ScheduleDetailField";
3434
import ScheduleTitleField from "./fields/ScheduleTitleField";
35+
import { useDebounce } from "@/hooks/useDebounce";
3536

3637
interface AddScheduleDialogProps {
3738
planId: string;
@@ -69,15 +70,27 @@ export default function AddScheduleDialog({
6970
const userTransportType = useWatch({ control: form.control, name: "transportType" }); // 탭 연동
7071
const bufferMinutes = useWatch({ control: form.control, name: "bufferMinutes" }) ?? 10;
7172

73+
const recommendedTimeParams = useMemo(
74+
() => ({
75+
selectedScheduleId,
76+
currentCoords,
77+
bufferMinutes,
78+
}),
79+
[selectedScheduleId, currentCoords, bufferMinutes]
80+
);
81+
const debouncedRecommendedTimeParams = useDebounce(recommendedTimeParams, 500);
82+
7283
const { recommendedTimes, isLoading } = useRecommendedTime({
73-
selectedScheduleId,
74-
currentCoords,
84+
selectedScheduleId: debouncedRecommendedTimeParams.selectedScheduleId,
85+
currentCoords: debouncedRecommendedTimeParams.currentCoords,
7586
regularScheduleCandidates,
76-
bufferMinutes,
87+
bufferMinutes: debouncedRecommendedTimeParams.bufferMinutes,
7788
});
7889

79-
const activeRecommend =
80-
recommendedTimes && userTransportType ? recommendedTimes[userTransportType] : null;
90+
const activeRecommend = useMemo(
91+
() => (recommendedTimes && !!userTransportType ? recommendedTimes[userTransportType] : null),
92+
[recommendedTimes, userTransportType]
93+
);
8194

8295
// 시간 변경 시 검증
8396
const timeValidation: TimeValidationResult = useMemo(() => {
@@ -150,6 +163,13 @@ export default function AddScheduleDialog({
150163
}
151164
};
152165

166+
// 다이얼로그 호출 시 폼 초기화
167+
useEffect(() => {
168+
if (open) {
169+
resetToInitialState();
170+
}
171+
}, [open, resetToInitialState]);
172+
153173
return (
154174
<>
155175
<Dialog open={open} onOpenChange={handleOpenChange}>

0 commit comments

Comments
 (0)