diff --git a/app/components/PackageDownloadAnalytics.vue b/app/components/PackageDownloadAnalytics.vue index ab1b72bb..ec643bad 100644 --- a/app/components/PackageDownloadAnalytics.vue +++ b/app/components/PackageDownloadAnalytics.vue @@ -138,7 +138,12 @@ function formatXyDataset( color: accent.value, }, ], - dates: dataset.map(d => `${d.weekStart}\nto ${d.weekEnd}`), + dates: dataset.map(d => + $t('package.downloads.date_range_multiline', { + start: d.weekStart, + end: d.weekEnd, + }), + ), } } if (selectedGranularity === 'daily' && isDailyDataset(dataset)) { @@ -199,14 +204,16 @@ function safeMax(a: string, b: string): string { return a.localeCompare(b) >= 0 ? a : b } -function extractDates(dateLabel: string) { - if (typeof dateLabel !== 'string') return [] +function extractDates(dateLabel: string): [string, string] | null { + const matches = dateLabel.match(/\b(\d{4}(?:-\d{2}-\d{2})?)\b/g) // either yyyy or yyyy-mm-dd + if (!matches) return null - const parts = dateLabel.trim().split(/\s+/).filter(Boolean) + const first = matches.at(0) + const last = matches.at(-1) - if (parts.length < 2) return [] + if (!first || !last || first === last) return null - return [parts[0], parts[parts.length - 1]] + return [first, last] } /** @@ -553,7 +560,8 @@ const config = computed(() => { ? undefined : ({ absoluteIndex, side }: { absoluteIndex: number; side: 'left' | 'right' }) => { const parts = extractDates(chartData.value.dates[absoluteIndex] ?? '') - return side === 'left' ? parts[0] : parts.at(-1) + if (!parts) return '' + return side === 'left' ? parts[0] : parts[1] }, highlightColor: colors.value.bgElevated, minimap: { @@ -670,7 +678,7 @@ const config = computed(() => { - +