index.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3. import { compose } from 'redux'
  4. import { createStructuredSelector } from 'reselect'
  5. import { AppActions } from 'share/containers/App/actions'
  6. import { makeSelectExternalAuthProviders } from 'share/containers/App/selectors'
  7. const styles = require('./ExternalLogin.less')
  8. interface IExternalLoginProps {
  9. providers: Array<{}>
  10. onGetExternalAuthProviders: () => any
  11. }
  12. class ExternalLogin extends React.Component<IExternalLoginProps, {}> {
  13. public componentWillMount() {
  14. const { onGetExternalAuthProviders } = this.props
  15. onGetExternalAuthProviders()
  16. }
  17. private mapProviders = (authProviders) => {
  18. const ret = []
  19. for (const provider of authProviders) {
  20. const name = Object.keys(provider)[0]
  21. const url = provider[name]
  22. ret.push({
  23. name,
  24. url
  25. })
  26. }
  27. return ret
  28. }
  29. public render() {
  30. const authProviders = this.props.providers || []
  31. const providers = this.mapProviders(authProviders)
  32. return (
  33. <div className={styles.externalauth}>
  34. {providers.length > 0 &&
  35. providers.map((provider) => (
  36. <a href={provider.url} key={provider.name}>{provider.name}</a>
  37. ))}
  38. </div>
  39. )
  40. }
  41. }
  42. export function mapDispatchToProps(dispatch) {
  43. return {
  44. onGetExternalAuthProviders: () => dispatch(AppActions.getExternalAuthProviders()),
  45. }
  46. }
  47. const mapStateToProps = createStructuredSelector({
  48. providers: makeSelectExternalAuthProviders()
  49. })
  50. const withConnect = connect(mapStateToProps, mapDispatchToProps)
  51. export default compose(
  52. withConnect
  53. )(ExternalLogin)