mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 01:46:07 +00:00
173 lines
5.2 KiB
Vue
Executable File
173 lines
5.2 KiB
Vue
Executable File
<template>
|
|
<div id="registerform">
|
|
<BContainer v-if="enterData">
|
|
<div class="pb-5" align="center">{{ $t('gdd_per_link.isFree') }}</div>
|
|
<BForm role="form" @submit.prevent="onSubmit">
|
|
<BRow>
|
|
<BCol sm="12" md="6">
|
|
<BFormGroup class="mb-3" :label="$t('form.firstname')" label-for="registerFirstname">
|
|
<BFormInput
|
|
id="registerFirstname"
|
|
:model-value="firstname"
|
|
name="firstname"
|
|
:placeholder="$t('form.firstname')"
|
|
:state="firstnameMeta.valid"
|
|
aria-describedby="registerFirstnameLiveFeedback"
|
|
@update:model-value="firstname = $event"
|
|
/>
|
|
|
|
<BFormInvalidFeedback v-if="firstnameError" id="registerFirstnameLiveFeedback">
|
|
{{ firstnameError }}
|
|
</BFormInvalidFeedback>
|
|
</BFormGroup>
|
|
</BCol>
|
|
<BCol sm="12" md="6">
|
|
<BFormGroup class="mb-3" :label="$t('form.lastname')" label-for="registerLastname">
|
|
<BFormInput
|
|
id="registerLastname"
|
|
:model-value="lastname"
|
|
name="lastname"
|
|
:placeholder="$t('form.lastname')"
|
|
:state="lastnameMeta.valid"
|
|
aria-describedby="registerLastnameLiveFeedback"
|
|
@update:model-value="lastname = $event"
|
|
/>
|
|
|
|
<BFormInvalidFeedback v-if="lastnameError" id="registerLastnameLiveFeedback">
|
|
{{ lastnameError }}
|
|
</BFormInvalidFeedback>
|
|
</BFormGroup>
|
|
</BCol>
|
|
</BRow>
|
|
<BRow>
|
|
<BCol>
|
|
<input-email name="email" :label="$t('form.email')" :placeholder="$t('form.email')" />
|
|
</BCol>
|
|
</BRow>
|
|
<BRow>
|
|
<BCol cols="12" class="my-4">
|
|
<BFormCheckbox
|
|
id="registerCheckbox"
|
|
name="agree"
|
|
:model-value="agree"
|
|
:state="(agreeMeta.valid && agreeMeta.dirty) || undefined"
|
|
@update:model-value="agree = $event"
|
|
>
|
|
<!-- eslint-disable-next-line @intlify/vue-i18n/no-v-html -->
|
|
<span class="text-muted" v-html="$t('site.signup.agree')"></span>
|
|
</BFormCheckbox>
|
|
</BCol>
|
|
</BRow>
|
|
<BRow>
|
|
<BCol cols="12" lg="6">
|
|
<BButton
|
|
block
|
|
type="submit"
|
|
:disabled="!formMeta.valid"
|
|
:variant="!formMeta.valid ? 'gradido-disable' : 'gradido'"
|
|
>
|
|
{{ $t('signup') }}
|
|
</BButton>
|
|
</BCol>
|
|
</BRow>
|
|
<BRow>
|
|
<BCol class="col-lg-6 col-12 mt-3">
|
|
{{ $t('existingGradidoAccount', { communityName: CONFIG.COMMUNITY_NAME }) }}
|
|
</BCol>
|
|
</BRow>
|
|
<BRow>
|
|
<BCol class="col-lg-6 col-12 mt-1">
|
|
<BLink :to="login()" class="login-nav-item">
|
|
{{ $t('signin') }}
|
|
</BLink>
|
|
</BCol>
|
|
</BRow>
|
|
</BForm>
|
|
</BContainer>
|
|
<BContainer v-else>
|
|
<message :headline="$t('message.title')" :subtitle="$t('message.register')" />
|
|
</BContainer>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, computed } from 'vue'
|
|
import { useMutation } from '@vue/apollo-composable'
|
|
import InputEmail from '@/components/Inputs/InputEmail'
|
|
import Message from '@/components/Message/Message'
|
|
import { useAppToast } from '@/composables/useToast'
|
|
import { useField, useForm } from 'vee-validate'
|
|
import { createUser } from '@/graphql/mutations'
|
|
import { useI18n } from 'vue-i18n'
|
|
import { useStore } from 'vuex'
|
|
import { useRoute } from 'vue-router'
|
|
import { useAuthLinks } from '@/composables/useAuthLinks'
|
|
import CONFIG from '@/config'
|
|
|
|
const { toastError } = useAppToast()
|
|
const { login } = useAuthLinks()
|
|
|
|
const { mutate } = useMutation(createUser)
|
|
|
|
const { values: formValues, meta: formMeta, defineField, handleSubmit } = useForm()
|
|
|
|
const [firstname] = defineField('firstname')
|
|
const { meta: firstnameMeta, errorMessage: firstnameError } = useField('firstname', {
|
|
required: true,
|
|
min: 3,
|
|
})
|
|
|
|
const [lastname] = defineField('lastname')
|
|
const { meta: lastnameMeta, errorMessage: lastnameError } = useField('lastname', {
|
|
required: true,
|
|
min: 2,
|
|
})
|
|
|
|
const [agree] = defineField('agree')
|
|
const { meta: agreeMeta } = useField('agree', 'required')
|
|
|
|
const { t } = useI18n()
|
|
const store = useStore()
|
|
const { params } = useRoute()
|
|
|
|
const showPageMessage = ref(false)
|
|
const publisherId = ref(store.state.publisherId)
|
|
const redeemCode = ref(params.code)
|
|
|
|
const enterData = computed(() => {
|
|
return !showPageMessage.value
|
|
})
|
|
|
|
async function onSubmit() {
|
|
try {
|
|
await mutate({
|
|
email: formValues.email,
|
|
firstName: formValues.firstname,
|
|
lastName: formValues.lastname,
|
|
language: store.state.language,
|
|
publisherId: publisherId.value,
|
|
redeemCode: redeemCode.value,
|
|
project: store.state.project,
|
|
})
|
|
showPageMessage.value = true
|
|
} catch (error) {
|
|
toastError(`${t('error.unknown-error')} ${error.message}`)
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
:deep(.btn-gradido) {
|
|
padding-right: 0;
|
|
padding-left: 0;
|
|
}
|
|
|
|
:deep(.btn-gradido-disable) {
|
|
padding-right: 0;
|
|
padding-left: 0;
|
|
}
|
|
a.login-nav-item {
|
|
color: #0e79bc !important;
|
|
}
|
|
</style>
|