Add enter e-mail, start

This commit is contained in:
Wolfgang Huß 2021-02-02 09:48:10 +01:00
parent 8a8a3832f4
commit e57533fcec
3 changed files with 83 additions and 35 deletions

View File

@ -5,29 +5,29 @@
<ds-flex> <ds-flex>
<ds-flex-item> <ds-flex-item>
<div <div
v-for="componentName in sliderData.sliders" v-for="slider in sliderData.sliders"
:key="componentName" :key="slider.name"
class="selection-button" class="selection-button"
:class="[ :class="['Sliders__component-selection']"
'Sliders__component-selection',
]"
> >
<base-button <base-button
:class="[sliderIndexByName(slider.name) >= sliderIndex && '--disabled']"
style="float: left" style="float: left"
:icon="slider.validated && slider.confirmed && 'check'"
:circle="true" :circle="true"
size="small" size="small"
type="submit" type="submit"
filled filled
:loading="false" :loading="false"
:disabled="sliderIndexByName(componentName) >= sliderIndex" :disabled="!(slider.confirmed || sliderIndexByName(slider.name) === sliderIndex)"
@click="sliderData.sliderSelectorCallback(componentName)" @click="sliderData.sliderSelectorCallback(slider.name)"
/> />
</div> </div>
</ds-flex-item> </ds-flex-item>
<ds-flex-item> <ds-flex-item>
<base-button <base-button
style="float: right" style="float: right"
icon="check" :icon="(sliderIndex < sliderData.sliders.length - 1 && 'arrow-right') || (sliderIndex === sliderData.sliders.length - 1 && 'check')"
type="submit" type="submit"
filled filled
:loading="false" :loading="false"
@ -54,7 +54,7 @@ export default {
}, },
methods: { methods: {
sliderIndexByName(name) { sliderIndexByName(name) {
return this.sliderData.sliders.findIndex((sliderName) => sliderName === name) return this.sliderData.sliders.findIndex((slider) => slider.name === name)
}, },
}, },
} }
@ -88,12 +88,12 @@ export default {
// &.--active { // &.--active {
// border-bottom: 2px solid #17b53f; // border-bottom: 2px solid #17b53f;
// } // }
// &.--disabled { &.--disabled {
// opacity: $opacity-disabled; opacity: $opacity-disabled;
// &:hover { // &:hover {
// border-bottom: none; // border-bottom: none;
// } // }
// } }
} }
} }
</style> </style>

View File

@ -17,9 +17,6 @@
<ds-text> <ds-text>
{{ $t('components.enter-invite.form.description') }} {{ $t('components.enter-invite.form.description') }}
</ds-text> </ds-text>
<!-- Wolle <base-button :disabled="disabled" filled name="submit" type="submit">
{{ $t('components.enter-invite.form.next') }}
</base-button> -->
<slot></slot> <slot></slot>
</ds-form> </ds-form>
</template> </template>
@ -29,12 +26,12 @@ export default {
name: 'RegistrationItemEnterInvite', name: 'RegistrationItemEnterInvite',
props: { props: {
sliderData: { type: Object, required: true }, sliderData: { type: Object, required: true },
email: { type: String, required: true }, inviteCode: { type: String, required: false },
}, },
data() { data() {
return { return {
formData: { formData: {
inviteCode: '', inviteCode: this.inviteCode ? this.inviteCode : '',
}, },
formSchema: { formSchema: {
inviteCode: { inviteCode: {
@ -45,20 +42,17 @@ export default {
message: this.$t('components.enter-invite.form.validations.length'), message: this.$t('components.enter-invite.form.validations.length'),
}, },
}, },
disabled: true,
} }
}, },
methods: { methods: {
async handleInput() { async handleInput() {
// Wolle console.log('handleInput !!!') // Wolle console.log('handleInput !!!')
// console.log('email: ', this.email)
this.sliderData.validateCallback(false) this.sliderData.validateCallback(false)
}, },
async handleInputValid() { async handleInputValid() {
// Wolle console.log('handleInputValid !!!') // Wolle console.log('handleInputValid !!!')
const { inviteCode } = this.formData const { inviteCode } = this.formData
const email = this.email this.sliderData.validateCallback(true, { /* email, */inviteCode })
this.sliderData.validateCallback(true, { email, inviteCode })
}, },
handleSubmitVerify() { handleSubmitVerify() {
// Wolle const { nonce } = this.formData // Wolle const { nonce } = this.formData

View File

@ -6,15 +6,31 @@
<img class="image" alt="Welcome" src="/img/custom/welcome.svg" /> <img class="image" alt="Welcome" src="/img/custom/welcome.svg" />
</a> </a>
</template> </template>
<h1 class="title">{{ $t('components.registration.signup.title', metadata) }}</h1> <h1 class="title">{{ $t('components.registration.signup.title', metadata) }}</h1>
<component-slider :sliderData="sliderData"> <component-slider :sliderData="sliderData">
<template #enter-invite> <template #enter-invite>
<registration-item-enter-invite :sliderData="sliderData" :email="'user@example.org'"> <registration-item-enter-invite :sliderData="sliderData" :inviteCode="sliderData.collectedComponentData.inviteCode ? sliderData.collectedComponentData.inviteCode : ''" :email="sliderData.collectedComponentData.email ? sliderData.collectedComponentData.email : ''">
<ds-space margin-bottom="xxx-small" margin-top="large" centered> <ds-space margin-bottom="xxx-small" margin-top="large" centered>
<nuxt-link to="/login">{{ $t('site.back-to-login') }}</nuxt-link> <nuxt-link to="/login">{{ $t('site.back-to-login') }}</nuxt-link>
</ds-space> </ds-space>
</registration-item-enter-invite> </registration-item-enter-invite>
</template> </template>
<template #create-user-account>
<!-- Wolle !!! may create same source with 'webapp/pages/registration/signup.vue' -->
<signup v-if="publicRegistration" :invitation="false" @submit="handleSubmitted">
<ds-space centered margin-top="large">
<nuxt-link to="/login">{{ $t('site.back-to-login') }}</nuxt-link>
</ds-space>
</signup>
<ds-space v-else centered>
<hc-empty icon="events" :message="$t('components.registration.signup.unavailable')" />
<nuxt-link to="/login">{{ $t('site.back-to-login') }}</nuxt-link>
</ds-space>
</template>
<template #create-user-account> <template #create-user-account>
<registration-item-create-user-account <registration-item-create-user-account
:sliderData="sliderData" :sliderData="sliderData"
@ -23,6 +39,7 @@
/> />
</template> </template>
</component-slider> </component-slider>
<template #topMenu> <template #topMenu>
<locale-switch offset="5" /> <locale-switch offset="5" />
</template> </template>
@ -31,20 +48,24 @@
</template> </template>
<script> <script>
import LocaleSwitch from '~/components/LocaleSwitch/LocaleSwitch'
import ComponentSlider from '~/components/ComponentSlider/ComponentSlider'
import RegistrationItemEnterInvite from './RegistrationItemEnterInvite'
import RegistrationItemCreateUserAccount from './RegistrationItemCreateUserAccount'
import links from '~/constants/links.js' import links from '~/constants/links.js'
import metadata from '~/constants/metadata.js' import metadata from '~/constants/metadata.js'
import ComponentSlider from '~/components/ComponentSlider/ComponentSlider'
import LocaleSwitch from '~/components/LocaleSwitch/LocaleSwitch'
import Signup from '~/components/Registration/Signup'
import HcEmpty from '~/components/Empty/Empty'
import RegistrationItemEnterInvite from './RegistrationItemEnterInvite'
import RegistrationItemCreateUserAccount from './RegistrationItemCreateUserAccount'
export default { export default {
name: 'RegistrationSlider', name: 'RegistrationSlider',
components: { components: {
LocaleSwitch,
ComponentSlider, ComponentSlider,
HcEmpty,
LocaleSwitch,
RegistrationItemEnterInvite, RegistrationItemEnterInvite,
RegistrationItemCreateUserAccount, RegistrationItemCreateUserAccount,
Signup,
}, },
// Wolle props: { // Wolle props: {
// id: { type: String }, // id: { type: String },
@ -56,8 +77,24 @@ export default {
links, links,
metadata, metadata,
sliderData: { sliderData: {
collectedComponentData: {}, collectedComponentData: {
sliders: ['enter-invite', 'create-user-account'], inviteCode: null,
email: null,
},
sliders: [
{
name: 'enter-invite',
active: true,
validated: false,
confirmed: false,
},
{
name: 'create-user-account',
active: false,
validated: false,
confirmed: false,
},
],
activeSliderName: 'enter-invite', activeSliderName: 'enter-invite',
sliderSelectorCallback: this.sliderSelectorCallback, sliderSelectorCallback: this.sliderSelectorCallback,
validateCallback: this.validateCallback, validateCallback: this.validateCallback,
@ -69,6 +106,11 @@ export default {
}, },
} }
}, },
asyncData({ app }) {
return {
publicRegistration: app.$env.PUBLIC_REGISTRATION === 'true',
}
},
computed: { computed: {
sliderIndex() { sliderIndex() {
return this.sliderIndexByName(this.sliderData.activeSliderName) return this.sliderIndexByName(this.sliderData.activeSliderName)
@ -76,9 +118,11 @@ export default {
}, },
methods: { methods: {
sliderIndexByName(name) { sliderIndexByName(name) {
return this.sliderData.sliders.findIndex((sliderName) => sliderName === name) return this.sliderData.sliders.findIndex((slider) => slider.name === name)
}, },
validateCallback(is, data = null) { validateCallback(is, data = null) {
this.sliderData.sliders[this.sliderIndex].validated = is
if (is) { if (is) {
this.sliderData.collectedComponentData = { this.sliderData.collectedComponentData = {
...this.sliderData.collectedComponentData, ...this.sliderData.collectedComponentData,
@ -88,16 +132,26 @@ export default {
this.sliderData.button.disabled = !is this.sliderData.button.disabled = !is
}, },
sliderSelectorCallback(sliderName) { sliderSelectorCallback(sliderName) {
if (this.sliderIndexByName(sliderName) < this.sliderIndex) { // if (this.sliderIndexByName(sliderName) < this.sliderIndex) {
// this.sliderData.activeSliderName = sliderName
// }
// console.log('sliderName: ', sliderName)
// console.log('this.sliderIndexByName(sliderName): ', this.sliderIndexByName(sliderName))
// console.log('this.sliderData.sliders[this.sliderIndexByName(sliderName)].active: ', this.sliderData.sliders[this.sliderIndexByName(sliderName)].active)
if (this.sliderData.sliders[this.sliderIndexByName(sliderName)].active) {
this.sliderData.activeSliderName = sliderName this.sliderData.activeSliderName = sliderName
} }
}, },
buttonCallback() { buttonCallback() {
this.sliderData.sliders[this.sliderIndex].confirmed = true
// this.sliderData.sliders[this.sliderIndex].active = true
if (this.sliderIndex === this.sliderData.sliders.length - 1) { if (this.sliderIndex === this.sliderData.sliders.length - 1) {
// console.log('submit data: ', this.sliderData.collectedComponentData) // console.log('submit data: ', this.sliderData.collectedComponentData)
} else { } else {
if (this.sliderIndex < this.sliderData.sliders.length - 1) { if (this.sliderIndex < this.sliderData.sliders.length - 1) {
this.sliderData.activeSliderName = this.sliderData.sliders[this.sliderIndex + 1] this.sliderData.activeSliderName = this.sliderData.sliders[this.sliderIndex + 1].name
this.sliderData.sliders[this.sliderIndex].active = true
this.sliderData.button.disabled = true this.sliderData.button.disabled = true
} }
if (this.sliderIndex === this.sliderData.sliders.length - 1) { if (this.sliderIndex === this.sliderData.sliders.length - 1) {