Ensure that selected feed is visible when transitioning to three panel mode
This commit is contained in:
parent
411413d783
commit
aac3c86561
@ -441,6 +441,16 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner {
|
|||||||
|
|
||||||
// MARK: API
|
// MARK: API
|
||||||
|
|
||||||
|
func restoreSelectionIfNecessary(adjustScroll: Bool) {
|
||||||
|
if let indexPath = coordinator.masterFeedIndexPathForCurrentTimeline() {
|
||||||
|
if adjustScroll {
|
||||||
|
tableView.selectRowAndScrollIfNotVisible(at: indexPath, animated: false, deselect: coordinator.isRootSplitCollapsed)
|
||||||
|
} else {
|
||||||
|
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func updateFeedSelection() {
|
func updateFeedSelection() {
|
||||||
if let indexPath = coordinator.currentFeedIndexPath {
|
if let indexPath = coordinator.currentFeedIndexPath {
|
||||||
if tableView.indexPathForSelectedRow != indexPath {
|
if tableView.indexPathForSelectedRow != indexPath {
|
||||||
@ -500,9 +510,8 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner {
|
|||||||
coordinator.expandFolder(indexPath)
|
coordinator.expandFolder(indexPath)
|
||||||
reloadNode(parent)
|
reloadNode(parent)
|
||||||
|
|
||||||
self.applyChanges(animate: true) { [weak self] in
|
self.applyChanges(animate: true, adjustScroll: true) { [weak self] in
|
||||||
if let indexPath = self?.coordinator.indexPathFor(node) {
|
if let indexPath = self?.coordinator.indexPathFor(node) {
|
||||||
self?.tableView.scrollToRow(at: indexPath, at: .middle, animated: true)
|
|
||||||
self?.coordinator.selectFeed(indexPath)
|
self?.coordinator.selectFeed(indexPath)
|
||||||
completion?()
|
completion?()
|
||||||
}
|
}
|
||||||
@ -543,11 +552,11 @@ private extension MasterFeedViewController {
|
|||||||
var snapshot = dataSource.snapshot()
|
var snapshot = dataSource.snapshot()
|
||||||
snapshot.reloadItems([node])
|
snapshot.reloadItems([node])
|
||||||
dataSource.apply(snapshot, animatingDifferences: false) { [weak self] in
|
dataSource.apply(snapshot, animatingDifferences: false) { [weak self] in
|
||||||
self?.restoreSelectionIfNecessary()
|
self?.restoreSelectionIfNecessary(adjustScroll: false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyChanges(animate: Bool, completion: (() -> Void)? = nil) {
|
func applyChanges(animate: Bool, adjustScroll: Bool = false, completion: (() -> Void)? = nil) {
|
||||||
var snapshot = NSDiffableDataSourceSnapshot<Int, Node>()
|
var snapshot = NSDiffableDataSourceSnapshot<Int, Node>()
|
||||||
let sections = coordinator.allSections
|
let sections = coordinator.allSections
|
||||||
snapshot.appendSections(sections)
|
snapshot.appendSections(sections)
|
||||||
@ -557,7 +566,7 @@ private extension MasterFeedViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dataSource.apply(snapshot, animatingDifferences: animate) { [weak self] in
|
dataSource.apply(snapshot, animatingDifferences: animate) { [weak self] in
|
||||||
self?.restoreSelectionIfNecessary()
|
self?.restoreSelectionIfNecessary(adjustScroll: adjustScroll)
|
||||||
completion?()
|
completion?()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -636,7 +645,7 @@ private extension MasterFeedViewController {
|
|||||||
var snapshot = dataSource.snapshot()
|
var snapshot = dataSource.snapshot()
|
||||||
snapshot.reloadItems(nodes)
|
snapshot.reloadItems(nodes)
|
||||||
dataSource.apply(snapshot, animatingDifferences: false) { [weak self] in
|
dataSource.apply(snapshot, animatingDifferences: false) { [weak self] in
|
||||||
self?.restoreSelectionIfNecessary()
|
self?.restoreSelectionIfNecessary(adjustScroll: false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -669,12 +678,6 @@ private extension MasterFeedViewController {
|
|||||||
self.applyChanges(animate: true)
|
self.applyChanges(animate: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func restoreSelectionIfNecessary() {
|
|
||||||
if let indexPath = coordinator.masterFeedIndexPathForCurrentTimeline() {
|
|
||||||
tableView.selectRowAndScrollIfNotVisible(at: indexPath, animated: false, deselect: coordinator.isRootSplitCollapsed)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeFeedContextMenu(indexPath: IndexPath, includeDeleteRename: Bool) -> UIContextMenuConfiguration {
|
func makeFeedContextMenu(indexPath: IndexPath, includeDeleteRename: Bool) -> UIContextMenuConfiguration {
|
||||||
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil, actionProvider: { [ weak self] suggestedActions in
|
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil, actionProvider: { [ weak self] suggestedActions in
|
||||||
|
|
||||||
|
@ -1620,6 +1620,7 @@ private extension SceneCoordinator {
|
|||||||
let navController = addNavControllerIfNecessary(controller, showButton: false)
|
let navController = addNavControllerIfNecessary(controller, showButton: false)
|
||||||
subSplitViewController!.showDetailViewController(navController, sender: self)
|
subSplitViewController!.showDetailViewController(navController, sender: self)
|
||||||
|
|
||||||
|
masterFeedViewController.restoreSelectionIfNecessary(adjustScroll: true)
|
||||||
masterTimelineViewController!.restoreSelectionIfNecessary()
|
masterTimelineViewController!.restoreSelectionIfNecessary()
|
||||||
|
|
||||||
// Return the shim controller
|
// Return the shim controller
|
||||||
|
Loading…
x
Reference in New Issue
Block a user