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  }