From 942ab55ddce2001d48f0f86251d0738f3917e8ec Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Thu, 7 Sep 2017 15:59:07 +0200 Subject: [PATCH 1/3] Disable create profile from signup when submitting This prevents people re-submitting the form multiple times. Although the backend validates it, we show an ugly alert message that is hard for users to understand. --- .../registration_form_controller.js.coffee | 10 +++++++++- .../services/enterprise_registration_service.js.coffee | 5 ++++- app/views/registration/steps/_type.html.haml | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/darkswarm/controllers/registration/registration_form_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/registration/registration_form_controller.js.coffee index fabc2c382a..546186f53d 100644 --- a/app/assets/javascripts/darkswarm/controllers/registration/registration_form_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/registration/registration_form_controller.js.coffee @@ -1,15 +1,23 @@ Darkswarm.controller "RegistrationFormCtrl", ($scope, RegistrationService, EnterpriseRegistrationService) -> $scope.submitted = false + $scope.isDisabled = false $scope.valid = (form) -> $scope.submitted = !form.$valid form.$valid $scope.create = (form) -> - EnterpriseRegistrationService.create() if $scope.valid(form) + $scope.disableButton() + EnterpriseRegistrationService.create($scope.enableButton) if $scope.valid(form) $scope.update = (nextStep, form) -> EnterpriseRegistrationService.update(nextStep) if $scope.valid(form) $scope.selectIfValid = (nextStep, form) -> RegistrationService.select(nextStep) if $scope.valid(form) + + $scope.disableButton = -> + $scope.isDisabled = true + + $scope.enableButton = -> + $scope.isDisabled = false diff --git a/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee b/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee index 1434ffa44f..de8d643711 100644 --- a/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee @@ -11,7 +11,7 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, for key, value of enterpriseAttributes @enterprise[key] = value - create: => + create: (callback) => Loading.message = t('creating') + " " + @enterprise.name $http( method: "POST" @@ -25,6 +25,7 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, @enterprise.id = data EnterpriseImageService.configure(@enterprise) RegistrationService.select('about') + callback.call() ).error((data) => Loading.clear() if data?.errors? @@ -32,6 +33,8 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, alert t('failed_to_create_enterprise') + "\n" + errors.join('\n') else alert(t('failed_to_create_enterprise_unknown')) + + callback.call() ) update: (step) => diff --git a/app/views/registration/steps/_type.html.haml b/app/views/registration/steps/_type.html.haml index 4c93c441f4..5fcf6391b9 100644 --- a/app/views/registration/steps/_type.html.haml +++ b/app/views/registration/steps/_type.html.haml @@ -45,4 +45,4 @@ .row.buttons .small-12.columns %input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('contact')" } } - %input.button.primary.right{ type: "submit", value: "{{'create_profile' | t}}" } + %input.button.primary.right{ ng: { disabled: 'isDisabled' }, type: "submit", value: "{{'create_profile' | t}}" } From d3d4628e297f8685ebe8178dfdc2cea1f68dcd2b Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 8 Sep 2017 09:51:06 +0200 Subject: [PATCH 2/3] Add doc --- .../services/enterprise_registration_service.js.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee b/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee index de8d643711..7e81d53d70 100644 --- a/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee @@ -11,6 +11,10 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, for key, value of enterpriseAttributes @enterprise[key] = value + # Creates the enterprise and redirects to the about step on success. + # + # @param callback [Function] executed at the end of the operation both in + # case of success or failure. create: (callback) => Loading.message = t('creating') + " " + @enterprise.name $http( From d8e305257559b2129d0dbeddd01d1ed8398074ac Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 29 Sep 2017 16:10:11 +0200 Subject: [PATCH 3/3] Ensure a callback function is provided --- .../services/enterprise_registration_service.js.coffee | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee b/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee index 7e81d53d70..25ec644a66 100644 --- a/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprise_registration_service.js.coffee @@ -29,7 +29,6 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, @enterprise.id = data EnterpriseImageService.configure(@enterprise) RegistrationService.select('about') - callback.call() ).error((data) => Loading.clear() if data?.errors? @@ -37,9 +36,8 @@ Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, alert t('failed_to_create_enterprise') + "\n" + errors.join('\n') else alert(t('failed_to_create_enterprise_unknown')) - - callback.call() ) + callback.call() if callback? update: (step) => Loading.message = t('updating') + " " + @enterprise.name