mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-07-08 22:05:09 +02:00
feat: add sort options
This commit is contained in:
@@ -10,23 +10,43 @@ import SwiftUI
|
||||
struct MemosView: View {
|
||||
@Environment(\.managedObjectContext) var managedObjectContext
|
||||
|
||||
@FetchRequest(sortDescriptors: []) var memoObjects: FetchedResults<MemoObject>
|
||||
@FetchRequest var memoObjects: FetchedResults<MemoObject>
|
||||
|
||||
@State var memo: MemoObject?
|
||||
|
||||
@AppStorage("memola.memo-objects.sort") var sort: Sort = .recent
|
||||
|
||||
let cellWidth: CGFloat = 250
|
||||
let cellHeight: CGFloat = 150
|
||||
|
||||
init() {
|
||||
let standard = UserDefaults.standard
|
||||
var descriptors: [SortDescriptor<MemoObject>] = []
|
||||
let sort = Sort(rawValue: standard.value(forKey: "memola.memo-objects.sort") as? String ?? "") ?? .recent
|
||||
descriptors = sort.memoSortDescriptors
|
||||
_memoObjects = FetchRequest(sortDescriptors: descriptors)
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
memoGrid
|
||||
.navigationTitle("Memos")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .primaryAction) {
|
||||
ToolbarItemGroup(placement: .primaryAction) {
|
||||
Menu {
|
||||
Picker("", selection: $sort) {
|
||||
ForEach(Sort.all) { sort in
|
||||
Text(sort.name)
|
||||
.tag(sort)
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
Image(systemName: "arrow.up.arrow.down.circle")
|
||||
}
|
||||
Button {
|
||||
createMemo(title: "Untitled")
|
||||
} label: {
|
||||
Image(systemName: "plus")
|
||||
Image(systemName: "square.and.pencil")
|
||||
}
|
||||
.hoverEffect()
|
||||
}
|
||||
@@ -41,6 +61,9 @@ struct MemosView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.onChange(of: sort) { oldValue, newValue in
|
||||
memoObjects.sortDescriptors = newValue.memoSortDescriptors
|
||||
}
|
||||
}
|
||||
|
||||
var memoGrid: some View {
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
//
|
||||
// Sort.swift
|
||||
// Memola
|
||||
//
|
||||
// Created by Dscyre Scotti on 6/27/24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum Sort: String, Identifiable, Hashable, Equatable {
|
||||
var id: String {
|
||||
rawValue
|
||||
}
|
||||
|
||||
case recent
|
||||
case aToZ
|
||||
case zToA
|
||||
case newest
|
||||
case oldest
|
||||
|
||||
var name: String {
|
||||
switch self {
|
||||
case .recent: return "Recent"
|
||||
case .aToZ: return "A to Z"
|
||||
case .zToA: return "Z to A"
|
||||
case .newest: return "Newest"
|
||||
case .oldest: return "Oldest"
|
||||
}
|
||||
}
|
||||
|
||||
static let all: [Sort] = [.recent, .aToZ, .zToA, .newest, .oldest]
|
||||
}
|
||||
|
||||
extension Sort {
|
||||
var memoSortDescriptors: [SortDescriptor<MemoObject>] {
|
||||
switch self {
|
||||
case .recent:
|
||||
return [SortDescriptor(\.updatedAt, order: .reverse)]
|
||||
case .aToZ:
|
||||
return [SortDescriptor(\.title), SortDescriptor(\.updatedAt, order: .reverse)]
|
||||
case .zToA:
|
||||
return [SortDescriptor(\.title, order: .reverse), SortDescriptor(\.updatedAt, order: .reverse)]
|
||||
case .newest:
|
||||
return [SortDescriptor(\.createdAt, order: .reverse)]
|
||||
case .oldest:
|
||||
return [SortDescriptor(\.createdAt)]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user