Add timeline day separators and read markers (#383)

* Add timeline day separators and read markers
This commit is contained in:
Stefan Ceriu
2022-12-21 15:35:45 +02:00
committed by GitHub
parent a9f2e1bdf8
commit 131197b7d7
10 changed files with 113 additions and 29 deletions
@@ -0,0 +1,21 @@
//
// Copyright 2022 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import Foundation
struct ReadMarkerRoomTimelineItem: DecorationTimelineItemProtocol, Identifiable, Hashable {
let id: String
}
@@ -17,6 +17,7 @@
import Foundation
struct RoomTimelineViewFactory: RoomTimelineViewFactoryProtocol {
// swiftlint:disable:next cyclomatic_complexity
func buildTimelineViewFor(timelineItem: RoomTimelineItemProtocol) -> RoomTimelineViewProvider {
switch timelineItem {
case let item as TextRoomTimelineItem:
@@ -37,6 +38,8 @@ struct RoomTimelineViewFactory: RoomTimelineViewFactoryProtocol {
return .redacted(item)
case let item as EncryptedRoomTimelineItem:
return .encrypted(item)
case let item as ReadMarkerRoomTimelineItem:
return .readMarker(item)
default:
fatalError("Unknown timeline item")
}
@@ -27,6 +27,7 @@ enum RoomTimelineViewProvider: Identifiable, Hashable {
case notice(NoticeRoomTimelineItem)
case redacted(RedactedRoomTimelineItem)
case encrypted(EncryptedRoomTimelineItem)
case readMarker(ReadMarkerRoomTimelineItem)
case backPaginationIndicator(Bool)
var id: String {
@@ -49,6 +50,8 @@ enum RoomTimelineViewProvider: Identifiable, Hashable {
return item.id
case .encrypted(let item):
return item.id
case .readMarker(let item):
return item.id
case .backPaginationIndicator:
return "BackpaginationLoadingIndicator"
}
@@ -76,6 +79,8 @@ extension RoomTimelineViewProvider: View {
RedactedRoomTimelineView(timelineItem: item)
case .encrypted(let item):
EncryptedRoomTimelineView(timelineItem: item)
case .readMarker(let item):
ReadMarkerRoomTimelineView(timelineItem: item)
case .backPaginationIndicator(let isBackPaginating):
ProgressView()
.frame(maxWidth: .infinity)