Skip to content

Commit 6c35b26

Browse files
committed
Switch date from a bound variable to a store
Workaround for the behavior in the second REPL here: sveltejs/svelte#4265 (comment) causing two gridded data fetches to happen per change instead of one. (And fast enough that the Fetcher object doesn't seem to be able to abort them? Might be a separate issue.) Also a good time to learn how to use stores, I guess. I think having the bound variables is clearer in this case so we may want to revert this once the Svelte bug is fixed, but stores are still pretty neat.
1 parent d02dfff commit 6c35b26

File tree

3 files changed

+20
-15
lines changed

3 files changed

+20
-15
lines changed

src/App.svelte

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import Controls from './Controls.svelte';
1515
import colormaps from './map/colormaps/';
1616
import projections from './map/projections/';
17+
import date from './date.js'
1718
1819
import { onMount } from 'svelte';
1920
@@ -23,10 +24,9 @@
2324
2425
let openedMenu = null;
2526
let fetcher = new Fetcher(inventory);
26-
let date = new Date('2020-08-08T18:00:00.000Z');
27-
$: date, (async () => {
28-
let uPath = `/data/gfs-0p25-u-wind-velocity-10m/${date.toISOString()}.fp16`;
29-
let vPath = `/data/gfs-0p25-v-wind-velocity-10m/${date.toISOString()}.fp16`;
27+
$: $date, (async () => {
28+
let uPath = `/data/gfs-0p25-u-wind-velocity-10m/${$date.toISOString()}.fp16`;
29+
let vPath = `/data/gfs-0p25-v-wind-velocity-10m/${$date.toISOString()}.fp16`;
3030
3131
let uArray = fetcher.fetch(uPath, 'particle');
3232
let vArray = await fetcher.fetch(vPath, 'particle', false);
@@ -96,7 +96,6 @@
9696
on:resize={updateWebglSize}>
9797
<GriddedDatasets
9898
{fetcher}
99-
bind:date
10099
bind:griddedData
101100
bind:griddedDomain
102101
bind:griddedColormap
@@ -139,7 +138,6 @@
139138
/>
140139
<Loading {fetcher} />
141140
<Legend
142-
{date}
143141
{griddedData}
144142
{griddedColormap}
145143
{griddedDomain}

src/Legend.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import { axisBottom } from 'd3-axis';
44
import { scaleLinear } from 'd3-scale';
55
import { onMount } from 'svelte';
6+
import date from './date.js'
67
78
export let griddedData = { description: 'Loading...' };
89
export let griddedColormap;
910
export let griddedDomain = [0, 0];
1011
export let particleDisplay;
11-
export let date;
1212
1313
// see options parameter here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat
1414
let dateStringOptions = {
@@ -42,7 +42,7 @@
4242

4343
<div class="legend-wrapper">
4444
<span class="datetime">
45-
{date.toLocaleDateString(undefined, dateStringOptions)}
45+
{$date.toLocaleDateString(undefined, dateStringOptions)}
4646
</span>
4747
<span class="streamlines">
4848
Streamlines for wind at 10m above ground level, moving

src/menus/GriddedDatasets.svelte

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<script>
22
import colormaps from '../map/colormaps/';
3+
import date from '../date.js'
34
45
export let griddedData;
56
export let griddedDomain;
67
export let griddedColormap;
78
export let fetcher;
8-
export let date;
99
1010
let datasets = [
1111
{
@@ -42,15 +42,15 @@
4242
},
4343
];
4444
let dataset = datasets[3];
45-
$: date, dataset, updateData();
45+
$: $date, dataset, updateData();
4646
4747
let canForward, canBack, interval;
48-
$: canForward = date < fetcher.inventory[dataset.path].end;
49-
$: canBack = date > fetcher.inventory[dataset.path].start;
48+
$: canForward = $date < fetcher.inventory[dataset.path].end;
49+
$: canBack = $date > fetcher.inventory[dataset.path].start;
5050
$: interval = fetcher.inventory[dataset.path].intervalInHours;
5151
5252
async function updateData() {
53-
let path = dataset.path + date.toISOString() + '.fp16';
53+
let path = dataset.path + $date.toISOString() + '.fp16';
5454
let array = await fetcher.fetch(path, 'gridded');
5555
if (!array) return;
5656
@@ -64,6 +64,13 @@
6464
griddedDomain = dataset.domain;
6565
griddedColormap = dataset.colormap;
6666
}
67+
68+
function adjustDate(hours) {
69+
date.update(d => {
70+
d.setHours(d.getHours() + hours);
71+
return d;
72+
});
73+
}
6774
</script>
6875

6976
<p>Choose a dataset:</p>
@@ -81,13 +88,13 @@
8188
<p>Step through time:</p>
8289
<button
8390
disabled={!canBack}
84-
on:click={() => { date.setHours(date.getHours() - interval); date = date }}
91+
on:click={() => adjustDate(-interval)}
8592
>
8693
Back {interval} hours
8794
</button>
8895
<button
8996
disabled={!canForward}
90-
on:click={() => { date.setHours(date.getHours() + interval); date = date }}
97+
on:click={() => adjustDate(interval)}
9198
>
9299
Forward {interval} hours
93100
</button>

0 commit comments

Comments
 (0)