ResetPassword.js 9.76 KB
Newer Older
EKSAD's avatar
EKSAD committed
1 2
import React, { Component } from 'react';
import Images from '../assets/Images';
a.bairuha's avatar
a.bairuha committed
3
import { TextField, InputAdornment, Button, Typography, IconButton, Snackbar } from '@material-ui/core';
EKSAD's avatar
EKSAD committed
4 5
import Visibility from '@material-ui/icons/Visibility';
import VisibilityOff from '@material-ui/icons/VisibilityOff';
a.bairuha's avatar
a.bairuha committed
6 7
import MuiAlert from '@material-ui/lab/Alert';
import { withStyles } from '@material-ui/core/styles';
EKSAD's avatar
EKSAD committed
8
import api from '../api';
EKSAD's avatar
EKSAD committed
9

a.bairuha's avatar
a.bairuha committed
10 11
const Alert = withStyles({
})((props) => <MuiAlert elevation={6} variant="filled" {...props} />);
EKSAD's avatar
EKSAD committed
12 13 14 15 16

class ResetPassword extends Component {
    constructor(props) {
        super(props)
        this.state = {
EKSAD's avatar
EKSAD committed
17 18 19 20
            password: '',
            confirmPassword: '',
            showPass: false,
            showPass2: false,
EKSAD's avatar
EKSAD committed
21 22
            errorPassword: false,
            errorConfirmPassword: false,
EKSAD's avatar
EKSAD committed
23 24
            msgPassword: 'Terdiri 8 karakter dengan kombinasi angka.',
            msgConfirmPassword: 'Terdiri 8 karakter dengan kombinasi angka.',
a.bairuha's avatar
a.bairuha committed
25 26 27 28
            userId: 0,
            alert: false,
            tipeAlert: '',
            messageAlert: ''            
EKSAD's avatar
EKSAD committed
29 30 31
        }
    }

EKSAD's avatar
EKSAD committed
32 33 34 35
    componentDidMount() {
      console.log(this.props.match.params.id)
      let userId = this.props.match.params.id
      this.setState({userId})
EKSAD's avatar
EKSAD committed
36
      this.checkExpiredLink(userId)
EKSAD's avatar
EKSAD committed
37
      // console.log(this.props)
EKSAD's avatar
EKSAD committed
38 39
    }

EKSAD's avatar
EKSAD committed
40 41
    checkExpiredLink(userId) {
        api.create().isResetPassword(userId).then((response) => {
a.bairuha's avatar
a.bairuha committed
42 43 44 45 46 47 48
            if (response.data) {
                if (response.data.status == 'success') {
                    // 
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' })  
                    this.props.history.push('/login')
                }
EKSAD's avatar
EKSAD committed
49
            } else {
a.bairuha's avatar
a.bairuha committed
50
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' }) 
EKSAD's avatar
EKSAD committed
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
            }
        })
    }

    isRegex(value) {
        // const re = /^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/;
        const re = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{1,}$/;
        return re.test(String(value));
    }

    isEmail(email) {
        const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(String(email).toLowerCase());
    }

EKSAD's avatar
EKSAD committed
66 67
    validateReset() {
        if (this.state.password.trim() == "") {
EKSAD's avatar
EKSAD committed
68
            this.setState({ errorPassword: true, msgPassword: 'Kata sandi harus diisi!' })
EKSAD's avatar
EKSAD committed
69
        } else if (this.state.password.length < 8) {
EKSAD's avatar
EKSAD committed
70 71 72 73 74
            this.setState({ errorPassword: true, msgPassword: 'Kata sandi minimal 8 karakter!' })
        } else if (this.isEmail(this.state.password)) {
            this.setState({ errorPassword: true, msgPassword: 'Format kata sandi tidak boleh menggunakan email!' })
        } else if (!this.isRegex(this.state.password)) {
            this.setState({ errorPassword: true, msgPassword: 'Kata sandi harus berupa kombinasi karakter, huruf dan angka!' })
EKSAD's avatar
EKSAD committed
75
        } else if (this.state.confirmPassword.trim() == "") {
EKSAD's avatar
EKSAD committed
76
            this.setState({ errorConfirmPassword: true, msgConfirmPassword: 'Konfirmasi kata sandi harus diisi!' })
EKSAD's avatar
EKSAD committed
77
        } else if (this.state.confirmPassword.length < 8) {
EKSAD's avatar
EKSAD committed
78 79 80 81 82 83 84
            this.setState({ errorConfirmPassword: true, msgConfirmPassword: 'Konfirmasi kata sandi minimal 8 karakter!' })
        } else if (this.isEmail(this.state.confirmPassword)) {
            this.setState({ errorConfirmPassword: true, msgConfirmPassword: 'Format konfirmasi kata sandi tidak boleh menggunakan email!' })
        } else if (!this.isRegex(this.state.confirmPassword)) {
            this.setState({ errorConfirmPassword: true, msgConfirmPassword: 'Konfirmasi kata sandi harus berupa kombinasi karakter, huruf dan angka!' })
        } else if (this.state.password !== this.state.confirmPassword) {
            this.setState({ errorConfirmPassword: true, msgConfirmPassword: 'Konfirmasi kata sandi harus sama dengan kata sandi!' })
EKSAD's avatar
EKSAD committed
85 86 87 88 89
        } else {
            this.confirmPassword()
        }
    }

EKSAD's avatar
EKSAD committed
90 91 92
    confirmPassword() {
      let payload = {
        "password": this.state.password,
EKSAD's avatar
EKSAD committed
93 94
        "confirm_password": this.state.confirmPassword,
        "user_id": this.state.userId  
EKSAD's avatar
EKSAD committed
95
      }
EKSAD's avatar
EKSAD committed
96
      api.create().resetPassword(payload).then((response) => {
a.bairuha's avatar
a.bairuha committed
97 98 99 100 101 102 103 104 105 106 107 108 109 110
            if (response.data) {
                if (response.ok) {
                    if(response.data.status === 'success') {
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' }) 
                        this.props.history.push('/login')
                    } else {
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }) 
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
            } else {
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' }) 
            }
EKSAD's avatar
EKSAD committed
111
      })
EKSAD's avatar
EKSAD committed
112 113
    }

a.bairuha's avatar
a.bairuha committed
114 115 116 117
    closeAlert() {
        this.setState({ alert: false })
    }

EKSAD's avatar
EKSAD committed
118 119 120
    handleChange(e) {
      let data = this.state
      this.setState({...data, [e.target.name] : e.target.value})
EKSAD's avatar
EKSAD committed
121
      if (e.target.name == "password") {
EKSAD's avatar
EKSAD committed
122 123 124
        this.setState({ errorPassword: false, msgPassword: 'Terdiri 8 karakter dengan kombinasi angka.' })
      } else if (e.target.name == "confirmPassword") {
          this.setState({ errorConfirmPassword: false, msgConfirmPassword: 'Terdiri 8 karakter dengan kombinasi angka.' })
EKSAD's avatar
EKSAD committed
125
      }
EKSAD's avatar
EKSAD committed
126
    }
EKSAD's avatar
EKSAD committed
127

EKSAD's avatar
EKSAD committed
128 129
    render() {
        return (
EKSAD's avatar
EKSAD committed
130
          <div style={{ flex: 1, display: 'flex', backgroundColor: '#152d40', height: '100vh', justifyContent: 'center', alignItems: 'center' }}>
a.bairuha's avatar
a.bairuha committed
131 132 133 134 135
            <Snackbar open={this.state.alert} autoHideDuration={6000} onClose={() => this.closeAlert()}>
                <Alert onClose={() => this.closeAlert()} severity={this.state.tipeAlert}>
                    {this.state.messageAlert}
                </Alert>
            </Snackbar>
EKSAD's avatar
EKSAD committed
136 137
              <div style={{padding: 56, display: 'flex', flexDirection: 'column', width: 378, height: 415, borderRadius: 12, boxShadow: '0 2 4 0 rgba(0, 0, 0, 0.2)', backgroundColor: '#ffffff', justifyContent: 'center', alignItems: 'center' }}>
                <img src={Images.tia}/>
EKSAD's avatar
EKSAD committed
138 139

                <TextField
EKSAD's avatar
EKSAD committed
140
                  label={<Typography style={{fontSize: 12, fontFamily: 'Nunito Sans, sans-serif'}}>Kata Sandi Baru *</Typography>}
EKSAD's avatar
EKSAD committed
141 142 143 144
                  id="password"
                  type={this.state.showPass ? 'text' : 'password'}
                  name={"password"}
                  value={this.state.password}
EKSAD's avatar
EKSAD committed
145 146 147
                  onChange={(password) => {
                    this.handleChange(password)
                  }}
EKSAD's avatar
EKSAD committed
148
                  variant="outlined"
EKSAD's avatar
EKSAD committed
149
                  error={this.state.errorPassword}
EKSAD's avatar
EKSAD committed
150
                  style={{ width: 250, height: 51, marginTop: 32 }}
EKSAD's avatar
EKSAD committed
151
                  helperText={<Typography style={{fontSize: 9, marginTop: 4, fontFamily: 'Nunito Sans, sans-serif'}}>{this.state.msgPassword}</Typography>}
EKSAD's avatar
EKSAD committed
152 153 154 155 156 157 158 159 160 161 162 163
                  InputProps={{
                    endAdornment: <InputAdornment position="end">
                      <IconButton
                      aria-label="toggle password visibility"
                      style={{color: '#4b4b4b', opacity: 0.5}}
                      onClick={() => this.setState({showPass: !this.state.showPass})}
                      edge="end"
                    >
                      {this.state.showPass ? <Visibility style={{fontSize: 18}} /> : <VisibilityOff style={{fontSize: 18}} />}
                    </IconButton>
                    </InputAdornment>,
                  }}
EKSAD's avatar
EKSAD committed
164 165
                />

EKSAD's avatar
EKSAD committed
166
                <TextField
EKSAD's avatar
EKSAD committed
167
                  label={<Typography style={{fontSize: 12, fontFamily: 'Nunito Sans, sans-serif'}}>Ulangi Kata Sandi Baru *</Typography>}
EKSAD's avatar
EKSAD committed
168 169 170 171
                  id="confirmPassword"
                  type={this.state.showPass2 ? 'text' : 'password'}
                  name={"confirmPassword"}
                  value={this.state.confirmPassword}
EKSAD's avatar
EKSAD committed
172 173 174
                  onChange={(confirmPassword) => {
                    this.handleChange(confirmPassword)
                  }}
EKSAD's avatar
EKSAD committed
175
                  variant="outlined"
EKSAD's avatar
EKSAD committed
176
                  error={this.state.errorConfirmPassword}
EKSAD's avatar
EKSAD committed
177
                  style={{ width: 250, height: 51, marginTop: 45 }}
EKSAD's avatar
EKSAD committed
178
                  helperText={<Typography style={{fontSize: 9, marginTop: 4, fontFamily: 'Nunito Sans, sans-serif'}}>{this.state.msgConfirmPassword}</Typography>}
EKSAD's avatar
EKSAD committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192
                  InputProps={{
                    endAdornment: <InputAdornment position="end">
                      <IconButton
                      aria-label="toggle password visibility"
                      style={{color: '#4b4b4b', opacity: 0.5}}
                      onClick={() => this.setState({showPass2: !this.state.showPass2})}
                      edge="end"
                    >
                      {this.state.showPass2 ? <Visibility style={{fontSize: 18}} /> : <VisibilityOff style={{fontSize: 18}} />}
                    </IconButton>
                    </InputAdornment>,
                  }}
                />

EKSAD's avatar
EKSAD committed
193
                <Button name="submit" variant="contained" disabled={this.state.password.trim() == '' && this.state.confirmPassword.trim() == '' ? true : false} onClick={() => this.validateReset()} style={{ marginTop: 50,  width: '100%', height: 35, borderRadius: 4, color: this.state.password.trim() == '' && this.state.confirmPassword.trim() == '' ? '#4b4b4b' : '#fff', backgroundColor: this.state.password.trim() == '' && this.state.confirmPassword.trim() == '' ? '#d8d8d8' : '#51c6ea' }}>
EKSAD's avatar
EKSAD committed
194
                  <Typography style={{fontSize: 12, fontFamily: 'Nunito Sans, sans-serif'}}>Lanjut</Typography>
EKSAD's avatar
EKSAD committed
195 196 197 198 199 200 201 202
                </Button>
              </div>
          </div>
        );
      }
}

export default ResetPassword;