mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-07-12 07:42:48 +02:00
feat: add search bar
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user