client/src/components/NotesList.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 171 03334a31130a
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:
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
     1
import React, { Component } from 'react';
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
import PropTypes from 'prop-types';
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
     3
import Modal  from 'react-modal';
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
     4
import Note from './Note';
150
97536386b397 Improve Modals display and sessions list
salimr <riwad.salim@yahoo.fr>
parents: 148
diff changeset
     5
import './NoteList.css';
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
     6
import { Trans } from 'react-i18next';
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
     8
class NotesList extends Component {
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
     9
  constructor(props) {
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    10
    super(props);
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    11
    this.state = {
148
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents: 146
diff changeset
    12
      editingNote: null,
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents: 146
diff changeset
    13
      noteToDelete: null,
fcce52a159bc remove react-bootstrap
ymh <ymh.work@gmail.com>
parents: 146
diff changeset
    14
      modalIsOpen: false,
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    15
    }
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    16
  }
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    17
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    18
  componentDidUpdate(prevProps) {
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    19
    if ((this.props.notes || []).length > (prevProps.notes || []).length) {
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    20
      this.node.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"})
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    21
    }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    22
  }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    23
151
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    24
  componentWillMount() {
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    25
    Modal.setAppElement('body');
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    26
}
57d63a248f0d Update to Bootstrap 4
salimr <riwad.salim@yahoo.fr>
parents: 150
diff changeset
    27
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    28
  openModal = () => {
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    29
    this.setState({modalIsOpen: true});
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    30
  }
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    31
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    32
  enterEditMode = (note) => {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    33
    this.setState({ editingNote: note });
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    34
  }
2
b52921a63e77 add scss + bootstrap
ymh <ymh.work@gmail.com>
parents: 1
diff changeset
    35
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    36
  closeNote = () => {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    37
    this.setState({ editingNote: null });
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    38
  }
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    39
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    40
  confirmDelete = (note) => {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    41
    this.setState({
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    42
      modalIsOpen: true,
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    43
      noteToDelete: note
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    44
    })
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    45
  }
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    46
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    47
  deleteNote = () => {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    48
    const { noteToDelete } = this.state;
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 124
diff changeset
    49
    this.props.deleteNote(noteToDelete);
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    50
    this.closeModal();
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    51
  }
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    53
  closeModal = () => {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    54
    this.setState({
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    55
      modalIsOpen: false,
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    56
      noteToDelete: null
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    57
    })
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    58
  }
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    59
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    60
  handleModalCloseRequest = () => {
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    61
    // 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: 143
diff changeset
    62
    // requested to be closed
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    63
    this.setState({
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    64
      modalIsOpen: false,
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    65
      noteToDelete: null
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    66
    });
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    67
  }
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    68
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    69
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    70
  updateNote = (note, data) => {
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 124
diff changeset
    71
    this.props.updateNote(note, data);
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    72
  }
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    73
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    74
  render() {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    75
    if (this.props.notes.size === 0) {
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    76
      return (
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    77
        <div></div>
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    78
      );
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    79
    }
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    80
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    81
    return (
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    82
      <div>
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    83
        <div>
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    84
          {this.props.notes.map((note) =>
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    85
            <Note
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    86
              note={ note }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    87
              key={ note._id}
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    88
              onClick={ this.enterEditMode.bind(this, note) }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    89
              onClose={ this.closeNote }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    90
              onDelete={ this.confirmDelete.bind(this, note) }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    91
              onSave={ this.updateNote }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    92
              isEditing={ this.state.editingNote && note === this.state.editingNote }
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    93
              annotationCategories={this.props.annotationCategories} />
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    94
          )}
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    95
            <div className="dummy-div" ref={node => this.node = node}/>
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    96
          </div>
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
    97
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    98
        <Modal
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
    99
        className="Modal__Bootstrap modal-dialog modal-dialog-centered w-25"
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   100
        // closeTimeoutMS={150}
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   101
        isOpen={this.state.modalIsOpen}
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   102
        onRequestClose={this.handleModalCloseRequest}
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   103
        >
154
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
   104
          <div id="delete-note-modal" className="modal-content">
158
964438ef8401 Add auto scroll to NoteList
salimr <riwad.salim@yahoo.fr>
parents: 154
diff changeset
   105
            <span id="delete-note-close-modal-button" className="material-icons text-right" onClick={ this.handleModalCloseRequest }>close</span>
154
a28361bda28c Adapt all css classes with Bootstrap 4 Utilities
salimr <riwad.salim@yahoo.fr>
parents: 151
diff changeset
   106
            <div className="modal-body text-center">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   107
            <span className="modal-text"><Trans i18nKey='notes_list.delete_note_msg'>Supprimer cette note ?</Trans></span>
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 170
diff changeset
   108
              <button type="button" className="btn btn-danger text-secondary font-weight-bold py-1 px-2 ml-3" id="delete-note-modal-button" onClick={ this.deleteNote }><Trans i18nKey='common.delete'>Supprimer</Trans></button>
146
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   109
            </div>
4f4bb2b3ef39 Removing Modal from react-bootstrap and adding react-modal
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
   110
          </div>
84
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
   111
        </Modal>
bf35a7737f94 Move logic to NotesList component.
Alexandre Segura <mex.zktk@gmail.com>
parents: 62
diff changeset
   112
      </div>
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 2
diff changeset
   113
    );
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 2
diff changeset
   114
  }
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
};
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
NotesList.propTypes = {
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
   118
  notes: PropTypes.array.isRequired
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
};
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 124
diff changeset
   121
export default NotesList;