From 4650efdafb4213141a8dff3960c8b01f624e4c1b Mon Sep 17 00:00:00 2001
From: john <johnbarlas39@gmail.com>
Date: Wed, 11 Jan 2017 21:36:15 +0200
Subject: [PATCH] author cannot toggle track changes

---
 .../track_change/TrackChangeComponent.js      | 23 +++++++++++++++---
 .../track_change/TrackChangeControlCommand.js |  2 +-
 .../track_change/TrackChangeControlTool.js    | 13 ++++++++++
 .../track_change/TrackChangePackage.js        |  5 ++--
 .../track_change/TrackChangesProvider.js      | 16 +++++++++----
 .../elements/track_change/trackChange.scss    | 24 +++++++++++--------
 6 files changed, 63 insertions(+), 20 deletions(-)

diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js b/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js
index 763c6fa..605a73b 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js
@@ -3,7 +3,8 @@ import { AnnotationComponent } from 'substance'
 class TrackChangeComponent extends AnnotationComponent {
   render ($$) {
     const { id, status } = this.props.node
-    const trackChangesView = this.context.controller.state.trackChangesView
+    const canAct = this.canAct()
+    const viewMode = this.getViewMode()
 
     const accept = $$('a')
       .addClass('sc-track-item-accept')
@@ -26,11 +27,12 @@ class TrackChangeComponent extends AnnotationComponent {
       .attr('data-id', id)
       .addClass(this.getClassNames())
       .append(this.props.children)
-      .append(container)
+
+    if (canAct) el.append(container)
 
     el.addClass('sc-track-change-' + status)
 
-    if (trackChangesView === false) {
+    if (viewMode === false) {
       if (status === 'delete') el.addClass('sc-track-delete-hide')
       if (status === 'add') el.addClass('sc-track-add-show')
     }
@@ -41,6 +43,11 @@ class TrackChangeComponent extends AnnotationComponent {
     return el
   }
 
+  canAct () {
+    const provider = this.getProvider()
+    return provider.canAct()
+  }
+
   accept () {
     this.resolve('accept')
   }
@@ -56,10 +63,20 @@ class TrackChangeComponent extends AnnotationComponent {
     provider.resolve(annotation, action)
   }
 
+  getController () {
+    return this.context.controller
+  }
+
   getProvider () {
     return this.context.trackChangesProvider
   }
 
+  getViewMode () {
+    const controller = this.getController()
+    const { trackChangesView } = controller.state
+    return trackChangesView
+  }
+
 }
 
 export default TrackChangeComponent
diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js b/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js
index fb48eb0..a955efb 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js
@@ -9,8 +9,8 @@ class TrackChangeControlCommand extends Command {
 
     return newState
   }
+
   execute (params, context) {
-    console.log('in execute')
     const surface = context.surfaceManager.getSurface('body')
     surface.send('trackChangesUpdate')
     return true
diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js b/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js
index e12deb6..b594f52 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js
@@ -3,8 +3,14 @@ import { Tool } from 'substance'
 class TrackChangeControlTool extends Tool {
   renderButton ($$) {
     const el = super.renderButton($$)
+
     let trackChangesMode = this.isTrackChangesOn()
     if (trackChangesMode === true) el.addClass('track-changes-active')
+
+    if (!this.canAct()) {
+      console.log('deffo not')
+      el.attr('disabled', true)
+    }
     return el
   }
 
@@ -19,6 +25,13 @@ class TrackChangeControlTool extends Tool {
     if (!surface) return
     return surface.props.trackChanges
   }
+
+  canAct () {
+    console.log('can act?')
+    const provider = this.context.trackChangesProvider
+    console.log(provider.canAct())
+    return provider.canAct()
+  }
 }
 
 TrackChangeControlTool.type = 'track-change-enable'
diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js b/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js
index 1b79646..1be7351 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js
@@ -15,11 +15,12 @@ export default {
     config.addComponent(TrackChange.type, TrackChangeComponent)
     config.addConverter('html', TrackChangeHTMLConverter)
 
-    config.addTool('track-change-enable', TrackChangeControlTool, {
+    // TODO -- both tools should go to the same target
+    config.addTool('Toggle recording changes', TrackChangeControlTool, {
       target: 'track-change-enable'
     })
 
-    config.addTool('track-change-toggle-view', TrackChangeControlViewTool, {
+    config.addTool('Toggle tracked changes view', TrackChangeControlViewTool, {
       target: 'track-change-toggle-view'
     })
 
diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js
index 4ab5116..4237c39 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js
@@ -4,12 +4,14 @@ import {
   filter,
   find,
   findIndex,
+  includes,
   keys,
   last,
   map,
   maxBy,
   minBy,
   pickBy,
+  some,
   sortBy
 } from 'lodash'
 
@@ -546,14 +548,14 @@ class TrackChangesProvider extends TOCProvider {
   }
 
   computeEntries () {
-    let doc = this.getDocument()
-    let nodes = doc.getNodes()
+    const doc = this.getDocument()
+    const nodes = doc.getNodes()
 
-    let changes = pickBy(nodes, node => {
+    const changes = pickBy(nodes, node => {
       return node.type === 'track-change'
     })
 
-    let entries = this.sortNodes(changes)
+    const entries = this.sortNodes(changes)
     return entries
   }
 
@@ -606,6 +608,12 @@ class TrackChangesProvider extends TOCProvider {
     surface.setSelection(annotation.getSelection())
   }
 
+  canAct () {
+    const { user } = this.config
+    const accepted = ['admin', 'production-editor', 'copy-editor']
+    return some(accepted, (role) => includes(user.roles, role))
+  }
+
   /*
 
     ANNOTATION HELPERS
diff --git a/app/components/SimpleEditor/elements/track_change/trackChange.scss b/app/components/SimpleEditor/elements/track_change/trackChange.scss
index d135232..ed46fc3 100644
--- a/app/components/SimpleEditor/elements/track_change/trackChange.scss
+++ b/app/components/SimpleEditor/elements/track_change/trackChange.scss
@@ -2,16 +2,12 @@ $blue: #4a90e2;
 $red: #f00;
 $yellow: #f7f70c;
 
-
-  .se-selection-fragment {
-     .sc-accept-reject-container:only-of-type  {
-         display: none;
-    }
+.se-selection-fragment {
+  .sc-accept-reject-container:only-of-type {
+    display: none;
+  }
 }
 
-
-
-
 .sc-track-change-add {
   color: $blue;
   text-decoration: none;
@@ -30,8 +26,8 @@ $yellow: #f7f70c;
   color: inherit !important;
 
   .sc-accept-reject-container {
-  display: none;
-}
+    display: none;
+  }
 }
 
 .sc-track-item-accept::after {
@@ -66,3 +62,11 @@ $yellow: #f7f70c;
   margin-top: 20px;
   position: absolute;
 }
+
+.sm-target-track-change-enable {
+  .se-tool {
+    button {
+      cursor: default;
+    }
+  }
+}
-- 
GitLab