From d2d2034515455ead5b3d9cb55de634c74cf75baf Mon Sep 17 00:00:00 2001
From: Wonhee Han <47270724+neruhan01@users.noreply.github.com>
Date: Thu, 20 Aug 2026 14:56:19 +0900
Subject: [PATCH] Fix: Context menu delete integration with recursive tree,
added Created and Edited timestamps in detail panel footer
---
src/components/layout/AppShell.tsx | 4 ++++
src/components/tasks/TaskDetail.tsx | 33 ++++++++++++++++++++---------
src/components/tasks/TaskList.tsx | 10 +++++----
src/lib/i18n/index.tsx | 5 ++++-
4 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/src/components/layout/AppShell.tsx b/src/components/layout/AppShell.tsx
index 51c74e0..d7f7bbe 100644
--- a/src/components/layout/AppShell.tsx
+++ b/src/components/layout/AppShell.tsx
@@ -279,6 +279,10 @@ export function AppShell({ user, isDemo = false }: AppShellProps) {
onDemoToggleTask={handleDemoToggleTask}
onUpdateTaskTitle={handleUpdateTaskTitle}
onUpdateListName={handleUpdateListName}
+ onDeleteTask={isDemo ? handleDemoDeleteTask : async (id: string) => {
+ await fetch(`/api/tasks/${id}`, { method: "DELETE" });
+ refresh();
+ }}
/>
diff --git a/src/components/tasks/TaskDetail.tsx b/src/components/tasks/TaskDetail.tsx
index 828436f..3a9d5c6 100644
--- a/src/components/tasks/TaskDetail.tsx
+++ b/src/components/tasks/TaskDetail.tsx
@@ -490,21 +490,34 @@ export function TaskDetail({
)}
- {/* Footer Info: Project Badge & Timestamp */}
-
+ {/* Footer Info: Project Badge, Created & Edited Timestamps */}
+
{listName && (
📁 {listName}
)}
-
- {t("created")}:{" "}
- {new Date(task.createdAt).toLocaleDateString(lang === "ko" ? "ko-KR" : lang === "ja" ? "ja-JP" : "en-US", {
- year: "numeric",
- month: "short",
- day: "numeric",
- })}
-
+
+
+ {t("created")}:{" "}
+ {new Date(task.createdAt).toLocaleDateString(lang === "ko" ? "ko-KR" : lang === "ja" ? "ja-JP" : "en-US", {
+ year: "numeric",
+ month: "short",
+ day: "numeric",
+ })}
+
+ {task.updatedAt && (
+
+ {t("edited")}:{" "}
+ {new Date(task.updatedAt).toLocaleTimeString(lang === "ko" ? "ko-KR" : lang === "ja" ? "ja-JP" : "en-US", {
+ month: "short",
+ day: "numeric",
+ hour: "2-digit",
+ minute: "2-digit",
+ })}
+
+ )}
+
diff --git a/src/components/tasks/TaskList.tsx b/src/components/tasks/TaskList.tsx
index 49b597b..20d5e03 100644
--- a/src/components/tasks/TaskList.tsx
+++ b/src/components/tasks/TaskList.tsx
@@ -1,4 +1,4 @@
-"use client";
+"use client";
import React, { useState, useEffect, useRef, useCallback } from "react";
import { useI18n } from "@/lib/i18n";
import { ContextMenu, MenuItem } from "@/components/ui/ContextMenu";
@@ -340,6 +340,7 @@ interface Props {
onDemoToggleTask?: (id: string, completed: boolean) => void;
onUpdateTaskTitle?: (id: string, title: string) => void;
onUpdateListName?: (id: string, name: string) => void;
+ onDeleteTask?: (id: string) => void;
}
export function TaskList({
@@ -359,6 +360,7 @@ export function TaskList({
onDemoToggleTask,
onUpdateTaskTitle,
onUpdateListName,
+ onDeleteTask,
}: Props) {
const { t } = useI18n();
const [newTaskTitle, setNewTaskTitle] = useState("");
@@ -671,9 +673,9 @@ export function TaskList({
icon: "🗑️",
danger: true,
onClick: async () => {
- if (isDemo) {
- setTasks((prev) => prev.filter((t) => t.id !== contextMenu.task.id));
- } else {
+ if (onDeleteTask) {
+ onDeleteTask(contextMenu.task.id);
+ } else if (!isDemo) {
await fetch(`/api/tasks/${contextMenu.task.id}`, { method: "DELETE" });
onRefresh();
}
diff --git a/src/lib/i18n/index.tsx b/src/lib/i18n/index.tsx
index 92587d3..b6f2670 100644
--- a/src/lib/i18n/index.tsx
+++ b/src/lib/i18n/index.tsx
@@ -1,4 +1,4 @@
-"use client";
+"use client";
import React, { createContext, useContext, useState, useEffect } from "react";
export type Language = "en" | "ko" | "ja";
@@ -76,6 +76,7 @@ export const translations = {
autoSaved: "Auto-saved",
saving: "Saving…",
created: "Created",
+ edited: "Edited",
// Toolbars
bold: "Bold",
@@ -158,6 +159,7 @@ export const translations = {
autoSaved: "자동 저장됨",
saving: "저장 중…",
created: "생성일",
+ edited: "수정일",
// Toolbars
bold: "굵게",
@@ -240,6 +242,7 @@ export const translations = {
autoSaved: "自動保存済み",
saving: "保存中…",
created: "作成日時",
+ edited: "更新日時",
// Toolbars
bold: "太字",