mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
import * as Cesium from 'cesium';
|
|
import { LAYER_ID } from './policy.js';
|
|
|
|
export function createLifecycle({
|
|
state: layerState,
|
|
services,
|
|
parts,
|
|
source,
|
|
}) {
|
|
const { registerPickOwner, unregisterPickOwner } = services.picking;
|
|
const { clearSelectedEntityContextForLayer } = services.context;
|
|
|
|
const methods = {
|
|
init(viewer) {
|
|
layerState.viewer = viewer;
|
|
layerState.dataSource = new Cesium.CustomDataSource(
|
|
'military-installations',
|
|
);
|
|
viewer.dataSources.add(layerState.dataSource);
|
|
layerState.moveEndRemove = viewer.camera.moveEnd.addEventListener(
|
|
parts.viewport.scheduleLoad,
|
|
);
|
|
parts.selection.installInteraction(viewer);
|
|
},
|
|
|
|
enable() {
|
|
layerState.enabled = true;
|
|
registerPickOwner(LAYER_ID, (id) => layerState.recordById.has(id));
|
|
layerState.dataSource.show = true;
|
|
// DataLayerManager invokes update() immediately after enable(), which owns
|
|
// the first fetch. Avoid racing it with a second aborting request here.
|
|
},
|
|
|
|
disable() {
|
|
layerState.enabled = false;
|
|
unregisterPickOwner(LAYER_ID);
|
|
parts.viewport.clearUnavailableRetry();
|
|
clearTimeout(layerState.timer);
|
|
layerState.abort?.abort();
|
|
layerState.abort = null;
|
|
layerState.loading = false;
|
|
if (layerState.dataSource) layerState.dataSource.show = false;
|
|
clearSelectedEntityContextForLayer(LAYER_ID);
|
|
layerState.selectedId = null;
|
|
layerState.failureReason = null;
|
|
parts.ingestion.setInstallationStatus('idle');
|
|
},
|
|
|
|
destroy(viewer) {
|
|
this.disable();
|
|
layerState.moveEndRemove?.();
|
|
layerState.clickHandler?.destroy();
|
|
layerState.clickHandler = null;
|
|
parts.rendering.clearRendered();
|
|
if (layerState.dataSource && viewer)
|
|
viewer.dataSources.remove(layerState.dataSource, true);
|
|
layerState.dataSource = null;
|
|
},
|
|
};
|
|
|
|
return { methods };
|
|
}
|