client/src/components/NavbarLogin.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 172 4b780ebbedc6
permissions -rw-r--r--
Change the settings to avoid using Session authentication for rest framework as it raise exceptions in case client and backend are on the same domain On the filter, adapt to take into account new version of django_filters
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
}