fix(web): geolocation utility start year

This commit is contained in:
Jason Rasmussen 2025-09-09 13:39:26 -04:00
parent 27bc8eba7b
commit 3f82cd45d0
No known key found for this signature in database
GPG key ID: 2EF24B77EAFA4A41
2 changed files with 25 additions and 3 deletions

View file

@ -6,16 +6,17 @@
onDateChange: (year?: number, month?: number, day?: number) => Promise<void>; onDateChange: (year?: number, month?: number, day?: number) => Promise<void>;
onClearFilters?: () => void; onClearFilters?: () => void;
defaultDate?: string; defaultDate?: string;
startYear: number;
} }
let { onDateChange, onClearFilters, defaultDate }: Props = $props(); let { onDateChange, onClearFilters, defaultDate, startYear }: Props = $props();
let selectedYear = $state<number | undefined>(undefined); let selectedYear = $state<number | undefined>(undefined);
let selectedMonth = $state<number | undefined>(undefined); let selectedMonth = $state<number | undefined>(undefined);
let selectedDay = $state<number | undefined>(undefined); let selectedDay = $state<number | undefined>(undefined);
const currentYear = new Date().getFullYear(); 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) => ({ const monthOptions = Array.from({ length: 12 }, (_, i) => ({
value: i + 1, value: i + 1,

View file

@ -12,7 +12,7 @@
import { setQueryValue } from '$lib/utils/navigation'; import { setQueryValue } from '$lib/utils/navigation';
import { buildDateString } from '$lib/utils/string-utils'; import { buildDateString } from '$lib/utils/string-utils';
import { toTimelineAsset } from '$lib/utils/timeline-util'; 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 { Button, LoadingSpinner, modalManager, Text } from '@immich/ui';
import { import {
mdiMapMarkerMultipleOutline, mdiMapMarkerMultipleOutline,
@ -32,6 +32,7 @@
let partialDate = $state<string | null>(data.partialDate); let partialDate = $state<string | null>(data.partialDate);
let isLoading = $state(false); let isLoading = $state(false);
let assets = $state<AssetResponseDto[]>([]); let assets = $state<AssetResponseDto[]>([]);
let startYear = $state(2000);
let shiftKeyIsDown = $state(false); let shiftKeyIsDown = $state(false);
let assetInteraction = new AssetInteraction(); let assetInteraction = new AssetInteraction();
let location = $state<{ latitude: number; longitude: number }>({ latitude: 0, longitude: 0 }); 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 () => { const loadAssets = async () => {
if (takenRange) { if (takenRange) {
isLoading = true; isLoading = true;
@ -262,6 +282,7 @@
onDateChange={handleDateChange} onDateChange={handleDateChange}
onClearFilters={handleClearFilters} onClearFilters={handleClearFilters}
defaultDate={partialDate || undefined} defaultDate={partialDate || undefined}
{startYear}
/> />
</div> </div>