Change sidebar Discover section to be collapsible

This commit is contained in:
Shadowfacts 2022-04-02 11:50:04 -04:00
parent 916c6fba0d
commit cb2bb215d3
2 changed files with 19 additions and 12 deletions

View File

@ -148,21 +148,24 @@ class MainSidebarViewController: UIViewController {
], toSection: .compose)
if mastodonController.instanceFeatures.instanceType.isMastodon,
!Preferences.shared.hideDiscover {
addDiscoverSection(to: &snapshot)
snapshot.insertSections([.discover], afterSection: .compose)
}
dataSource.apply(snapshot, animatingDifferences: false)
applyDiscoverSectionSnapshot()
reloadLists()
reloadSavedHashtags()
reloadSavedInstances()
}
private func addDiscoverSection(to snapshot: inout NSDiffableDataSourceSnapshot<Section, Item>) {
snapshot.insertSections([.discover], afterSection: .compose)
snapshot.appendItems([
private func applyDiscoverSectionSnapshot() {
var discoverSnapshot = NSDiffableDataSourceSectionSnapshot<Item>()
discoverSnapshot.append([.discoverHeader])
discoverSnapshot.append([
.trendingTags,
.profileDirectory,
], toSection: .discover)
], to: .discoverHeader)
dataSource.apply(discoverSnapshot, to: .discover)
}
private func ownInstanceLoaded(_ instance: Instance) {
@ -244,12 +247,14 @@ class MainSidebarViewController: UIViewController {
let hide = Preferences.shared.hideDiscover
if hasSection && hide {
snapshot.deleteSections([.discover])
dataSource.apply(snapshot)
} else if !hasSection && !hide {
addDiscoverSection(to: &snapshot)
snapshot.insertSections([.discover], afterSection: .compose)
dataSource.apply(snapshot)
applyDiscoverSectionSnapshot()
} else {
return
}
dataSource.apply(snapshot)
}
// todo: deduplicate with ExploreViewController
@ -330,7 +335,7 @@ extension MainSidebarViewController {
enum Item: Hashable {
case tab(MainTabBarViewController.Tab)
case search, bookmarks
case trendingTags, profileDirectory
case discoverHeader, trendingTags, profileDirectory
case listsHeader, list(List), addList
case savedHashtagsHeader, savedHashtag(Hashtag), addSavedHashtag
case savedInstancesHeader, savedInstance(URL), addSavedInstance
@ -343,6 +348,8 @@ extension MainSidebarViewController {
return "Search"
case .bookmarks:
return "Bookmarks"
case .discoverHeader:
return "Discover"
case .trendingTags:
return "Trending Hashtags"
case .profileDirectory:
@ -386,7 +393,7 @@ extension MainSidebarViewController {
return "number"
case .savedInstance(_):
return "globe"
case .listsHeader, .savedHashtagsHeader, .savedInstancesHeader:
case .discoverHeader, .listsHeader, .savedHashtagsHeader, .savedInstancesHeader:
return nil
case .addList, .addSavedHashtag, .addSavedInstance:
return "plus"
@ -395,7 +402,7 @@ extension MainSidebarViewController {
var hasChildren: Bool {
switch self {
case .listsHeader, .savedHashtagsHeader, .savedInstancesHeader:
case .discoverHeader, .listsHeader, .savedHashtagsHeader, .savedInstancesHeader:
return true
default:
return false

View File

@ -215,7 +215,7 @@ extension MainSplitViewController: UISplitViewControllerDelegate {
let explore = exploreNav.viewControllers.first as! ExploreViewController
explore.searchControllerStatusOnAppearance = false
case .listsHeader, .addList, .savedHashtagsHeader, .addSavedHashtag, .savedInstancesHeader, .addSavedInstance:
case .discoverHeader, .listsHeader, .addList, .savedHashtagsHeader, .addSavedHashtag, .savedInstancesHeader, .addSavedInstance:
// These items are not selectable in the sidebar collection view, so this code is unreachable.
fatalError("unreachable")
}
@ -345,7 +345,7 @@ fileprivate extension MainSidebarViewController.Item {
return HashtagTimelineViewController(for: hashtag, mastodonController: mastodonController)
case let .savedInstance(url):
return InstanceTimelineViewController(for: url, parentMastodonController: mastodonController)
case .listsHeader, .addList, .savedHashtagsHeader, .addSavedHashtag, .savedInstancesHeader, .addSavedInstance:
case .discoverHeader, .listsHeader, .addList, .savedHashtagsHeader, .addSavedHashtag, .savedInstancesHeader, .addSavedInstance:
return nil
}
}