@@ -17,6 +17,7 @@ import {
17
17
ResetFiltersButton ,
18
18
} from "./filters"
19
19
import { formatBlockTime } from "./format-block-time"
20
+ import { useCurrentTimeMarker } from "./use-current-time-marker"
20
21
21
22
export interface FiltersConfig
22
23
extends Partial <
@@ -138,6 +139,8 @@ export function ScheduleList({
138
139
const firstDayIsDayZero = Object . keys ( firstDay ) . length < 3
139
140
const startIndex = firstDayIsDayZero ? 0 : 1
140
141
142
+ const getTimeMarker = useCurrentTimeMarker ( )
143
+
141
144
return (
142
145
< >
143
146
< div className = "flex justify-between gap-1 max-lg:flex-col" >
@@ -229,6 +232,16 @@ export function ScheduleList({
229
232
blockEnd . getTime ( ) ,
230
233
)
231
234
235
+ let timeMarker = getTimeMarker ( sessionDate , blockEnd )
236
+ // if end times differ and blockEnd is far from start, we treat this as a long event, like "solutions showcase"
237
+ if (
238
+ endTimesDiffer &&
239
+ blockEnd . getTime ( ) - new Date ( sessionDate ) . getTime ( ) >
240
+ 1000 * 60 * 60 * 2
241
+ ) {
242
+ timeMarker = null
243
+ }
244
+
232
245
return (
233
246
< div
234
247
key = { `concurrent sessions on ${ sessionDate } ` }
@@ -256,6 +269,18 @@ export function ScheduleList({
256
269
) ) }
257
270
</ div >
258
271
</ div >
272
+ { timeMarker && (
273
+ < div
274
+ id = "current-time-marker"
275
+ className = "typography-body-xs pointer-events-none absolute -right-1 z-10 -translate-y-full font-mono tabular-nums text-pri-base before:absolute before:inset-x-0 before:bottom-0 before:border-b before:border-pri-base before:opacity-80 after:absolute after:bottom-0 after:left-[-100vw] after:w-screen after:border-t after:border-pri-base after:opacity-20 dark:text-pri-light dark:before:border-pri-light dark:after:border-pri-light max-xl:bg-neu-0 xl:translate-x-full"
276
+ style = { {
277
+ top : `${ timeMarker . positionPercentage } %` ,
278
+ } }
279
+ >
280
+ < span className = "max-2xl:hidden" > now: </ span >
281
+ { timeMarker . currentTime }
282
+ </ div >
283
+ ) }
259
284
{ hasDashedBorder && (
260
285
< svg
261
286
className = "absolute -bottom-px left-0 h-px w-full text-neu-50"
0 commit comments