import React, { PureComponent } from 'react'; import { hot } from 'react-hot-loader'; import { connect } from 'react-redux'; import { NavModel } from '@grafana/data'; import { Alert, LegacyForms } from '@grafana/ui'; const { FormField } = LegacyForms; import { getNavModel } from 'app/core/selectors/navModel'; import config from 'app/core/config'; import Page from 'app/core/components/Page/Page'; import { LdapConnectionStatus } from './LdapConnectionStatus'; import { LdapSyncInfo } from './LdapSyncInfo'; import { LdapUserInfo } from './LdapUserInfo'; import { AppNotificationSeverity, LdapError, LdapUser, StoreState, SyncInfo, LdapConnectionInfo } from 'app/types'; import { loadLdapState, loadLdapSyncStatus, loadUserMapping, clearUserError, clearUserMappingInfo, } from '../state/actions'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; interface Props extends GrafanaRouteComponentProps<{}, { username: string }> { navModel: NavModel; ldapConnectionInfo: LdapConnectionInfo; ldapUser: LdapUser; ldapSyncInfo: SyncInfo; ldapError: LdapError; userError?: LdapError; loadLdapState: typeof loadLdapState; loadLdapSyncStatus: typeof loadLdapSyncStatus; loadUserMapping: typeof loadUserMapping; clearUserError: typeof clearUserError; clearUserMappingInfo: typeof clearUserMappingInfo; } interface State { isLoading: boolean; } export class LdapPage extends PureComponent { state = { isLoading: true, }; async componentDidMount() { const { clearUserMappingInfo, queryParams } = this.props; await clearUserMappingInfo(); await this.fetchLDAPStatus(); if (queryParams.username) { await this.fetchUserMapping(queryParams.username); } this.setState({ isLoading: false }); } async fetchLDAPStatus() { const { loadLdapState, loadLdapSyncStatus } = this.props; return Promise.all([loadLdapState(), loadLdapSyncStatus()]); } async fetchUserMapping(username: string) { const { loadUserMapping } = this.props; return await loadUserMapping(username); } search = (event: any) => { event.preventDefault(); const username = event.target.elements['username'].value; if (username) { this.fetchUserMapping(username); } }; onClearUserError = () => { this.props.clearUserError(); }; render() { const { ldapUser, userError, ldapError, ldapSyncInfo, ldapConnectionInfo, navModel, queryParams } = this.props; const { isLoading } = this.state; return ( <> {ldapError && ldapError.title && (
{ldapError.body}
)} {config.licenseInfo.hasLicense && ldapSyncInfo && }

Test user mapping

{userError && userError.title && (
{userError.body}
)} {ldapUser && }
); } } const mapStateToProps = (state: StoreState) => ({ navModel: getNavModel(state.navIndex, 'ldap'), ldapConnectionInfo: state.ldap.connectionInfo, ldapUser: state.ldap.user, ldapSyncInfo: state.ldap.syncInfo, userError: state.ldap.userError, ldapError: state.ldap.ldapError, }); const mapDispatchToProps = { loadLdapState, loadLdapSyncStatus, loadUserMapping, clearUserError, clearUserMappingInfo, }; export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(LdapPage));