Advertisement
Guest User

Untitled

a guest
Aug 1st, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.22 KB | None | 0 0
  1. Login.propTypes = {
  2. ...propTypes,
  3. authClient: PropTypes.func,
  4. previousRoute: PropTypes.string,
  5. theme: PropTypes.object.isRequired,
  6. translate: PropTypes.func.isRequired,
  7. userLogin: PropTypes.func.isRequired,
  8. isLogging: PropTypes.bool.isRequired,
  9. };
  10.  
  11. function mapStateToProps(state, props) {
  12. return {
  13. isLogging: state.loginReducer > 0
  14. };
  15. }
  16.  
  17. const enhance = compose(
  18. translate,
  19. reduxForm({
  20. form: 'signIn',
  21. validate: (values, props) => {
  22. const errors = {};
  23. const { translate } = props;
  24. if (!values.username) errors.username = translate('aor.validation.required');
  25. if (!values.password) errors.password = translate('aor.validation.required');
  26. return errors;
  27. },
  28. }),
  29. connect(mapStateToProps, { userLogin: userLoginAction }),
  30. );
  31. export default enhance(Login);
  32.  
  33. <CardActions>
  34. <RaisedButton type="submit" primary disabled={isLogging} icon={isLogging && <CircularProgress size={25} thickness={2} />} label={translate('aor.auth.sign_in')} fullWidth />
  35. </CardActions>
  36.  
  37. import React, { Component } from 'react';
  38. import PropTypes from 'prop-types';
  39. import { propTypes, reduxForm, Field } from 'redux-form';
  40. import { connect } from 'react-redux';
  41. import compose from 'recompose/compose';
  42. import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
  43. import getMuiTheme from 'material-ui/styles/getMuiTheme';
  44. import { Card, CardActions } from 'material-ui/Card';
  45. import Avatar from 'material-ui/Avatar';
  46. import RaisedButton from 'material-ui/RaisedButton';
  47. import TextField from 'material-ui/TextField';
  48. import CircularProgress from 'material-ui/CircularProgress';
  49. import { cyan500, pinkA200, white } from 'material-ui/styles/colors';
  50.  
  51.  
  52. import defaultTheme, {translate, Notification, userLogin as userLoginAction } from 'admin-on-rest';
  53.  
  54.  
  55. const styles = {
  56. main: {
  57. display: 'flex',
  58. flexDirection: 'column',
  59. minHeight: '100vh',
  60. alignItems: 'center',
  61. justifyContent: 'center',
  62. },
  63. card: {
  64. minWidth: 300,
  65. },
  66. avatar: {
  67. margin: '1em',
  68. textAlign: 'center ',
  69.  
  70. },
  71. avatarText:{
  72.  
  73. verticalAlign:'middle',
  74. fontSize:20,
  75.  
  76. },
  77. form: {
  78. padding: '0 1em 1em 1em',
  79. },
  80. input: {
  81. display: 'flex',
  82. },
  83. };
  84.  
  85. function getColorsFromTheme(theme) {
  86. if (!theme) return { primary1Color: cyan500, accent1Color: pinkA200 };
  87. const {
  88. palette: {
  89. primary1Color,
  90. accent1Color,
  91. },
  92. } = theme;
  93. return { primary1Color, accent1Color };
  94. }
  95.  
  96. // see http://redux-form.com/6.4.3/examples/material-ui/
  97. const renderInput = ({ meta: { touched, error } = {}, input: { ...inputProps }, ...props }) =>
  98. <TextField
  99. errorText={touched && error}
  100. {...inputProps}
  101. {...props}
  102. fullWidth
  103. />;
  104.  
  105. class Login extends Component {
  106.  
  107. login = (auth) => this.props.userLogin(auth, this.props.location.state ? this.props.location.state.nextPathname : '/');
  108.  
  109. render() {
  110. const { handleSubmit, submitting, theme, translate, isLogging } = this.props;
  111. const muiTheme = getMuiTheme(theme);
  112. const { primary1Color } = getColorsFromTheme(muiTheme);
  113. return (
  114. <MuiThemeProvider muiTheme={muiTheme}>
  115. <div style={{ ...styles.main, backgroundColor: primary1Color }}>
  116. <Card style={styles.card}>
  117. <div style={styles.avatar}>
  118. <div>
  119. <Avatar backgroundColor={white} src="EnsembleGreenLogo.png" size={45} />
  120. </div>
  121. <div>
  122. <span style={styles.avatarText}>Ensemble SmartWAN Manager</span>
  123. </div>
  124. </div>
  125. <form onSubmit={handleSubmit(this.login)}>
  126. <div style={styles.form}>
  127. <div style={styles.input} >
  128. <Field
  129. name="username"
  130. component={renderInput}
  131. floatingLabelText={translate('aor.auth.username')}
  132. disabled={submitting}
  133. />
  134. </div>
  135. <div style={styles.input}>
  136. <Field
  137. name="password"
  138. component={renderInput}
  139. floatingLabelText={translate('aor.auth.password')}
  140. type="password"
  141. disabled={submitting}
  142. />
  143. </div>
  144.  
  145. </div>
  146. <CardActions>
  147. <RaisedButton
  148. type="submit"
  149. primary
  150. disabled={isLogging}
  151. icon={isLogging && <CircularProgress size={25} thickness={2} />}
  152. label={translate('aor.auth.sign_in')}
  153. fullWidth
  154. />
  155. </CardActions>
  156. </form>
  157. </Card>
  158. <Notification />
  159. </div>
  160. </MuiThemeProvider>
  161. );
  162. }
  163. }
  164.  
  165. Login.propTypes = {
  166. ...propTypes,
  167. authClient: PropTypes.func,
  168. previousRoute: PropTypes.string,
  169. theme: PropTypes.object.isRequired,
  170. translate: PropTypes.func.isRequired,
  171. userLogin: PropTypes.func.isRequired,
  172. isLogging: PropTypes.bool.isRequired,
  173. };
  174.  
  175. Login.defaultProps = {
  176. theme: defaultTheme,
  177. };
  178.  
  179. function mapStateToProps(state, props) {
  180. return {
  181. isLogging: state.loginReducer > 0
  182. };
  183. }
  184.  
  185. const enhance = compose(
  186. translate,
  187. reduxForm({
  188. form: 'signIn',
  189. validate: (values, props) => {
  190. const errors = {};
  191. const { translate } = props;
  192. if (!values.username) errors.username = translate('aor.validation.required');
  193. if (!values.password) errors.password = translate('aor.validation.required');
  194. return errors;
  195. },
  196. }),
  197. connect(mapStateToProps, { userLogin: userLoginAction }),
  198. );
  199. export default enhance(Login);
  200.  
  201. import { USER_LOGIN_LOADING, USER_LOGIN_SUCCESS, USER_LOGIN_FAILURE, USER_CHECK } from 'admin-on-rest';
  202.  
  203. export default (previousState = 0, { type }) => {
  204. switch (type) {
  205. case USER_LOGIN_LOADING:
  206. return previousState + 1;
  207. case USER_LOGIN_SUCCESS:
  208. case USER_LOGIN_FAILURE:
  209. case USER_CHECK:
  210. return Math.max(previousState - 1, 0);
  211. default:
  212. return previousState;
  213. }
  214. };
  215.  
  216. <Admin
  217. menu={createMenus}
  218. loginPage={Login}
  219. dashboard={Dashboard}
  220. appLayout={Layout}
  221. customReducers={{ loginReducer }}
  222. >
  223.  
  224. import loginReducer from './loginReducer';
  225. import Login from "./Login";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement