mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
54 lines
2.0 KiB
JavaScript
54 lines
2.0 KiB
JavaScript
import { DataLayerManager } from '../data/manager.js';
|
|
/** Register the application layer catalog before allowing state restoration. */
|
|
export function createApplicationData({
|
|
scene: { viewer },
|
|
controls: { styleManager },
|
|
catalog,
|
|
allowQaRegistration,
|
|
onData,
|
|
defer,
|
|
}) {
|
|
// Initialize data layer manager
|
|
const dataManager = new DataLayerManager(viewer, {
|
|
allowQaRegistration,
|
|
});
|
|
defer(async () => {
|
|
await dataManager.destroyAll();
|
|
if (dataManager.layers.size)
|
|
throw new Error(
|
|
`Data layers could not be destroyed: ${[...dataManager.layers.keys()].join(', ')}`,
|
|
);
|
|
});
|
|
onData?.(dataManager);
|
|
if (!catalog?.layers || !catalog?.metadata)
|
|
throw new TypeError('An application layer catalog is required');
|
|
for (const layer of catalog.layers) dataManager.register(layer);
|
|
for (const layer of catalog.layers) layer.attachDataManager?.(dataManager);
|
|
// Restoration starts only after the caller's complete registry is sealed.
|
|
dataManager.finalizeRegistrations(catalog.metadata);
|
|
if (allowQaRegistration) {
|
|
window.__gevQaRegisterLayer = (targetManager, layerModule) => {
|
|
if (targetManager !== dataManager)
|
|
throw new Error('QA layer manager mismatch');
|
|
return dataManager.registerForQa(layerModule);
|
|
};
|
|
window.__gevQaUnregisterLayer = (targetManager, layerId) => {
|
|
if (targetManager !== dataManager)
|
|
throw new Error('QA layer manager mismatch');
|
|
return dataManager.unregisterForQa(layerId);
|
|
};
|
|
const register = window.__gevQaRegisterLayer;
|
|
const unregister = window.__gevQaUnregisterLayer;
|
|
defer(() => {
|
|
if (window.__gevQaRegisterLayer === register)
|
|
delete window.__gevQaRegisterLayer;
|
|
if (window.__gevQaUnregisterLayer === unregister)
|
|
delete window.__gevQaUnregisterLayer;
|
|
});
|
|
}
|
|
dataManager.buildTogglePanel(document.getElementById('data-toggles'));
|
|
styleManager.attachDataManager(dataManager);
|
|
|
|
return { dataManager, catalog };
|
|
}
|