mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 10:53:59 +00:00
fix(weather): preserve enable during first-load replacement
This commit is contained in:
1 parent
de2138e84c
commit
0cb6857229
5 files changed
+80
-7
No files matched your search
@@ -180,7 +180,7 @@ export function createWindLayer({
|
||||
overlay: requestedScalar(),
|
||||
});
|
||||
if (!enabled || controller.signal.aborted || request !== controller)
|
||||
return false;
|
||||
return enabled && !signal?.aborted && request !== controller;
|
||||
manifest = snapshot;
|
||||
error = null;
|
||||
if (sampledPosition) sample(sampledPosition);
|
||||
@@ -194,7 +194,8 @@ export function createWindLayer({
|
||||
}
|
||||
return true;
|
||||
} catch (cause) {
|
||||
if (controller.signal.aborted || request !== controller) return false;
|
||||
if (controller.signal.aborted || request !== controller)
|
||||
return enabled && !signal?.aborted && request !== controller;
|
||||
error = cause?.message || msg('Wind source unavailable');
|
||||
return true;
|
||||
} finally {
|
||||
|
||||
@@ -412,3 +412,36 @@ test('wind unit chips appear only alongside a speed legend, including canvas tra
|
||||
for (const overlay of ['pressure', 'temperature', 'none']) { layer.setParams({ overlay }); assert.deepEqual(unitChips(), []); }
|
||||
layer.destroy();
|
||||
});
|
||||
|
||||
test('a parameter replacement during manager enable does not roll the layer back', async () => {
|
||||
const { LayerLifecycle } = await import('../../data/lifecycle.js');
|
||||
const pending = [];
|
||||
const rendering = Object.fromEntries(
|
||||
['attach', 'start', 'stop', 'clear', 'destroy', 'setField'].map((name) => [
|
||||
name,
|
||||
() => {},
|
||||
]),
|
||||
);
|
||||
const layer = createWindLayer({
|
||||
feed: {
|
||||
getSnapshot: (args) =>
|
||||
new Promise((resolve) => pending.push({ ...args, resolve })),
|
||||
},
|
||||
createRendering: () => rendering,
|
||||
});
|
||||
const manager = new LayerLifecycle({ container: {} });
|
||||
manager.register(layer);
|
||||
const enabled = manager.setEnabled('wind', true);
|
||||
for (let i = 0; i < 20 && !pending.length; i++) await Promise.resolve();
|
||||
layer.setParams({ model: 'ifs' });
|
||||
await Promise.resolve();
|
||||
pending[0].resolve(snapshot('gfs'));
|
||||
assert.equal(await enabled, true);
|
||||
assert.equal(manager.isEnabled('wind'), true);
|
||||
assert.equal(layer.getStats().loading, true);
|
||||
pending[1].resolve(snapshot('ifs'));
|
||||
for (let i = 0; i < 10; i++) await Promise.resolve();
|
||||
assert.equal(layer.getStats().model, 'IFS');
|
||||
assert.equal(layer.getStats().count, 4);
|
||||
await manager.destroyAll();
|
||||
});
|
||||
Reference in new issue
Block a user