@grafana/runtime
Version:
Grafana Runtime Library
87 lines (84 loc) • 2.61 kB
JavaScript
import { useState, useEffect, useCallback } from 'react';
import { config } from '../config.mjs';
import { UserStorage } from './userStorage.mjs';
;
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