JSFiddle - React, Tailwind, and code Playground

Reset password interface - Portal Phase 3

by Hugo Carneiro

HTML

<div id="overlay-reset-password" class="overlay hasNavbar  overlay-sm active">
  <div class="overlayPanelScreen"></div>
  <div class="overlayPanel">
    <div class="overlayNavbar">
      <div class="closeButton" style="display: block;">Cancel</div>
      <div class="overlayTitle"></div>
    </div>
    <div class="overlayPanelContent">
      <h2>Forgot your password?</h2>
      <p>Enter your email address below, and we will send you an email to reset your password.</p>
      <form id="portal-reset-form">
        <div class="form-group">
          <input type="email" class="form-control" id="reset-email" placeholder="Email address">
          <p class="email-error">Please enter a valid email.</p>
          <p class="success-reset">An email has been sent to <strong><span class="your-email">[email protected]</span></strong> to reset your password.</p>
        </div>
        <button type="button" class="btn btn-primary btn-lg btn-block reset-password-btn">Reset password</button>
      </form>
    </div>
  </div>
</div>

CSS

.overlay {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  background: none;
  width: 100%;
  height: 100%;
  z-index: 1000;
  -webkit-transform: translate3d(0, 0, 0);
  pointer-events: none;
}

.overlay.active {
  pointer-events: all;
}

.overlayPanelScreen {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 19999;
  background: rgba(0, 0, 0, 0.7);
  -webkit-transform: translate3d(0, 0, -400px);
  transform: translate3d(0, 0, -400px);
  opacity: 0;
  pointer-events: none;
  -webkit-transition-property: opacity;
  -webkit-transition-duration: 0.2s;
  -webkit-transition-timing-function: ease-out;
  transition-property: opacity;
  transition-duration: 0.2s;
  transition-timing-function: ease-out;
}

.overlay.active .overlayPanelScreen {
  opacity: 1;
  pointer-events: all;
}

.overlayPanel {
  position: absolute;
  top: 6px;
  left: 6px;
  right: 6px;
  bottom: 6px;
  background: rgba(0, 0, 0, 0.3);
  z-index: 20000;
  padding: 0px;
  -webkit-border-radius: 5px;
  -webkit-transform: translate3d(0, 0, 0) scale(0);
  transform: translate3d(0, 0, 0) scale(0);
}

.overlay-sm .overlayPanel {
  width: 50%;
  left: 25%;
  right: 25%;
  top: 19%;
  bottom: 19%;
}

.overlay.active .overlayPanel {
  -webkit-transform: translate3d(0, 0, 0);
  transform: translate3d(0, 0, 0);
}

#overlay-reset-password .overlayPanel {
  bottom: auto;
}

.overlayNavbar {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 44px;
  z-index: 1;
  border-bottom: 1px solid #c9c9c9;
  line-height: 44px;
  font-size: 14px;
  text-align: left;
  font-weight: bold;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.95);
  color: #333;
  -webkit-transform: translateZ(0);
  transform: translateZ(0);
  display: none;
}

.overlay.hasNavbar .overlayNavbar {
  display: block;
}

#overlay-reset-password .overlayNavbar {
  top: auto;
  bottom: 0;
  text-align: center;
  border-bottom: none;
  height: 54px;
}

.overlayNavbar .closeButton...

JavaScript

var emailNotExistent = false;

$('.reset-password-btn').on('click', function() {
	var emailAddress = $('#reset-email').val();
  
  if ( $('#overlay-reset-password .form-group').hasClass('has-success') ) {
    $('#overlay-reset-password .form-group').removeClass('has-success');
  }
	
  if ( validateEmail(emailAddress) ) {
  	
    if ( emailNotExistent ) {
    	$('.email-error').html("The email doesn't exist in our system. Try again.");
  		$('#overlay-reset-password .form-group').addClass('has-error');
    } else {
    
    	if ( $('#overlay-reset-password .form-group').hasClass('has-error') ) {
        $('#overlay-reset-password .form-group').removeClass('has-error');
      }
      
      $('.success-reset .your-email').html(emailAddress);
    	$('#overlay-reset-password .form-group').addClass('has-success');
      $('.closeButton').text('Close'); // THIS NEED TO GO BACK TO IT'S ORIGINAL TEXT AFTER CLOSING
      
    }
    
  } else {
  	$('#overlay-reset-password .form-group').addClass('has-error');
  }
  
});

function validateEmail(email) {
    var 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(email);
}