client/src/components/Session.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 174 ac1a026edd58
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:
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import React, { Component } from 'react';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
import { connect } from 'react-redux';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
import { bindActionCreators } from 'redux';
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 168
diff changeset
     4
import { Trans } from 'react-i18next';
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
import '../App.css';
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
     6
import './Session.css';
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
import Navbar from './Navbar';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
import NoteInput from './NoteInput';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
import NotesList from './NotesList';
46
4aa24724e5b3 Move session form to dedicated component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 35
diff changeset
    10
import SessionForm from './SessionForm';
63
4088f8dc6b52 Improve session page layout, introduce summary.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    11
import SessionSummary from './SessionSummary';
162
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    12
import ProtocolSummary from './ProtocolSummary';
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
import * as sessionsActions from '../actions/sessionsActions';
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
import * as notesActions from '../actions/notesActions';
137
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    15
import { getSession, getSessionNotes } from '../selectors/coreSelectors';
138
a1fb2ced3049 propagate annotations categories from session protocol definition
ymh <ymh.work@gmail.com>
parents: 137
diff changeset
    16
import { extractAnnotationCategories, defaultAnnotationsCategories } from '../constants';
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
class Session extends Component {
162
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    19
165
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    20
  state = {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    21
    screenSummary: 0,
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    22
  }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    23
162
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    24
  onClickReadOnly = (e) => {
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    25
    e.preventDefault();
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    26
    this.props.history.push('/read-only/' + this.props.match.params.id);
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    27
  }
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    28
165
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    29
  toggleScreenSummary = (e) => {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    30
    if (this.state.screenSummary === 0) {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    31
      e.preventDefault()
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    32
      this.setState({screenSummary: 1})
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    33
    }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    34
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    35
    if (this.state.screenSummary === 1) {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    36
      e.preventDefault()
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    37
      this.setState({screenSummary: 0})
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    38
    }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    39
  }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    40
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    41
  screenSummary = () => {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    42
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    43
    if (this.state.screenSummary === 0) {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    44
      return (
174
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    45
        <React.Fragment>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    46
          <div onClick={this.toggleScreenSummary} className ="text-primary btn"><Trans i18nKey="session.protocol_display">Afficher le protocole d'annotation</Trans></div>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    47
          <SessionSummary notes={this.props.notes} />
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    48
       </React.Fragment>
165
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    49
      );
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    50
    }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    51
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    52
    if (this.state.screenSummary === 1) {
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    53
      return (
174
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    54
        <React.Fragment>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    55
          <div onClick={this.toggleScreenSummary} className ="text-primary btn"><Trans i18nKey="session.summary_display">Afficher le résumé de la session</Trans></div>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    56
          <ProtocolSummary annotationCategories={this.props.annotationCategories} />
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    57
        </React.Fragment>
165
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    58
      );
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    59
    }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    60
  }
62e5be0df812 Add ProtocolSummary component
salimr <riwad.salim@yahoo.fr>
parents: 162
diff changeset
    61
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    62
  render() {
162
1fd73fdaf4c6 Add ReadOnlySession component and message when session list is empty
salimr <riwad.salim@yahoo.fr>
parents: 161
diff changeset
    63
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    64
    return (
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    65
      <div>
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    66
        <Navbar history={this.props.history} />
35
97106bacb24e Improve session page design.
Alexandre Segura <mex.zktk@gmail.com>
parents: 34
diff changeset
    67
        <div className="session-container">
63
4088f8dc6b52 Improve session page layout, introduce summary.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    68
          <div className="session-notes">
174
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    69
            <div className="notes-affix">
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    70
              <div>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    71
                <a onClick={this.onClickReadOnly} href="/read-only"><span className="material-icons text-primary">remove_red_eye</span></a>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    72
              </div>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    73
              <div className="notes-affix-summary">
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    74
                {this.screenSummary()}
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    75
              </div>
ac1a026edd58 Correct display of protocol
ymh <ymh.work@gmail.com>
parents: 173
diff changeset
    76
            </div>
63
4088f8dc6b52 Improve session page layout, introduce summary.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    77
            <div className="notes-list">
4088f8dc6b52 Improve session page layout, introduce summary.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    78
              <SessionForm session={this.props.currentSession} />
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    79
              <NotesList
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    80
                notes={this.props.notes}
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    81
                deleteNote={this.props.notesActions.deleteNote}
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    82
                updateNote={this.props.notesActions.updateNote}
138
a1fb2ced3049 propagate annotations categories from session protocol definition
ymh <ymh.work@gmail.com>
parents: 137
diff changeset
    83
                annotationCategories={this.props.annotationCategories}
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    84
              />
63
4088f8dc6b52 Improve session page layout, introduce summary.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    85
            </div>
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
    86
        </div>
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
    87
          <section className="editor-fixed pl-5">
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    88
            <div className="container-fluid">
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    89
              <div className="row">
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
    90
                <div className="col-lg-10 offset-md-2">
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    91
                  <NoteInput
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    92
                    session={this.props.currentSession}
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 76
diff changeset
    93
                    addNote={this.props.notesActions.addNote}
138
a1fb2ced3049 propagate annotations categories from session protocol definition
ymh <ymh.work@gmail.com>
parents: 137
diff changeset
    94
                    annotationCategories={this.props.annotationCategories}/>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    95
                </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    96
              </div>
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    97
            </div>
35
97106bacb24e Improve session page design.
Alexandre Segura <mex.zktk@gmail.com>
parents: 34
diff changeset
    98
          </section>
97106bacb24e Improve session page design.
Alexandre Segura <mex.zktk@gmail.com>
parents: 34
diff changeset
    99
        </div>
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   100
      </div>
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   101
    );
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
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   104
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   105
function mapStateToProps(state, props) {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   106
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   107
  const sessionId = props.match.params.id;
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   108
137
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
   109
  const currentSession = getSession(sessionId, state);
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
   110
  const currentNotes = getSessionNotes(sessionId, state);
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 165
diff changeset
   111
  const annotationCategories = currentSession?extractAnnotationCategories(currentSession.protocol):defaultAnnotationsCategories;
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   112
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   113
  return {
30
4d93f4ed95bc Update session in PouchDB.
Alexandre Segura <mex.zktk@gmail.com>
parents: 29
diff changeset
   114
    currentSession,
62
b2514a9bcd49 migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents: 59
diff changeset
   115
    notes: currentNotes,
138
a1fb2ced3049 propagate annotations categories from session protocol definition
ymh <ymh.work@gmail.com>
parents: 137
diff changeset
   116
    annotationCategories
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   117
  };
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   118
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   119
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   120
function mapDispatchToProps(dispatch) {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   121
  return {
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   122
    sessionsActions: bindActionCreators(sessionsActions, dispatch),
173
0e6703cd0968 Correct the Note editor.
ymh <ymh.work@gmail.com>
parents: 172
diff changeset
   123
    notesActions: bindActionCreators(notesActions, dispatch)
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   124
  }
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   125
}
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   126
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   127
export default connect(mapStateToProps, mapDispatchToProps)(Session);