Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4003)

Unified Diff: chrome/browser/resources/md_bookmarks/reducers.js

Issue 2750463010: [MD Bookmarks] Handle bookmark moves. (Closed)
Patch Set: remove log Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/md_bookmarks/reducers.js
diff --git a/chrome/browser/resources/md_bookmarks/reducers.js b/chrome/browser/resources/md_bookmarks/reducers.js
index 901203cd1609bdc9d807cbc6942e20b65c75b8f9..06eb94f0adbd863ef1b9799c36f5a094e8fe7c81 100644
--- a/chrome/browser/resources/md_bookmarks/reducers.js
+++ b/chrome/browser/resources/md_bookmarks/reducers.js
@@ -164,12 +164,46 @@ cr.define('bookmarks', function() {
* @param {Action} action
* @return {NodeList}
*/
+ NodeState.moveBookmark = function(nodes, action) {
+ var nodeModifications = {};
+ var id = action.id;
+
+ // Change node's parent.
+ nodeModifications[id] =
+ Object.assign({}, nodes[id], {parentId: action.parentId});
+
+ // Remove from old parent.
+ var oldParentId = action.oldParentId;
+ var oldParentChildren = nodes[oldParentId].children.slice();
+ oldParentChildren.splice(action.oldIndex, 1);
+ nodeModifications[oldParentId] =
+ Object.assign({}, nodes[oldParentId], {children: oldParentChildren});
+
+ // Add to new parent.
+ var parentId = action.parentId;
+ var parentChildren = oldParentId == parentId ?
+ oldParentChildren :
+ nodes[parentId].children.slice();
+ parentChildren.splice(action.index, 0, action.id);
+ nodeModifications[parentId] =
+ Object.assign({}, nodes[parentId], {children: parentChildren});
+
+ return Object.assign({}, nodes, nodeModifications);
+ };
+
+ /**
+ * @param {NodeList} nodes
+ * @param {Action} action
+ * @return {NodeList}
+ */
NodeState.updateNodes = function(nodes, action) {
switch (action.name) {
case 'edit-bookmark':
return NodeState.editBookmark(nodes, action);
case 'remove-bookmark':
return NodeState.removeBookmark(nodes, action);
+ case 'move-bookmark':
+ return NodeState.moveBookmark(nodes, action);
case 'refresh-nodes':
return action.nodes;
default:
@@ -232,19 +266,19 @@ cr.define('bookmarks', function() {
/**
* @param {ClosedFolderState} closedFolders
- * @param {Action} action
+ * @param {string|undefined} id
* @param {NodeList} nodes
* @return {ClosedFolderState}
*/
- ClosedFolderState.openAncestorsOf = function(closedFolders, action, nodes) {
- var id = action.id;
+ ClosedFolderState.openFolderAndAncestors = function(
+ closedFolders, id, nodes) {
var modifications = {};
- var parentId = nodes[id].parentId;
- while (parentId) {
- if (closedFolders[parentId]) {
- modifications[parentId] = false;
+ var currentId = id;
+ while (currentId) {
+ if (closedFolders[currentId]) {
+ modifications[currentId] = false;
}
- parentId = nodes[parentId].parentId;
+ currentId = nodes[currentId].parentId;
}
return Object.assign({}, closedFolders, modifications);
@@ -275,7 +309,14 @@ cr.define('bookmarks', function() {
case 'change-folder-open':
return ClosedFolderState.changeFolderOpen(closedFolders, action);
case 'select-folder':
- return ClosedFolderState.openAncestorsOf(closedFolders, action, nodes);
+ return ClosedFolderState.openFolderAndAncestors(
+ closedFolders, nodes[action.id].parentId, nodes);
+ case 'move-bookmark':
+ if (!nodes[action.id].children)
+ return closedFolders;
+
+ return ClosedFolderState.openFolderAndAncestors(
+ closedFolders, action.parentId, nodes);
default:
return closedFolders;
};
« no previous file with comments | « chrome/browser/resources/md_bookmarks/api_listener.js ('k') | chrome/test/data/webui/md_bookmarks/reducers_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698