@@ -15,6 +15,7 @@ struct TodoEditorView: View {
1515 @Environment ( \. dismiss) private var dismiss
1616 @FocusState private var field : Field ?
1717 @State private var showDueDatePicker : Bool = false
18+ private let calendar = Calendar . current
1819 var onSubmit : ( ( Todo ) -> Void ) ?
1920
2021 var body : some View {
@@ -175,30 +176,30 @@ struct TodoEditorView: View {
175176 }
176177 . adaptiveButtonStyle ( )
177178 }
178- DueDatePicker ( selection: Binding (
179- get: { viewModel. state. dueDate ?? Date ( ) } ,
180- set: { viewModel. send ( . setDueDate( $0) ) }
181- ) ) {
182- HStack {
183- Label {
184- Text ( " 마감일 " )
185- } icon: {
186- Image ( systemName: " calendar " )
187- . foregroundStyle ( . gray)
179+ dueDateControl
180+ }
181+ }
182+
183+ private var dueDateControl : some View {
184+ DueDatePicker ( selection: Binding (
185+ get: { viewModel. state. dueDate ?? Date ( ) } ,
186+ set: { viewModel. send ( . setDueDate( $0) ) }
187+ ) ) {
188+ Label {
189+ if let dueDate = viewModel. state. dueDate {
190+ Tag ( dueDateText ( for: dueDate) , isEditing: true ) {
191+ viewModel. send ( . setDueDate( nil ) )
188192 }
189- Image ( systemName: " checkmark.square " )
190- . symbolRenderingMode ( . palette)
191- . foregroundStyle (
192- viewModel. state. hasDueDate ? . blue : . clear,
193- . gray
194- )
195- . onTapGesture {
196- viewModel. send ( . setDueDate( viewModel. state. hasDueDate ? nil : Date ( ) ) )
197- }
193+ . padding ( . vertical, - 4 )
194+ } else {
195+ Text ( " 마감일 " )
198196 }
199- . adaptiveButtonStyle ( )
197+ } icon: {
198+ Image ( systemName: " calendar " )
199+ . foregroundStyle ( . gray)
200200 }
201201 }
202+ . adaptiveButtonStyle ( )
202203 }
203204
204205 private func submit( ) {
@@ -210,6 +211,21 @@ struct TodoEditorView: View {
210211 private enum Field : Hashable {
211212 case title, description, tag
212213 }
214+
215+ private func dueDateText( for dueDate: Date ) -> String {
216+ let currentYear = calendar. component ( . year, from: Date ( ) )
217+ let dueDateYear = calendar. component ( . year, from: dueDate)
218+
219+ if currentYear == dueDateYear {
220+ return dueDate. formatted (
221+ . dateTime. month ( . defaultDigits) . day ( . defaultDigits)
222+ )
223+ }
224+
225+ return dueDate. formatted (
226+ . dateTime. year ( . twoDigits) . month ( . defaultDigits) . day ( . defaultDigits)
227+ )
228+ }
213229}
214230
215231private struct TagEditor < Content: View > : View {
0 commit comments