import React, { PureComponent } from 'react'; import { hot } from 'react-hot-loader'; import { connect } from 'react-redux'; import { NavModel } from '@grafana/data'; import { FormField } from '@grafana/ui'; import { getNavModel } from 'app/core/selectors/navModel'; import config from 'app/core/config'; import Page from 'app/core/components/Page/Page'; import { AlertBox } from 'app/core/components/AlertBox/AlertBox'; 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'; interface Props { 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() { await this.props.clearUserMappingInfo(); await this.fetchLDAPStatus(); 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 } = this.props; const { isLoading } = this.state; return ( <> {ldapError && ldapError.title && (
)} {config.buildInfo.isEnterprise && ldapSyncInfo && }

Test user mapping

{userError && userError.title && (
)} {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) );