Timeline : Get back the initial LoadMore
This commit is contained in:
parent
07002939bd
commit
39377886da
1 changed files with 11 additions and 6 deletions
|
|
@ -59,16 +59,16 @@ class TimelinePresenter @Inject constructor(
|
||||||
var lastReadMarkerIndex by rememberSaveable { mutableStateOf(Int.MAX_VALUE) }
|
var lastReadMarkerIndex by rememberSaveable { mutableStateOf(Int.MAX_VALUE) }
|
||||||
var lastReadMarkerId by rememberSaveable { mutableStateOf<EventId?>(null) }
|
var lastReadMarkerId by rememberSaveable { mutableStateOf<EventId?>(null) }
|
||||||
|
|
||||||
val timelineItems = timelineItemsFactory.collectItemsAsState()
|
val timelineItems by timelineItemsFactory.collectItemsAsState()
|
||||||
val paginationState = timeline.paginationState.collectAsState()
|
val paginationState by timeline.paginationState.collectAsState()
|
||||||
|
|
||||||
fun handleEvents(event: TimelineEvents) {
|
fun handleEvents(event: TimelineEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
TimelineEvents.LoadMore -> localCoroutineScope.loadMore(paginationState.value)
|
TimelineEvents.LoadMore -> localCoroutineScope.loadMore(paginationState)
|
||||||
is TimelineEvents.SetHighlightedEvent -> highlightedEventId.value = event.eventId
|
is TimelineEvents.SetHighlightedEvent -> highlightedEventId.value = event.eventId
|
||||||
is TimelineEvents.OnScrollFinished -> {
|
is TimelineEvents.OnScrollFinished -> {
|
||||||
// Get last valid EventId seen by the user, as the first index might refer to a Virtual item
|
// Get last valid EventId seen by the user, as the first index might refer to a Virtual item
|
||||||
val eventId = getLastEventIdBeforeOrAt(event.firstIndex, timelineItems.value) ?: return
|
val eventId = getLastEventIdBeforeOrAt(event.firstIndex, timelineItems) ?: return
|
||||||
if (event.firstIndex <= lastReadMarkerIndex && eventId != lastReadMarkerId) {
|
if (event.firstIndex <= lastReadMarkerIndex && eventId != lastReadMarkerId) {
|
||||||
lastReadMarkerIndex = event.firstIndex
|
lastReadMarkerIndex = event.firstIndex
|
||||||
lastReadMarkerId = eventId
|
lastReadMarkerId = eventId
|
||||||
|
|
@ -82,13 +82,18 @@ class TimelinePresenter @Inject constructor(
|
||||||
timeline
|
timeline
|
||||||
.timelineItems
|
.timelineItems
|
||||||
.onEach(timelineItemsFactory::replaceWith)
|
.onEach(timelineItemsFactory::replaceWith)
|
||||||
|
.onEach { timelineItems ->
|
||||||
|
if (timelineItems.isEmpty()) {
|
||||||
|
loadMore(paginationState)
|
||||||
|
}
|
||||||
|
}
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
return TimelineState(
|
return TimelineState(
|
||||||
highlightedEventId = highlightedEventId.value,
|
highlightedEventId = highlightedEventId.value,
|
||||||
paginationState = paginationState.value,
|
paginationState = paginationState,
|
||||||
timelineItems = timelineItems.value,
|
timelineItems = timelineItems,
|
||||||
eventSink = ::handleEvents
|
eventSink = ::handleEvents
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue