small fixes

This commit is contained in:
Ilyas Hallak 2025-07-02 22:15:05 +02:00
parent a5ccc75036
commit ec22c379d1
3 changed files with 49 additions and 41 deletions

View File

@ -121,7 +121,6 @@ struct BookmarksView: View {
}
}
}
.navigationTitle(state.displayName)
.navigationDestination(
item: Binding<String?>(
get: { selectedBookmarkId },
@ -148,14 +147,14 @@ struct BookmarksView: View {
}*/
.onAppear {
Task {
await viewModel.loadBookmarks(state: state)
await viewModel.loadBookmarks(state: state, type: type)
}
}
.onChange(of: showingAddBookmark) { oldValue, newValue in
// Refresh bookmarks when sheet is dismissed
if oldValue && !newValue {
Task {
await viewModel.loadBookmarks(state: state)
await viewModel.loadBookmarks(state: state, type: type)
}
}
}

View File

@ -12,7 +12,7 @@ class BookmarksViewModel {
var isLoading = false
var errorMessage: String?
var currentState: BookmarkState = .unread
var type = [BookmarkType.article]
var currentType = [BookmarkType.article]
var showingAddBookmarkFromShare = false
var shareURL = ""
@ -29,7 +29,7 @@ class BookmarksViewModel {
throttleSearch()
}
}
init() {
setupNotificationObserver()
}
@ -60,7 +60,7 @@ class BookmarksViewModel {
}
private func throttleSearch() {
searchWorkItem?.cancel()
searchWorkItem?.cancel()
let workItem = DispatchWorkItem { [weak self] in
guard let self = self else { return }
@ -74,13 +74,15 @@ class BookmarksViewModel {
}
@MainActor
func loadBookmarks(state: BookmarkState = .unread) async {
func loadBookmarks(state: BookmarkState = .unread, type: [BookmarkType] = [.article]) async {
isLoading = true
errorMessage = nil
currentState = state
currentType = type
offset = 0 // Offset zurücksetzen
hasMoreData = true // Pagination zurücksetzen
do {
let newBookmarks = try await getBooksmarksUseCase.execute(
state: state,
@ -98,17 +100,21 @@ class BookmarksViewModel {
isLoading = false
}
@MainActor
func loadMoreBookmarks() async {
guard !isLoading && hasMoreData else { return } // Verhindern, dass mehrfach geladen wird
isLoading = true
errorMessage = nil
do {
offset += limit // Offset erhöhen
let newBookmarks = try await getBooksmarksUseCase.execute(state: currentState, limit: limit, offset: offset)
let newBookmarks = try await getBooksmarksUseCase.execute(
state: currentState,
limit: limit,
offset: offset,
type: currentType)
bookmarks?.bookmarks.append(contentsOf: newBookmarks.bookmarks) // Neue Bookmarks hinzufügen
hasMoreData = newBookmarks.bookmarks.count == limit // Prüfen,
} catch {
@ -117,7 +123,7 @@ class BookmarksViewModel {
isLoading = false
}
@MainActor
func refreshBookmarks() async {
await loadBookmarks(state: currentState)

View File

@ -22,18 +22,18 @@ struct PadSidebarView: View {
.foregroundColor(selectedTab == tab ? .accentColor : .primary)
.frame(maxWidth: .infinity, alignment: .leading)
.contentShape(Rectangle())
if tab == .archived {
Spacer(minLength: 20)
}
if tab == .pictures {
Spacer(minLength: 30)
Divider()
Spacer()
}
}
.listRowBackground(selectedTab == tab ? Color.accentColor.opacity(0.15) : Color.clear)
if tab == .archived {
Spacer(minLength: 20)
}
if tab == .pictures {
Spacer(minLength: 30)
Divider()
Spacer()
}
}
}
.listStyle(.sidebar)
@ -55,26 +55,29 @@ struct PadSidebarView: View {
.background(Color(.systemGroupedBackground))
}
} content: {
switch selectedTab {
case .all:
BookmarksView(state: .all, type: [.article, .video, .photo], selectedBookmark: $selectedBookmark)
case .unread:
BookmarksView(state: .unread, type: [.article], selectedBookmark: $selectedBookmark)
case .favorite:
BookmarksView(state: .favorite, type: [.article], selectedBookmark: $selectedBookmark)
case .archived:
BookmarksView(state: .archived, type: [.article], selectedBookmark: $selectedBookmark)
case .settings:
SettingsView()
case .article:
BookmarksView(state: .all, type: [.article], selectedBookmark: $selectedBookmark)
case .videos:
BookmarksView(state: .all, type: [.video], selectedBookmark: $selectedBookmark)
case .pictures:
BookmarksView(state: .all, type: [.photo], selectedBookmark: $selectedBookmark)
case .tags:
Text("Tags")
Group {
switch selectedTab {
case .all:
BookmarksView(state: .all, type: [.article, .video, .photo], selectedBookmark: $selectedBookmark)
case .unread:
BookmarksView(state: .unread, type: [.article], selectedBookmark: $selectedBookmark)
case .favorite:
BookmarksView(state: .favorite, type: [.article], selectedBookmark: $selectedBookmark)
case .archived:
BookmarksView(state: .archived, type: [.article], selectedBookmark: $selectedBookmark)
case .settings:
SettingsView()
case .article:
BookmarksView(state: .all, type: [.article], selectedBookmark: $selectedBookmark)
case .videos:
BookmarksView(state: .all, type: [.video], selectedBookmark: $selectedBookmark)
case .pictures:
BookmarksView(state: .all, type: [.photo], selectedBookmark: $selectedBookmark)
case .tags:
Text("Tags")
}
}
.navigationTitle(selectedTab.label)
} detail: {
if let bookmark = selectedBookmark, selectedTab != .settings {
BookmarkDetailView(bookmarkId: bookmark.id)