diff --git a/MindDump/ContentView.swift b/MindDump/ContentView.swift index b5b48bd..9a7292b 100644 --- a/MindDump/ContentView.swift +++ b/MindDump/ContentView.swift @@ -1,12 +1,17 @@ import SwiftUI struct ContentView: View { + @State private var navigationPath: [UUID] = [] + var body: some View { - NavigationStack { - ListsOverviewView() - .navigationDestination(for: UUID.self) { listID in - ListDetailView(listID: listID) - } + ZStack(alignment: .bottomTrailing) { + NavigationStack(path: $navigationPath) { + ListsOverviewView() + .navigationDestination(for: UUID.self) { listID in + ListDetailView(listID: listID) + } + } + MindDumpButton(activeListID: navigationPath.last) } } } diff --git a/MindDump/ViewModels/ListStore.swift b/MindDump/ViewModels/ListStore.swift index 09adf4d..c4525fb 100644 --- a/MindDump/ViewModels/ListStore.swift +++ b/MindDump/ViewModels/ListStore.swift @@ -5,6 +5,10 @@ import Observation class ListStore { var lists: [TodoList] + var inboxID: UUID { + lists.first { $0.isInbox }!.id + } + init() { self.lists = [TodoList(name: "Inbox", isInbox: true)] } diff --git a/MindDump/Views/ListDetailView.swift b/MindDump/Views/ListDetailView.swift index 93191e9..e0516f6 100644 --- a/MindDump/Views/ListDetailView.swift +++ b/MindDump/Views/ListDetailView.swift @@ -4,7 +4,6 @@ struct ListDetailView: View { @Environment(ListStore.self) private var store let listID: UUID @State private var editorItem: TodoItem? - @State private var showingEditor = false private var todoList: TodoList? { store.lists.first { $0.id == listID } @@ -22,7 +21,6 @@ struct ListDetailView: View { store.toggleItemCompleted(item.id, in: listID) }, onTap: { editorItem = item - showingEditor = true }) } .onDelete { offsets in @@ -35,18 +33,8 @@ struct ListDetailView: View { } } .navigationTitle(todoList?.name ?? "") - .toolbar { - ToolbarItem(placement: .primaryAction) { - Button(action: { - editorItem = nil - showingEditor = true - }) { - Image(systemName: "plus") - } - } - } - .sheet(isPresented: $showingEditor) { - TodoEditorView(listID: listID, item: editorItem) + .sheet(item: $editorItem) { item in + TodoEditorView(listID: listID, item: item) } } } diff --git a/MindDump/Views/ListsOverviewView.swift b/MindDump/Views/ListsOverviewView.swift index e9b0fde..448eb51 100644 --- a/MindDump/Views/ListsOverviewView.swift +++ b/MindDump/Views/ListsOverviewView.swift @@ -18,15 +18,13 @@ struct ListsOverviewView: View { } } .onDelete(perform: deleteLists) - } - .navigationTitle("MindDump") - .toolbar { - ToolbarItem(placement: .primaryAction) { - Button(action: { showingAddList = true }) { - Image(systemName: "plus") - } + + Button(action: { showingAddList = true }) { + Label("Neue Liste", systemImage: "plus") + .foregroundStyle(.blue) } } + .navigationTitle("MindDump") .alert("Neue Liste", isPresented: $showingAddList) { TextField("Name", text: $newListName) Button("Abbrechen", role: .cancel) { diff --git a/MindDump/Views/MindDumpButton.swift b/MindDump/Views/MindDumpButton.swift new file mode 100644 index 0000000..2f4de53 --- /dev/null +++ b/MindDump/Views/MindDumpButton.swift @@ -0,0 +1,27 @@ +import SwiftUI + +struct MindDumpButton: View { + @Environment(ListStore.self) private var store + var activeListID: UUID? + @State private var showingEditor = false + + private var targetListID: UUID { + activeListID ?? store.inboxID + } + + var body: some View { + Button { + showingEditor = true + } label: { + Text("🧠") + .font(.system(size: 28)) + .frame(width: 56, height: 56) + .background(Circle().fill(.blue)) + .shadow(color: .black.opacity(0.3), radius: 4, x: 0, y: 2) + } + .padding(24) + .sheet(isPresented: $showingEditor) { + TodoEditorView(listID: targetListID, item: nil) + } + } +}