UNPKG

@grafana/runtime

Version:
87 lines (84 loc) 2.61 kB
import { useState, useEffect, useCallback } from 'react'; import { config } from '../config.mjs'; import { UserStorage } from './userStorage.mjs'; "use strict"; const FAVORITE_DATASOURCES_KEY = "favoriteDatasources"; const userStorage = new UserStorage("grafana-runtime"); function useFavoriteDatasources() { const [favoriteDatasources, setFavoriteDatasources] = useState([]); const [initialFavoriteDataSources, setInitialFavoriteDataSources] = useState([]); const [isLoading, setIsLoading] = useState(false); useEffect(() => { if (!config.featureToggles.favoriteDatasources) { return; } const loadFavorites = async () => { setIsLoading(true); const stored = await userStorage.getItem(FAVORITE_DATASOURCES_KEY); if (stored) { const parsed = JSON.parse(stored); setFavoriteDatasources(parsed); setInitialFavoriteDataSources(parsed); } setIsLoading(false); }; loadFavorites(); }, []); const saveFavorites = useCallback(async (newFavorites) => { setIsLoading(true); await userStorage.setItem(FAVORITE_DATASOURCES_KEY, JSON.stringify(newFavorites)); setFavoriteDatasources(newFavorites); setIsLoading(false); }, []); const addFavoriteDatasource = useCallback( (ds) => { if (ds.meta.builtIn) { return; } if (!favoriteDatasources.includes(ds.uid)) { const newFavorites = [...favoriteDatasources, ds.uid]; saveFavorites(newFavorites); } }, [favoriteDatasources, saveFavorites] ); const removeFavoriteDatasource = useCallback( (ds) => { const newFavorites = favoriteDatasources.filter((uid) => uid !== ds.uid); if (newFavorites.length !== favoriteDatasources.length) { saveFavorites(newFavorites); } }, [favoriteDatasources, saveFavorites] ); const isFavoriteDatasource = useCallback( (dsUid) => { return favoriteDatasources.includes(dsUid); }, [favoriteDatasources] ); if (!config.featureToggles.favoriteDatasources) { return { enabled: false, isLoading: false, favoriteDatasources: [], initialFavoriteDataSources: [], addFavoriteDatasource: () => { }, removeFavoriteDatasource: () => { }, isFavoriteDatasource: () => false }; } return { enabled: true, isLoading, favoriteDatasources, addFavoriteDatasource, removeFavoriteDatasource, isFavoriteDatasource, initialFavoriteDataSources }; } export { useFavoriteDatasources }; //# sourceMappingURL=useFavoriteDatasources.mjs.map