UNPKG

@oriolrius/grafana-business-text

Version:

Data-driven text with Markdown and Handlebars support for Grafana

66 lines (55 loc) 1.33 kB
import { useEffect, useState } from 'react'; import { Resource, ResourceType } from '../types'; import { createResourcesManager } from '../utils'; /** * External Scripts Manager */ const scriptsManager = createResourcesManager(ResourceType.SCRIPTS); /** * External Styles Manager */ const stylesManager = createResourcesManager(ResourceType.STYLES); /** * Use External Resources * @param type * @param items */ export const useExternalResources = ({ type, items }: { type: ResourceType; items: Resource[] }) => { /** * Is Resources Loaded */ const [isLoaded, setIsLoaded] = useState(false); const resourcesManager = type === ResourceType.SCRIPTS ? scriptsManager : stylesManager; /** * Load Resources */ useEffect(() => { const loadResources = async () => { /** * Set not loaded */ setIsLoaded(false); /** * Add all resources */ await Promise.all(items.map((item) => resourcesManager.add(item.url))); /** * Set loaded */ setIsLoaded(true); }; /** * Load resources */ loadResources(); return () => { /** * Remove resources */ items.forEach((item) => resourcesManager.remove(item.url)); }; }, [items, resourcesManager]); return { isLoaded, }; };