From e58f5589edeeedfbd0a4fd9a6e6de94d472be24d Mon Sep 17 00:00:00 2001 From: Gustavo Sampaio Date: Thu, 19 Oct 2017 22:22:10 -0300 Subject: Add tab cycling with ctrl[+shift]+tab or ctrl+[pageup|pagedown] This is related to #35 --- src/actions/service.js | 2 ++ src/stores/AppStore.js | 12 ++++++++++++ src/stores/ServicesStore.js | 24 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+) (limited to 'src') diff --git a/src/actions/service.js b/src/actions/service.js index 7f429ca32..cdd4bbf16 100644 --- a/src/actions/service.js +++ b/src/actions/service.js @@ -4,6 +4,8 @@ export default { setActive: { serviceId: PropTypes.string.isRequired, }, + setActiveNext: {}, + setActivePrev: {}, showAddServiceInterface: { recipeId: PropTypes.string.isRequired, }, diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index a5e0839f2..42ec25204 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js @@ -125,6 +125,18 @@ export default class AppStore extends Store { this.actions.service.openDevToolsForActiveService(); }); + // Set active the next service + key( + '⌘+pagedown, ctrl+pagedown, ⌘+shift+tab, ctrl+shift+tab', () => { + this.actions.service.setActiveNext(); + }); + + // Set active the prev service + key( + '⌘+pageup, ctrl+pageup, ⌘+tab, ctrl+tab', () => { + this.actions.service.setActivePrev(); + }); + this.locale = this._getDefaultLocale(); this._healthCheck(); diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index 77d2e7da4..823540076 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js @@ -24,6 +24,8 @@ export default class ServicesStore extends Store { // Register action handlers this.actions.service.setActive.listen(this._setActive.bind(this)); + this.actions.service.setActiveNext.listen(this._setActiveNext.bind(this)); + this.actions.service.setActivePrev.listen(this._setActivePrev.bind(this)); this.actions.service.showAddServiceInterface.listen(this._showAddServiceInterface.bind(this)); this.actions.service.createService.listen(this._createService.bind(this)); this.actions.service.createFromLegacyService.listen(this._createFromLegacyService.bind(this)); @@ -206,6 +208,24 @@ export default class ServicesStore extends Store { service.isActive = true; } + @action _setActiveNext() { + const nextIndex = this._wrapIndex(this.all.findIndex(service => service.isActive), 1, this.all.length); + + this.all.forEach((s, index) => { + this.all[index].isActive = false; + }); + this.all[nextIndex].isActive = true; + } + + @action _setActivePrev() { + const prevIndex = this._wrapIndex(this.all.findIndex(service => service.isActive), -1, this.all.length); + + this.all.forEach((s, index) => { + this.all[index].isActive = false; + }); + this.all[prevIndex].isActive = true; + } + @action _setUnreadMessageCount({ serviceId, count }) { const service = this.one(serviceId); @@ -500,4 +520,8 @@ export default class ServicesStore extends Store { _reorderAnalytics = debounce(() => { gaEvent('Service', 'order'); }, 5000); + + _wrapIndex(index, delta, size) { + return (((index + delta) % size) + size) % size; + } } -- cgit v1.2.3-70-g09d2 From 6624824fa90415ba5ee0f3272aa82a371566c5cf Mon Sep 17 00:00:00 2001 From: Gustavo Sampaio Date: Fri, 20 Oct 2017 08:29:46 -0300 Subject: Bugfix: Ignore disabled services --- src/stores/ServicesStore.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index 823540076..19db05494 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js @@ -209,21 +209,21 @@ export default class ServicesStore extends Store { } @action _setActiveNext() { - const nextIndex = this._wrapIndex(this.all.findIndex(service => service.isActive), 1, this.all.length); + const nextIndex = this._wrapIndex(this.enabled.findIndex(service => service.isActive), 1, this.enabled.length); this.all.forEach((s, index) => { this.all[index].isActive = false; }); - this.all[nextIndex].isActive = true; + this.enabled[nextIndex].isActive = true; } @action _setActivePrev() { - const prevIndex = this._wrapIndex(this.all.findIndex(service => service.isActive), -1, this.all.length); + const prevIndex = this._wrapIndex(this.enabled.findIndex(service => service.isActive), -1, this.enabled.length); this.all.forEach((s, index) => { this.all[index].isActive = false; }); - this.all[prevIndex].isActive = true; + this.enabled[prevIndex].isActive = true; } @action _setUnreadMessageCount({ serviceId, count }) { -- cgit v1.2.3-70-g09d2