Skip to content

Commit 51c392e

Browse files
authored
Order timeline items (#13) @robinheinze
1 parent dac8907 commit 51c392e

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed

app/components/TimelineToolbar.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export type FilterType = "all" | "log" | "api.request" | "api.response"
2+
// export type LogLevel = "all" | "debug" | "warn" | "error"
3+
// export type SortBy = "time-newest" | "time-oldest" | "type" | "level"
4+
5+
export interface TimelineFilters {
6+
types: FilterType[]
7+
// logLevel: LogLevel
8+
// sortBy: SortBy
9+
}
10+
11+
// TODO: TimelineToolbar component

app/screens/TimelineScreen.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { useSelectedTimelineItems } from "../utils/useSelectedTimelineItems"
1010
import { Separator } from "../components/Separator"
1111
import { themed, useThemeName } from "../theme/theme"
1212
import { $flex, $row } from "../theme/basics"
13+
import { useTimeline } from "../utils/useTimeline"
1314

1415
/**
1516
* Renders the correct component for each timeline item.
@@ -42,7 +43,8 @@ const TimelineItemRenderer = ({
4243
}
4344

4445
export function TimelineScreen() {
45-
const [timelineItems] = useGlobal<TimelineItem[]>("timelineItems", [], { persist: true })
46+
// TODO: Use a global state for the filters, set by the user in the TimelineToolbar
47+
const timelineItems = useTimeline({ types: ["log", "api.request", "api.response"] })
4648
const [timelineWidth, setTimelineWidth] = useGlobal<number>("timelineWidth", 300, {
4749
persist: true,
4850
})

app/utils/useTimeline.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { TimelineItem } from "../types"
2+
import { TimelineFilters } from "../components/TimelineToolbar"
3+
import { useGlobal } from "../state/useGlobal"
4+
5+
export function useTimeline(filters: TimelineFilters): TimelineItem[] {
6+
const [items] = useGlobal<TimelineItem[]>("timelineItems", [], { persist: true })
7+
8+
const filteredItems = items.filter((item) => {
9+
// if there are any filters selected, only show items that match the filters
10+
return filters.types.includes(item.type)
11+
})
12+
13+
filteredItems.sort((a, b) => {
14+
return new Date(b.date).getTime() - new Date(a.date).getTime()
15+
})
16+
17+
return filteredItems
18+
19+
// TODO: User controlled sorting and level filtering
20+
21+
// switch (filters.sortBy) {
22+
// case "time-newest":
23+
// return new Date(b.date).getTime() - new Date(a.date).getTime()
24+
25+
// case "time-oldest":
26+
// return new Date(a.date).getTime() - new Date(b.date).getTime()
27+
28+
// case "type":
29+
// if (a.type !== b.type) {
30+
// if (a.type === "log") return -1
31+
// if (b.type === "log") return 1
32+
// return a.type.localeCompare(b.type)
33+
// }
34+
// return new Date(b.date).getTime() - new Date(a.date).getTime()
35+
36+
// case "level":
37+
// const getLevelPriority = (item: TimelineItem): number => {
38+
// if (item.type === "log") {
39+
// const logItem = item as TimelineItemLog
40+
// switch (logItem.payload.level) {
41+
// case "error":
42+
// return 3
43+
// case "warn":
44+
// return 2
45+
// case "debug":
46+
// return 1
47+
// default:
48+
// return 0
49+
// }
50+
// }
51+
// if (item.type.startsWith("api.")) {
52+
// const networkItem = item as TimelineItemNetwork
53+
// const status = networkItem.payload.response?.status
54+
// if (status && status >= 400) return 3
55+
// if (status && status >= 300) return 2
56+
// return 1
57+
// }
58+
// return 0
59+
// }
60+
61+
// const aPriority = getLevelPriority(a)
62+
// const bPriority = getLevelPriority(b)
63+
// if (aPriority !== bPriority) {
64+
// return bPriority - aPriority
65+
// }
66+
// return new Date(b.date).getTime() - new Date(a.date).getTime()
67+
68+
// default:
69+
// return new Date(b.date).getTime() - new Date(a.date).getTime()
70+
// }
71+
// })
72+
}

0 commit comments

Comments
 (0)