client/src/components/NavbarLogin.js
author ymh <ymh.work@gmail.com>
Tue, 13 Nov 2018 16:46:15 +0100
changeset 172 4b780ebbedc6
parent 171 03334a31130a
permissions -rw-r--r--
- Upgrade libraries - Make things work again
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import React, { Component } from 'react';
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
import ReactDOM from 'react-dom';
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
     3
import { Trans } from 'react-i18next';
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
export default class LoginNav extends Component {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
  state = {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
    showDropdown: false
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
  componentWillMount() {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    document.addEventListener('click', this.handleClickOutside, false);
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
  componentWillUnmount() {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    document.removeEventListener('click', this.handleClickOutside, false);
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
  handleClickOutside = (e) => {
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    20
    e.preventDefault();
149
298d0373812e Correct problem with "findDOMNode" is null
ymh <ymh.work@gmail.com>
parents: 148
diff changeset
    21
    const currentNode = ReactDOM.findDOMNode(this);
298d0373812e Correct problem with "findDOMNode" is null
ymh <ymh.work@gmail.com>
parents: 148
diff changeset
    22
    if(!currentNode.contains(e.target)) {
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
      this.hideDropDown();
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  onClickSettings = (e) => {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    e.preventDefault();
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    this.props.history.push('/settings');
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
  onClickLogin = (e) => {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    e.preventDefault();
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    this.props.history.push('/login');
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  toggleShowDropdown = () => {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    this.setState({showDropdown: !this.state.showDropdown});
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  hideDropDown = () => {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    this.setState({showDropdown: false});
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
  render() {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    const {isAuthenticated, currentUser, onLogout} = this.props;
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    if (isAuthenticated) {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
      return (
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    52
        <li className={`nav-item dropdown ${this.state.showDropdown?'show':''}`}>
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    53
          <span className="nav-link dropdown-toggle username font-weight-bold" id="navbarDropdown" role="button" aria-haspopup="true" aria-expanded={this.state.showDropdown} onClick={this.toggleShowDropdown} onBlur={this.hideDropDown}>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    54
            { currentUser.username }
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    55
            &nbsp;<span className="caret"></span>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    56
          </span>
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    57
          <div className={`dropdown-menu dropdown-menu-right bg-primary border-0 ${this.state.showDropdown?'show':''}`} aria-labelledby="navbarDropdown">
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    58
            <button className="dropdown-item bg-primary text-secondary font-weight-bold text-capitalize" onClick={this.onClickSettings}><Trans i18nKey='common.parameters'>Paramètres</Trans></button>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    59
            <button className="dropdown-item bg-primary text-secondary font-weight-bold text-capitalize" onClick={onLogout}><Trans i18nKey='common.disconnect'>Se déconnecter</Trans></button>
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    60
          </div>
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        </li>
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
      );
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    } else {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
      return (
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    65
          <li className="nav-item">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    66
          <a className="nav-link text-capitalize" onClick={this.onClickLogin} href="/login"><Trans i18nKey='common.connect'>Se connecter</Trans></a>
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
          </li>
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
      );
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
}