diff --git a/src/lib/components/StationList.svelte b/src/lib/components/StationList.svelte index 203058a..d100b79 100644 --- a/src/lib/components/StationList.svelte +++ b/src/lib/components/StationList.svelte @@ -2,7 +2,7 @@ import StationRow from './StationRow.svelte'; import groups from '$lib/groups.json'; - export let stations = []; + let { stations = [] } = $props(); // Set per lookup O(1): con molte centraline, includes() su array per ogni riga sarebbe O(n²). const groupedIds = new Set(groups.flatMap(g => g.ids)); @@ -16,7 +16,7 @@ }); } - const sections = [ + const sections = $derived([ ...groups.map(g => ({ name: g.name, stations: sortStations(stations.filter(s => g.ids.includes(s.pk))), @@ -25,7 +25,7 @@ name: 'Altre', stations: sortStations(stations.filter(s => !groupedIds.has(s.pk))), }, - ].filter(s => s.stations.length > 0); + ].filter(s => s.stations.length > 0));
diff --git a/src/lib/components/StationRow.svelte b/src/lib/components/StationRow.svelte index 345a50e..e17e13c 100644 --- a/src/lib/components/StationRow.svelte +++ b/src/lib/components/StationRow.svelte @@ -5,9 +5,7 @@ import { downloadCsv, buildFilename } from '$lib/csv.js'; import { enqueue } from '$lib/download-pool.js'; - export let station; - - const isActive = station.ended_at === null; + let { station } = $props(); const formatDate = d => new Intl.DateTimeFormat('it-IT', { timeZone: 'Europe/Rome', @@ -16,18 +14,18 @@ year: 'numeric', }).format(new Date(d)); - const createdDate = formatDate(station.created_at); - const endDate = isActive ? null : formatDate(station.ended_at); + const isActive = $derived(station.ended_at === null); + const createdDate = $derived(formatDate(station.created_at)); + const endDate = $derived(isActive ? null : formatDate(station.ended_at)); - let showTooltip = false; - let downloading = false; - let cancelling = false; - let completed = false; + let downloading = $state(false); + let cancelling = $state(false); + let completed = $state(false); let controller = null; - let currentDay = 0; - let totalDays = 0; + let currentDay = $state(0); + let totalDays = $state(0); - $: pct = totalDays > 0 ? (currentDay / totalDays) * 100 : 0; + let pct = $derived(totalDays > 0 ? (currentDay / totalDays) * 100 : 0); async function startDownload() { const { buildCsvAsync } = await import('$lib/csv-pool.js'); @@ -94,15 +92,9 @@
Attivata il {createdDate} · - showTooltip = true} - on:mouseleave={() => showTooltip = false} - > + {isActive ? 'Attiva' : 'Terminata'} - {#if !isActive && showTooltip} + {#if !isActive} Terminata il {endDate} {/if} @@ -110,7 +102,7 @@