Chromium Code Reviews| 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 db9be760dc3f49e1e70c3de0f2d3d15d46e264e4..929e96600701554a68a5f4f4c24695c475e13f14 100644 |
| --- a/chrome/browser/resources/md_bookmarks/reducers.js |
| +++ b/chrome/browser/resources/md_bookmarks/reducers.js |
| @@ -44,6 +44,18 @@ cr.define('bookmarks', function() { |
| }; |
| /** |
| + * @param {SelectionState} selectionState |
| + * @param {!Set<string>} deleted |
| + * @return SelectionState |
| + */ |
| + SelectionState.deselectDeletedItems = function(selectionState, deleted) { |
| + return /** @type {SelectionState} */ Object.assign({}, selectionState, { |
| + items: bookmarks.util.removeNodesFromMap(selectionState.items, deleted), |
|
calamity
2017/04/03 06:54:24
When this turns into a Set, this won't work anymor
tsergeant
2017/04/04 04:42:27
I've rebased onto your Map->Set CL, and added a ne
|
| + anchor: null, |
|
calamity
2017/04/03 06:54:24
nit: Ideally the anchor remains on the same item i
tsergeant
2017/04/04 04:42:27
My general feeling is that it's not really worth t
|
| + }); |
| + }; |
| + |
| + /** |
| * @param {SelectionState} selection |
| * @param {Action} action |
| * @return {SelectionState} |
| @@ -56,8 +68,12 @@ cr.define('bookmarks', function() { |
| return SelectionState.deselectAll(selection); |
| case 'select-items': |
| return SelectionState.selectItems(selection, action); |
| + case 'remove-bookmark': |
| + return SelectionState.deselectDeletedItems( |
| + selection, action.descendants); |
| + default: |
| + return selection; |
| } |
| - return selection; |
| }; |
| var SearchState = {}; |
| @@ -98,6 +114,22 @@ cr.define('bookmarks', function() { |
| /** |
| * @param {SearchState} search |
| + * @param {!Set<string>} deletedIds |
| + * @return {SearchState} |
| + */ |
| + SearchState.removeDeletedResults = function(search, deletedIds) { |
| + var newResults = []; |
| + search.results.forEach(function(id) { |
| + if (!deletedIds.has(id)) |
| + newResults.push(id); |
| + }); |
| + return /** @type {SearchState} */ (Object.assign({}, search, { |
| + results: newResults, |
| + })); |
| + }; |
| + |
| + /** |
| + * @param {SearchState} search |
| * @param {Action} action |
| * @return {SearchState} |
| */ |
| @@ -110,6 +142,8 @@ cr.define('bookmarks', function() { |
| return SearchState.clearSearch(); |
| case 'finish-search': |
| return SearchState.finishSearch(search, action); |
| + case 'remove-bookmark': |
| + return SearchState.removeDeletedResults(search, action.descendants); |
| default: |
| return search; |
| } |
| @@ -151,12 +185,15 @@ cr.define('bookmarks', function() { |
| * @return {NodeList} |
| */ |
| NodeState.removeBookmark = function(nodes, action) { |
| - return NodeState.modifyNode_(nodes, action.parentId, function(node) { |
| - var newChildren = node.children.slice(); |
| - newChildren.splice(action.index, 1); |
| - return /** @type {BookmarkNode} */ ( |
| - Object.assign({}, node, {children: newChildren})); |
| - }); |
| + var newState = |
| + NodeState.modifyNode_(nodes, action.parentId, function(node) { |
| + var newChildren = node.children.slice(); |
| + newChildren.splice(action.index, 1); |
| + return /** @type {BookmarkNode} */ ( |
| + Object.assign({}, node, {children: newChildren})); |
| + }); |
| + |
| + return bookmarks.util.removeNodesFromMap(newState, action.descendants); |
| }; |
| /** |
| @@ -238,10 +275,9 @@ cr.define('bookmarks', function() { |
| */ |
| SelectedFolderState.updateSelectedFolder = function( |
| selectedFolder, action, nodes) { |
| - // TODO(tsergeant): It should not be possible to select a non-folder. |
| - // TODO(tsergeant): Select parent folder when selected folder is deleted. |
| switch (action.name) { |
| case 'select-folder': |
| + // TODO(tsergeant): It should not be possible to select a non-folder. |
| return action.id; |
| case 'change-folder-open': |
| // When hiding the selected folder by closing its ancestor, select |
| @@ -258,6 +294,13 @@ cr.define('bookmarks', function() { |
| // TODO(tsergeant): Return to the folder that was selected before the |
| // search. |
| return nodes['0'].children[0]; |
| + case 'remove-bookmark': |
| + // When deleting the selected folder (or its ancestor), select the |
| + // parent of the deleted node. |
| + if (selectedFolder && |
| + SelectedFolderState.isAncestorOf(nodes, action.id, selectedFolder)) |
| + return assert(nodes[action.id].parentId); |
| + return selectedFolder; |
| default: |
| return selectedFolder; |
| } |
| @@ -318,6 +361,9 @@ cr.define('bookmarks', function() { |
| return ClosedFolderState.openFolderAndAncestors( |
| closedFolders, action.parentId, nodes); |
| + case 'remove-bookmark': |
| + return bookmarks.util.removeNodesFromMap( |
| + closedFolders, action.descendants); |
| default: |
| return closedFolders; |
| }; |