From e0e2d26b4b6521500d7ee4bf31bafb973050c6d2 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Mon, 19 Dec 2022 16:25:41 +0200 Subject: [PATCH] Fixes #351 - Replace Syncing toast indicator with an in-timeline loading activity indicator (#378) --- .../RoomScreen/RoomScreenViewModel.swift | 12 +--- .../View/TimelineTableViewController.swift | 70 +++++++++++-------- .../RoomTimelineViewProvider.swift | 7 ++ 3 files changed, 48 insertions(+), 41 deletions(-) diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift index 41c1f8b8c..41f403db0 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift @@ -22,7 +22,6 @@ typealias RoomScreenViewModelType = StateStoreViewModel() + snapshot.appendSections([.loadingIndicator]) + snapshot.appendItems([.backPaginationIndicator(isBackPaginating)]) snapshot.appendSections([.main]) snapshot.appendItems(timelineItems) dataSource.apply(snapshot, animatingDifferences: false) @@ -409,7 +416,10 @@ extension TimelineTableViewController: UITableViewDelegate { extension TimelineTableViewController { /// The sections of the table view used in the diffable data source. - enum TimelineSection { case main } + enum TimelineSection { + case loadingIndicator + case main + } /// A description of the timeline's layout. struct LayoutDescriptor { diff --git a/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineViewProvider.swift b/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineViewProvider.swift index 011a23d9d..aac1cee6a 100644 --- a/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineViewProvider.swift +++ b/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineViewProvider.swift @@ -27,6 +27,7 @@ enum RoomTimelineViewProvider: Identifiable, Hashable { case notice(NoticeRoomTimelineItem) case redacted(RedactedRoomTimelineItem) case encrypted(EncryptedRoomTimelineItem) + case backPaginationIndicator(Bool) var id: String { switch self { @@ -48,6 +49,8 @@ enum RoomTimelineViewProvider: Identifiable, Hashable { return item.id case .encrypted(let item): return item.id + case .backPaginationIndicator: + return "BackpaginationLoadingIndicator" } } } @@ -73,6 +76,10 @@ extension RoomTimelineViewProvider: View { RedactedRoomTimelineView(timelineItem: item) case .encrypted(let item): EncryptedRoomTimelineView(timelineItem: item) + case .backPaginationIndicator(let isBackPaginating): + ProgressView() + .frame(maxWidth: .infinity) + .opacity(isBackPaginating ? 1.0 : 0.0) } } }