mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Permalink polish (#2771)
* Fix unbalanced padding. * Animate the scroll to an event when it is already loaded. * Perform the timeline clearance immediately before replacing the items. Hides the empty timeline that was briefly shown. * Make switching timeline more resilient.
This commit is contained in:
@@ -115,6 +115,8 @@ enum RoomScreenViewAction {
|
||||
case focusLive
|
||||
/// The timeline scrolled to reveal the focussed item.
|
||||
case scrolledToFocussedItem
|
||||
/// The table view has loaded the first items for a new timeline.
|
||||
case hasSwitchedTimeline
|
||||
}
|
||||
|
||||
enum RoomScreenComposerAction {
|
||||
@@ -227,10 +229,27 @@ struct TimelineViewState {
|
||||
var isLive = true
|
||||
var paginationState = PaginationState.default
|
||||
|
||||
/// The ID of the focussed event navigated to via a permalink.
|
||||
var focussedEventID: String? { didSet { focussedEventNeedsDisplay = focussedEventID != nil } }
|
||||
/// Whether the timeline should scroll to `focussedEventID` once its item has been built and added to the timeline.
|
||||
var focussedEventNeedsDisplay: Bool
|
||||
/// The room is in the process of loading items from a new timeline (switching to/from a detached timeline).
|
||||
var isSwitchingTimelines = false
|
||||
|
||||
struct FocussedEvent: Equatable {
|
||||
enum Appearance {
|
||||
/// The event should be shown using an animated scroll.
|
||||
case animated
|
||||
/// The event should be shown immediately, without any animation.
|
||||
case immediate
|
||||
/// The event has already been shown.
|
||||
case hasAppeared
|
||||
}
|
||||
|
||||
/// The ID of the event.
|
||||
let eventID: String
|
||||
/// How the event should be shown, or whether it has already appeared.
|
||||
var appearance: Appearance
|
||||
}
|
||||
|
||||
/// A focussed event that was navigated to via a permalink.
|
||||
var focussedEvent: FocussedEvent?
|
||||
|
||||
// These can be removed when we have full swiftUI and moved as @State values in the view
|
||||
var scrollToBottomPublisher = PassthroughSubject<Void, Never>()
|
||||
|
||||
Reference in New Issue
Block a user