Breadcrumbs React port: refactor clone-doc action

 - use helper function for docId sanitizing
 - move clone-doc-action out of route ofbject
 - delete route-event `duplicateDoc`
 - fix issue where breadcrumb header was not updating after clone

PR: #732
PR-URL: https://github.com/apache/couchdb-fauxton/pull/732
Reviewed-By: garren smith <garren.sm...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/commit/50e08c89
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/tree/50e08c89
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/diff/50e08c89

Branch: refs/heads/master
Commit: 50e08c899b574d22784392755814284341936a48
Parents: de9b12b
Author: Robert Kowalski <r...@kowalski.gd>
Authored: Tue Jun 21 14:14:18 2016 +0200
Committer: Robert Kowalski <robertkowal...@apache.org>
Committed: Mon Jul 4 15:25:28 2016 +0200

----------------------------------------------------------------------
 app/addons/documents/doc-editor/actions.js      | 27 +++++++++++++----
 .../documents/doc-editor/components.react.jsx   | 12 ++++++--
 app/addons/documents/routes-doc-editor.js       | 31 +-------------------
 .../documents/tests/nightwatch/cloneDoc.js      |  1 -
 4 files changed, 31 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/50e08c89/app/addons/documents/doc-editor/actions.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/doc-editor/actions.js 
b/app/addons/documents/doc-editor/actions.js
index ed00f94..9b6a1fc 100644
--- a/app/addons/documents/doc-editor/actions.js
+++ b/app/addons/documents/doc-editor/actions.js
@@ -112,13 +112,28 @@ function hideCloneDocModal () {
   FauxtonAPI.dispatch({ type: ActionTypes.HIDE_CLONE_DOC_MODAL });
 }
 
-function cloneDoc (newId) {
-  var isDDoc = newId.match(/^_design\//),
-    removeDDocID = newId.replace(/^_design\//, ''),
-    encodedID = isDDoc ? '_design/' + app.utils.safeURLName(removeDDocID) : 
app.utils.safeURLName(newId);
+function cloneDoc (database, doc, newId) {
+  const docId = app.utils.getSafeIdForDoc(newId);
+
+  hideCloneDocModal();
+
+  doc.copy(docId).then(() => {
+    doc.set({ _id: docId });
+
+    FauxtonAPI.navigate('/database/' + database.safeID() + '/' + docId, { 
trigger: true });
+
+    FauxtonAPI.addNotification({
+      msg: 'Document has been duplicated.'
+    });
+
+  }, (error) => {
+    const errorMsg = `Could not duplicate document, reason: 
${error.responseText}.`;
+    FauxtonAPI.addNotification({
+      msg: errorMsg,
+      type: 'error'
+    });
+  });
 
-  this.hideCloneDocModal();
-  FauxtonAPI.triggerRouteEvent('duplicateDoc', encodedID);
 }
 
 function showUploadModal () {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/50e08c89/app/addons/documents/doc-editor/components.react.jsx
----------------------------------------------------------------------
diff --git a/app/addons/documents/doc-editor/components.react.jsx 
b/app/addons/documents/doc-editor/components.react.jsx
index c2a7f15..7c53dd6 100644
--- a/app/addons/documents/doc-editor/components.react.jsx
+++ b/app/addons/documents/doc-editor/components.react.jsx
@@ -190,6 +190,8 @@ var DocEditorController = React.createClass({
           visible={this.state.uploadModalVisible}
           doc={this.state.doc} />
         <CloneDocModal
+          doc={this.state.doc}
+          database={this.props.database}
           visible={this.state.cloneDocModalVisible}
           onSubmit={this.clearChanges} />
         <FauxtonComponents.ConfirmationModal
@@ -369,9 +371,12 @@ var UploadModal = React.createClass({
 });
 
 
-var CloneDocModal = React.createClass({
+const CloneDocModal = React.createClass({
   propTypes: {
-    visible: React.PropTypes.bool.isRequired
+    visible: React.PropTypes.bool.isRequired,
+    doc: React.PropTypes.object,
+    database: React.PropTypes.object.isRequired,
+    onSubmit: React.PropTypes.func.isRequired
   },
 
   getInitialState: function () {
@@ -384,7 +389,8 @@ var CloneDocModal = React.createClass({
     if (this.props.onSubmit) {
       this.props.onSubmit();
     }
-    Actions.cloneDoc(this.state.uuid);
+
+    Actions.cloneDoc(this.props.database, this.props.doc, this.state.uuid);
   },
 
   componentDidUpdate: function () {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/50e08c89/app/addons/documents/routes-doc-editor.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/routes-doc-editor.js 
b/app/addons/documents/routes-doc-editor.js
index c830ec9..0600105 100644
--- a/app/addons/documents/routes-doc-editor.js
+++ b/app/addons/documents/routes-doc-editor.js
@@ -40,7 +40,7 @@ const RevBrowserRouteObject = FauxtonAPI.RouteObject.extend({
   },
 
   crumbs: function () {
-    const previousPage = Helpers.getPreviousPageForDoc(this.database, 
this.wasCloned);
+    const previousPage = Helpers.getPreviousPageForDoc(this.database);
     const docUrl = FauxtonAPI.urls('document', 'app', this.database.safeID(), 
this.docId);
 
     return [
@@ -83,10 +83,6 @@ const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({
     'database/:database/new': 'codeEditor'
   },
 
-  events: {
-    'route:duplicateDoc': 'duplicateDoc'
-  },
-
   crumbs: function () {
 
     if (this.docId) {
@@ -124,31 +120,6 @@ const DocEditorRouteObject = 
FauxtonAPI.RouteObject.extend({
     this.codeEditor(database, '_design/' + ddoc);
   },
 
-  duplicateDoc: function (newId) {
-    var doc = this.doc,
-        database = this.database;
-
-    this.docID = newId;
-
-    var that = this;
-    doc.copy(newId).then(function () {
-      doc.set({ _id: newId });
-      that.wasCloned = true;
-
-      FauxtonAPI.navigate('/database/' + database.safeID() + '/' + 
app.utils.safeURLName(newId), { trigger: true });
-      FauxtonAPI.addNotification({
-        msg: 'Document has been duplicated.'
-      });
-
-    }, function (error) {
-      var errorMsg = 'Could not duplicate document, reason: ' + 
error.responseText + '.';
-      FauxtonAPI.addNotification({
-        msg: errorMsg,
-        type: 'error'
-      });
-    });
-  },
-
   apiUrl: function () {
     return [this.doc.url('apiurl'), this.doc.documentation()];
   }

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/50e08c89/app/addons/documents/tests/nightwatch/cloneDoc.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/tests/nightwatch/cloneDoc.js 
b/app/addons/documents/tests/nightwatch/cloneDoc.js
index 70988db..7932ac4 100644
--- a/app/addons/documents/tests/nightwatch/cloneDoc.js
+++ b/app/addons/documents/tests/nightwatch/cloneDoc.js
@@ -38,7 +38,6 @@ module.exports = {
       .closeNotification()
 
       .waitForAttribute('.faux-header__breadcrumbs 
.faux-header__breadcrumbs-element:last-child', 'textContent', function 
(docContents) {
-        console.log(docContents);
         return 'ente' === docContents.trim();
       })
 

Reply via email to