From eba50bc5a41b8492c0350b73936405eab1b8c453 Mon Sep 17 00:00:00 2001 From: Stefan Malzner Date: Wed, 12 Jun 2019 15:16:56 +0200 Subject: fix(Recipes): Fix recipe install when directly accessing recipe --- src/stores/RecipesStore.js | 27 +++++++++++++++++++++++++++ src/stores/ServicesStore.js | 18 +----------------- 2 files changed, 28 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/stores/RecipesStore.js b/src/stores/RecipesStore.js index ab64bf79c..d51192078 100644 --- a/src/stores/RecipesStore.js +++ b/src/stores/RecipesStore.js @@ -20,6 +20,11 @@ export default class RecipesStore extends Store { // Register action handlers this.actions.recipe.install.listen(this._install.bind(this)); this.actions.recipe.update.listen(this._update.bind(this)); + + // Reactions + this.registerReactions([ + this._checkIfRecipeIsInstalled.bind(this), + ]); } setup() { @@ -99,4 +104,26 @@ export default class RecipesStore extends Store { syncUpdate(0); } } + + async _checkIfRecipeIsInstalled() { + const { router } = this.stores; + + const match = matchRoute('/settings/services/add/:id', router.location.pathname); + if (match) { + const recipeId = match.id; + + if (!this.stores.recipes.isInstalled(recipeId)) { + router.push('/settings/recipes'); + debug(`Recipe ${recipeId} is not installed, trying to install it`); + + const recipe = await this.installRecipeRequest.execute(recipeId)._promise; + if (recipe) { + await this.allRecipesRequest.invalidate({ immediately: true })._promise; + router.push(`/settings/services/add/${recipeId}`); + } else { + router.push('/settings/recipes'); + } + } + } + } } diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index d63302fce..109ac5cd7 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js @@ -148,18 +148,7 @@ export default class ServicesStore extends Store { } async _showAddServiceInterface({ recipeId }) { - const recipesStore = this.stores.recipes; - - if (recipesStore.isInstalled(recipeId)) { - debug(`Recipe ${recipeId} is installed`); - this._redirectToAddServiceRoute(recipeId); - } else { - debug(`Recipe ${recipeId} is not installed`); - // We access the RecipeStore action directly - // returns Promise instead of action - await this.stores.recipes._install({ recipeId }); - this._redirectToAddServiceRoute(recipeId); - } + this.stores.router.push(`/settings/services/add/${recipeId}`); } // Actions @@ -690,11 +679,6 @@ export default class ServicesStore extends Store { } // Helper - _redirectToAddServiceRoute(recipeId) { - const route = `/settings/services/add/${recipeId}`; - this.stores.router.push(route); - } - _initializeServiceRecipeInWebview(serviceId) { const service = this.one(serviceId); -- cgit v1.2.3-70-g09d2