70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | // frontend/public/bootstrap.js
 | ||
|  | 
 | ||
|  | (function() { | ||
|  |   // El dominio donde se alojan los widgets
 | ||
|  |   const WIDGETS_HOST = 'https://widgets.eldia.com'; | ||
|  | 
 | ||
|  |   // Función para cargar dinámicamente un script
 | ||
|  |   function loadScript(src) { | ||
|  |     return new Promise((resolve, reject) => { | ||
|  |       const script = document.createElement('script'); | ||
|  |       script.type = 'module'; | ||
|  |       script.src = src; | ||
|  |       script.onload = resolve; | ||
|  |       script.onerror = reject; | ||
|  |       document.head.appendChild(script); | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   // Función para cargar dinámicamente una hoja de estilos
 | ||
|  |   function loadCSS(href) { | ||
|  |     const link = document.createElement('link'); | ||
|  |     link.rel = 'stylesheet'; | ||
|  |     link.href = href; | ||
|  |     document.head.appendChild(link); | ||
|  |   } | ||
|  | 
 | ||
|  |   // Función principal
 | ||
|  |   async function initWidgets() { | ||
|  |     try { | ||
|  |       // 1. Obtener el manifest.json para saber los nombres de archivo actuales
 | ||
|  |       const response = await fetch(`${WIDGETS_HOST}/manifest.json`); | ||
|  |       if (!response.ok) { | ||
|  |         throw new Error('No se pudo cargar el manifest de los widgets.'); | ||
|  |       } | ||
|  |       const manifest = await response.json(); | ||
|  | 
 | ||
|  |       // 2. Encontrar el punto de entrada principal (nuestro main.tsx)
 | ||
|  |       const entryKey = Object.keys(manifest).find(key => manifest[key].isEntry); | ||
|  |       if (!entryKey) { | ||
|  |         throw new Error('No se encontró el punto de entrada en el manifest.'); | ||
|  |       } | ||
|  |        | ||
|  |       const entry = manifest[entryKey]; | ||
|  |       const jsUrl = `${WIDGETS_HOST}/${entry.file}`; | ||
|  |        | ||
|  |       // 3. Cargar el CSS si existe
 | ||
|  |       if (entry.css && entry.css.length > 0) { | ||
|  |         entry.css.forEach(cssFile => { | ||
|  |           const cssUrl = `${WIDGETS_HOST}/${cssFile}`; | ||
|  |           loadCSS(cssUrl); | ||
|  |         }); | ||
|  |       } | ||
|  | 
 | ||
|  |       // 4. Cargar el JS principal y esperar a que esté listo
 | ||
|  |       await loadScript(jsUrl); | ||
|  | 
 | ||
|  |       // 5. Una vez cargado, llamar a la función de renderizado
 | ||
|  |       if (window.MercadosWidgets && typeof window.MercadosWidgets.render === 'function') { | ||
|  |         window.MercadosWidgets.render(); | ||
|  |       } | ||
|  | 
 | ||
|  |     } catch (error) { | ||
|  |       console.error('Error al inicializar los widgets de mercados:', error); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   // Iniciar todo el proceso
 | ||
|  |   initWidgets(); | ||
|  | 
 | ||
|  | })(); |