OLD | NEW |
---|---|
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 */ |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
157 return /** @type {BookmarkNode} */ ( | 157 return /** @type {BookmarkNode} */ ( |
158 Object.assign({}, node, {children: newChildren})); | 158 Object.assign({}, node, {children: newChildren})); |
159 }); | 159 }); |
160 }; | 160 }; |
161 | 161 |
162 /** | 162 /** |
163 * @param {NodeList} nodes | 163 * @param {NodeList} nodes |
164 * @param {Action} action | 164 * @param {Action} action |
165 * @return {NodeList} | 165 * @return {NodeList} |
166 */ | 166 */ |
167 NodeState.moveBookmark = function(nodes, action) { | |
168 var nodeModifications = {}; | |
169 var id = action.id; | |
170 | |
171 console.log(action.oldIndex + '=>' + action.index); | |
tsergeant
2017/03/17 02:55:19
console.log('probably should remove this')
| |
172 | |
173 // Change node's parent. | |
174 nodeModifications[id] = | |
175 Object.assign({}, nodes[id], {parentId: action.parentId}); | |
176 | |
177 // Remove from old parent. | |
178 var oldParentId = action.oldParentId; | |
179 var oldParentChildren = nodes[oldParentId].children.slice(); | |
180 oldParentChildren.splice(action.oldIndex, 1); | |
181 nodeModifications[oldParentId] = | |
182 Object.assign({}, nodes[oldParentId], {children: oldParentChildren}); | |
183 | |
184 // Add to new parent. | |
185 var parentId = action.parentId; | |
186 var parentChildren = oldParentId == parentId ? | |
187 oldParentChildren : | |
188 nodes[parentId].children.slice(); | |
189 parentChildren.splice(action.index, 0, action.id); | |
190 nodeModifications[parentId] = | |
191 Object.assign({}, nodes[parentId], {children: parentChildren}); | |
192 | |
193 return Object.assign({}, nodes, nodeModifications); | |
194 }; | |
195 | |
196 /** | |
197 * @param {NodeList} nodes | |
198 * @param {Action} action | |
199 * @return {NodeList} | |
200 */ | |
167 NodeState.updateNodes = function(nodes, action) { | 201 NodeState.updateNodes = function(nodes, action) { |
168 switch (action.name) { | 202 switch (action.name) { |
169 case 'edit-bookmark': | 203 case 'edit-bookmark': |
170 return NodeState.editBookmark(nodes, action); | 204 return NodeState.editBookmark(nodes, action); |
171 case 'remove-bookmark': | 205 case 'remove-bookmark': |
172 return NodeState.removeBookmark(nodes, action); | 206 return NodeState.removeBookmark(nodes, action); |
207 case 'move-bookmark': | |
208 return NodeState.moveBookmark(nodes, action); | |
173 case 'refresh-nodes': | 209 case 'refresh-nodes': |
174 return action.nodes; | 210 return action.nodes; |
175 default: | 211 default: |
176 return nodes; | 212 return nodes; |
177 } | 213 } |
178 }; | 214 }; |
179 | 215 |
180 var SelectedFolderState = {}; | 216 var SelectedFolderState = {}; |
181 | 217 |
182 /** | 218 /** |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
225 return nodes['0'].children[0]; | 261 return nodes['0'].children[0]; |
226 default: | 262 default: |
227 return selectedFolder; | 263 return selectedFolder; |
228 } | 264 } |
229 }; | 265 }; |
230 | 266 |
231 var ClosedFolderState = {}; | 267 var ClosedFolderState = {}; |
232 | 268 |
233 /** | 269 /** |
234 * @param {ClosedFolderState} closedFolders | 270 * @param {ClosedFolderState} closedFolders |
235 * @param {Action} action | 271 * @param {string|undefined} id |
236 * @param {NodeList} nodes | 272 * @param {NodeList} nodes |
237 * @return {ClosedFolderState} | 273 * @return {ClosedFolderState} |
238 */ | 274 */ |
239 ClosedFolderState.openAncestorsOf = function(closedFolders, action, nodes) { | 275 ClosedFolderState.openFolderAndAncestors = function( |
240 var id = action.id; | 276 closedFolders, id, nodes) { |
241 var modifications = {}; | 277 var modifications = {}; |
242 var parentId = nodes[id].parentId; | 278 var currentId = id; |
243 while (parentId) { | 279 while (currentId) { |
244 if (closedFolders[parentId]) { | 280 if (closedFolders[currentId]) { |
245 modifications[parentId] = false; | 281 modifications[currentId] = false; |
246 } | 282 } |
247 parentId = nodes[parentId].parentId; | 283 currentId = nodes[currentId].parentId; |
248 } | 284 } |
249 | 285 |
250 return Object.assign({}, closedFolders, modifications); | 286 return Object.assign({}, closedFolders, modifications); |
251 }; | 287 }; |
252 | 288 |
253 /** | 289 /** |
254 * @param {ClosedFolderState} closedFolders | 290 * @param {ClosedFolderState} closedFolders |
255 * @param {Action} action | 291 * @param {Action} action |
256 * @return {ClosedFolderState} | 292 * @return {ClosedFolderState} |
257 */ | 293 */ |
(...skipping 10 matching lines...) Expand all Loading... | |
268 * @param {Action} action | 304 * @param {Action} action |
269 * @param {NodeList} nodes | 305 * @param {NodeList} nodes |
270 * @return {ClosedFolderState} | 306 * @return {ClosedFolderState} |
271 */ | 307 */ |
272 ClosedFolderState.updateClosedFolders = function( | 308 ClosedFolderState.updateClosedFolders = function( |
273 closedFolders, action, nodes) { | 309 closedFolders, action, nodes) { |
274 switch (action.name) { | 310 switch (action.name) { |
275 case 'change-folder-open': | 311 case 'change-folder-open': |
276 return ClosedFolderState.changeFolderOpen(closedFolders, action); | 312 return ClosedFolderState.changeFolderOpen(closedFolders, action); |
277 case 'select-folder': | 313 case 'select-folder': |
278 return ClosedFolderState.openAncestorsOf(closedFolders, action, nodes); | 314 return ClosedFolderState.openFolderAndAncestors( |
315 closedFolders, nodes[action.id].parentId, nodes); | |
316 case 'move-bookmark': | |
317 if (!nodes[action.id].children) | |
318 return closedFolders; | |
319 | |
320 return ClosedFolderState.openFolderAndAncestors( | |
321 closedFolders, action.parentId, nodes); | |
279 default: | 322 default: |
280 return closedFolders; | 323 return closedFolders; |
281 }; | 324 }; |
282 }; | 325 }; |
283 | 326 |
284 /** | 327 /** |
285 * Root reducer for the Bookmarks page. This is called by the store in | 328 * Root reducer for the Bookmarks page. This is called by the store in |
286 * response to an action, and the return value is used to update the UI. | 329 * response to an action, and the return value is used to update the UI. |
287 * @param {!BookmarksPageState} state | 330 * @param {!BookmarksPageState} state |
288 * @param {Action} action | 331 * @param {Action} action |
(...skipping 13 matching lines...) Expand all Loading... | |
302 | 345 |
303 return { | 346 return { |
304 reduceAction: reduceAction, | 347 reduceAction: reduceAction, |
305 ClosedFolderState: ClosedFolderState, | 348 ClosedFolderState: ClosedFolderState, |
306 NodeState: NodeState, | 349 NodeState: NodeState, |
307 SearchState: SearchState, | 350 SearchState: SearchState, |
308 SelectedFolderState: SelectedFolderState, | 351 SelectedFolderState: SelectedFolderState, |
309 SelectionState: SelectionState, | 352 SelectionState: SelectionState, |
310 }; | 353 }; |
311 }); | 354 }); |
OLD | NEW |