From 0be03aa1fe5cd16ef2dfc91eefe68eabe1ad1e64 Mon Sep 17 00:00:00 2001
From: Ruben Vereecken <rubenvereecken@gmail.com>
Date: Sun, 13 Jul 2014 17:06:04 +0200
Subject: [PATCH] Refactored conflicted name checking so it can be used in more
 places

---
 app/models/User.coffee                       |  7 +++++++
 app/views/account/settings_view.coffee       | 15 ++++++---------
 app/views/modal/wizard_settings_modal.coffee |  8 ++++----
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/app/models/User.coffee b/app/models/User.coffee
index cdaf1e86a..6e6f6688b 100644
--- a/app/models/User.coffee
+++ b/app/models/User.coffee
@@ -68,6 +68,13 @@ module.exports = class User extends CocoModel
     cache[idOrSlug] = user
     user
 
+  @getUnconflictedName: (name, done) ->
+    $.ajax "/auth/name/#{name}",
+      success: (data) -> done data.name
+      statusCode: 409: (data) ->
+        response = JSON.parse data.responseText
+        done response.name
+
   getEnabledEmails: ->
     @migrateEmails()
     emails = _.clone(@get('emails')) or {}
diff --git a/app/views/account/settings_view.coffee b/app/views/account/settings_view.coffee
index 22a9641a3..103c4636b 100644
--- a/app/views/account/settings_view.coffee
+++ b/app/views/account/settings_view.coffee
@@ -63,16 +63,13 @@ module.exports = class SettingsView extends View
 
   checkNameExists: =>
     name = $('#name').val()
-    console.debug 'about to check for ' + name
-    $.ajax "/auth/name/#{name}",
-      success: (data) =>
-        forms.clearFormAlerts(@$el)
+    User.getUnconflictedName name, (newName) =>
+      forms.clearFormAlerts(@$el)
+      if name is newName
         @suggestedName = undefined
-      statusCode: 409: (data) =>
-        forms.clearFormAlerts(@$el)
-        response = JSON.parse data.responseText
-        @suggestedName = response.name
-        forms.setErrorToProperty @$el, 'name', "This name is already taken. What about #{response.name}?", true
+      else
+        @suggestedName = newName
+        forms.setErrorToProperty @$el, 'name', "This name is already taken. What about #{newName}?", true
 
   afterRender: ->
     super()
diff --git a/app/views/modal/wizard_settings_modal.coffee b/app/views/modal/wizard_settings_modal.coffee
index 736af3f99..12732b28e 100644
--- a/app/views/modal/wizard_settings_modal.coffee
+++ b/app/views/modal/wizard_settings_modal.coffee
@@ -4,6 +4,7 @@ WizardSprite = require 'lib/surface/WizardSprite'
 ThangType = require 'models/ThangType'
 {me} = require 'lib/auth'
 forms = require 'lib/forms'
+User = require 'models/User'
 
 module.exports = class WizardSettingsModal extends View
   id: 'wizard-settings-modal'
@@ -28,10 +29,9 @@ module.exports = class WizardSettingsModal extends View
   checkNameExists: =>
     forms.clearFormAlerts(@$el)
     name = $('#wizard-settings-name').val()
-    $.ajax "/auth/name/#{name}",
-      success: (data) =>
-        forms.clearFormAlerts(@$el)
-      statusCode: 409: (data) =>
+    User.getUnconflictedName name, (newName) =>
+      forms.clearFormAlerts(@$el)
+      if name isnt newName
         forms.setErrorToProperty @$el, 'name', 'This name is already taken so you won\'t be able to keep it.', true
 
   onWizardSettingsDone: ->