Skip to content

Commit 4634863

Browse files
committed
fix: impact zoom index offsets
1 parent 7721bba commit 4634863

1 file changed

Lines changed: 49 additions & 21 deletions

File tree

app/components/Package/TimelineChart.vue

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ function getDatapointPlots(
432432
item: TimelineDatasetItem,
433433
predicate: (datapoint: TimelineSourceItem, index: number) => boolean,
434434
markerKey: string,
435+
zoomOffset: number,
435436
): TimelineMarkerItem[] {
436437
if (!item || !Array.isArray(item.source) || !Array.isArray(item.plots)) {
437438
return []
@@ -440,9 +441,10 @@ function getDatapointPlots(
440441
const timelineItem = item as TimelineSvgDataItem
441442
442443
return timelineItem.source.flatMap((datapoint, index) => {
443-
const plot = timelineItem.plots[index]
444+
const plotIndex = index - zoomOffset
445+
const plot = timelineItem.plots[plotIndex]
444446
445-
if (!plot || !predicate(datapoint, index)) {
447+
if (plotIndex < 0 || !plot || !predicate(datapoint, index)) {
446448
return []
447449
}
448450
@@ -461,16 +463,35 @@ function getDatapointPlots(
461463
})
462464
}
463465
464-
function getLatestDatapointPlot(item: TimelineDatasetItem): TimelinePlotItem | null {
465-
return item?.plots?.[activeVersionIndex.value] ?? null
466+
function getActiveVersionDatapointPlot(
467+
item: TimelineDatasetItem,
468+
zoomOffset: number,
469+
): TimelinePlotItem | null {
470+
return item?.plots?.[activeVersionIndex.value - zoomOffset] ?? null
466471
}
467472
468-
function getPositiveDatapointPlots(item: TimelineDatasetItem): TimelineMarkerItem[] {
469-
return getDatapointPlots(item, datapoint => datapoint.hasPositive === true, 'positive')
473+
function getPositiveDatapointPlots(
474+
item: TimelineDatasetItem,
475+
zoomOffset: number,
476+
): TimelineMarkerItem[] {
477+
return getDatapointPlots(
478+
item,
479+
datapoint => datapoint.hasPositive === true,
480+
'positive',
481+
zoomOffset,
482+
)
470483
}
471484
472-
function getNegativeDatapointPlots(item: TimelineDatasetItem): TimelineMarkerItem[] {
473-
return getDatapointPlots(item, datapoint => datapoint.hasNegative === true, 'negative')
485+
function getNegativeDatapointPlots(
486+
item: TimelineDatasetItem,
487+
zoomOffset: number,
488+
): TimelineMarkerItem[] {
489+
return getDatapointPlots(
490+
item,
491+
datapoint => datapoint.hasNegative === true,
492+
'negative',
493+
zoomOffset,
494+
)
474495
}
475496
476497
const indexSelection = computed(() => {
@@ -507,13 +528,13 @@ const indexSelection = computed(() => {
507528
<ClientOnly>
508529
<VueUiXy :dataset="datasets[activeTab]" :config :selected-x-index="indexSelection">
509530
<!-- Custom tooltip -->
510-
<template #tooltip="{ seriesIndex }">
531+
<template #tooltip="{ timeLabel }">
511532
<div class="font-mono text-xs flex flex-col">
512533
<div class="border-border border-b pb-2 mb-2 flex flex-col">
513534
<div class="flex flex-row gap-4">
514-
<span class="text-fg">{{ convertedData[seriesIndex]?.version }}</span>
535+
<span class="text-fg">{{ convertedData[timeLabel.absoluteIndex]?.version }}</span>
515536
<span
516-
v-for="tag in convertedData[seriesIndex]?.tags"
537+
v-for="tag in convertedData[timeLabel.absoluteIndex]?.tags"
517538
:key="tag"
518539
class="text-3xs font-semibold uppercase tracking-wide"
519540
:class="tag === 'latest' ? 'text-accent' : 'text-fg-subtle'"
@@ -522,7 +543,7 @@ const indexSelection = computed(() => {
522543
</span>
523544
</div>
524545
<DateTime
525-
:datetime="convertedData[seriesIndex]?.time!"
546+
:datetime="convertedData[timeLabel.absoluteIndex]?.time!"
526547
class="text-xs text-fg-subtle"
527548
year="numeric"
528549
month="short"
@@ -535,7 +556,9 @@ const indexSelection = computed(() => {
535556
<div class="flex flex-row gap-2 items-end">
536557
<span class="text-[var(--fg)]/70">{{ $t('package.stats.install_size') }}</span>
537558
<span class="text-sm">
538-
{{ bytesFormatter.format(convertedData[seriesIndex]?.totalSize ?? 0) }}
559+
{{
560+
bytesFormatter.format(convertedData[timeLabel.absoluteIndex]?.totalSize ?? 0)
561+
}}
539562
</span>
540563
</div>
541564

@@ -544,15 +567,20 @@ const indexSelection = computed(() => {
544567
<span class="text-[var(--fg)]/70">{{ $t('compare.dependencies') }}</span>
545568
<span class="text-sm">
546569
{{
547-
compactNumberFormatter.format(convertedData[seriesIndex]?.dependencyCount ?? 0)
570+
compactNumberFormatter.format(
571+
convertedData[timeLabel.absoluteIndex]?.dependencyCount ?? 0,
572+
)
548573
}}
549574
</span>
550575
</div>
551576
</div>
552577

553-
<ol v-if="convertedData[seriesIndex]?.events.length" class="relative font-[Geist] mt-2">
578+
<ol
579+
v-if="convertedData[timeLabel.absoluteIndex]?.events.length"
580+
class="relative font-[Geist] mt-2"
581+
>
554582
<li
555-
v-for="event in convertedData[seriesIndex]?.events"
583+
v-for="event in convertedData[timeLabel.absoluteIndex]?.events"
556584
:key="event.key"
557585
class="relative mb-1 ms-4 last:mb-0"
558586
>
@@ -611,9 +639,9 @@ const indexSelection = computed(() => {
611639
<!-- Marker for selected version -->
612640
<circle
613641
class="pointer-events-none svg-element-transition"
614-
v-if="getLatestDatapointPlot(svg.data[0])"
615-
:cx="getLatestDatapointPlot(svg.data[0])!.x"
616-
:cy="getLatestDatapointPlot(svg.data[0])!.y"
642+
v-if="getActiveVersionDatapointPlot(svg.data[0], svg.slicer.start)"
643+
:cx="getActiveVersionDatapointPlot(svg.data[0], svg.slicer.start)!.x"
644+
:cy="getActiveVersionDatapointPlot(svg.data[0], svg.slicer.start)!.y"
617645
r="8"
618646
:fill="colors.accent"
619647
:stroke="colors.bg"
@@ -622,7 +650,7 @@ const indexSelection = computed(() => {
622650

623651
<!-- Marker for positive events -->
624652
<g
625-
v-for="plot in getPositiveDatapointPlots(svg.data[0])"
653+
v-for="plot in getPositiveDatapointPlots(svg.data[0], svg.slicer.start)"
626654
:key="`pos_${plot.key}`"
627655
class="pointer-events-none"
628656
>
@@ -648,7 +676,7 @@ const indexSelection = computed(() => {
648676

649677
<!-- Marker for negative events -->
650678
<g
651-
v-for="plot in getNegativeDatapointPlots(svg.data[0])"
679+
v-for="plot in getNegativeDatapointPlots(svg.data[0], svg.slicer.start)"
652680
:key="`neg_${plot.key}`"
653681
class="pointer-events-none"
654682
>

0 commit comments

Comments
 (0)