diff --git a/frontend/src/apis/loginAPI.js b/frontend/src/apis/loginAPI.js index 3453bd296..d9d0b2b9c 100644 --- a/frontend/src/apis/loginAPI.js +++ b/frontend/src/apis/loginAPI.js @@ -15,7 +15,7 @@ const apiGet = async (url) => { if (result.status !== 200) { throw new Error('HTTP Status Error ' + result.status) } - if (result.data.state !== 'success') { + if (!['success', 'warning'].includes(result.data.state)) { throw new Error(result.data.msg) } return { success: true, result } @@ -139,6 +139,9 @@ const loginAPI = { } return apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload) }, + checkUsername: async (username, groupId = 1) => { + return apiGet(CONFIG.LOGIN_API_URL + `checkUsername?username=${username}&group_id=${groupId}`) + }, } export default loginAPI diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 6536a143b..8554996bb 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -57,9 +57,11 @@ "send_transaction_error":"Leider konnte die Transaktion nicht ausgeführt werden!", "validation": { "gddSendAmount": "Das Feld {_field_} muss eine Zahl zwischen {min} und {max} mit höchstens zwei Nachkommastellen sein", - "is-not": "Du kannst dir selbst keine Gradidos überweisen" + "is-not": "Du kannst dir selbst keine Gradidos überweisen", + "usernmae-unique": "Der Username ist bereits vergeben.", + "usernmae-regex": "Der Username muss mit einem Buchstaben beginnen auf den mindestens zwei alfanumerische Zeichen folgen müssen." }, - "change_username_info": "Das ändern des Usernamens bedarf mehrerer Schritte." + "change_username_info": "Einmal gespeichert, kann der Username ncht mehr geändert werden!" }, "error": { "error":"Fehler" diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index f611e4b91..7b97c2240 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -57,9 +57,11 @@ "send_transaction_error":"Unfortunately, the transaction could not be executed!", "validation": { "gddSendAmount": "The {_field_} field must be a number between {min} and {max} with at most two digits", - "is-not": "You cannot send Gradidos to yourself" + "is-not": "You cannot send Gradidos to yourself", + "usernmae-unique": "The username is already taken.", + "usernmae-regex": "The username must start with a letter, followed by at least two alphanumeric characters." }, - "change_username_info": "Changing the username requires several steps." + "change_username_info": "Once saved, the username cannot be changed again!" }, "error": { "error":"Error" diff --git a/frontend/src/main.js b/frontend/src/main.js index 160ff73c7..b5e109fbf 100755 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -9,6 +9,8 @@ import { required, email, min, max, is_not } from 'vee-validate/dist/rules' // store import { store } from './store/store' +import loginAPI from './apis/loginAPI' + // router setup import router from './routes/router' @@ -64,6 +66,21 @@ extend('gddSendAmount', { }, }) +extend('gddUsernameUnique', { + async validate(value) { + const result = await loginAPI.checkUsername(value) + return result.result.data.state === 'success' + }, + message: (_, values) => i18n.t('form.validation.usernmae-unique', values), +}) + +extend('gddUsernameRgex', { + validate(value) { + return !!value.match(/^[a-zA-Z][-_a-zA-Z0-9]{2,}$/) + }, + message: (_, values) => i18n.t('form.validation.usernmae-regex', values), +}) + // eslint-disable-next-line camelcase extend('is_not', { // eslint-disable-next-line camelcase diff --git a/frontend/src/views/Pages/UserProfile/UserCard_FormUsername.vue b/frontend/src/views/Pages/UserProfile/UserCard_FormUsername.vue index 2b3b451fe..21fa01aad 100644 --- a/frontend/src/views/Pages/UserProfile/UserCard_FormUsername.vue +++ b/frontend/src/views/Pages/UserProfile/UserCard_FormUsername.vue @@ -1,20 +1,19 @@ @@ -66,7 +73,7 @@ export default { name: 'FormUsername', data() { return { - editUsername: true, + showUsername: true, username: this.$store.state.username, form: { username: this.$store.state.username, @@ -74,6 +81,10 @@ export default { } }, methods: { + cancelEdit() { + this.username = this.$store.state.username + this.showUsername = true + }, async onSubmit() { const result = await loginAPI.changeUsernameProfile( this.$store.state.sessionId, @@ -82,8 +93,9 @@ export default { ) if (result.success) { this.$store.commit('username', this.form.username) - this.editUserdata = this.editUsername = !this.editUsername - alert('Dein Username wurde geändert.') + this.username = this.form.username + this.showUsername = true + this.$toast.success(this.$t('site.profil.user-data.change-success')) } else { alert(result.result.message) } @@ -91,4 +103,8 @@ export default { }, } - +