import { type ComputedRef, type Ref, computed, defineComponent, inject, ref } from 'vue'; import { useI18n } from 'vue-i18n'; import { useVuelidate } from '@vuelidate/core'; import { email, maxLength, minLength, required } from '@vuelidate/validators'; import axios from 'axios'; import languages from '@/shared/config/languages'; import { EMAIL_ALREADY_USED_TYPE } from '@/shared/jhipster/error.constants'; import { useStore } from '@/store'; const validations = { settingsAccount: { firstName: { required, minLength: minLength(1), maxLength: maxLength(50), }, lastName: { required, minLength: minLength(1), maxLength: maxLength(50), }, email: { required, email, minLength: minLength(5), maxLength: maxLength(254), }, }, }; export default defineComponent({ name: 'Settings', validations, setup() { const store = useStore(); const success: Ref = ref(null); const error: Ref = ref(null); const errorEmailExists: Ref = ref(null); const settingsAccount = computed(() => store.account); const username = inject>('currentUsername', () => computed(() => store.account?.login), true); return { success, error, errorEmailExists, settingsAccount, username, v$: useVuelidate(), languages: languages(), t$: useI18n().t, }; }, methods: { save() { this.error = null; this.errorEmailExists = null; return axios .post('api/account', this.settingsAccount) .then(() => { this.error = null; this.success = 'OK'; this.errorEmailExists = null; }) .catch(ex => { this.success = null; this.error = 'ERROR'; if (ex.response.status === 400 && ex.response.data.type === EMAIL_ALREADY_USED_TYPE) { this.errorEmailExists = 'ERROR'; this.error = null; } }); }, }, });