client/src/components/Navbar.js
changeset 146 4f4bb2b3ef39
parent 145 5d2bc8c877ea
child 148 fcce52a159bc
--- a/client/src/components/Navbar.js	Wed Aug 15 23:39:02 2018 +0200
+++ b/client/src/components/Navbar.js	Thu Aug 16 22:32:36 2018 +0200
@@ -6,7 +6,8 @@
 import { withRouter } from 'react-router';
 import { bindActionCreators } from 'redux';
 // import logo from './logo.svg';
-import { NavDropdown, MenuItem, Modal} from 'react-bootstrap';
+import { NavDropdown, MenuItem } from 'react-bootstrap';
+import Modal from 'react-modal';
 import * as authActions from '../actions/authActions';
 import { forceSync } from '../actions/networkActions';
 import { groupSetCurrent } from '../actions/groupActions';
@@ -27,7 +28,7 @@
 
   if (isAuthenticated) {
     return (
-          <NavDropdown title={ currentUser.get('username') }>
+          <NavDropdown className="navs" title={ currentUser.get('username') }>
               <li>
                 <a className="user-dropdown"  href="#settings" onClick={onClickSettings}>Paramètres</a>
               </li>
@@ -107,13 +108,23 @@
 }
 
 class AppNavbar extends Component {
+  constructor(props) {
+    super(props);
+    this.state = { modalIsOpen: false };
+  }
 
-  state = {
-    showModal: false
+  openModal = () => {
+    this.setState({modalIsOpen: true});
   }
 
   closeModal = () => {
-    this.setState({ showModal: false });
+    this.setState({modalIsOpen: false});
+  }
+
+  handleModalCloseRequest = () => {
+    // opportunity to validate something and keep the modal open even if it
+    // requested to be closed
+    this.setState({modalIsOpen: false});
   }
 
   onClickHome = (e) => {
@@ -131,7 +142,7 @@
     if (isSynchronized) {
       this.logout();
     } else {
-      this.setState({ showModal: true })
+      this.openModal()
     }
   }
 
@@ -193,18 +204,25 @@
               <LoginNav {...this.props} onLogout={this.onClickLogout} />
             </ul>
           </div>
-          <Modal show={this.state.showModal} onHide={this.closeModal}>
-            <Modal.Body>
-              <p className="text-center">
-                Certaines données n'ont pas encore été sauvegardées.
-                <br />
-                Si vous continuez, elles seront perdues.
-              </p>
-            </Modal.Body>
-            <Modal.Footer>
-              <button type="submit" className="btn btn-primary btn-lg" onClick={this.confirmLogout}>Confirmer</button>
-              <button type="submit" className="btn btn-default btn-lg" onClick={this.closeModal}>Fermer</button>
-            </Modal.Footer>
+          <Modal
+          className="Modal__Bootstrap modal-dialog"
+          // closeTimeoutMS={150}
+          isOpen={this.state.modalIsOpen}
+          onRequestClose={this.handleModalCloseRequest}
+          >
+            <div className="modal-content">
+              <div className="modal-body">
+                <p className="text-center">
+                  Certaines données n'ont pas encore été sauvegardées.
+                  <br />
+                  Si vous continuez, elles seront perdues.
+                </p>
+              </div>
+              <div className="modal-footer">
+                <button type="submit" className="btn btn-primary btn-lg" onClick={this.confirmLogout}>Confirmer</button>
+                <button type="submit" className="btn btn-default btn-lg" onClick={this.handleModalCloseRequest}>Fermer</button>
+              </div>
+            </div>
           </Modal>
         </div>
       </nav>