JSFiddle - React, Tailwind, and code Playground

by Daedalus

HTML

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<div class="container">
  <div class="row">
    <div class="col-md-12">
      The modal will pop up if there is no activity for 20 seconds
    </div>
  </div>
</div>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel"><span class="reason"></span></h4>
      </div>
      <div class="modal-body">
        <span class="reason"></span>
      </div>
      <div class="modal-footer">
        <button type="button" id="stayLoggedInBtn" class="btn btn-primary">Yes</button>
      </div>
    </div>
  </div>
</div>

JavaScript

jQuery(function($) {
  var logoutUser, popupOpen, modalOpen = false,
    popupOpenFn = _.debounce(function() {
      popupOpen = window.setTimeout(function() {
        logoutUser = window.setTimeout(function() {
          $('.reason', $('#myModal')).text('Logging you out.');
          window.setTimeout(function () {
          	$('#myModal').modal('hide');
          }, 2000); // 2 seconds
        }, 20000); // 20 seconds
        $('.reason', $('#myModal')).text('Stay logged in?');
        if (!modalOpen) {
        	$('#myModal').modal('show');
        }
      }, 20000); // 20 seconds
    }, 600); // 0.6 seconds
  $('#myModal').modal({
    backdrop: 'static',
    show: false
  });
	$('#myModal').on('show.bs.modal', function () {
  	modalOpen = true;
  });
  $('#myModal').on('hide.bs.modal', function () {
  	modalOpen = false;
  });
  $('#stayLoggedInBtn').click(function (evt) {
    window.clearTimeout(logoutUser);
    $('#myModal').modal('hide');
    popupOpenFn();
  });
  $('body').on('click keypress keyup keydown mousemove', function(evt) {
    window.clearTimeout(popupOpen);
    popupOpenFn();
  });
  popupOpenFn();
});