/** * Hierarchy Data Compatibility Layer * Provides backward compatibility for existing code that expects synchronous hierarchyData */ // Global variable to hold the hierarchy data once loaded let hierarchyData = null; // Flag to track loading state let hierarchyLoading = false; // Queue of functions waiting for hierarchy data let hierarchyWaitQueue = []; /** * Initialize hierarchy data and provide backward compatibility */ async function initializeHierarchyData() { if (hierarchyLoading) { return; } hierarchyLoading = true; try { console.log('Loading hierarchy data...'); // Get data from hierarchy manager hierarchyData = await window.hierarchyManager.getData(); console.log('Hierarchy data loaded successfully'); // Process any queued functions while (hierarchyWaitQueue.length > 0) { const callback = hierarchyWaitQueue.shift(); try { callback(); } catch (error) { console.error('Error in queued hierarchy callback:', error); } } // Dispatch event for other parts of the app window.dispatchEvent(new CustomEvent('hierarchyDataLoaded', { detail: { data: hierarchyData } })); } catch (error) { console.error('Failed to load hierarchy data:', error); // Provide empty fallback to prevent errors hierarchyData = {}; // Still process the queue with empty data while (hierarchyWaitQueue.length > 0) { const callback = hierarchyWaitQueue.shift(); try { callback(); } catch (error) { console.error('Error in queued hierarchy callback:', error); } } } finally { hierarchyLoading = false; } } /** * Execute function when hierarchy data is available * @param {Function} callback - Function to execute when data is ready */ function whenHierarchyReady(callback) { if (hierarchyData !== null) { // Data is already available callback(); } else { // Queue the callback hierarchyWaitQueue.push(callback); } } /** * Check if hierarchy data is loaded * @returns {boolean} */ function isHierarchyDataLoaded() { return hierarchyData !== null; } // Start loading hierarchy data when DOM is ready document.addEventListener('DOMContentLoaded', function() { // Initialize hierarchy data initializeHierarchyData(); }); // Export functions for global use window.whenHierarchyReady = whenHierarchyReady; window.isHierarchyDataLoaded = isHierarchyDataLoaded; window.initializeHierarchyData = initializeHierarchyData;