forked from shadowfacts/Tusker
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 mainStatusID: String
|
||||||
let mainStatusState: StatusState
|
let mainStatusState: StatusState
|
||||||
|
var statusIDToScrollToOnLoad: String
|
||||||
private(set) var dataSource: UITableViewDiffableDataSource<Section, Item>!
|
private(set) var dataSource: UITableViewDiffableDataSource<Section, Item>!
|
||||||
|
|
||||||
var showStatusesAutomatically = false
|
var showStatusesAutomatically = false
|
||||||
|
@ -41,6 +42,7 @@ class ConversationTableViewController: EnhancedTableViewController {
|
||||||
init(for mainStatusID: String, state: StatusState = .unknown, mastodonController: MastodonController) {
|
init(for mainStatusID: String, state: StatusState = .unknown, mastodonController: MastodonController) {
|
||||||
self.mainStatusID = mainStatusID
|
self.mainStatusID = mainStatusID
|
||||||
self.mainStatusState = state
|
self.mainStatusState = state
|
||||||
|
self.statusIDToScrollToOnLoad = mainStatusID
|
||||||
self.mastodonController = mastodonController
|
self.mastodonController = mastodonController
|
||||||
|
|
||||||
super.init(style: .plain)
|
super.init(style: .plain)
|
||||||
|
@ -227,10 +229,19 @@ class ConversationTableViewController: EnhancedTableViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.dataSource.apply(snapshot, animatingDifferences: false) {
|
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)?
|
// 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) {
|
if let indexPath = self.dataSource.indexPath(for: item) {
|
||||||
self.tableView.scrollToRow(at: indexPath, at: .middle, animated: false)
|
self.tableView.scrollToRow(at: indexPath, at: position, animated: false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,9 +350,11 @@ class ConversationTableViewController: EnhancedTableViewController {
|
||||||
// MARK: - Table view delegate
|
// MARK: - Table view delegate
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
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)) {
|
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 {
|
} else {
|
||||||
super.tableView(tableView, didSelectRowAt: indexPath)
|
super.tableView(tableView, didSelectRowAt: indexPath)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue