import { useEffect } from 'react'; import { useParams } from 'react-router-dom-v5-compat'; import { NavModelItem } from '@grafana/data'; import { Badge, Stack, Text } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { PageNotFound } from 'app/core/components/PageNotFound/PageNotFound'; import { useDispatch, useSelector } from 'app/types'; import { ProviderConfigForm } from './ProviderConfigForm'; import { UIMap } from './constants'; import { loadProviders } from './state/actions'; import { SSOProvider } from './types'; const getPageNav = (config?: SSOProvider): NavModelItem => { if (!config) { return { text: 'Authentication', subTitle: 'Configure authentication providers', icon: 'shield', id: 'authentication', }; } const providerDisplayName = UIMap[config.provider][1] || config.provider.toUpperCase(); return { text: providerDisplayName || '', subTitle: `To configure ${providerDisplayName} OAuth2 you must register your application with ${providerDisplayName}. The provider will generate a Client ID and Client Secret for you to use.`, icon: config.settings.icon || 'shield', id: config.provider, }; }; /** * Separate the Page logic from the Content logic for easier testing. */ export const ProviderConfigPage = () => { const dispatch = useDispatch(); const { isLoading, providers } = useSelector((store) => store.authConfig); const { provider = '' } = useParams(); const config = providers.find((config) => config.provider === provider); useEffect(() => { dispatch(loadProviders(provider)); }, [dispatch, provider]); if (!config || !config.provider || !UIMap[config.provider]) { return ; } const pageNav = getPageNav(config); return ( ( {title} )} > ); }; export default ProviderConfigPage;