index.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3. import { compose } from 'redux'
  4. import { Row, Col } from 'antd'
  5. import { createStructuredSelector } from 'reselect'
  6. import { getExternalAuthProviders, tryExternalAuth } from '../App/actions'
  7. import { makeSelectExternalAuthProviders } from '../App/selectors'
  8. const styles = require('./ExternalLogin.less')
  9. interface IExternalLoginProps {
  10. providers: Array<{}>
  11. onGetExternalAuthProviders: () => any
  12. tryExternalAuth: (resolve: () => any) => any
  13. }
  14. class ExternalLogin extends React.Component<IExternalLoginProps, {}> {
  15. public componentWillMount() {
  16. const { onGetExternalAuthProviders, tryExternalAuth } = this.props
  17. onGetExternalAuthProviders()
  18. tryExternalAuth(() => {
  19. if (localStorage.getItem('shareToken')) {
  20. const token = localStorage.getItem('shareToken')
  21. const hash = localStorage.getItem('shareRoute')
  22. location.replace(`/share.html?shareToken=${token}${hash}`)
  23. return
  24. }
  25. location.replace('/#/projects')
  26. })
  27. }
  28. private mapProviders = (authProviders) => {
  29. const ret = []
  30. for (const provider of authProviders) {
  31. const name = Object.keys(provider)[0]
  32. const url = provider[name]
  33. ret.push({
  34. name,
  35. url
  36. })
  37. }
  38. return ret
  39. }
  40. public render() {
  41. const authProviders = this.props.providers || []
  42. const providers = this.mapProviders(authProviders)
  43. return (
  44. <div className={styles.externalauth}>
  45. {providers.length > 0 &&
  46. providers.map((provider) => (
  47. <a href={provider.url} key={provider.name}>{provider.name}</a>
  48. ))}
  49. </div>
  50. )
  51. }
  52. }
  53. export function mapDispatchToProps(dispatch) {
  54. return {
  55. onGetExternalAuthProviders: () => dispatch(getExternalAuthProviders()),
  56. tryExternalAuth: (resolve) => dispatch(tryExternalAuth(resolve))
  57. }
  58. }
  59. const mapStateToProps = createStructuredSelector({
  60. providers: makeSelectExternalAuthProviders()
  61. })
  62. const withConnect = connect(mapStateToProps, mapDispatchToProps)
  63. export default compose(
  64. withConnect
  65. )(ExternalLogin)