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

Side by Side Diff: chrome/browser/resources/md_bookmarks/reducers.js

Issue 2888863002: [MD Bookmarks] Refine mouse selection (Closed)
Patch Set: address comments Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Module of functions which produce a new page state in response 6 * @fileoverview Module of functions which produce a new page state in response
7 * to an action. Reducers (in the same sense as Array.prototype.reduce) must be 7 * to an action. Reducers (in the same sense as Array.prototype.reduce) must be
8 * pure functions: they must not modify existing state objects, or make any API 8 * pure functions: they must not modify existing state objects, or make any API
9 * calls. 9 * calls.
10 */ 10 */
11 11
12 cr.define('bookmarks', function() { 12 cr.define('bookmarks', function() {
13 var SelectionState = {}; 13 var SelectionState = {};
14 14
15 /** 15 /**
16 * @param {SelectionState} selectionState 16 * @param {SelectionState} selectionState
17 * @param {Action} action 17 * @param {Action} action
18 * @return {SelectionState} 18 * @return {SelectionState}
19 */ 19 */
20 SelectionState.selectItems = function(selectionState, action) { 20 SelectionState.selectItems = function(selectionState, action) {
21 var newItems = new Set(); 21 var newItems = new Set();
22 if (action.add) 22 if (!action.clear)
23 newItems = new Set(selectionState.items); 23 newItems = new Set(selectionState.items);
24 24
25 action.items.forEach(function(id) { 25 action.items.forEach(function(id) {
26 newItems.add(id); 26 var add = true;
27 if (action.toggle)
28 add = !newItems.has(id);
29
30 if (add)
31 newItems.add(id);
32 else
33 newItems.delete(id);
27 }); 34 });
28 35
29 return /** @type {SelectionState} */ (Object.assign({}, selectionState, { 36 return /** @type {SelectionState} */ (Object.assign({}, selectionState, {
30 items: newItems, 37 items: newItems,
31 anchor: action.anchor, 38 anchor: action.anchor,
32 })); 39 }));
33 }; 40 };
34 41
35 /** 42 /**
36 * @param {SelectionState} selectionState 43 * @param {SelectionState} selectionState
37 * @return {SelectionState} 44 * @return {SelectionState}
38 */ 45 */
39 SelectionState.deselectAll = function(selectionState) { 46 SelectionState.deselectAll = function(selectionState) {
40 return { 47 return {
41 items: new Set(), 48 items: new Set(),
42 anchor: null, 49 anchor: null,
43 }; 50 };
44 }; 51 };
45 52
46 /** 53 /**
47 * @param {SelectionState} selectionState 54 * @param {SelectionState} selectionState
48 * @param {!Set<string>} deleted 55 * @param {!Set<string>} deleted
49 * @return SelectionState 56 * @return SelectionState
50 */ 57 */
51 SelectionState.deselectDeletedItems = function(selectionState, deleted) { 58 SelectionState.deselectDeletedItems = function(selectionState, deleted) {
52 return /** @type {SelectionState} */ Object.assign({}, selectionState, { 59 return /** @type {SelectionState} */ Object.assign({}, selectionState, {
53 items: bookmarks.util.removeIdsFromSet(selectionState.items, deleted), 60 items: bookmarks.util.removeIdsFromSet(selectionState.items, deleted),
54 anchor: null, 61 anchor: !selectionState.anchor || deleted.has(selectionState.anchor) ?
62 null :
63 selectionState.anchor,
55 }); 64 });
56 }; 65 };
57 66
58 /** 67 /**
59 * @param {SelectionState} selection 68 * @param {SelectionState} selection
60 * @param {Action} action 69 * @param {Action} action
61 * @return {SelectionState} 70 * @return {SelectionState}
62 */ 71 */
63 SelectionState.updateSelection = function(selection, action) { 72 SelectionState.updateSelection = function(selection, action) {
64 switch (action.name) { 73 switch (action.name) {
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 431
423 return { 432 return {
424 reduceAction: reduceAction, 433 reduceAction: reduceAction,
425 ClosedFolderState: ClosedFolderState, 434 ClosedFolderState: ClosedFolderState,
426 NodeState: NodeState, 435 NodeState: NodeState,
427 SearchState: SearchState, 436 SearchState: SearchState,
428 SelectedFolderState: SelectedFolderState, 437 SelectedFolderState: SelectedFolderState,
429 SelectionState: SelectionState, 438 SelectionState: SelectionState,
430 }; 439 };
431 }); 440 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/md_bookmarks/item.js ('k') | chrome/test/data/webui/md_bookmarks/actions_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698