UNPKG

@grafana/runtime

Version:
1 lines 6.41 kB
{"version":3,"file":"useFavoriteDatasources.mjs","sources":["../../../src/utils/useFavoriteDatasources.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport { DataSourceInstanceSettings } from '@grafana/data';\n\nimport { config } from '../config';\n\nimport { UserStorage } from './userStorage';\n\nconst FAVORITE_DATASOURCES_KEY = 'favoriteDatasources';\n\nexport type FavoriteDatasources = {\n enabled: boolean;\n isLoading: boolean;\n favoriteDatasources: string[];\n initialFavoriteDataSources: string[];\n addFavoriteDatasource: (ds: DataSourceInstanceSettings) => void;\n removeFavoriteDatasource: (ds: DataSourceInstanceSettings) => void;\n isFavoriteDatasource: (dsUid: string) => boolean;\n};\n\n// Initialize user storage as a singleton\nconst userStorage = new UserStorage('grafana-runtime');\n\n/**\n * A hook for managing favorite data sources using user storage.\n * This hook provides functionality to store and retrieve a list of favorite data source UIDs\n * using the backend user storage (with localStorage fallback).\n *\n * @returns An object containing:\n * - A boolean indicating if the feature is enabled\n * - An array of favorite data source UIDs\n * - An array of favorite data source UIDs that were initially loaded from storage\n * - A function to add a data source to favorites\n * - A function to remove a data source from favorites\n * - A function to check if a data source is favorited\n * @public\n */\nexport function useFavoriteDatasources(): FavoriteDatasources {\n const [favoriteDatasources, setFavoriteDatasources] = useState<string[]>([]);\n const [initialFavoriteDataSources, setInitialFavoriteDataSources] = useState<string[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n // Load favorites from storage on mount\n useEffect(() => {\n if (!config.featureToggles.favoriteDatasources) {\n return;\n }\n\n const loadFavorites = async () => {\n setIsLoading(true);\n const stored = await userStorage.getItem(FAVORITE_DATASOURCES_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n setFavoriteDatasources(parsed);\n setInitialFavoriteDataSources(parsed);\n }\n setIsLoading(false);\n };\n\n loadFavorites();\n }, []);\n\n // Helper function to save favorites to storage\n const saveFavorites = useCallback(async (newFavorites: string[]) => {\n setIsLoading(true);\n await userStorage.setItem(FAVORITE_DATASOURCES_KEY, JSON.stringify(newFavorites));\n setFavoriteDatasources(newFavorites);\n setIsLoading(false);\n }, []);\n\n const addFavoriteDatasource = useCallback(\n (ds: DataSourceInstanceSettings) => {\n if (ds.meta.builtIn) {\n // Prevent storing built-in datasources (-- Grafana --, -- Mixed --, -- Dashboard --)\n return;\n }\n\n if (!favoriteDatasources.includes(ds.uid)) {\n const newFavorites = [...favoriteDatasources, ds.uid];\n saveFavorites(newFavorites);\n }\n },\n [favoriteDatasources, saveFavorites]\n );\n\n const removeFavoriteDatasource = useCallback(\n (ds: DataSourceInstanceSettings) => {\n const newFavorites = favoriteDatasources.filter((uid) => uid !== ds.uid);\n if (newFavorites.length !== favoriteDatasources.length) {\n saveFavorites(newFavorites);\n }\n },\n [favoriteDatasources, saveFavorites]\n );\n\n const isFavoriteDatasource = useCallback(\n (dsUid: string) => {\n return favoriteDatasources.includes(dsUid);\n },\n [favoriteDatasources]\n );\n\n if (!config.featureToggles.favoriteDatasources) {\n return {\n enabled: false,\n isLoading: false,\n favoriteDatasources: [],\n initialFavoriteDataSources: [],\n addFavoriteDatasource: () => {},\n removeFavoriteDatasource: () => {},\n isFavoriteDatasource: () => false,\n };\n }\n\n return {\n enabled: true,\n isLoading,\n favoriteDatasources,\n addFavoriteDatasource,\n removeFavoriteDatasource,\n isFavoriteDatasource,\n initialFavoriteDataSources,\n };\n}\n"],"names":[],"mappings":"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"}