feat: add search bar

This commit is contained in:
dscyrescotti
2024-06-27 20:27:23 +07:00
parent 9508f3cf13
commit b5b12f6540
+33 -14
View File
@@ -13,6 +13,7 @@ struct MemosView: View {
@FetchRequest var memoObjects: FetchedResults<MemoObject> @FetchRequest var memoObjects: FetchedResults<MemoObject>
@State var memo: MemoObject? @State var memo: MemoObject?
@State var query: String = ""
@AppStorage("memola.memo-objects.sort") var sort: Sort = .recent @AppStorage("memola.memo-objects.sort") var sort: Sort = .recent
@@ -31,24 +32,28 @@ struct MemosView: View {
NavigationStack { NavigationStack {
memoGrid memoGrid
.navigationTitle("Memos") .navigationTitle("Memos")
.searchable(text: $query, placement: .toolbar, prompt: Text("Search"))
.toolbar { .toolbar {
ToolbarItemGroup(placement: .primaryAction) { ToolbarItemGroup(placement: .primaryAction) {
Menu { HStack(spacing: 5) {
Picker("", selection: $sort) { Button {
ForEach(Sort.all) { sort in createMemo(title: "Untitled")
Text(sort.name) } label: {
.tag(sort) Image(systemName: "square.and.pencil")
}
} }
} label: { .hoverEffect(.lift)
Image(systemName: "arrow.up.arrow.down.circle") Menu {
Picker("", selection: $sort) {
ForEach(Sort.all) { sort in
Text(sort.name)
.tag(sort)
}
}
} label: {
Image(systemName: "arrow.up.arrow.down.circle")
}
.hoverEffect(.lift)
} }
Button {
createMemo(title: "Untitled")
} label: {
Image(systemName: "square.and.pencil")
}
.hoverEffect()
} }
} }
} }
@@ -64,6 +69,9 @@ struct MemosView: View {
.onChange(of: sort) { oldValue, newValue in .onChange(of: sort) { oldValue, newValue in
memoObjects.sortDescriptors = newValue.memoSortDescriptors memoObjects.sortDescriptors = newValue.memoSortDescriptors
} }
.onChange(of: query) { oldValue, newValue in
updatePredicate()
}
} }
var memoGrid: some View { var memoGrid: some View {
@@ -148,4 +156,15 @@ struct MemosView: View {
func openMemo(for memo: MemoObject) { func openMemo(for memo: MemoObject) {
self.memo = memo self.memo = memo
} }
func updatePredicate() {
var predicates: [NSPredicate] = []
if !query.isEmpty {
predicates.append(NSPredicate(format: "title contains[c] %@", query))
}
// if filter == .favorites {
// predicates.append(NSPredicate(format: "isFavorite = YES"))
// }
memoObjects.nsPredicate = NSCompoundPredicate(type: .and, subpredicates: predicates)
}
} }