1import { useQueryParams } from 'app/core/hooks/useQueryParams'; 2import store from 'app/core/store'; 3import { useCallback } from 'react'; 4import { ALERTMANAGER_NAME_LOCAL_STORAGE_KEY, ALERTMANAGER_NAME_QUERY_KEY } from '../utils/constants'; 5import { getAlertManagerDataSources, GRAFANA_RULES_SOURCE_NAME } from '../utils/datasource'; 6 7function isAlertManagerSource(alertManagerSourceName: string): boolean { 8 return ( 9 alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME || 10 !!getAlertManagerDataSources().find((ds) => ds.name === alertManagerSourceName) 11 ); 12} 13 14/* this will return am name either from query params or from local storage or a default (grafana). 15 * 16 * fallbackUrl - if provided, will redirect to this url if alertmanager provided in query no longer 17 */ 18export function useAlertManagerSourceName(): [string | undefined, (alertManagerSourceName: string) => void] { 19 const [queryParams, updateQueryParams] = useQueryParams(); 20 21 const update = useCallback( 22 (alertManagerSourceName: string) => { 23 if (!isAlertManagerSource(alertManagerSourceName)) { 24 return; 25 } 26 if (alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME) { 27 store.delete(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY); 28 updateQueryParams({ [ALERTMANAGER_NAME_QUERY_KEY]: null }); 29 } else { 30 store.set(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY, alertManagerSourceName); 31 updateQueryParams({ [ALERTMANAGER_NAME_QUERY_KEY]: alertManagerSourceName }); 32 } 33 }, 34 [updateQueryParams] 35 ); 36 37 const querySource = queryParams[ALERTMANAGER_NAME_QUERY_KEY]; 38 39 if (querySource && typeof querySource === 'string') { 40 if (isAlertManagerSource(querySource)) { 41 return [querySource, update]; 42 } else { 43 // non existing alertmanager 44 return [undefined, update]; 45 } 46 } 47 const storeSource = store.get(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY); 48 if (storeSource && typeof storeSource === 'string' && isAlertManagerSource(storeSource)) { 49 update(storeSource); 50 return [storeSource, update]; 51 } 52 53 return [GRAFANA_RULES_SOURCE_NAME, update]; 54} 55