Index: chrome/browser/resources/md_bookmarks/router.js |
diff --git a/chrome/browser/resources/md_bookmarks/router.js b/chrome/browser/resources/md_bookmarks/router.js |
index 38b16f1602b66411ddf12a73668bcad0cd2e54e0..11d1d40104c5a4cc6d9409b5f11687d5b9715b6c 100644 |
--- a/chrome/browser/resources/md_bookmarks/router.js |
+++ b/chrome/browser/resources/md_bookmarks/router.js |
@@ -10,45 +10,68 @@ Polymer({ |
*/ |
is: 'bookmarks-router', |
+ behaviors: [ |
+ bookmarks.StoreClient, |
+ ], |
+ |
properties: { |
- // Parameter q is routed to the searchTerm. |
- // Parameter id is routed to the selectedId. |
+ /** |
+ * Parameter q is routed to the searchTerm. |
+ * Parameter id is routed to the selectedId. |
+ * @private |
+ */ |
queryParams_: Object, |
- searchTerm: { |
- type: String, |
- observer: 'onSearchTermChanged_', |
- }, |
+ /** @private */ |
+ searchTerm_: String, |
- /** @type {?string} */ |
- selectedId: { |
- type: String, |
- observer: 'onSelectedIdChanged_', |
- }, |
+ /** @private {?string} */ |
+ selectedId_: String, |
}, |
observers: [ |
- 'onQueryChanged_(queryParams_.*)', |
+ 'onQueryChanged_(queryParams_.q)', |
+ 'onFolderChanged_(queryParams_.id)', |
+ 'onStateChanged_(searchTerm_, selectedId_)', |
], |
+ attached: function() { |
+ this.watch('selectedId_', function(state) { |
+ return state.selectedFolder; |
+ }); |
+ this.watch('searchTerm_', function(state) { |
+ return state.search.term; |
+ }); |
+ }, |
+ |
/** @private */ |
onQueryChanged_: function() { |
- this.searchTerm = this.queryParams_.q || ''; |
- this.selectedId = this.queryParams_.id; |
+ var searchTerm = this.queryParams_.q || ''; |
+ if (searchTerm && searchTerm != this.searchTerm_) { |
+ this.searchTerm_ = searchTerm; |
+ this.dispatch(bookmarks.actions.setSearchTerm(searchTerm)); |
+ } |
+ }, |
- if (this.searchTerm) |
- this.fire('search-term-changed', this.searchTerm); |
- else |
- this.fire('selected-folder-changed', this.selectedId); |
+ /** @private */ |
+ onFolderChanged_: function() { |
+ var selectedId = this.queryParams_.id; |
+ if (selectedId && selectedId != this.selectedId_) { |
+ this.selectedId_ = selectedId; |
+ this.dispatch(bookmarks.actions.selectFolder(selectedId)); |
+ } |
}, |
/** @private */ |
- onSelectedIdChanged_: function() { |
- this.set('queryParams_.id', this.selectedId || null); |
+ onStateChanged_: function() { |
+ this.debounce('updateQueryParams', this.updateQueryParams_.bind(this)); |
}, |
/** @private */ |
- onSearchTermChanged_: function() { |
- this.set('queryParams_.q', this.searchTerm || null); |
+ updateQueryParams_: function() { |
+ if (this.searchTerm_) |
+ this.queryParams_ = {q: this.searchTerm_}; |
+ else |
+ this.queryParams_ = {id: this.selectedId_}; |
}, |
}); |