import { css } from '@emotion/css'; import { isEmpty } from 'lodash'; import React, { useEffect } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { GrafanaTheme2 } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { StoreState } from 'app/types'; import ConfigureAuthCTA from './components/ConfigureAuthCTA'; import { ProviderCard } from './components/ProviderCard'; import { loadSettings } from './state/actions'; import { getProviderUrl } from './utils'; import { getRegisteredAuthProviders } from '.'; interface OwnProps {} export type Props = OwnProps & ConnectedProps; function mapStateToProps(state: StoreState) { const { isLoading, providerStatuses } = state.authConfig; return { isLoading, providerStatuses, }; } const mapDispatchToProps = { loadSettings, }; const connector = connect(mapStateToProps, mapDispatchToProps); export const AuthConfigPageUnconnected = ({ providerStatuses, isLoading, loadSettings }: Props): JSX.Element => { const styles = useStyles2(getStyles); useEffect(() => { loadSettings(); }, [loadSettings]); const authProviders = getRegisteredAuthProviders(); const enabledProviders = authProviders.filter((p) => providerStatuses[p.id]?.enabled); const configuresProviders = authProviders.filter( (p) => providerStatuses[p.id]?.configured && !providerStatuses[p.id]?.enabled ); const availableProviders = authProviders.filter( (p) => !providerStatuses[p.id]?.enabled && !providerStatuses[p.id]?.configured ); const firstAvailableProvider = availableProviders?.length ? availableProviders[0] : null; return (

Configured authentication

{!!enabledProviders?.length && (
{enabledProviders.map((provider) => ( ))}
)} {!enabledProviders?.length && firstAvailableProvider && !isEmpty(providerStatuses) && ( )} {!!configuresProviders?.length && (
{configuresProviders.map((provider) => ( ))}
)}
); }; const getStyles = (theme: GrafanaTheme2) => { return { cardsContainer: css` display: grid; grid-template-columns: repeat(auto-fill, minmax(288px, 1fr)); gap: ${theme.spacing(3)}; margin-bottom: ${theme.spacing(3)}; margin-top: ${theme.spacing(2)}; `, sectionHeader: css` margin-bottom: ${theme.spacing(3)}; `, settingsSection: css` margin-top: ${theme.spacing(4)}; `, settingName: css` padding-left: 25px; `, settingValue: css` white-space: break-spaces; `, }; }; export default connector(AuthConfigPageUnconnected);