From 1c2e09e9af2b67badb202c20a5a0acaf9dedf044 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Fri, 21 Apr 2017 13:02:27 +0300
Subject: [PATCH] creation of isolated note in miniEditor (WIP)

---
 app/components/SimpleEditor/Editor.js         |  2 +-
 app/components/SimpleEditor/config.js         |  2 +-
 .../SimpleEditor/elements/note/NoteCommand.js | 30 ++++++-------
 .../SimpleEditor/miniEditor/miniEditor.js     | 42 ++++++++++++++++++-
 .../SimpleEditor/panes/Notes/Notes.js         | 28 ++++++++-----
 .../SimpleEditor/panes/Notes/NotesProvider.js | 28 +++----------
 6 files changed, 81 insertions(+), 51 deletions(-)

diff --git a/app/components/SimpleEditor/Editor.js b/app/components/SimpleEditor/Editor.js
index 5af3e2e..e5a43a5 100644
--- a/app/components/SimpleEditor/Editor.js
+++ b/app/components/SimpleEditor/Editor.js
@@ -71,7 +71,7 @@ class Editor extends ProseEditor {
     let ContextMenu = this.componentRegistry.get('context-menu') // new what does it do?
     // let Dropzones = this.componentRegistry.get('dropzones') // new what does it do?
 
-    const footerNotes = $$(Notes)
+    const footerNotes = $$(Notes).ref('footer-notes')
 
     const props = {
       book: this.props.book,
diff --git a/app/components/SimpleEditor/config.js b/app/components/SimpleEditor/config.js
index 7d12ff7..bceffa5 100644
--- a/app/components/SimpleEditor/config.js
+++ b/app/components/SimpleEditor/config.js
@@ -59,7 +59,7 @@ const config = {
     config.import(SourceNotePackage)
     config.import(SpellCheckPackage)
     config.import(TrackChangePackage)
-    config.import(IsolatedNotePackage)
+    // config.import(IsolatedNotePackage)
   }
 }
 
diff --git a/app/components/SimpleEditor/elements/note/NoteCommand.js b/app/components/SimpleEditor/elements/note/NoteCommand.js
index 88f7bd9..c29dfbf 100644
--- a/app/components/SimpleEditor/elements/note/NoteCommand.js
+++ b/app/components/SimpleEditor/elements/note/NoteCommand.js
@@ -1,4 +1,4 @@
-import { InsertInlineNodeCommand, documentHelpers } from 'substance'
+import { InsertInlineNodeCommand } from 'substance'
 
 class NoteCommand extends InsertInlineNodeCommand {
   createNodeData () {
@@ -14,22 +14,22 @@ class NoteCommand extends InsertInlineNodeCommand {
       return tx.insertInlineNode(nodeData)
     })
 
-    let selection = editorSession.getSelection()
-    let selectionBefore = selection._clone()
-    selectionBefore.start.offset -= 1
-    let note = this.getCreatedNote(selectionBefore, editorSession)
-    const notesProvider = this.getNotesProvider(params)
-    notesProvider.createIsolatedNote(note)
+    // let selection = editorSession.getSelection()
+    // let selectionBefore = selection._clone()
+    // selectionBefore.start.offset -= 1
+    // let note = this.getCreatedNote(selectionBefore, editorSession)
+    // const notesProvider = this.getNotesProvider(params)
+    // notesProvider.createIsolatedNote(note)
   }
 
-  getCreatedNote (selection, editorSession) {
-    const note = documentHelpers.getPropertyAnnotationsForSelection(
-      editorSession.getDocument(),
-      selection,
-      { type: 'note' }
-    )
-    return note[0]
-  }
+  // getCreatedNote (selection, editorSession) {
+  //   const note = documentHelpers.getPropertyAnnotationsForSelection(
+  //     editorSession.getDocument(),
+  //     selection,
+  //     { type: 'note' }
+  //   )
+  //   return note[0]
+  // }
 
   getNotesProvider (params) {
     return params.surface.context.notesProvider
diff --git a/app/components/SimpleEditor/miniEditor/miniEditor.js b/app/components/SimpleEditor/miniEditor/miniEditor.js
index 788f1f1..e68daee 100644
--- a/app/components/SimpleEditor/miniEditor/miniEditor.js
+++ b/app/components/SimpleEditor/miniEditor/miniEditor.js
@@ -10,9 +10,11 @@ import TrackChangesProvider from '../elements/track_change/TrackChangesProvider'
 class MiniEditor extends ProseEditor {
 
   didMount () {
-    this.context.notesProvider.config.miniEditorContext = this.getChildContext()
-    this.context.notesProvider.config.miniEditorSession = this.editorSession
+    const provider = this.getProvider()
+    provider.config.miniEditorContext = this.getChildContext()
+    provider.config.miniEditorSession = this.editorSession
     this.on('noteSelected', this.scrollTo, this)
+    this.on('notes:updated', this.createNotes, this)
   }
 
   render ($$) {
@@ -81,6 +83,42 @@ class MiniEditor extends ProseEditor {
     this.refs.miniEditorContentPanel.scrollTo(nodeId)
   }
 
+  createNodeData (note, index) {
+    return {
+      'type': 'isolated-note',
+      'content': '',
+      'parentNoteId': note.id,
+      index: index
+    }
+  }
+
+  createNotes () {
+    const provider = this.getProvider()
+    const notes = provider.computeEntries()
+    console.log('notes Created', notes)
+    const surface = this.getSurface()
+    const container = surface.getContainer()
+    for (let i = 0; i < notes.length; i++) {
+      let nodeData = this.createNodeData(notes[i], i)
+      this.editorSession.transaction(function (tx) {
+        if (!tx.get(nodeData.id)) {
+          let blockNode = tx.create(nodeData)
+          tx.update(container.getContentPath(), { type: 'insert', pos: i, value: blockNode.id })
+        }
+      })
+    }
+  }
+
+  getProvider () {
+    return this.context.notesProvider
+  }
+
+  getSurface () {
+    const containerId = this.props.containerId
+    const provider = this.getProvider()
+    return provider.config.miniEditorContext.surfaceManager.getSurface(containerId)
+  }
+
   getChildContext () {
     const oldContext = super.getChildContext()
     const doc = this.doc
diff --git a/app/components/SimpleEditor/panes/Notes/Notes.js b/app/components/SimpleEditor/panes/Notes/Notes.js
index f254738..275c28c 100644
--- a/app/components/SimpleEditor/panes/Notes/Notes.js
+++ b/app/components/SimpleEditor/panes/Notes/Notes.js
@@ -17,8 +17,8 @@ class Notes extends Component {
 
   didMount () {
     const provider = this.getProvider()
+    // provider.config.miniEditorSession.onUpdate('', this.saveNotes, this)
     this.context.editorSession.onUpdate('document', this.onNotesUpdated, this)
-    provider.config.miniEditorSession.onUpdate('', this.saveNotes, this)
   }
 
   initResize (e) {
@@ -75,8 +75,8 @@ class Notes extends Component {
     const notes = provider.computeEntries()
     let noteContent = ''
 
-    for (var i = 0; i < notes.main.length; i++) {
-      noteContent += notes.main[i]['note-content']
+    for (var i = 0; i < notes.length; i++) {
+      noteContent += notes[i]['note-content']
     }
 
     const doc = importer.importDocument(noteContent)
@@ -95,7 +95,7 @@ class Notes extends Component {
     const surface = this.getSurface()
     // For some reason the first character is not in the annotation so it is not getting saved
     // so we rerender the Surface
-    surface.rerender()
+    // surface.rerender()
     const notes = provider.computeEntries()
     const configurator = new Configurator().import(config)
     const exporter = new SimpleExporter(configurator.config)
@@ -125,6 +125,20 @@ class Notes extends Component {
     return provider.config.miniEditorContext.surfaceManager.getSurface('mini')
   }
 
+  getMiniEditor () {
+    const provider = this.getProvider()
+    return provider.config.miniEditorContext.editor
+  }
+
+  onNotesUpdated (change) {
+    const notesProvider = this.getProvider()
+    notesProvider.handleDocumentChange(change)
+    console.log('change', change)
+    const miniEditor = this.getMiniEditor()
+    miniEditor.emit('notes:updated')
+    // this.el.el.style.height = '95px'
+  }
+
   getParentProps () {
     return {
       comments: this.context.commentsProvider.config.comments,
@@ -138,12 +152,6 @@ class Notes extends Component {
     }
   }
 
-  onNotesUpdated (change) {
-    const notesProvider = this.getProvider()
-    notesProvider.handleDocumentChange(change)
-    // this.el.el.style.height = '95px'
-  }
-
   dispose () {
     const provider = this.getProvider()
     provider.off(this)
diff --git a/app/components/SimpleEditor/panes/Notes/NotesProvider.js b/app/components/SimpleEditor/panes/Notes/NotesProvider.js
index 1697133..9782f1a 100644
--- a/app/components/SimpleEditor/panes/Notes/NotesProvider.js
+++ b/app/components/SimpleEditor/panes/Notes/NotesProvider.js
@@ -4,36 +4,20 @@ import { TOCProvider } from 'substance'
 
 class NotesProvider extends TOCProvider {
   computeEntries () {
-    const docMain = this.getDocument()
-    const nodesMain = docMain.getNodes()
-
-    const docMini = this.config.miniEditorSession.document
-    let nodesMini = ''
-    if (docMini) nodesMini = docMini.getNodes()
+    console.log('compute')
+    const doc = this.getDocument()
+    const nodes = doc.getNodes()
 
     if (docMini)console.log('paragraphs', nodesMini)
 
     // get all notes from the document
-    const notesMain = _.pickBy(nodesMain, function (value, key) {
+    const noteNodes = _.pickBy(nodes, function (value, key) {
       return value.type === 'note'
     })
-    const notesMini = _.pickBy(nodesMini, function (value, key) {
-      return value.type === 'isolated-note'
-    })
-
-    const entriesMain = this.sortNodes(notesMain)
-    const entriesMini = _.values(notesMini)
 
-    const entries = {
-      main: entriesMain,
-      mini: entriesMini
-    }
-
-    if (entriesMini && entriesMain.length < entriesMini.length) {
-      this.findDeletedNote(entries)
-    }
+    const sortedNoteEntries = this.sortNodes(noteNodes)
 
-    return entries
+    return sortedNoteEntries
   }
 
   sortNodes (nodes) {
-- 
GitLab