From d898ce6447f8dbddc755b97b520207859a07b181 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 14 Jun 2025 09:11:49 -0700 Subject: feat: Development commit --- Sora/Views/Generic/GenericListView.swift | 42 +++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'Sora/Views/Generic') diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index b324e5d..ec02ce3 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -12,6 +12,7 @@ struct GenericListView: View { @State private var itemPendingCollectionAssignment: UUID? @State private var isCollectionErrorAlertPresented = false @State private var selectedFolder: UUID? + @State private var sort: SettingsBookmarkSort = .dateBookmarked let allowBookmarking: Bool let title: String let emptyMessage: String @@ -23,6 +24,7 @@ struct GenericListView: View { let removeAction: (IndexSet) -> Void let removeActionUUID: (UUID) -> Void let removeAllAction: () -> Void + var filteredItems: [T] { items.filter { item in let matchesFolder: Bool = { @@ -46,6 +48,26 @@ struct GenericListView: View { return matchesFolder && matchesSearch } } + + var sortedFilteredItems: [T] { + if allowBookmarking { + return filteredItems.sorted { $0.date > $1.date } + } + + return filteredItems.sorted { (lhs: T, rhs: T) in + switch sort { + case .dateBookmarked: + return lhs.date > rhs.date + + case .lastVisited: + return lhs.lastVisit > rhs.lastVisit + + case .visitedCount: + return lhs.visitedCount > rhs.visitedCount + } + } + } + private let uncategorisedUUID = UUID(uuidString: "00000000-0000-0000-0000-000000000000")! var body: some View { @@ -76,6 +98,18 @@ struct GenericListView: View { #else .padding(.horizontal) #endif + + Picker("Sort", selection: $sort) { + ForEach(SettingsBookmarkSort.allCases, id: \.rawValue) { sortMode in + Text(sortMode.rawValue).tag(sortMode) + } + } + .pickerStyle(.menu) + #if os(macOS) + .padding() + #else + .padding(.horizontal) + #endif } List { @@ -83,10 +117,7 @@ struct GenericListView: View { Text("No matching items found") } - ForEach( - filteredItems.sorted { $0.date > $1.date }, - id: \.id - ) { item in + ForEach(sortedFilteredItems, id: \.id) { item in itemButtonContent(item: item) } .onDelete(perform: removeAction) @@ -175,6 +206,9 @@ struct GenericListView: View { manager.performSearch(settings: settings) } + settings.incrementBookmarkVisitCount(withID: item.id) + settings.updateBookmarkLastVisit(withID: item.id) + isPresented.toggle() }) { GenericItemView( -- cgit v1.2.3