client/src/components/NavbarGroup.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';
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
export default class NavbarGroup extends Component {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
  state = {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
    showDropdown: false
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
  }
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
  componentWillMount() {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    document.addEventListener('click', this.handleClickOutside, false);
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
  }
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
  componentWillUnmount() {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    document.removeEventListener('click', this.handleClickOutside, false);
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
  }
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
  handleClickOutside = (e) => {
149
298d0373812e Correct problem with "findDOMNode" is null
ymh <ymh.work@gmail.com>
parents: 148
diff changeset
    19
    const currentNode = ReactDOM.findDOMNode(this);
298d0373812e Correct problem with "findDOMNode" is null
ymh <ymh.work@gmail.com>
parents: 148
diff changeset
    20
    if(currentNode && !currentNode.contains(e.target)) {
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
      this.hideDropDown();
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
  }
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
  toggleShowDropdown = () => {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    this.setState({showDropdown: !this.state.showDropdown});
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
  hideDropDown = () => {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    this.setState({showDropdown: false});
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
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
  render() {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    const {currentGroup, groups, onSelect} = this.props;
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
    const onClickGroup = (e) => {
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    38
      e.preventDefault();
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
      onSelect(e.target.dataset.groupname);
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
      this.hideDropDown();
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    if (currentGroup) {
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 154
diff changeset
    44
      const currentGroupName = currentGroup.name;
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
      return (
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    46
        <li className={`nav-item dropdown ${this.state.showDropdown?'show':''}`}>
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    47
          <span className="nav-link dropdown-toggle" 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: 168
diff changeset
    48
            { currentGroupName }
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    49
            &nbsp;<span className="caret"></span>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    50
          </span>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    51
          <div id="group-menu-scroll-down" className={`dropdown-menu dropdown-menu-right shadow py-1 pt-3 mb-5 mt-2 bg-primary border border-primary ${this.state.showDropdown?'show':''}`} aria-labelledby="navbarDropdown">
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
          { groups && groups.map((group, key) => {
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 154
diff changeset
    53
            const groupName = group.name;
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
            const className = (groupName === currentGroupName)?'active':null;
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    55
              return <button key={key} onClick={onClickGroup} className={`dropdown-item btn btn-primary bg-primary text-secondary font-weight-bold ${className}`} data-groupname={groupName}>{ groupName }</button>
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
            })
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
          }
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
    58
          <button type="button "onClick={onClickGroup} key="-1" className="dropdown-item btn btn-primary bg-primary text-center text-secondary create-group" data-groupname="__create_group__">Créer un groupe</button>
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 149
diff changeset
    59
          </div>
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        </li>
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
      );
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    } else {
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
      return null;
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
  }
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
}