From 3ee22da036d9e6587ca3558fac6a2cbbe0688422 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Thu, 19 Jun 2025 09:37:15 +0100 Subject: [PATCH] made events update propery when changing on ios update animations on adding and removing events fix symbolpicker crash on fast scroll by making it not show all the symbols lol might be ready to ship? --- MacNearFuture/Views/ArchiveView.swift | 8 ++++++++ MacNearFuture/Views/HomeView.swift | 8 ++++++++ NearFuture/Views/Archive/ArchiveView.swift | 10 +++++++++- NearFuture/Views/Home/EventListView.swift | 20 ------------------- NearFuture/Views/Home/HomeView.swift | 10 +++++++++- Shared/Extensions.swift | 4 ++-- .../Model/SymbolsPicker/SymbolsLoader.swift | 4 ++-- .../Model/SymbolsPicker/SymbolsPicker.swift | 12 ++++++++++- 8 files changed, 49 insertions(+), 27 deletions(-) diff --git a/MacNearFuture/Views/ArchiveView.swift b/MacNearFuture/Views/ArchiveView.swift index ac0af6c..6f6eab3 100644 --- a/MacNearFuture/Views/ArchiveView.swift +++ b/MacNearFuture/Views/ArchiveView.swift @@ -19,6 +19,14 @@ struct ArchiveView: View { ScrollView { ForEach(filteredEvents) { event in EventListView(viewModel: viewModel, event: event) + .contextMenu() { + Button(role: .destructive) { + viewModel.removeEvent(event) + } label: { + Label("Delete", systemImage: "trash") + .tint(.red ) + } + } } } .scrollContentBackground(.hidden) diff --git a/MacNearFuture/Views/HomeView.swift b/MacNearFuture/Views/HomeView.swift index f21b7c5..ddc9d01 100644 --- a/MacNearFuture/Views/HomeView.swift +++ b/MacNearFuture/Views/HomeView.swift @@ -34,6 +34,14 @@ struct HomeView: View { if filteredEvents.contains(event) { EventListView(viewModel: viewModel, event: event) .id(event) + .contextMenu() { + Button(role: .destructive) { + viewModel.removeEvent(event) + } label: { + Label("Delete", systemImage: "trash") + .tint(.red) + } + } } } } diff --git a/NearFuture/Views/Archive/ArchiveView.swift b/NearFuture/Views/Archive/ArchiveView.swift index 8f0fae4..e58c21a 100644 --- a/NearFuture/Views/Archive/ArchiveView.swift +++ b/NearFuture/Views/Archive/ArchiveView.swift @@ -35,9 +35,17 @@ struct ArchiveView: View { ) } label: { EventListView(viewModel: viewModel, event: event) - .id(event.complete) + .id(event) } .transition(.moveAndFadeReversed) + .contextMenu() { + Button(role: .destructive) { + viewModel.removeEvent(event) + } label: { + Label("Delete", systemImage: "trash") + .tint(.red) + } + } } .padding(.horizontal) } diff --git a/NearFuture/Views/Home/EventListView.swift b/NearFuture/Views/Home/EventListView.swift index 754f7cf..681916b 100644 --- a/NearFuture/Views/Home/EventListView.swift +++ b/NearFuture/Views/Home/EventListView.swift @@ -90,19 +90,6 @@ struct EventListView: View { .onTapGesture { openWindow(value: event.id) } - .contextMenu() { - Button(role: .destructive) { - let eventToModify = viewModel.events.firstIndex() { currEvent in - currEvent.id == event.id - } - if let eventToModify = eventToModify { - viewModel.events.remove(at: eventToModify) - viewModel.saveEvents() - } - } label: { - Label("Delete", systemImage: "trash") - } - } } #else var body: some View { @@ -176,13 +163,6 @@ struct EventListView: View { ) .clipShape(RoundedRectangle(cornerRadius: 15)) .fixedSize(horizontal: false, vertical: true) - .contextMenu() { - Button(role: .destructive) { - viewModel.removeEvent(event) - } label: { - Label("Delete", systemImage: "trash") - } - } .swipeActions(edge: .trailing, allowsFullSwipe: true) { Button(role: .destructive) { viewModel.removeEvent(event) diff --git a/NearFuture/Views/Home/HomeView.swift b/NearFuture/Views/Home/HomeView.swift index 8f77c9e..cdbeb90 100644 --- a/NearFuture/Views/Home/HomeView.swift +++ b/NearFuture/Views/Home/HomeView.swift @@ -59,9 +59,17 @@ struct HomeView: View { ) } label: { EventListView(viewModel: viewModel, event: event) - .id(event.complete) + .id(event) } .transition(.moveAndFade) + .contextMenu() { + Button(role: .destructive) { + viewModel.removeEvent(event) + } label: { + Label("Delete", systemImage: "trash") + .tint(.red) + } + } } .padding(.horizontal) // } diff --git a/Shared/Extensions.swift b/Shared/Extensions.swift index 049e4c4..38b5c2f 100644 --- a/Shared/Extensions.swift +++ b/Shared/Extensions.swift @@ -22,14 +22,14 @@ extension View { extension AnyTransition { static var moveAndFade: AnyTransition { .asymmetric( - insertion: .move(edge: .leading), + insertion: .opacity, removal: .move(edge: .trailing) ) .combined(with: .opacity) } static var moveAndFadeReversed: AnyTransition { .asymmetric( - insertion: .move(edge: .trailing), + insertion: .opacity, removal: .move(edge: .leading) ) .combined(with: .opacity) diff --git a/Shared/Model/SymbolsPicker/SymbolsLoader.swift b/Shared/Model/SymbolsPicker/SymbolsLoader.swift index abff58c..3e89c1c 100644 --- a/Shared/Model/SymbolsPicker/SymbolsLoader.swift +++ b/Shared/Model/SymbolsPicker/SymbolsLoader.swift @@ -8,7 +8,7 @@ import Foundation class SymbolsLoader: ObservableObject { - @Published var allSymbols: [String] = [] + private var allSymbols: [String] = [] init() { self.allSymbols = getAllSymbols() @@ -16,7 +16,7 @@ class SymbolsLoader: ObservableObject { func getSymbols(_ searched: String) -> [String] { if searched.isEmpty { - return allSymbols + return [] } else { return allSymbols.filter() { $0.localizedCaseInsensitiveContains(searched) } } diff --git a/Shared/Model/SymbolsPicker/SymbolsPicker.swift b/Shared/Model/SymbolsPicker/SymbolsPicker.swift index 92f988d..3289d07 100644 --- a/Shared/Model/SymbolsPicker/SymbolsPicker.swift +++ b/Shared/Model/SymbolsPicker/SymbolsPicker.swift @@ -31,7 +31,17 @@ struct SymbolsPicker: View { NavigationStack { GeometryReader { geo in ScrollView { - if symbols.isEmpty { + if searchInput.isEmpty { + HStack { + Image(systemName: "magnifyingglass") + .resizable().scaledToFit() + .frame(width: 30) + Text("Start a Search") + .font(.title) + .bold() + } + .padding() + } else if symbols.isEmpty { HStack { Image(systemName: "magnifyingglass") .resizable().scaledToFit()