Skip to content

Commit df5a254

Browse files
committed
feat(timeline): display grouped events list
1 parent 9cf6776 commit df5a254

File tree

2 files changed

+59
-11
lines changed

2 files changed

+59
-11
lines changed

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

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,39 @@
22
import StateInspector from '../inspector/StateInspector.vue'
33
import { useSelectedEvent } from '.'
44
import Defer from '@front/mixins/defer'
5-
import DataField from '../inspector/DataField.vue'
5+
import { computed, ref, watch } from '@vue/composition-api'
66
77
export default {
88
components: {
9-
StateInspector,
10-
DataField
9+
StateInspector
1110
},
1211
1312
mixins: [
1413
Defer()
1514
],
1615
1716
setup () {
17+
const {
18+
selectedEvent,
19+
selectedStackedEvents,
20+
selectedGroupEvents
21+
} = useSelectedEvent()
22+
23+
const tabId = ref('nearby')
24+
25+
watch(selectedEvent, value => {
26+
if (value && !value.group) {
27+
tabId.value = 'nearby'
28+
}
29+
})
30+
31+
const displayedEvents = computed(() => tabId.value === 'nearby' ? selectedStackedEvents.value : selectedGroupEvents.value)
32+
1833
return {
19-
...useSelectedEvent()
34+
selectedEvent,
35+
selectedStackedEvents,
36+
tabId,
37+
displayedEvents
2038
}
2139
}
2240
}
@@ -40,12 +58,29 @@ export default {
4058
</div>
4159

4260
<div class="text-xs opacity-75">
43-
{{ selectedStackedEvents.length }} event{{ selectedStackedEvents.length > 1 ? 's' : '' }}
61+
{{ selectedStackedEvents.length }} selected event{{ selectedStackedEvents.length > 1 ? 's' : '' }}
4462
</div>
4563
</div>
4664
</div>
4765

48-
<template v-for="(event, index) of selectedStackedEvents">
66+
<VueTabs
67+
v-if="selectedEvent.group && selectedEvent.group.events.length"
68+
:tab-id.sync="tabId"
69+
group-class="accent extend"
70+
tab-class="flat"
71+
>
72+
<VueTab
73+
id="nearby"
74+
:label="selectedStackedEvents.length > 1 ? 'Nearby' : 'Selected'"
75+
/>
76+
<VueTab
77+
v-if="selectedEvent.group"
78+
id="group"
79+
label="Group"
80+
/>
81+
</VueTabs>
82+
83+
<template v-for="(event, index) of displayedEvents">
4984
<StateInspector
5085
v-if="defer(index + 1)"
5186
:key="index"
@@ -59,6 +94,14 @@ export default {
5994
<span class="flex-1">
6095
{{ event.title || 'Event' }}
6196
</span>
97+
98+
<span
99+
v-if="tabId === 'group' && selectedStackedEvents.find(e => e.time === event.time)"
100+
class="flex-none text-2xs p-1 rounded-full bg-green-100 dark:bg-green-900 text-green-500 border border-green-200 dark:border-green-800"
101+
>
102+
selected
103+
</span>
104+
62105
<span class="event-time flex-none flex items-center space-x-0.5 text-2xs font-mono p-1 rounded-full border border-gray-200 dark:border-gray-800">
63106
<VueIcon
64107
icon="schedule"

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,18 @@ export function useLayers () {
235235
}
236236

237237
export function useSelectedEvent () {
238-
return {
239-
selectedEvent,
240-
selectedStackedEvents: computed(() => selectedEvent.value.stackedEvents.map(e => (Object.freeze({
241-
...e,
238+
function mapEvent (e) {
239+
return Object.freeze({
240+
title: e.title,
242241
data: parse(e.data),
243242
time: formatTime(e.time, 'ms')
244-
}))))
243+
})
244+
}
245+
246+
return {
247+
selectedEvent,
248+
selectedStackedEvents: computed(() => selectedEvent.value.stackedEvents.map(mapEvent)),
249+
selectedGroupEvents: computed(() => selectedEvent.value.group ? selectedEvent.value.group.events.map(mapEvent) : [])
245250
}
246251
}
247252

0 commit comments

Comments
 (0)