From 05a7eca567fd2dd24aef2413101d26a1d91be339 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 10 Mar 2022 20:33:57 -0800 Subject: [PATCH 1/5] replace isCompact with prefersListLayout --- .../Sources/App/Views/Home/HomeFeedViewIOS.swift | 10 +++++----- .../OmnivoreKit/Sources/App/Views/Home/HomeView.swift | 6 ++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index 04a07ba01..6e4734ccf 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -8,8 +8,8 @@ import Views #if os(iOS) struct HomeFeedContainerView: View { - let isCompact: Bool @EnvironmentObject var dataService: DataService + @State private var prefersListLayout = UIDevice.isIPhone @State private var searchQuery = "" @State private var snoozePresented = false @State private var itemToSnooze: FeedItem? @@ -20,7 +20,7 @@ import Views Group { if #available(iOS 15.0, *) { HomeFeedView( - isCompact: isCompact, + prefersListLayout: $prefersListLayout, searchQuery: $searchQuery, selectedLinkItem: $selectedLinkItem, snoozePresented: $snoozePresented, @@ -51,7 +51,7 @@ import Views } } else { HomeFeedView( - isCompact: isCompact, + prefersListLayout: $prefersListLayout, searchQuery: $searchQuery, selectedLinkItem: $selectedLinkItem, snoozePresented: $snoozePresented, @@ -102,7 +102,7 @@ import Views struct HomeFeedView: View { @EnvironmentObject var dataService: DataService - let isCompact: Bool + @Binding var prefersListLayout: Bool @Binding var searchQuery: String @Binding var selectedLinkItem: FeedItem? @Binding var snoozePresented: Bool @@ -111,7 +111,7 @@ import Views @ObservedObject var viewModel: HomeFeedViewModel var body: some View { - if isCompact { + if prefersListLayout { HomeFeedListView( searchQuery: $searchQuery, selectedLinkItem: $selectedLinkItem, diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeView.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeView.swift index 2be7ba9a5..5c016d814 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeView.swift @@ -7,7 +7,7 @@ struct HomeView: View { #if os(iOS) if UIDevice.isIPhone { NavigationView { - HomeFeedContainerView(isCompact: true, viewModel: viewModel) + HomeFeedContainerView(viewModel: viewModel) .toolbar { ToolbarItem { NavigationLink( @@ -24,9 +24,7 @@ struct HomeView: View { } .accentColor(.appGrayTextContrast) } else { - GeometryReader { _ in - HomeFeedContainerView(isCompact: UIDevice.isIPhone, viewModel: viewModel) - } + HomeFeedContainerView(viewModel: viewModel) } #elseif os(macOS) HomeFeedView(viewModel: viewModel) From 779eb9ac1f3919b84fcedf088fbcbec6585a27d0 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 10 Mar 2022 20:48:50 -0800 Subject: [PATCH 2/5] add toggle button to switch between list and grid layouts --- .../App/Views/Home/HomeFeedViewIOS.swift | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index 6e4734ccf..a946b21d3 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -113,6 +113,7 @@ import Views var body: some View { if prefersListLayout { HomeFeedListView( + prefersListLayout: $prefersListLayout, searchQuery: $searchQuery, selectedLinkItem: $selectedLinkItem, snoozePresented: $snoozePresented, @@ -152,6 +153,16 @@ import Views ) } } + ToolbarItem { + if UIDevice.isIPad { + Button( + action: { prefersListLayout.toggle() }, + label: { + Label("Toggle Feed Layout", systemImage: prefersListLayout ? "square.grid.2x2" : "list.bullet") + } + ) + } + } } } } @@ -159,6 +170,7 @@ import Views struct HomeFeedListView: View { @EnvironmentObject var dataService: DataService + @Binding var prefersListLayout: Bool @Binding var searchQuery: String @Binding var selectedLinkItem: FeedItem? @Binding var snoozePresented: Bool @@ -270,6 +282,18 @@ import Views } } .listStyle(PlainListStyle()) + .toolbar { + ToolbarItem { + if UIDevice.isIPad { + Button( + action: { prefersListLayout.toggle() }, + label: { + Label("Toggle Feed Layout", systemImage: prefersListLayout ? "square.grid.2x2" : "list.bullet") + } + ) + } + } + } .onAppear { viewModel.sendProgressUpdates = false } From 54f4883e7525b73a737785437e5167c8e68002a9 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 10 Mar 2022 20:51:42 -0800 Subject: [PATCH 3/5] remove refresh button from toolbar --- .../App/Views/Home/HomeFeedViewIOS.swift | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index a946b21d3..a552e0c87 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -131,19 +131,13 @@ import Views .toolbar { ToolbarItem { if #available(iOS 15.0, *) { - Button( - action: { - viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) - }, - label: { Label("Refresh Feed", systemImage: "arrow.clockwise") } - ) - .disabled(viewModel.isLoading) - .opacity(viewModel.isLoading ? 0 : 1) - .overlay { - if viewModel.isLoading { - ProgressView() + Button("", action: {}) + .disabled(true) + .overlay { + if viewModel.isLoading { + ProgressView() + } } - } } else { Button( action: { From 71f46205112b77ba9278fe5c0e56d42d3d452887 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 10 Mar 2022 21:05:13 -0800 Subject: [PATCH 4/5] dispatch preference change closure to main --- .../Sources/App/Views/Home/HomeFeedViewIOS.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index a552e0c87..29e047502 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -359,8 +359,10 @@ import Views } ) .onPreferenceChange(ScrollViewOffsetPreferenceKey.self) { offset in - if !viewModel.isLoading, offset > 240 { - viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + DispatchQueue.main.async { + if !viewModel.isLoading, offset > 240 { + viewModel.loadItems(dataService: dataService, searchQuery: searchQuery, isRefresh: true) + } } } From dddd0aec24e52bae15f22fb519b9fabd995c5ab5 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 10 Mar 2022 21:37:45 -0800 Subject: [PATCH 5/5] use adaptive grid layout for ipad grid (min 325 pts wide) --- .../OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index 29e047502..a5b8c67ce 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -307,8 +307,6 @@ import Views @ObservedObject var viewModel: HomeFeedViewModel - private let columns = Array(repeating: GridItem(.flexible(), spacing: 20), count: 2) - func contextMenuActionHandler(item: FeedItem, action: GridCardAction) { switch action { case .toggleArchiveStatus: @@ -321,7 +319,7 @@ import Views var body: some View { ScrollView { - LazyVGrid(columns: columns, spacing: 20) { + LazyVGrid(columns: [GridItem(.adaptive(minimum: 325), spacing: 24)], spacing: 24) { ForEach(viewModel.items, id: \.renderID) { item in let link = GridCardNavigationLink( item: item,