Skip to content

Commit 018e616

Browse files
committed
refactor(timeline): use virtual scroller
1 parent b8ca7c6 commit 018e616

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

packages/app-frontend/src/features/timeline/TimelineEventList.vue

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,11 @@ export default {
7373
function scrollToInspectedEvent () {
7474
if (!scroller.value) return
7575
76+
const scrollerEl = scroller.value.$el
77+
7678
const index = filteredEvents.value.indexOf(inspectedEvent.value)
7779
if (index !== -1) {
78-
scroller.value.scrollTop = 39 * (index + 0.5) - (scroller.value.clientHeight) / 2
80+
scrollerEl.scrollTop = 39 * (index + 0.5) - (scrollerEl.clientHeight) / 2
7981
}
8082
}
8183
@@ -86,11 +88,13 @@ export default {
8688
function checkScrollToInspectedEvent () {
8789
if (!scroller.value) return
8890
91+
const scrollerEl = scroller.value.$el
92+
8993
const index = filteredEvents.value.indexOf(inspectedEvent.value)
9094
const minPosition = 39 * index
9195
const maxPosition = minPosition + 39
9296
93-
if (scroller.value.scrollTop > minPosition || scroller.value.scrollTop + scroller.value.clientHeight < maxPosition) {
97+
if (scrollerEl.scrollTop > minPosition || scrollerEl.scrollTop + scrollerEl.clientHeight < maxPosition) {
9498
scrollToInspectedEvent()
9599
}
96100
}
@@ -165,18 +169,20 @@ export default {
165169
/>
166170
</div>
167171

168-
<div
172+
<RecycleScroller
169173
ref="scroller"
170-
class="flex-1 overflow-y-auto scroll-smooth"
174+
:items="filteredEvents"
175+
:item-size="34"
176+
class="flex-1"
171177
>
172-
<TimelineEventListItem
173-
v-for="(event, index) of filteredEvents"
174-
:key="index"
175-
:event="event"
176-
:selected="tabId !== 'nearby' && selectedStackedEvents.includes(event)"
177-
@inspect="inspectEvent(event)"
178-
@select="selectEvent(event)"
179-
/>
180-
</div>
178+
<template #default="{ item: event }">
179+
<TimelineEventListItem
180+
:event="event"
181+
:selected="tabId !== 'nearby' && selectedStackedEvents.includes(event)"
182+
@inspect="inspectEvent(event)"
183+
@select="selectEvent(event)"
184+
/>
185+
</template>
186+
</RecycleScroller>
181187
</div>
182188
</template>

packages/app-frontend/src/features/timeline/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { getBridge } from '../bridge'
99
const STACK_DURATION = 50
1010
const AUTOSCROLL_DURATION = 10000
1111

12+
let nextEventId = 0
13+
1214
const startTime = ref(0)
1315
const endTime = ref(0)
1416
const minTime = ref(0)
@@ -82,6 +84,7 @@ function addEvent (appId, event, layer) {
8284
resetTime()
8385
}
8486

87+
event.id = nextEventId++
8588
event.layer = layer
8689
event.appId = appId
8790
layer.events.push(event)

0 commit comments

Comments
 (0)