Skip to content

Commit a2c3508

Browse files
author
Vincent van der Wal
committed
add in progress
1 parent e3a5ae1 commit a2c3508

File tree

1 file changed

+49
-15
lines changed

1 file changed

+49
-15
lines changed

src/routes/+page.svelte

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
let showTimeSelector = $state(true);
3434
3535
import '../styles.css';
36+
import { SvelteDate } from 'svelte/reactivity';
3637
3738
let darkMode = $derived(mode.current);
3839
let timeSliderApi: { setDisabled: (d: boolean) => void };
@@ -163,7 +164,11 @@
163164
let url: URL;
164165
let params: URLSearchParams;
165166
166-
let domain: Domain = $state({ value: 'meteoswiss_icon_ch1', label: 'DWD ICON D2' });
167+
let domain: Domain = $state({
168+
value: 'meteoswiss_icon_ch1',
169+
label: 'DWD ICON D2',
170+
model_interval: 3
171+
});
167172
let variable: Variable = $state({ value: 'temperature_2m', label: 'Temperature 2m' });
168173
let timeSelected = $state(new Date());
169174
let modelRunSelected = $state(new Date());
@@ -239,7 +244,7 @@
239244
domain = domains.find((dm) => dm.value === import.meta.env.VITE_DOMAIN) ?? domains[0];
240245
}
241246
242-
let urlModelTime = params.get('model_time');
247+
let urlModelTime = params.get('model');
243248
if (urlModelTime && urlModelTime.length == 15) {
244249
const year = parseInt(urlModelTime.slice(0, 4));
245250
const month = parseInt(urlModelTime.slice(5, 7)) - 1; // zero-based
@@ -467,11 +472,13 @@
467472
`https://openmeteo.s3.amazonaws.com/data_spatial/${domain.value}/${latest ? 'latest' : 'in-progress'}.json`
468473
).then(async (result) => {
469474
const json = await result.json();
470-
const referenceTime = json.reference_time;
471-
modelRunSelected = new Date(referenceTime);
475+
if (latest) {
476+
const referenceTime = json.reference_time;
477+
modelRunSelected = new Date(referenceTime);
472478
473-
if (modelRunSelected - timeSelected > 0) {
474-
timeSelected = new Date(referenceTime);
479+
if (modelRunSelected - timeSelected > 0) {
480+
timeSelected = new Date(referenceTime);
481+
}
475482
}
476483
477484
resolve(json);
@@ -509,6 +516,22 @@
509516
});
510517
511518
let colors = $derived(colorScale.colors.reverse());
519+
520+
let modelRuns = $derived.by(() => {
521+
if (latest) {
522+
let referenceTime = new Date(latest.reference_time);
523+
let returnArray = [
524+
...Array(Math.round(referenceTime.getUTCHours() / domain.model_interval + 1))
525+
].map((_, i) => {
526+
let d = new Date();
527+
d.setUTCHours(i * domain.model_interval, 0, 0, 0);
528+
return d;
529+
});
530+
return returnArray;
531+
} else {
532+
return [];
533+
}
534+
});
512535
</script>
513536

514537
<div class="map" id="#map_container" bind:this={mapContainer}></div>
@@ -566,11 +589,11 @@
566589
</Sheet.Root>
567590

568591
<Drawer.Root bind:open={drawerOpen}>
569-
<Drawer.Content class=" h-1/3 ">
570-
<div class="flex flex-col items-center overflow-y-scroll">
592+
<Drawer.Content class="h-1/3">
593+
<div class="flex flex-col items-center overflow-y-scroll pb-12">
571594
<div class="container mx-auto px-3">
572595
<div class="mt-3 flex w-full flex-col flex-wrap gap-6 sm:flex-row sm:gap-0">
573-
<div class="flex flex-col gap-3 sm:w-1/2 md:w-1/4 md:pr-3">
596+
<div class="flex flex-col gap-3 sm:w-1/2 md:w-1/3 md:pr-3">
574597
<h2 class="text-lg font-bold">Domains</h2>
575598
<div class="relative">
576599
<Select.Root
@@ -608,26 +631,31 @@
608631
</div>
609632

610633
{#await latestRequest}
611-
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/4 md:px-3">
634+
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/3 md:px-3">
612635
<h2 class="mb-2 text-lg font-bold">Model runs</h2>
613636
Loading latest model runs...
614637
</div>
615638

616-
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/4 md:pl-3">
639+
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/3 md:pl-3">
617640
<h2 class="mb-2 text-lg font-bold">Variables</h2>
618641
Loading domain variables...
619642
</div>
620643
{:then latest}
621-
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/4 md:px-3">
644+
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/3 md:px-3">
622645
<h2 class="mb-2 text-lg font-bold">Model runs</h2>
623-
{#each [modelRunSelected] as vt, i (i)}
624-
{@const mr = new Date(vt)}
646+
{#each modelRuns as mr, i (i)}
625647
<Button
626648
class="cursor-pointer bg-blue-200 hover:bg-blue-600 {mr.getTime() ===
627649
modelRunSelected.getTime()
628650
? 'bg-blue-400'
629651
: ''}"
630652
onclick={() => {
653+
modelRunSelected = mr;
654+
url.searchParams.set(
655+
'model',
656+
mr.toISOString().replace(/[:Z]/g, '').slice(0, 15)
657+
);
658+
pushState(url + map._hash.getHashString(), {});
631659
toast(
632660
'Model run set to: ' +
633661
mr.getUTCFullYear() +
@@ -664,6 +692,12 @@
664692
? 'bg-blue-400'
665693
: ''}"
666694
onclick={() => {
695+
modelRunSelected = ip;
696+
url.searchParams.set(
697+
'model',
698+
ip.toISOString().replace(/[:Z]/g, '').slice(0, 15)
699+
);
700+
pushState(url + map._hash.getHashString(), {});
667701
toast(
668702
'Model run set to: ' +
669703
ip.getUTCFullYear() +
@@ -692,7 +726,7 @@
692726
{/await}
693727
</div>
694728
{#if timeValid}
695-
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/4 md:pl-3">
729+
<div class="flex flex-col gap-1 sm:w-1/2 md:w-1/3 md:pl-3">
696730
<h2 class="mb-2 text-lg font-bold">Variables</h2>
697731

698732
<div class="relative">

0 commit comments

Comments
 (0)