diff --git a/web/src/lib/components/shared-components/date-picker.svelte b/web/src/lib/components/shared-components/date-picker.svelte index 67b1ee73a9..bf9dad7943 100644 --- a/web/src/lib/components/shared-components/date-picker.svelte +++ b/web/src/lib/components/shared-components/date-picker.svelte @@ -6,16 +6,17 @@ onDateChange: (year?: number, month?: number, day?: number) => Promise; onClearFilters?: () => void; defaultDate?: string; + startYear: number; } - let { onDateChange, onClearFilters, defaultDate }: Props = $props(); + let { onDateChange, onClearFilters, defaultDate, startYear }: Props = $props(); let selectedYear = $state(undefined); let selectedMonth = $state(undefined); let selectedDay = $state(undefined); const currentYear = new Date().getFullYear(); - const yearOptions = Array.from({ length: 30 }, (_, i) => currentYear - i); + let yearOptions = $derived(Array.from({ length: currentYear - startYear + 1 }, (_, i) => currentYear - i)); const monthOptions = Array.from({ length: 12 }, (_, i) => ({ value: i + 1, diff --git a/web/src/routes/(user)/utilities/geolocation/+page.svelte b/web/src/routes/(user)/utilities/geolocation/+page.svelte index 48e94d750f..f079cdfdcf 100644 --- a/web/src/routes/(user)/utilities/geolocation/+page.svelte +++ b/web/src/routes/(user)/utilities/geolocation/+page.svelte @@ -12,7 +12,7 @@ import { setQueryValue } from '$lib/utils/navigation'; import { buildDateString } from '$lib/utils/string-utils'; import { toTimelineAsset } from '$lib/utils/timeline-util'; - import { searchAssets, updateAssets, type AssetResponseDto } from '@immich/sdk'; + import { AssetOrder, searchAssets, updateAssets, type AssetResponseDto } from '@immich/sdk'; import { Button, LoadingSpinner, modalManager, Text } from '@immich/ui'; import { mdiMapMarkerMultipleOutline, @@ -32,6 +32,7 @@ let partialDate = $state(data.partialDate); let isLoading = $state(false); let assets = $state([]); + let startYear = $state(2000); let shiftKeyIsDown = $state(false); let assetInteraction = new AssetInteraction(); let location = $state<{ latitude: number; longitude: number }>({ latitude: 0, longitude: 0 }); @@ -64,6 +65,25 @@ } } + const getEarliestAsset = async () => { + const earliest = await searchAssets({ + metadataSearchDto: { + withExif: true, + size: 1, + order: AssetOrder.Asc, + }, + }); + + const asset = earliest.assets.items[0]; + if (!asset) { + return; + } + + startYear = new Date(asset.localDateTime).getFullYear(); + }; + + void getEarliestAsset(); + const loadAssets = async () => { if (takenRange) { isLoading = true; @@ -262,6 +282,7 @@ onDateChange={handleDateChange} onClearFilters={handleClearFilters} defaultDate={partialDate || undefined} + {startYear} />