Add description field

This commit is contained in:
2023-07-13 13:02:39 +02:00
parent 60874d4eb0
commit 0ff3803059
4 changed files with 68 additions and 31 deletions

View File

@ -10,39 +10,52 @@ import AppKit
struct MainView: View {
private enum FocusStateField: Hashable{
case titleField
case descriptionField
}
@State var taskTitle = ""
@State var taskDescription = ""
@State var listTask: [String] = []
@State var listTask: [Task] = []
@State var showAdditionnalFields = false
@FocusState private var titleFieldInFocus: Bool
@FocusState private var descriptionFieldInFocus: Bool
@FocusState private var focusState: FocusStateField?
var body: some View {
VStack {
Text("Mes tâches")
LazyVStack(alignment: .leading) {
ForEach(Array(listTask.enumerated()), id: \.offset) { index, task in
HStack {
Text("\(task)")
.padding(EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 8))
Spacer()
Button(action: {
removeTask(index: index)
}, label: {
Image(systemName: "trash")
}).buttonStyle(PlainButtonStyle()).padding(12)
.foregroundColor(.accentColor)
}.border(width: 5, edges: [.leading], color: .accentColor)
ScrollView {
LazyVStack(alignment: .leading) {
ForEach(Array(listTask.enumerated()), id: \.offset) { index, task in
HStack {
VStack(alignment: .leading) {
Text("\(task.title)").font(.system(size: 16))
if !task.description.isEmpty {
Text("\(task.description)")
}
}
.padding(EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 8))
Spacer()
Button(action: {
removeTask(index: index)
}, label: {
Image(systemName: "trash")
}).buttonStyle(PlainButtonStyle()).padding(12)
.foregroundColor(.accentColor)
}.border(width: 5, edges: [.leading], color: .accentColor)
}
}
}
Spacer()
Divider()
HStack {
TextField("Titre de la tâche ...", text: $taskTitle).focused($titleFieldInFocus).onChange(of: titleFieldInFocus) { isFocused in
if !isFocused {
TextField("Titre de la tâche ...", text: $taskTitle).focused($focusState, equals: .titleField).onChange(of: focusState) { newFocusState in
if newFocusState != .titleField {
withAnimation {
showAdditionnalFields = true
focusState = .descriptionField
}
}
}.onSubmit {
@ -58,7 +71,9 @@ struct MainView: View {
.cornerRadius(24)
}.textFieldStyle(OvalTextFieldStyle())
if showAdditionnalFields {
TextField("Description", text: $taskDescription).focused($descriptionFieldInFocus)
TextField("Description ...", text: $taskDescription).focused($focusState, equals: .descriptionField).textFieldStyle(OvalTextFieldStyle()).padding(EdgeInsets(top: 8, leading: 0, bottom: 0, trailing: 0)).onSubmit {
addTask()
}
}
}
.padding()
@ -68,9 +83,12 @@ struct MainView: View {
func addTask() {
if !taskTitle.isEmpty {
withAnimation {
listTask.append(taskTitle)
listTask.append(Task(title: taskTitle, description: taskDescription))
}
taskTitle = ""
taskDescription = ""
showAdditionnalFields = false
focusState = .titleField
}
}
@ -79,16 +97,10 @@ struct MainView: View {
listTask.remove(at: index)
}
}
init(taskTitle: String = "", taskDescription: String = "", listTask: [String]) {
self.taskTitle = taskTitle
self.taskDescription = taskDescription
self.listTask = listTask
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView(taskTitle: "", taskDescription: "", listTask: [])
MainView()
}
}