github.com/grafana/pyroscope@v1.18.0/public/app/hooks/useAppNames.ts (about) 1 import { useEffect } from 'react'; 2 import { useAppDispatch, useAppSelector } from '@pyroscope/redux/hooks'; 3 import { 4 setQuery, 5 reloadAppNames, 6 selectQueries, 7 } from '@pyroscope/redux/reducers/continuous'; 8 import { appToQuery } from '@pyroscope/models/app'; 9 import { determineDefaultApp } from '@pyroscope/hooks/util/determineDefaultApp'; 10 11 /** 12 * loads and select the first app/type (if available, if needed) 13 */ 14 export function useSelectFirstApp() { 15 const dispatch = useAppDispatch(); 16 17 const { query } = useAppSelector(selectQueries); 18 19 useEffect(() => { 20 async function run() { 21 const apps = await dispatch(reloadAppNames()).unwrap(); 22 23 if (!apps.length || query) { 24 return; 25 } 26 27 const defaultApp = await determineDefaultApp(apps); 28 29 dispatch(setQuery(appToQuery(defaultApp))); 30 } 31 32 run(); 33 }, [dispatch, query]); 34 }