Jump to statuses below parent when expanding subthread in conversation
This commit is contained in:
parent
21e9ca990d
commit
46332cd1b9
|
@ -31,6 +31,7 @@ class ConversationTableViewController: EnhancedTableViewController {
|
|||
|
||||
let mainStatusID: String
|
||||
let mainStatusState: StatusState
|
||||
var statusIDToScrollToOnLoad: String
|
||||
private(set) var dataSource: UITableViewDiffableDataSource<Section, Item>!
|
||||
|
||||
var showStatusesAutomatically = false
|
||||
|
@ -41,6 +42,7 @@ class ConversationTableViewController: EnhancedTableViewController {
|
|||
init(for mainStatusID: String, state: StatusState = .unknown, mastodonController: MastodonController) {
|
||||
self.mainStatusID = mainStatusID
|
||||
self.mainStatusState = state
|
||||
self.statusIDToScrollToOnLoad = mainStatusID
|
||||
self.mastodonController = mastodonController
|
||||
|
||||
super.init(style: .plain)
|
||||
|
@ -227,10 +229,19 @@ class ConversationTableViewController: EnhancedTableViewController {
|
|||
}
|
||||
|
||||
self.dataSource.apply(snapshot, animatingDifferences: false) {
|
||||
// ensure that the main status is on-screen after newly loaded statuses are added
|
||||
let item: Item
|
||||
let position: UITableView.ScrollPosition
|
||||
if self.statusIDToScrollToOnLoad == self.mainStatusID {
|
||||
item = mainStatusItem
|
||||
position = .middle
|
||||
} else {
|
||||
item = Item.status(id: self.statusIDToScrollToOnLoad, state: .unknown)
|
||||
position = .top
|
||||
}
|
||||
// ensure that the status is on-screen after newly loaded statuses are added
|
||||
// todo: should this not happen if the user has already started scrolling (e.g. because the main status is very long)?
|
||||
if let indexPath = self.dataSource.indexPath(for: mainStatusItem) {
|
||||
self.tableView.scrollToRow(at: indexPath, at: .middle, animated: false)
|
||||
if let indexPath = self.dataSource.indexPath(for: item) {
|
||||
self.tableView.scrollToRow(at: indexPath, at: position, animated: false)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -339,9 +350,11 @@ class ConversationTableViewController: EnhancedTableViewController {
|
|||
// MARK: - Table view delegate
|
||||
|
||||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
if case .expandThread = dataSource.itemIdentifier(for: indexPath),
|
||||
if case let .expandThread(childThreads: childThreads, inline: _) = dataSource.itemIdentifier(for: indexPath),
|
||||
case let .status(id: id, state: state) = dataSource.itemIdentifier(for: IndexPath(row: indexPath.row - 1, section: indexPath.section)) {
|
||||
self.selected(status: id, state: state)
|
||||
let conv = ConversationTableViewController(for: id, state: state, mastodonController: mastodonController)
|
||||
conv.statusIDToScrollToOnLoad = childThreads.first!.status.id
|
||||
show(conv)
|
||||
} else {
|
||||
super.tableView(tableView, didSelectRowAt: indexPath)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue