client/src/components/Navbar.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 172 4b780ebbedc6
child 191 3f71ad81a5a9
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:
145
5d2bc8c877ea Adding class for specific css in App, Navbar and SessionList components
Riwad Salim
parents: 143
diff changeset
     1
import '../index.css';
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
     2
import './Navbar.css';
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
import PropTypes from 'prop-types';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
import React, { Component } from 'react';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
import { connect } from 'react-redux';
105
0a1d6560acac Introduce authenticated routes.
Alexandre Segura <mex.zktk@gmail.com>
parents: 104
diff changeset
     6
import { withRouter } from 'react-router';
52
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
     7
import { bindActionCreators } from 'redux';
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
     8
import { withNamespaces, Trans } from 'react-i18next';
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
     9
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
// import logo from './logo.svg';
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    11
import Modal from 'react-modal';
52
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
    12
import * as authActions from '../actions/authActions';
155
e55ae84508bf Clean CreateSession component and remove trace of previous create session button
ymh <ymh.work@gmail.com>
parents: 154
diff changeset
    13
import * as sessionsActions from '../actions/sessionsActions';
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
    14
import { forceSync } from '../actions/networkActions';
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    15
import { groupSetCurrent } from '../actions/groupActions';
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    16
import { isAuthenticated, getCurrentUser, getOnline, getCurrentGroup, getGroups } from '../selectors/authSelectors';
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
    17
import { isSynchronizing, isSynchronized } from '../selectors/syncSelectors';
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    18
import CreateSession from './CreateSession';
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents: 146
diff changeset
    19
import NavbarLogin from './NavbarLogin';
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents: 146
diff changeset
    20
import NavbarGroup from './NavbarGroup';
65
14989b339e5d Use a fonctionnal component for the login part of the navbar
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    21
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
    22
const Online = ({ online }) => {
81
a6bd1aaddc34 Add online/offline indicator.
Alexandre Segura <mex.zktk@gmail.com>
parents: 65
diff changeset
    23
  return (
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    24
    <li className="nav-item">
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    25
      <span className="nav-link">
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    26
        <span  className="material-icons" style={{ color: online ? '#2ECC71' : '#F95B5B' }}>signal_wifi_4_bar</span>
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    27
      </span>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    28
    </li>
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
    29
  )
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
    30
}
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
    31
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    32
const SyncButton = ({ isAuthenticated, onSyncClick, isSynchronizing, isSynchronized, id }) => {
130
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    33
  const classnames = "material-icons"
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    34
    + ((!isSynchronized)?" sync-button-not-synchronized":"")
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    35
    + ((isSynchronizing)?" sync-button-synchronizing":"");
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    36
  let title = "Synchronize";
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    37
  let clickCb = onSyncClick;
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    38
  if(isSynchronizing) {
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    39
    title = "Synchronizing...";
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    40
    clickCb = () => {};
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    41
  } else if (!isSynchronized) {
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    42
    title += ": not synchronized";
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    43
  }
78246db1cbac make synchronization recurent, improve synchronization status display
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    44
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    45
  if (isAuthenticated) {
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    46
    return (
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    47
      <li className="nav-item">
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    48
        <span className="nav-link sync-button" title={title} onClick={clickCb} id={id || null}>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    49
          <span className={classnames}>&#xE627;</span>
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    50
        </span>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    51
      </li>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    52
    );
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    53
  }
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
    54
  return (
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    55
      <li>
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    56
        <span>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    57
          <span></span>
172
4b780ebbedc6 - Upgrade libraries
ymh <ymh.work@gmail.com>
parents: 171
diff changeset
    58
        </span>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    59
    </li>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    60
  );
81
a6bd1aaddc34 Add online/offline indicator.
Alexandre Segura <mex.zktk@gmail.com>
parents: 65
diff changeset
    61
}
a6bd1aaddc34 Add online/offline indicator.
Alexandre Segura <mex.zktk@gmail.com>
parents: 65
diff changeset
    62
163
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    63
const OffLineMessage = ({isAuthenticated}) => {
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    64
  if (!isAuthenticated) {
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    65
    return (
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
    66
        <span className="sticky-top text-warning text-right float-right mr-4 offline-message"><Trans i18nKey="navbar.offline_message"></Trans></span>
163
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    67
    );
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    68
  }
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    69
    return (
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    70
      <span></span>
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    71
  );
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    72
}
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    73
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 134
diff changeset
    74
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    75
class AppNavbar extends Component {
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    76
  constructor(props) {
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    77
    super(props);
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    78
    this.state = { modalIsOpen: false };
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    79
  }
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    80
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    81
  componentWillMount() {
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    82
    Modal.setAppElement('body');
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    83
}
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    84
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    85
  openModal = () => {
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    86
    this.setState({modalIsOpen: true});
107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
    87
  }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
    88
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
    89
  closeModal = () => {
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    90
    this.setState({modalIsOpen: false});
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    91
  }
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    92
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    93
  handleModalCloseRequest = () => {
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    94
    // opportunity to validate something and keep the modal open even if it
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    95
    // requested to be closed
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
    96
    this.setState({modalIsOpen: false});
107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
    97
  }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
    98
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    99
  onClickHome = (e) => {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   100
    e.preventDefault();
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   101
    this.props.history.push('/');
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   102
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   103
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   104
  isSynchronized = () => {
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   105
    return this.props.isSynchronized;
107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   106
  }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   108
  onClickLogout = (e) => {
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   109
    e.preventDefault();
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   110
    const isSynchronized = this.isSynchronized();
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   111
    if (isSynchronized) {
107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   112
      this.logout();
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   113
    } else {
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 145
diff changeset
   114
      this.openModal()
107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   115
    }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   116
  }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   117
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   118
  confirmLogout = () => {
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   119
    const isSynchronized = this.isSynchronized();
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   120
    if (!isSynchronized) {
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   121
      this.props.authActions.resetAll();
107
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   122
    }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   123
    this.logout();
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   124
    this.closeModal();
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   125
  }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   126
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   127
  logout = () => {
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   128
    this.props.authActions.logout();
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   129
    this.props.history.push('/');
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   130
  }
e6f85e26b08c Confirm logout when pending requests, try to purge offline.outbox
Alexandre Segura <mex.zktk@gmail.com>
parents: 105
diff changeset
   131
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   132
  onClickSessions = (e) => {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   133
    e.preventDefault();
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   134
    this.props.history.push('/sessions');
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   135
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   136
129
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   137
  onSyncClick = (e) => {
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   138
    e.preventDefault();
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   139
    this.props.networkActions.forceSync();
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   140
  }
d48946d164c6 Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents: 107
diff changeset
   141
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   142
  onGroupSelect = (groupName) => {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   143
    if(groupName === "__create_group__") {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   144
      this.props.history.push('/create-group');
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   145
    } else {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   146
      this.props.groupActions.groupSetCurrent(groupName);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   147
    }
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   148
  }
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   149
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   150
  render() {
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   151
    const t = this.props.t;
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   152
    return (
163
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
   153
      <div>
167
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   154
      <nav className="navbar navbar-expand-lg navbar-light bg-primary sticky-top">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   155
        <div className="container-fluid">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   156
        <div className="navbar-header">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   157
        <a className="navbar-brand" /*onClick={this.onClickHome}*/ href="/">IRI Notes</a>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   158
        <button className="navbar-toggler mr-auto" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   159
              <span className="navbar-toggler-icon"></span>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   160
              <span className="icon-bar"></span>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   161
              <span className="icon-bar"></span>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   162
              <span className="icon-bar"></span>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   163
            </button>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   164
          </div>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   165
          <div className="collapse navbar-collapse text-center" id="navbarSupportedContent">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   166
            <ul className="navbar-nav mr-auto">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   167
              <li className="nav-item text-secondary">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   168
                <a className="nav-link text-capitalize" onClick={this.onClickSessions} href="/sessions">{t('common.session', {count: 2})}</a>
167
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   169
                {/* <CreateSession
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   170
                    history={this.props.history}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   171
                    group={this.props.currentGroup}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   172
                    createSession={this.props.sessionsActions.createSession}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   173
                  /> */}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   174
              </li>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   175
            </ul>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   176
            <ul className="navbar-nav navbar-center">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   177
                <li className="nav-item text-secondary">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   178
                {/* <a className="nav-link " onClick={this.onClickSessions} href="/sessions">Sessions</a> */}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   179
                  <CreateSession
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   180
                    history={this.props.history}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   181
                    group={this.props.currentGroup}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   182
                    createSession={this.props.sessionsActions.createSession}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   183
                  />
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
   184
                </li>
167
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   185
            </ul>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   186
            <ul className="nav navbar-nav ml-auto">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   187
              <NavbarGroup currentGroup={this.props.currentGroup} groups={this.props.groups} onSelect={this.onGroupSelect}/>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   188
              <SyncButton id='sync-button' isAuthenticated={this.props.isAuthenticated} onSyncClick={this.onSyncClick} isSynchronizing={this.props.isSynchronizing} isSynchronized={this.props.isSynchronized} />
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   189
              <Online {...this.props} />
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   190
              <NavbarLogin {...this.props} onLogout={this.onClickLogout} />
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   191
            </ul>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   192
          </div>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   193
          <Modal
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   194
          className="Modal__Bootstrap modal-dialog modal-dialog-centered"
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   195
          // closeTimeoutMS={150}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   196
          isOpen={this.state.modalIsOpen}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   197
          onRequestClose={this.handleModalCloseRequest}
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   198
          >
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   199
            <div id="logout-modal" className="modal-content">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   200
              <span id="logout-close-modal-button" className="material-icons p-0 text-right" onClick={ this.handleModalCloseRequest }>close</span>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   201
              <div className="modal-body text-center">
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   202
              <span className="material-icons modal-warning text-info pb-5">warning</span>
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   203
                <p className="modal-text"><Trans i18nKey="navbar.logout_modal">
167
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   204
                  Certaines sessions n'ont pas encore été sauvegardées.
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   205
                  <br />
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   206
                  Si vous continuez, elles seront perdues.
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   207
                  </Trans></p>
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   208
              <button type="button" className="btn btn-danger text-secondary font-weight-bold py-1 px-2 mb-3 text-capitalize" id="logout-modal-button" onClick={ this.confirmLogout }>{t('common.confirm')}</button>
167
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   209
              </div>
163
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
   210
            </div>
167
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   211
          </Modal>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   212
        </div>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   213
      </nav>
1f340f3597a8 Adapt css for CreateSession and Navbar components
salimr <riwad.salim@yahoo.fr>
parents: 163
diff changeset
   214
      <OffLineMessage isAuthenticated={this.props.isAuthenticated} />
163
78c54cb473cd Add offline message
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
   215
      </div>
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   216
    );
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   217
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   218
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   219
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   220
AppNavbar.propTypes = {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   221
  isAuthenticated: PropTypes.bool.isRequired
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   222
};
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   223
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   224
function mapStateToProps(state, props) {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   225
  return {
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   226
    isAuthenticated: isAuthenticated(state),
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   227
    currentUser: getCurrentUser(state),
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   228
    online: getOnline(state),
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   229
    isSynchronizing: isSynchronizing(state),
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   230
    isSynchronized: isSynchronized(state),
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   231
    currentGroup: getCurrentGroup(state),
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 155
diff changeset
   232
    groups: getGroups(state),
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   233
  };
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   234
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   235
52
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
   236
function mapDispatchToProps(dispatch) {
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
   237
  return {
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
   238
    authActions: bindActionCreators(authActions, dispatch),
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 130
diff changeset
   239
    networkActions: bindActionCreators({ forceSync }, dispatch),
155
e55ae84508bf Clean CreateSession component and remove trace of previous create session button
ymh <ymh.work@gmail.com>
parents: 154
diff changeset
   240
    groupActions: bindActionCreators({ groupSetCurrent }, dispatch),
e55ae84508bf Clean CreateSession component and remove trace of previous create session button
ymh <ymh.work@gmail.com>
parents: 154
diff changeset
   241
    sessionsActions: bindActionCreators(sessionsActions, dispatch),
52
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
   242
  }
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
   243
}
96f8a4a59bd9 Implement logout.
Alexandre Segura <mex.zktk@gmail.com>
parents: 44
diff changeset
   244
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   245
export default withNamespaces()(connect(mapStateToProps, mapDispatchToProps)(withRouter(AppNavbar)));