From 38c4ddbe43257433c06d27b09d92bcf338490069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20F=C3=B6rster?= Date: Sat, 18 May 2024 00:36:40 +0200 Subject: [PATCH] HomeView: Changes to Favourites and History Widget The History Widget in the Home View was hard-coded to 10 items. Now it uses the limit set in the settings. The items weren't immediate updated when the limit was changed. List Views had a hard-coded limit of 10 items. Now they use the limit supplied in the parameter. --- Shared/Home/FavoriteItemView.swift | 27 +++++++++++++++++++-------- Shared/Home/HistoryView.swift | 13 ++++++------- Shared/Home/HomeView.swift | 4 ++-- Shared/Videos/ListView.swift | 10 +++------- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/Shared/Home/FavoriteItemView.swift b/Shared/Home/FavoriteItemView.swift index 0154854b..43f397e4 100644 --- a/Shared/Home/FavoriteItemView.swift +++ b/Shared/Home/FavoriteItemView.swift @@ -5,6 +5,7 @@ import UniformTypeIdentifiers struct FavoriteItemView: View { var item: FavoriteItem + @Binding var favoritesChanged: Bool @Environment(\.navigationStyle) private var navigationStyle @StateObject private var store = FavoriteResourceObserver() @@ -25,8 +26,9 @@ struct FavoriteItemView: View { @Default(.widgetsSettings) private var widgetsSettings @Default(.visibleSections) private var visibleSections - init(item: FavoriteItem) { + init(item: FavoriteItem, favoritesChanged: Binding) { self.item = item + _favoritesChanged = favoritesChanged } var body: some View { @@ -92,6 +94,7 @@ struct FavoriteItemView: View { .onChange(of: player.currentVideo) { _ in reloadVisibleWatches() } .onChange(of: hideShorts) { _ in reloadVisibleWatches() } .onChange(of: hideWatched) { _ in reloadVisibleWatches() } + .onChange(of: favoritesChanged) { _ in reloadVisibleWatches() } } } .id(watchModel.historyToken) @@ -486,14 +489,22 @@ struct FavoriteItemView: View { } struct FavoriteItemView_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - VStack { - FavoriteItemView(item: .init(section: .channel("peerTube", "a", "Search: resistance body upper band workout"))) - .environment(\.navigationStyle, .tab) - FavoriteItemView(item: .init(section: .channel("peerTube", "a", "Marques"))) - .environment(\.navigationStyle, .sidebar) + struct PreviewWrapper: View { + @State private var favoritesChanged = false + + var body: some View { + NavigationView { + VStack { + FavoriteItemView(item: .init(section: .channel("peerTube", "a", "Search: resistance body upper band workout")), favoritesChanged: $favoritesChanged) + .environment(\.navigationStyle, .tab) + FavoriteItemView(item: .init(section: .channel("peerTube", "a", "Marques")), favoritesChanged: $favoritesChanged) + .environment(\.navigationStyle, .sidebar) + } } } } + + static var previews: some View { + PreviewWrapper() + } } diff --git a/Shared/Home/HistoryView.swift b/Shared/Home/HistoryView.swift index 4daea5bc..1731533a 100644 --- a/Shared/Home/HistoryView.swift +++ b/Shared/Home/HistoryView.swift @@ -1,19 +1,14 @@ import SwiftUI struct HistoryView: View { - var limit = 10 + var limit: Int @FetchRequest(sortDescriptors: [.init(key: "watchedAt", ascending: false)]) var watches: FetchedResults @ObservedObject private var player = PlayerModel.shared - @State private var visibleWatches = [Watch]() - init(limit: Int = 10) { - self.limit = limit - } - var body: some View { LazyVStack { if visibleWatches.isEmpty { @@ -38,10 +33,14 @@ struct HistoryView: View { func reloadVisibleWatches() { visibleWatches = Array(watches.filter { $0.videoID != player.currentVideo?.videoID }.prefix(limit)) } + + init(limit: Int = 10) { + self.limit = limit + } } struct HistoryView_Previews: PreviewProvider { static var previews: some View { - HistoryView() + HistoryView(limit: 10) } } diff --git a/Shared/Home/HomeView.swift b/Shared/Home/HomeView.swift index 3ea74615..3a655420 100644 --- a/Shared/Home/HomeView.swift +++ b/Shared/Home/HomeView.swift @@ -97,11 +97,11 @@ struct HomeView: View { VStack(alignment: .leading) { #if os(tvOS) ForEach(Defaults[.favorites]) { item in - FavoriteItemView(item: item) + FavoriteItemView(item: item, favoritesChanged: $favoritesChanged) } #else ForEach(favorites) { item in - FavoriteItemView(item: item) + FavoriteItemView(item: item, favoritesChanged: $favoritesChanged) #if os(macOS) .workaroundForVerticalScrollingBug() #endif diff --git a/Shared/Videos/ListView.swift b/Shared/Videos/ListView.swift index e3503f8a..8ed10b35 100644 --- a/Shared/Videos/ListView.swift +++ b/Shared/Videos/ListView.swift @@ -2,7 +2,7 @@ import SwiftUI struct ListView: View { var items: [ContentItem] - var limit: Int? = 10 + var limit: Int? var body: some View { LazyVStack(alignment: .leading) { @@ -16,16 +16,12 @@ struct ListView: View { } var limitedItems: [ContentItem] { - if let limit, limit >= 0 { - return Array(items.prefix(limit)) - } - - return items + Array(items.prefix(limit ?? items.count)) } } struct ListView_Previews: PreviewProvider { static var previews: some View { - ListView(items: [.init(video: .fixture)]) + ListView(items: [.init(video: .fixture)], limit: 10) } }