From 49643503014be37ae24a55d66ac134b89e0b70aa Mon Sep 17 00:00:00 2001 From: jjangminii Date: Wed, 15 Jul 2026 19:19:24 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix(web):=20=EC=A4=91=EC=B2=A9=EB=90=9C=20?= =?UTF-8?q?=EB=AA=A8=EB=8B=AC=20=EC=98=A4=EB=B2=84=EB=A0=88=EC=9D=B4=20?= =?UTF-8?q?=EA=B2=B9=EC=B9=A8=20=ED=98=84=EC=83=81=EC=9D=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=9C=EB=8B=A4=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OverlayModal에 Modal 컴포넌트와 동일한 스택 기반 z-index 로직을 적용했습니다 - 정적인 z-40/z-50 클래스를 acquireModalStackIndex 기반 동적 z-index로 교체했습니다 --- .../components/modal/OverlayModal.tsx | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/apps/timo-web/components/modal/OverlayModal.tsx b/apps/timo-web/components/modal/OverlayModal.tsx index 68ac4d4b..f925faaa 100644 --- a/apps/timo-web/components/modal/OverlayModal.tsx +++ b/apps/timo-web/components/modal/OverlayModal.tsx @@ -1,6 +1,10 @@ "use client"; -import { cn, hasOpenFloatingLayer } from "@repo/timo-design-system/utils"; +import { + acquireModalStackIndex, + cn, + hasOpenFloatingLayer, +} from "@repo/timo-design-system/utils"; import FocusTrap from "focus-trap-react"; import { useEffect, useRef, useState } from "react"; import { createPortal } from "react-dom"; @@ -8,6 +12,11 @@ import { createPortal } from "react-dom"; import type { ReactNode } from "react"; const EXIT_ANIMATION_DURATION = 200; +// tailwind-config theme.css의 --z-index-modal-overlay/--z-index-modal-panel과 동일한 기준값이다. +const BASE_OVERLAY_Z_INDEX = 40; +const BASE_PANEL_Z_INDEX = 50; +// 중첩된 모달의 오버레이가 그 아래 모달의 패널(z=50)보다 항상 높도록, 한 단계당 overlay/panel 차이(10)보다 큰 폭으로 올린다. +const MODAL_STACK_Z_INDEX_STEP = 20; interface OverlayModalProps { isOpen: boolean; @@ -28,6 +37,7 @@ export const OverlayModal = ({ }: OverlayModalProps) => { const [shouldRender, setShouldRender] = useState(isOpen); const [isVisible, setIsVisible] = useState(false); + const [stackIndex, setStackIndex] = useState(0); const dialogRef = useRef(null); const wasFloatingLayerOpenRef = useRef(false); @@ -43,6 +53,7 @@ export const OverlayModal = ({ return () => clearTimeout(hideTimer); } + setStackIndex(acquireModalStackIndex()); setShouldRender(true); const showFrame = requestAnimationFrame(() => setIsVisible(true)); @@ -71,13 +82,19 @@ export const OverlayModal = ({ if (!shouldRender) return null; + const overlayZIndex = + BASE_OVERLAY_Z_INDEX + stackIndex * MODAL_STACK_Z_INDEX_STEP; + const panelZIndex = + BASE_PANEL_Z_INDEX + stackIndex * MODAL_STACK_Z_INDEX_STEP; + return createPortal( <>
{ wasFloatingLayerOpenRef.current = hasOpenFloatingLayer(); }} @@ -102,8 +119,9 @@ export const OverlayModal = ({ aria-modal="true" aria-label={ariaLabel} tabIndex={-1} + style={{ zIndex: panelZIndex }} className={cn( - "fixed top-1/2 left-1/2 z-50 flex -translate-x-1/2 -translate-y-1/2 flex-col rounded-[4px] bg-white transition-all duration-200 ease-out", + "fixed top-1/2 left-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col rounded-[4px] bg-white transition-all duration-200 ease-out", isVisible ? "scale-100 opacity-100" : "scale-95 opacity-0", className, )} From 089784247a90773d6df162429c8484fddc06778d Mon Sep 17 00:00:00 2001 From: jjangminii Date: Wed, 15 Jul 2026 21:21:52 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix(web):=20=ED=8F=AC=EC=BB=A4=EC=8A=A4=20?= =?UTF-8?q?=EC=84=B8=EC=85=98=20=EB=A9=94=EB=AA=A8=EA=B0=80=20=EA=B8=B8=20?= =?UTF-8?q?=EB=95=8C=20=EC=B9=B4=EB=93=9C=EA=B0=80=20=EA=B0=80=EB=A1=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 제목·서브태스크·메모의 줄바꿈을 wrap-break-word에서 wrap-anywhere로 교체해, 공백 없는 긴 텍스트가 flex 아이템의 자동 최소 너비를 부풀려 카드가 타이머 패널 뒤로 사라지는 문제를 해결했습니다 - 메모 영역에 max-h-[40vh]와 세로 스크롤을 추가해 긴 메모가 페이지 전체 높이를 늘리지 않도록 했습니다 --- .../[locale]/(main)/focus/_components/FocusTaskItem.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/timo-web/app/[locale]/(main)/focus/_components/FocusTaskItem.tsx b/apps/timo-web/app/[locale]/(main)/focus/_components/FocusTaskItem.tsx index a29c3ed1..1002ba8f 100644 --- a/apps/timo-web/app/[locale]/(main)/focus/_components/FocusTaskItem.tsx +++ b/apps/timo-web/app/[locale]/(main)/focus/_components/FocusTaskItem.tsx @@ -47,7 +47,7 @@ export const FocusTaskItem = ({
-

+

{title}

@@ -82,7 +82,7 @@ export const FocusTaskItem = ({
-
+
{subtasks.map((subtask) => (

@@ -103,7 +103,7 @@ export const FocusTaskItem = ({ ))} {memo && ( -

+

{memo}

)} From b0a25efe565ab2b0ea8794025a7992307a1ec42f Mon Sep 17 00:00:00 2001 From: jjangminii Date: Wed, 15 Jul 2026 21:45:23 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix(web):=20=ED=99=94=EB=A9=B4=20=EC=A0=84?= =?UTF-8?q?=EB=B0=98=EC=9D=98=20React=20Query=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=ED=82=A4=20=EC=97=B0=EB=8F=99=20=EB=88=84=EB=9D=BD=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=9C=EB=8B=A4=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Home/Today 탭과 사이드바 타이머에서 재생·일시정지·재개·완료·정지 시 집중 페이지 쿼리를 함께 invalidate하도록 했습니다 - 집중 페이지에서 완료·서브태스크 변경 시 Today 탭과 할 일 수정 모달 쿼리를 함께 invalidate하도록 했습니다 - 할 일 수정 모달에서 수정·삭제 시 집중 페이지 쿼리를 함께 invalidate하도록 했습니다 --- .../home/_hooks/use-home-todos-by-date.ts | 21 +++++++++++++----- .../today/_hooks/useTodayTodoList.ts | 22 +++++++++++++++++-- .../(main)/focus/_hooks/use-focus-session.ts | 17 ++++++++++++++ .../layout/sidebar/time/TimerPanel.tsx | 14 ++++++++++++ .../detail/use-delete-todo-submit.ts | 4 ++++ .../detail/use-update-todo-submit.ts | 4 ++++ 6 files changed, 75 insertions(+), 7 deletions(-) diff --git a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts index fff1170b..1e04b651 100644 --- a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts +++ b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts @@ -51,11 +51,25 @@ export const useHomeTodosByDate = ( const { invalidateHomeView, invalidateTimerState, invalidateTimeBoxes } = useTimerQueryInvalidation(); + const invalidateFocusTodo = () => { + queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); + }; + const { mutate: startTimer } = useStartTimer({ - mutation: { onSuccess: invalidateTimerState }, + mutation: { + onSuccess: () => { + invalidateTimerState(); + invalidateFocusTodo(); + }, + }, }); const { mutate: changeStatus } = useChangeStatus({ - mutation: { onSuccess: invalidateTimerState }, + mutation: { + onSuccess: () => { + invalidateTimerState(); + invalidateFocusTodo(); + }, + }, }); useEffect(() => { @@ -77,9 +91,6 @@ export const useHomeTodosByDate = ( })); }; - const invalidateFocusTodo = () => { - queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); - }; const invalidateHomeAndFocus = () => { invalidateHomeView(); invalidateFocusTodo(); diff --git a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts index b4b49af2..24dc4aea 100644 --- a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts +++ b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts @@ -7,6 +7,7 @@ import type { ErrorType } from "@/api/client/custom-instance"; import type { ErrorDto } from "@/api/generated/models"; import type { TodayTodo } from "@/app/[locale]/(main)/(with-time-sidebar)/today/_types/today-type"; +import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useChangeStatus, @@ -48,11 +49,25 @@ export const useTodayTodoList = ( const { invalidateTimerState, invalidateTimeBoxes } = useTimerQueryInvalidation(); + const invalidateFocusTodo = () => { + queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); + }; + const { mutate: startTimer } = useStartTimer({ - mutation: { onSuccess: invalidateTimerState }, + mutation: { + onSuccess: () => { + invalidateTimerState(); + invalidateFocusTodo(); + }, + }, }); const { mutate: changeStatus } = useChangeStatus({ - mutation: { onSuccess: invalidateTimerState }, + mutation: { + onSuccess: () => { + invalidateTimerState(); + invalidateFocusTodo(); + }, + }, }); useEffect(() => { @@ -96,6 +111,7 @@ export const useTodayTodoList = ( invalidateTodayView(); invalidateTimeBoxes(); invalidateTodoDetail(todoId, dateKey); + invalidateFocusTodo(); }, onError: () => { setTodos(previous); @@ -124,6 +140,7 @@ export const useTodayTodoList = ( onSuccess: () => { invalidateTodayView(); invalidateTodoDetail(todoId, dateKey); + invalidateFocusTodo(); }, }, ); @@ -207,6 +224,7 @@ export const useTodayTodoList = ( onSuccess: () => { invalidateTodayView(); invalidateTodoDetail(todoId, dateKey); + invalidateFocusTodo(); }, onError: () => { setTodos(previous); diff --git a/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts b/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts index 60ccb1fe..fb0b8392 100644 --- a/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts +++ b/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts @@ -6,6 +6,7 @@ import { useEffect, useRef } from "react"; import type { TimerSessionControlsHandle } from "@/components/timer/TimerSessionControls"; import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; +import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useChangeStatus, useCompleteTimer, @@ -14,6 +15,7 @@ import { useStopTimer, } from "@/api/generated/endpoints/timer/timer"; import { + getGetTodoDetailQueryKey, useChangeSubtaskStatus, useChangeTodoStatus, } from "@/api/generated/endpoints/todo/todo"; @@ -45,6 +47,15 @@ export const useFocusSession = ({ useTimerQueryInvalidation(); const invalidateFocusTodo = () => queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); + const invalidateTodayView = () => + queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); + const invalidateTodoDetail = () => { + const todo = focusView.todo; + if (!todo) return; + queryClient.invalidateQueries({ + queryKey: getGetTodoDetailQueryKey(todo.todoId, { date: focusView.date }), + }); + }; const { mutate: startTimer } = useStartTimer({ mutation: { @@ -84,6 +95,7 @@ export const useFocusSession = ({ invalidateFocusTodo(); invalidateHomeView(); invalidateTimeBoxes(); + invalidateTodayView(); }, onError: onMutationError, }, @@ -96,6 +108,7 @@ export const useFocusSession = ({ invalidateFocusTodo(); invalidateHomeView(); invalidateTimeBoxes(); + invalidateTodayView(); }, onError: onMutationError, }, @@ -105,6 +118,8 @@ export const useFocusSession = ({ onSuccess: () => { invalidateFocusTodo(); invalidateTimeBoxes(); + invalidateTodayView(); + invalidateTodoDetail(); }, onError: onMutationError, }, @@ -114,6 +129,8 @@ export const useFocusSession = ({ onSuccess: () => { invalidateFocusTodo(); invalidateTimeBoxes(); + invalidateTodayView(); + invalidateTodoDetail(); }, onError: onMutationError, }, diff --git a/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx b/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx index 562b0e4a..2e430ac7 100644 --- a/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx +++ b/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx @@ -1,7 +1,10 @@ "use client"; +import { useQueryClient } from "@tanstack/react-query"; import { useEffect, useRef, useState } from "react"; +import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; +import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useChangeStatus, useCompleteTimer, @@ -28,9 +31,14 @@ export const TimerPanel = () => { const timerSessionControlsRef = useRef(null); const wasTimeUpRef = useRef(false); + const queryClient = useQueryClient(); const { data: activeTimer } = useActiveTimer(); const { invalidateActiveTimer, invalidateHomeView, invalidateTimeBoxes } = useTimerQueryInvalidation(); + const invalidateTodayView = () => + queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); + const invalidateFocusTodo = () => + queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); const { mutate: changeStatus } = useChangeStatus({ mutation: { @@ -56,6 +64,8 @@ export const TimerPanel = () => { invalidateActiveTimer(); invalidateHomeView(); invalidateTimeBoxes(); + invalidateTodayView(); + invalidateFocusTodo(); }, }, }); @@ -66,6 +76,8 @@ export const TimerPanel = () => { invalidateActiveTimer(); invalidateHomeView(); invalidateTimeBoxes(); + invalidateTodayView(); + invalidateFocusTodo(); }, }, }); @@ -74,6 +86,8 @@ export const TimerPanel = () => { onSuccess: () => { invalidateHomeView(); invalidateTimeBoxes(); + invalidateTodayView(); + invalidateFocusTodo(); }, }, }); diff --git a/apps/timo-web/hooks/todo-modal/detail/use-delete-todo-submit.ts b/apps/timo-web/hooks/todo-modal/detail/use-delete-todo-submit.ts index 0ad7d7da..74fffc5b 100644 --- a/apps/timo-web/hooks/todo-modal/detail/use-delete-todo-submit.ts +++ b/apps/timo-web/hooks/todo-modal/detail/use-delete-todo-submit.ts @@ -5,6 +5,7 @@ import { useQueryClient } from "@tanstack/react-query"; import type { ErrorType } from "@/api/client/custom-instance"; import type { ErrorDto } from "@/api/generated/models"; +import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; import { getGetHomeQueryKey, getGetTodayQueryKey, @@ -30,6 +31,9 @@ export const useDeleteTodoSubmit = () => { onSuccess: () => { queryClient.invalidateQueries({ queryKey: getGetHomeQueryKey() }); queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); + queryClient.invalidateQueries({ + queryKey: getGetFocusTodoQueryKey(), + }); onSuccess(); }, onError, diff --git a/apps/timo-web/hooks/todo-modal/detail/use-update-todo-submit.ts b/apps/timo-web/hooks/todo-modal/detail/use-update-todo-submit.ts index b145e719..6a9379f5 100644 --- a/apps/timo-web/hooks/todo-modal/detail/use-update-todo-submit.ts +++ b/apps/timo-web/hooks/todo-modal/detail/use-update-todo-submit.ts @@ -5,6 +5,7 @@ import { useQueryClient } from "@tanstack/react-query"; import type { ErrorType } from "@/api/client/custom-instance"; import type { ErrorDto, TodoUpdateRequest } from "@/api/generated/models"; +import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; import { getGetHomeQueryKey, getGetTodayQueryKey, @@ -42,6 +43,9 @@ export const useUpdateTodoSubmit = () => { queryClient.invalidateQueries({ queryKey: getGetTodoDetailQueryKey(todoId, { date }), }); + queryClient.invalidateQueries({ + queryKey: getGetFocusTodoQueryKey(), + }); onSuccess?.(); }, onError, From 2cbb20c260ec0fa8112b66da1a4cfd9c0390e34f Mon Sep 17 00:00:00 2001 From: jjangminii Date: Wed, 15 Jul 2026 22:10:28 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor(web):=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=9C=20=EC=BF=BC=EB=A6=AC=20invalidate=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EA=B3=B5=EC=9C=A0=20=ED=9B=85=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=86=B5=ED=95=A9=ED=95=9C=EB=8B=A4=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 4개 파일에 중복 정의돼 있던 invalidateTodayView/invalidateFocusTodo를 useTimerQueryInvalidation 훅으로 통합했습니다 --- .../home/_hooks/use-home-todos-by-date.ts | 13 ++++++------- .../today/_hooks/useTodayTodoList.ts | 17 ++++++----------- .../(main)/focus/_hooks/use-focus-session.ts | 15 +++++++-------- .../layout/sidebar/time/TimerPanel.tsx | 17 +++++++---------- .../hooks/timer/use-timer-query-invalidation.ts | 12 +++++++++++- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts index 1e04b651..7d2c5ad8 100644 --- a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts +++ b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts @@ -7,7 +7,6 @@ import type { ApiError } from "@/api/error/api-error"; import type { HomeViewDay } from "@/app/[locale]/(main)/(with-time-sidebar)/home/_types/home-view-type"; import type { Todo } from "@/app/[locale]/(main)/(with-time-sidebar)/home/_types/todo-type"; -import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; import { useChangeStatus, useStartTimer, @@ -48,12 +47,12 @@ export const useHomeTodosByDate = ( const { mutate: changeSubtaskStatus } = useChangeSubtaskStatus(); const { mutate: reorderTodo } = useReorderTodo(); const { mutate: stopTimer } = useStopTimer(); - const { invalidateHomeView, invalidateTimerState, invalidateTimeBoxes } = - useTimerQueryInvalidation(); - - const invalidateFocusTodo = () => { - queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); - }; + const { + invalidateHomeView, + invalidateTimerState, + invalidateTimeBoxes, + invalidateFocusTodo, + } = useTimerQueryInvalidation(); const { mutate: startTimer } = useStartTimer({ mutation: { diff --git a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts index 24dc4aea..5e087253 100644 --- a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts +++ b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts @@ -7,8 +7,6 @@ import type { ErrorType } from "@/api/client/custom-instance"; import type { ErrorDto } from "@/api/generated/models"; import type { TodayTodo } from "@/app/[locale]/(main)/(with-time-sidebar)/today/_types/today-type"; -import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; -import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useChangeStatus, useStartTimer, @@ -46,12 +44,12 @@ export const useTodayTodoList = ( const { mutate: changeTodoStatus } = useChangeTodoStatus(); const { mutate: changeSubtaskStatus } = useChangeSubtaskStatus(); const { mutate: stopTimer } = useStopTimer(); - const { invalidateTimerState, invalidateTimeBoxes } = - useTimerQueryInvalidation(); - - const invalidateFocusTodo = () => { - queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); - }; + const { + invalidateTimerState, + invalidateTimeBoxes, + invalidateTodayView, + invalidateFocusTodo, + } = useTimerQueryInvalidation(); const { mutate: startTimer } = useStartTimer({ mutation: { @@ -83,9 +81,6 @@ export const useTodayTodoList = ( ); }; - const invalidateTodayView = () => { - queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); - }; const invalidateTodoDetail = (todoId: number, dateKey: string) => { queryClient.invalidateQueries({ queryKey: getGetTodoDetailQueryKey(todoId, { date: dateKey }), diff --git a/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts b/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts index fb0b8392..e7e104df 100644 --- a/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts +++ b/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts @@ -5,8 +5,6 @@ import { useEffect, useRef } from "react"; import type { TimerSessionControlsHandle } from "@/components/timer/TimerSessionControls"; -import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; -import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useChangeStatus, useCompleteTimer, @@ -43,12 +41,13 @@ export const useFocusSession = ({ const { data: focusView } = useFocusTodoQuery(); const { data: activeTimer } = useActiveTimer(); - const { invalidateActiveTimer, invalidateHomeView, invalidateTimeBoxes } = - useTimerQueryInvalidation(); - const invalidateFocusTodo = () => - queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); - const invalidateTodayView = () => - queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); + const { + invalidateActiveTimer, + invalidateHomeView, + invalidateTimeBoxes, + invalidateTodayView, + invalidateFocusTodo, + } = useTimerQueryInvalidation(); const invalidateTodoDetail = () => { const todo = focusView.todo; if (!todo) return; diff --git a/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx b/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx index 2e430ac7..636562ac 100644 --- a/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx +++ b/apps/timo-web/components/layout/sidebar/time/TimerPanel.tsx @@ -1,10 +1,7 @@ "use client"; -import { useQueryClient } from "@tanstack/react-query"; import { useEffect, useRef, useState } from "react"; -import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; -import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useChangeStatus, useCompleteTimer, @@ -31,14 +28,14 @@ export const TimerPanel = () => { const timerSessionControlsRef = useRef(null); const wasTimeUpRef = useRef(false); - const queryClient = useQueryClient(); const { data: activeTimer } = useActiveTimer(); - const { invalidateActiveTimer, invalidateHomeView, invalidateTimeBoxes } = - useTimerQueryInvalidation(); - const invalidateTodayView = () => - queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); - const invalidateFocusTodo = () => - queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); + const { + invalidateActiveTimer, + invalidateHomeView, + invalidateTimeBoxes, + invalidateTodayView, + invalidateFocusTodo, + } = useTimerQueryInvalidation(); const { mutate: changeStatus } = useChangeStatus({ mutation: { diff --git a/apps/timo-web/hooks/timer/use-timer-query-invalidation.ts b/apps/timo-web/hooks/timer/use-timer-query-invalidation.ts index c9d009ea..38b3662a 100644 --- a/apps/timo-web/hooks/timer/use-timer-query-invalidation.ts +++ b/apps/timo-web/hooks/timer/use-timer-query-invalidation.ts @@ -2,7 +2,11 @@ import { useQueryClient } from "@tanstack/react-query"; -import { getGetHomeQueryKey } from "@/api/generated/endpoints/home/home"; +import { getGetFocusTodoQueryKey } from "@/api/generated/endpoints/focus/focus"; +import { + getGetHomeQueryKey, + getGetTodayQueryKey, +} from "@/api/generated/endpoints/home/home"; import { getGetTimeBoxesQueryKey } from "@/api/generated/endpoints/time-box/time-box"; import { getGetActiveTimerQueryKey } from "@/api/generated/endpoints/timer/timer"; @@ -15,6 +19,10 @@ export const useTimerQueryInvalidation = () => { queryClient.invalidateQueries({ queryKey: getGetHomeQueryKey() }); const invalidateTimeBoxes = () => queryClient.invalidateQueries({ queryKey: getGetTimeBoxesQueryKey() }); + const invalidateTodayView = () => + queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); + const invalidateFocusTodo = () => + queryClient.invalidateQueries({ queryKey: getGetFocusTodoQueryKey() }); const invalidateTimerState = () => { invalidateActiveTimer(); invalidateHomeView(); @@ -25,6 +33,8 @@ export const useTimerQueryInvalidation = () => { invalidateActiveTimer, invalidateHomeView, invalidateTimeBoxes, + invalidateTodayView, + invalidateFocusTodo, invalidateTimerState, }; };