client/src/components/NoteInput.js
author ymh <ymh.work@gmail.com>
Thu, 08 Nov 2018 16:03:28 +0100
changeset 171 03334a31130a
parent 161 a642639dbc07
child 173 0e6703cd0968
permissions -rw-r--r--
Add translation with react-i18next
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
4cfeabef7d5e Store data in PouchDB.
Alexandre Segura <mex.zktk@gmail.com>
parents: 26
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';
5
5c91bfa8fcde Introduce SlateJS.
Alexandre Segura <mex.zktk@gmail.com>
parents: 2
diff changeset
     3
import SlateEditor from './SlateEditor';
74
043477fd5c5c add api call to save notes. internally use ts for time data for notes and session
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
     4
import { now } from '../utils';
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 157
diff changeset
     5
import './NoteInput.css';
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
class NoteInput extends Component {
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
     9
  constructor(props) {
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    10
    super(props);
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    11
    this.editorInst = React.createRef();
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    12
  }
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    13
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    14
  get editor() {
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    15
    return this.editorInst.current;
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    16
  }
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 8
diff changeset
    17
  state = {
16
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    18
    buttonDisabled: false,
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    19
    startedAt: null,
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    20
    finishedAt: null,
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 8
diff changeset
    21
  }
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
16
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    23
  onEditorChange = (e) => {
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    24
    this.setState({
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    25
      buttonDisabled: e.value.document === 0,
16
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    26
      startedAt: e.startedAt,
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    27
      finishedAt: e.finishedAt
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    28
    });
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
  }
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 8
diff changeset
    31
  onAddNoteClick = () => {
72
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    32
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    33
    const plain = this.editor.asPlain();
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    34
    const raw = this.editor.asRaw();
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    35
    const html = this.editor.asHtml();
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    36
    const categories = this.editor.asCategories();
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    37
    // const marginComment = this.marginComment.value;
15
4a8bbd314a46 Store note JSON data.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
    38
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
    39
    this.props.addNote(this.props.session, {
15
4a8bbd314a46 Store note JSON data.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
    40
      plain: plain,
16
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    41
      raw: raw,
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents: 16
diff changeset
    42
      html: html,
16
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    43
      startedAt: this.state.startedAt,
74
043477fd5c5c add api call to save notes. internally use ts for time data for notes and session
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    44
      finishedAt: now(),
26
930e486ad0a8 Store categories in note.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    45
      categories: categories,
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 157
diff changeset
    46
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    47
      // marginComment: marginComment,
15
4a8bbd314a46 Store note JSON data.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
    48
    });
4a8bbd314a46 Store note JSON data.
Alexandre Segura <mex.zktk@gmail.com>
parents: 12
diff changeset
    49
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 157
diff changeset
    50
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    51
    this.editor.clear();
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    52
    setTimeout(() => this.editor.focus(), 250);
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
  }
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
72
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    55
  onCheckboxChange = (e) => {
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
    56
    this.props.setAutoSubmit(e.target.checked);
72
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    57
  }
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    58
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 8
diff changeset
    59
  componentDidMount() {
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    60
    if(this.editor) {
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    61
      const text = this.editor.asPlain();
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    62
      this.setState({ buttonDisabled: text.length === 0 });
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    63
    }
16
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    64
  }
e67cd18cc594 Draft implementation of note timing.
Alexandre Segura <mex.zktk@gmail.com>
parents: 15
diff changeset
    65
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
  render() {
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    return (
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    68
      <form>
161
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 157
diff changeset
    69
        <div className="editor mb-3">
a642639dbc07 Split scss files and adapt session page design
salimr <riwad.salim@yahoo.fr>
parents: 157
diff changeset
    70
          <div className="editor-left sticky-bottom px-2">
171
03334a31130a Add translation with react-i18next
ymh <ymh.work@gmail.com>
parents: 161
diff changeset
    71
            <SlateEditor editorRef={this.editorInst}
72
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    72
              onChange={this.onEditorChange}
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    73
              onEnterKeyDown={this.onAddNoteClick}
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    74
              onButtonClick={this.onAddNoteClick}
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    75
              onCheckboxChange={this.onCheckboxChange}
7634b424f426 Add checkbox to add not on enter key.
Alexandre Segura <mex.zktk@gmail.com>
parents: 64
diff changeset
    76
              isChecked={this.props.autoSubmit}
138
a1fb2ced3049 propagate annotations categories from session protocol definition
ymh <ymh.work@gmail.com>
parents: 125
diff changeset
    77
              isButtonDisabled={this.state.buttonDisabled}
a1fb2ced3049 propagate annotations categories from session protocol definition
ymh <ymh.work@gmail.com>
parents: 125
diff changeset
    78
              annotationCategories={ this.props.annotationCategories } />
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    79
12
48ddaa42b810 Draft implementation of sessions.
Alexandre Segura <mex.zktk@gmail.com>
parents: 8
diff changeset
    80
          </div>
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    81
          {/* <div className="editor-right w-25 pl-2 border-0 sticky-bottom">
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    82
            <input type="textarea" className="form-control h-100"
35
97106bacb24e Improve session page design.
Alexandre Segura <mex.zktk@gmail.com>
parents: 29
diff changeset
    83
              name="margin"
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    84
              placeholder="Espace de commentaire pour votre note"
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    85
              // inputRef={ ref => { this.marginComment = ref; } }
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    86
              ref={(marginComment) => { this.marginComment = marginComment; }}
35
97106bacb24e Improve session page design.
Alexandre Segura <mex.zktk@gmail.com>
parents: 29
diff changeset
    87
            />
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 143
diff changeset
    88
          </div> */}
35
97106bacb24e Improve session page design.
Alexandre Segura <mex.zktk@gmail.com>
parents: 29
diff changeset
    89
        </div>
143
cfcbf4bc66f1 Remove react-bootstrap from components except Modal, Collapse and Dropdown
salimr <riwad.salim@yahoo.fr>
parents: 138
diff changeset
    90
      </form>
1
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    );
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
  }
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
}
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
NoteInput.propTypes = {
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
  addNote: PropTypes.func.isRequired
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
};
431977d7c9a6 add first react application skeleton
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
125
c653f49fabfb remove unecessary dependencies to Redux
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
    99
export default NoteInput;