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?
This commit is contained in:
neon443
2025-06-19 09:37:15 +01:00
parent 2b25ddf9b3
commit 3ee22da036
8 changed files with 49 additions and 27 deletions

View File

@@ -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)

View File

@@ -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)
}
}
}
}
}

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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)
// }

View File

@@ -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)

View File

@@ -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) }
}

View File

@@ -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()