aboutsummaryrefslogtreecommitdiff
path: root/LibreTasks/ContentView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2023-05-22 15:35:40 -0500
committerChristian Cleberg <hello@cleberg.net>2023-05-22 15:35:40 -0500
commitaf1dc021544a1980374125868b2ab1a71d54a651 (patch)
tree6ab354fcc1684cc6834ff3dc6578ba99bb480dc3 /LibreTasks/ContentView.swift
downloadlibre-tasks-af1dc021544a1980374125868b2ab1a71d54a651.tar.gz
libre-tasks-af1dc021544a1980374125868b2ab1a71d54a651.tar.bz2
libre-tasks-af1dc021544a1980374125868b2ab1a71d54a651.zip
initial commit
Diffstat (limited to 'LibreTasks/ContentView.swift')
-rw-r--r--LibreTasks/ContentView.swift100
1 files changed, 100 insertions, 0 deletions
diff --git a/LibreTasks/ContentView.swift b/LibreTasks/ContentView.swift
new file mode 100644
index 0000000..4203e91
--- /dev/null
+++ b/LibreTasks/ContentView.swift
@@ -0,0 +1,100 @@
+//
+// ContentView.swift
+// LibreTasks
+//
+//
+
+import SwiftUI
+import Combine
+
+struct ContentView: View {
+ @ObservedObject var taskStore = TaskDataStore()
+ @State var newTask : String = ""
+ @State private var query = ""
+ @State var newTaskDate: Date = Date()
+
+ var filteredTasks: [Task] {
+ if query.isEmpty {
+ return self.taskStore.tasks
+ } else {
+ return taskStore.tasks.filter {
+ $0.taskItem.localizedCaseInsensitiveContains(query)
+ }
+ }
+ }
+
+ var addTaskBar: some View {
+ HStack {
+ VStack {
+ TextField("Add Task: ", text: self.$newTask)
+ DatePicker("Date: ", selection: $newTaskDate)
+ .datePickerStyle(CompactDatePickerStyle())
+ }
+ Button(action: self.addNewTask, label: {
+ Text("Add New")
+ })
+ }
+ .padding()
+ }
+
+ func addNewTask() {
+ taskStore.tasks.append(Task(
+ id: String(taskStore.tasks.count + 1),
+ taskItem: newTask,
+ taskDate: newTaskDate
+ ))
+ self.newTask = ""
+ }
+
+ var body: some View {
+ NavigationView {
+ VStack {
+ addTaskBar.padding()
+ List {
+ ForEach(filteredTasks) { task in
+ VStack(alignment: .leading) {
+ Text(task.taskItem)
+ Spacer()
+ if (Date() > task.taskDate) {
+ HStack {
+ Text(task.taskDate, style: .date)
+ .foregroundColor(.red)
+ .font(.caption)
+ Text(task.taskDate, style: .time)
+ .foregroundColor(.red)
+ .font(.caption)
+ }
+ } else {
+ HStack {
+ Text(task.taskDate, style: .date)
+ .font(.caption)
+ Text(task.taskDate, style: .time)
+ .font(.caption)
+ }
+ }
+ }
+ }
+ .onDelete(perform: self.deleteTask)
+ }
+ .navigationBarTitle("Tasks")
+ .toolbar {
+ ToolbarItemGroup(placement: .navigationBarTrailing) {
+ EditButton()
+ }
+ }
+ }
+ }
+ .searchable(text: $query, prompt: "Search tasks")
+ }
+
+ func deleteTask(at offsets: IndexSet) {
+ taskStore.tasks.remove(atOffsets: offsets)
+ }
+
+}
+
+struct ContentView_Previews: PreviewProvider {
+ static var previews: some View {
+ ContentView()
+ }
+}