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

View File

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