Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OpenChannelViewController: UIViewController {
private weak var messageInputBottomConstraint: NSLayoutConstraint?

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -171,6 +172,11 @@ extension OpenChannelViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -201,18 +207,26 @@ extension OpenChannelViewController: OpenChannelMessageListUseCaseDelegate {

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard let focusMessage = targetMessageForScrolling else { return }

guard let messageIndex = messageListUseCase.messages.firstIndex(where: {
$0.messageId == focusMessage.messageId || $0.requestId == focusMessage.requestId
}) else { return }

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
let scrollPosition: UITableView.ScrollPosition = (messageIndex == messageListUseCase.messages.count - 1) ? .bottom : .top
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OpenChannelViewController: UIViewController {
private weak var messageInputBottomConstraint: NSLayoutConstraint?

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -169,6 +170,11 @@ extension OpenChannelViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -199,18 +205,26 @@ extension OpenChannelViewController: OpenChannelMessageListUseCaseDelegate {

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard let focusMessage = targetMessageForScrolling else { return }

guard let messageIndex = messageListUseCase.messages.firstIndex(where: {
$0.messageId == focusMessage.messageId || $0.requestId == focusMessage.requestId
}) else { return }

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
let scrollPosition: UITableView.ScrollPosition = (messageIndex == messageListUseCase.messages.count - 1) ? .bottom : .top
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OpenChannelViewController: UIViewController {
private weak var messageInputBottomConstraint: NSLayoutConstraint?

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -169,6 +170,11 @@ extension OpenChannelViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -199,18 +205,29 @@ extension OpenChannelViewController: OpenChannelMessageListUseCaseDelegate {

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard
let focusMessage = targetMessageForScrolling,
let messageIndex = messageListUseCase.messages.firstIndex(where: { $0.messageId == focusMessage.messageId })
else {
return
}

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)
let scrollPosition: UITableView.ScrollPosition = (
messageIndex == messageListUseCase.messages.count - 1
) ? .bottom : .top

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OpenChannelViewController: UIViewController {
private weak var messageInputBottomConstraint: NSLayoutConstraint?

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -169,6 +170,11 @@ extension OpenChannelViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -199,18 +205,26 @@ extension OpenChannelViewController: OpenChannelMessageListUseCaseDelegate {

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard let focusMessage = targetMessageForScrolling else { return }

guard let messageIndex = messageListUseCase.messages.firstIndex(where: {
$0.messageId == focusMessage.messageId || $0.requestId == focusMessage.requestId
}) else { return }

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
let scrollPosition: UITableView.ScrollPosition = (messageIndex == messageListUseCase.messages.count - 1) ? .bottom : .top
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class OpenChannelPinnedMessagesViewController: UIViewController {
}()

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -103,6 +104,11 @@ extension OpenChannelPinnedMessagesViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -133,18 +139,26 @@ extension OpenChannelPinnedMessagesViewController: OpenChannelMessageListUseCase

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard let focusMessage = targetMessageForScrolling else { return }

guard let messageIndex = messageListUseCase.messages.firstIndex(where: {
$0.messageId == focusMessage.messageId || $0.requestId == focusMessage.requestId
}) else { return }

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
let scrollPosition: UITableView.ScrollPosition = (messageIndex == messageListUseCase.messages.count - 1) ? .bottom : .top
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OpenChannelViewController: UIViewController {
private weak var messageInputBottomConstraint: NSLayoutConstraint?

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -169,6 +170,11 @@ extension OpenChannelViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -199,18 +205,26 @@ extension OpenChannelViewController: OpenChannelMessageListUseCaseDelegate {

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard let focusMessage = targetMessageForScrolling else { return }

guard let messageIndex = messageListUseCase.messages.firstIndex(where: {
$0.messageId == focusMessage.messageId || $0.requestId == focusMessage.requestId
}) else { return }

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
let scrollPosition: UITableView.ScrollPosition = (messageIndex == messageListUseCase.messages.count - 1) ? .bottom : .top
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OpenChannelViewController: UIViewController {
private weak var messageInputBottomConstraint: NSLayoutConstraint?

var targetMessageForScrolling: BaseMessage?
private var isInitialLoad = true

let channel: OpenChannel

Expand Down Expand Up @@ -175,6 +176,11 @@ extension OpenChannelViewController: UITableViewDelegate {

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y - Constant.loadMoreThreshold <= 0 {
if let visibleIndexPaths = tableView.indexPathsForVisibleRows,
let firstVisibleIndexPath = visibleIndexPaths.first,
firstVisibleIndexPath.row < messageListUseCase.messages.count {
targetMessageForScrolling = messageListUseCase.messages[firstVisibleIndexPath.row]
}
messageListUseCase.loadPreviousMessages()
}

Expand Down Expand Up @@ -232,18 +238,26 @@ extension OpenChannelViewController: OpenChannelMessageListUseCaseDelegate {

func openChannelMessageListUseCase(_ useCase: OpenChannelMessageListUseCase, didUpdateMessages messages: [BaseMessage]) {
tableView.reloadData()
if isInitialLoad && !messages.isEmpty {
targetMessageForScrolling = messages.last
isInitialLoad = false
}
scrollToFocusMessage()
}

private func scrollToFocusMessage() {
defer { self.targetMessageForScrolling = nil }

guard let focusMessage = targetMessageForScrolling,
focusMessage.messageId == messageListUseCase.messages.last?.messageId else { return }
guard let focusMessage = targetMessageForScrolling else { return }

guard let messageIndex = messageListUseCase.messages.firstIndex(where: {
$0.messageId == focusMessage.messageId || $0.requestId == focusMessage.requestId
}) else { return }

let focusMessageIndexPath = IndexPath(row: messageListUseCase.messages.count - 1, section: 0)
let focusMessageIndexPath = IndexPath(row: messageIndex, section: 0)

tableView.scrollToRow(at: focusMessageIndexPath, at: .bottom, animated: false)
let scrollPosition: UITableView.ScrollPosition = (messageIndex == messageListUseCase.messages.count - 1) ? .bottom : .top
tableView.scrollToRow(at: focusMessageIndexPath, at: scrollPosition, animated: false)
}

}
Expand Down
Loading