Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f7267f3
refactor(web): container 구조 분리 (#186)
yumin-kim2 Jul 14, 2026
08e3104
Merge remote-tracking branch 'origin/develop' into feat/web/186-todo-…
yumin-kim2 Jul 14, 2026
874f2ba
feat(web): todo 상세 조회 api 연결 (#186)
yumin-kim2 Jul 14, 2026
b0924f5
fix(web): 투두 상세 모달 날짜 요일 표시 수정 (#186)
yumin-kim2 Jul 14, 2026
e11cf4f
feat(web): todo 삭제 api 연결 (#186)
yumin-kim2 Jul 14, 2026
6920a54
fix(web): 플레이 버튼 클릭 시 상세 모달 열림 방지 (#186)
yumin-kim2 Jul 14, 2026
d6779d5
fix(web): 상세 모달 태그 목록 및 다국어 표시 수정 (#186)
yumin-kim2 Jul 14, 2026
9a82258
feat(web): 상세 모달 저장 기능 및 수정 API 연결
yumin-kim2 Jul 14, 2026
f81b863
refactor(web): 투두 모달 훅 구조 정리 (#186)
yumin-kim2 Jul 14, 2026
f33e51b
Merge remote-tracking branch 'origin/develop' into feat/web/186-todo-…
yumin-kim2 Jul 14, 2026
628637d
fix(web): check-types 에러 해결 (#186)
yumin-kim2 Jul 14, 2026
58953fa
Merge remote-tracking branch 'origin/develop' into feat/web/186-todo-…
yumin-kim2 Jul 14, 2026
dfbfb55
fix(web): 메모 typo, 글자 색 수정 (#186)
yumin-kim2 Jul 14, 2026
62d9c39
refactor(web): 상세 모달 구조 리뷰 반영 (#186)
yumin-kim2 Jul 14, 2026
b59931a
fix(web): 모달 레이아웃 수정 (#186)
yumin-kim2 Jul 14, 2026
d8ee8dc
refactor(web): 상세 모달 수정 요청 생성 로직 정리 (#186)
yumin-kim2 Jul 14, 2026
6d97ff4
feat(web): 상세 모달 즉시 수정 저장 연결 (#186)
yumin-kim2 Jul 14, 2026
2bc8ac4
feat(web): 상세 모달 텍스트 수정 디바운스 저장 연결 (#186)
yumin-kim2 Jul 14, 2026
fff3ab7
fix(web): 타이머 진행 중 상세 모달 수정 방지 (#186)
yumin-kim2 Jul 14, 2026
e2f7eea
Merge remote-tracking branch 'origin/develop' into feat/web/186-todo-…
yumin-kim2 Jul 14, 2026
2e73a47
fix(web): 수정 실패 토스트 서버 메시지 표시 (#186)
yumin-kim2 Jul 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import type {
TodoPriorityTypes,
TodoTimerStatusTypes,
} from "@/app/[locale]/(main)/(with-time-sidebar)/home/_types/todo-type";
import type { KeyboardEvent, MouseEvent } from "react";
import type { KeyboardEvent, MouseEvent, PointerEvent } from "react";

import { convertDurationToTimeText } from "@/utils/todo/todo-time";

Expand Down Expand Up @@ -103,6 +103,17 @@ export const HomeTodoCard = ({
onClickTodo();
};

const stopInteractiveEvent = (
event: MouseEvent<HTMLButtonElement> | PointerEvent<HTMLButtonElement>,
) => {
event.stopPropagation();
};

const handlePlayClick = (event: MouseEvent<HTMLButtonElement>) => {
stopInteractiveEvent(event);
onTogglePlay();
};

const titleRow = (
<div className="flex w-full items-center justify-between gap-2">
<div className="flex min-w-0 flex-1 items-center gap-1">
Expand All @@ -120,7 +131,8 @@ export const HomeTodoCard = ({
variant={isRunning ? "stop" : "play"}
size="sm"
disabled={isCompleted}
onClick={onTogglePlay}
onClick={handlePlayClick}
onPointerDown={stopInteractiveEvent}
>
{isCompleted ? (
<PlayDisabledIcon />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { useHomeTodosByDate } from "@/app/[locale]/(main)/(with-time-sidebar)/ho
import { useHomeViewMode } from "@/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-view-mode";
import { useHomeView } from "@/app/[locale]/(main)/(with-time-sidebar)/home/_queries/use-home-view";
import { AnimatedToast } from "@/components/toast/AnimatedToast";
import { DetailTodoModalContainer } from "@/components/todo-modal/detail/DetailTodoModalContainer";
import { DetailTodoModalContainer } from "@/containers/todo-modal/detail/DetailTodoModalContainer";
import { DndSortableListProvider } from "@/providers/dnd/DndSortableListProvider";
import { formatDateKey } from "@/utils/date/date";
import { convertDurationToMinutes } from "@/utils/duration/convert-duration-to-minutes";
Expand Down Expand Up @@ -151,7 +151,8 @@ export const HomeTodoContainer = () => {
return (
<DetailTodoModalContainer
key={todo.todoId}
todo={todo}
todoId={todo.todoId}
date={dateKey}
onTogglePlay={() =>
handleTogglePlay(dateKey, todo.todoId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type { ApiDayOfWeek } from "@/app/[locale]/(main)/(with-time-sidebar)/hom

import { DateInformation } from "@/app/[locale]/(main)/(with-time-sidebar)/_components/DateInformation";
import { convertDateToDateText } from "@/app/[locale]/(main)/(with-time-sidebar)/home/_utils/date";
import { CreateTodoModalContainer } from "@/components/todo-modal/create/CreateTodoModalContainer";
import { CreateTodoModalContainer } from "@/containers/todo-modal/create/CreateTodoModalContainer";
import { getToday, parseDateKey } from "@/utils/date/date";

export interface HomeDayHeaderContainerProps {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { DateInformation } from "@/app/[locale]/(main)/(with-time-sidebar)/_comp
import { convertDateToDateText } from "@/app/[locale]/(main)/(with-time-sidebar)/home/_utils/date";
import { useCreateTodoSubmit } from "@/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/todo-modal/use-create-todo-submit";
import { AnimatedToast } from "@/components/toast/AnimatedToast";
import { CreateTodoModalContainer } from "@/components/todo-modal/create/CreateTodoModalContainer";
import { CreateTodoModalContainer } from "@/containers/todo-modal/create/CreateTodoModalContainer";
import { getToday } from "@/utils/date/date";
import { getDayOfWeekKey } from "@/utils/date/get-day-of-week-key";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { TodayDateHeaderContainer } from "@/app/[locale]/(main)/(with-time-sideb
import { TodayTodoCardContainer } from "@/app/[locale]/(main)/(with-time-sidebar)/today/_containers/TodayTodoCardContainer";
import { useTodayTodoList } from "@/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList";
import { useToday } from "@/app/[locale]/(main)/(with-time-sidebar)/today/_queries/use-today";
import { DetailTodoModalContainer } from "@/components/todo-modal/detail/DetailTodoModalContainer";
import { DetailTodoModalContainer } from "@/containers/todo-modal/detail/DetailTodoModalContainer";
import { formatDate } from "@/utils/date/date";
import { convertDurationToTimeText } from "@/utils/duration/convert-duration-to-time-text";

Expand Down Expand Up @@ -46,7 +46,8 @@ export const TodayTodoListContainer = () => {
{todos.map((todo) => (
<DetailTodoModalContainer
key={todo.todoId}
todo={todo}
todoId={todo.todoId}
date={todo.date.slice(0, 10)}
onTogglePlay={() => handlePlay(todo.todoId)}
onDelete={() => handleDelete(todo.todoId)}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ import { AnimatedToast } from "@/components/toast/AnimatedToast";
import { TodoIconField } from "@/components/todo-modal/common/TodoIconField";
import { CreateTodoMemoField } from "@/components/todo-modal/create/CreateTodoMemoField";
import { CreateTodoTaskFields } from "@/components/todo-modal/create/CreateTodoTaskFields";
import { useIconField } from "@/hooks/todo-modal/use-icon-field";
import { useRepeatField } from "@/hooks/todo-modal/use-repeat-field";
import { useSubtaskField } from "@/hooks/todo-modal/use-subtask-field";
import { useTagField } from "@/hooks/todo-modal/use-tag-field";
import { useTimeField } from "@/hooks/todo-modal/use-time-field";
import { useTitleField } from "@/hooks/todo-modal/use-title-field";
import { useTagField } from "@/hooks/todo-modal/common/use-tag-field";
import { useIconField } from "@/hooks/todo-modal/create/use-icon-field";
import { useRepeatField } from "@/hooks/todo-modal/create/use-repeat-field";
import { useSubtaskField } from "@/hooks/todo-modal/create/use-subtask-field";
import { useTimeField } from "@/hooks/todo-modal/create/use-time-field";
import { useTitleField } from "@/hooks/todo-modal/create/use-title-field";
import { formatDateKey, formatShortDateLabel } from "@/utils/date/date";

const createDefaultValues = (defaultDate?: Date): CreateTodoRequest => ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ export interface DetailTodoMemoFieldProps {
placeholder: string;
onChange: (value: string) => void;
maxLength: number;
disabled?: boolean;
}

export const DetailTodoMemoField = ({
value,
placeholder,
onChange,
maxLength,
disabled = false,
}: DetailTodoMemoFieldProps) => {
const textareaRef = useRef<HTMLTextAreaElement>(null);

Expand All @@ -30,7 +32,8 @@ export const DetailTodoMemoField = ({
placeholder={placeholder}
maxLength={maxLength}
onChange={(event) => onChange(event.target.value)}
className="typo-body-r-14 text-timo-black placeholder:text-timo-gray-700 min-h-20 w-full resize-none overflow-hidden p-1 outline-none"
disabled={disabled}
className="typo-headline-r-14 text-timo-gray-700 min-h-20 w-full resize-none overflow-hidden p-1 outline-none"
/>
);
};

This file was deleted.

Loading
Loading