From 4540a722df41f6223a27d6fc9e2e259ee026082e Mon Sep 17 00:00:00 2001 From: opficdev Date: Tue, 3 Mar 2026 12:19:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?ui:=20=EC=99=84=EB=A3=8C=20=EC=8B=9C?= =?UTF-8?q?=EC=A0=90=EA=B3=BC=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=EC=A0=90?= =?UTF-8?q?=EC=9D=84=20=EB=B3=B4=EC=97=AC=EC=A3=BC=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DevLog/Resource/Localizable.xcstrings | 6 +++ DevLog/UI/Common/TodoInfoSheetView.swift | 55 ++++++++++++++++++++---- DevLog/UI/Home/TodoDetailView.swift | 15 ++++--- DevLog/UI/Profile/ProfileView.swift | 2 + 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/DevLog/Resource/Localizable.xcstrings b/DevLog/Resource/Localizable.xcstrings index 613f465..d93cdcf 100644 --- a/DevLog/Resource/Localizable.xcstrings +++ b/DevLog/Resource/Localizable.xcstrings @@ -325,6 +325,9 @@ }, "새 계정 연동" : { + }, + "생성일" : { + }, "설명(선택 사항)" : { @@ -355,6 +358,9 @@ }, "완료 상태" : { + }, + "완료 시점" : { + }, "읽지 않음" : { diff --git a/DevLog/UI/Common/TodoInfoSheetView.swift b/DevLog/UI/Common/TodoInfoSheetView.swift index 1cecba8..2d532ac 100644 --- a/DevLog/UI/Common/TodoInfoSheetView.swift +++ b/DevLog/UI/Common/TodoInfoSheetView.swift @@ -8,6 +8,8 @@ import SwiftUI struct TodoInfoSheetView: View { + let createdAt: Date + let completedAt: Date? let dueDate: Date? let tags: [String] let onClose: () -> Void @@ -16,13 +18,28 @@ struct TodoInfoSheetView: View { NavigationStack { ScrollView { LazyVStack(spacing: 32) { - VStack { - HStack { - Text("마감일") - .font(.subheadline) - .foregroundStyle(.secondary) + VStack(alignment: .leading) { + Text("생성일") + .font(.subheadline) + .foregroundStyle(.secondary) + HStack(spacing: 8) { + Image(systemName: "calendar") + .foregroundStyle(.white) + Text(createdAt.formatted(date: .abbreviated, time: .omitted)) Spacer() } + .padding(.vertical, 10) + .padding(.horizontal, 12) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(.blue) + ) + Divider() + } + VStack(alignment: .leading) { + Text("마감일") + .font(.subheadline) + .foregroundStyle(.secondary) HStack(spacing: 8) { Image(systemName: "calendar") .foregroundStyle(.secondary) @@ -42,13 +59,33 @@ struct TodoInfoSheetView: View { ) Divider() } - VStack { - HStack { - Text("태그") - .font(.subheadline) + VStack(alignment: .leading) { + Text("완료 시점") + .font(.subheadline) + .foregroundStyle(.secondary) + HStack(spacing: 8) { + Image(systemName: "calendar") .foregroundStyle(.secondary) + Text( + completedAt? + .formatted(date: .abbreviated, time: .omitted) + ?? "완료하지 않음" + ) + .foregroundStyle(.white) Spacer() } + .padding(.vertical, 10) + .padding(.horizontal, 12) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(.green) + ) + Divider() + } + VStack(alignment: .leading) { + Text("태그") + .font(.subheadline) + .foregroundStyle(.secondary) Divider() if !tags.isEmpty { TagLayout { diff --git a/DevLog/UI/Home/TodoDetailView.swift b/DevLog/UI/Home/TodoDetailView.swift index 12e5af9..4fb81c0 100644 --- a/DevLog/UI/Home/TodoDetailView.swift +++ b/DevLog/UI/Home/TodoDetailView.swift @@ -64,12 +64,17 @@ struct TodoDetailView: View { } } + @ViewBuilder private var sheetContent: some View { - TodoInfoSheetView( - dueDate: viewModel.state.todo?.dueDate, - tags: viewModel.state.todo?.tags ?? [] - ) { - viewModel.send(.setShowInfo(false)) + if let todo = viewModel.state.todo { + TodoInfoSheetView( + createdAt: todo.createdAt, + completedAt: todo.completedAt, + dueDate: todo.dueDate, + tags: todo.tags + ) { + viewModel.send(.setShowInfo(false)) + } } } } diff --git a/DevLog/UI/Profile/ProfileView.swift b/DevLog/UI/Profile/ProfileView.swift index d758801..0a43668 100644 --- a/DevLog/UI/Profile/ProfileView.swift +++ b/DevLog/UI/Profile/ProfileView.swift @@ -294,6 +294,8 @@ private struct ProfileActivityTodoDetailView: View { private var infoSheetContent: some View { TodoInfoSheetView( + createdAt: activity.todo.createdAt, + completedAt: activity.todo.completedAt, dueDate: activity.todo.dueDate, tags: activity.todo.tags ) { From b6f9d0c729f18f4b49c3f9656b9e925bb4913e45 Mon Sep 17 00:00:00 2001 From: opficdev Date: Tue, 3 Mar 2026 12:21:04 +0900 Subject: [PATCH 2/3] =?UTF-8?q?ui:=20=EC=99=84=EB=A3=8C=20=EC=8B=9C?= =?UTF-8?q?=EC=A0=90=20->=20=EC=99=84=EB=A3=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DevLog/UI/Common/TodoInfoSheetView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DevLog/UI/Common/TodoInfoSheetView.swift b/DevLog/UI/Common/TodoInfoSheetView.swift index 2d532ac..a80ee51 100644 --- a/DevLog/UI/Common/TodoInfoSheetView.swift +++ b/DevLog/UI/Common/TodoInfoSheetView.swift @@ -60,7 +60,7 @@ struct TodoInfoSheetView: View { Divider() } VStack(alignment: .leading) { - Text("완료 시점") + Text("완료일") .font(.subheadline) .foregroundStyle(.secondary) HStack(spacing: 8) { From d9cf40f4f8179ffe3c29b061f02b168c9624432e Mon Sep 17 00:00:00 2001 From: opficdev Date: Tue, 3 Mar 2026 12:24:15 +0900 Subject: [PATCH 3/3] =?UTF-8?q?ui:=20=EC=83=89=EC=83=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DevLog/UI/Common/TodoInfoSheetView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DevLog/UI/Common/TodoInfoSheetView.swift b/DevLog/UI/Common/TodoInfoSheetView.swift index a80ee51..05e430c 100644 --- a/DevLog/UI/Common/TodoInfoSheetView.swift +++ b/DevLog/UI/Common/TodoInfoSheetView.swift @@ -21,7 +21,7 @@ struct TodoInfoSheetView: View { VStack(alignment: .leading) { Text("생성일") .font(.subheadline) - .foregroundStyle(.secondary) + .foregroundStyle(.white) HStack(spacing: 8) { Image(systemName: "calendar") .foregroundStyle(.white)