Files
myprojplanet_vite/src/components/CSignUp/CSignUp.ts

432 lines
12 KiB
TypeScript
Raw Normal View History

2021-09-16 21:08:02 +02:00
import { tools } from '@store/Modules/tools'
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
import { ISignupOptions } from 'model'
2021-09-04 15:05:34 +02:00
import { Logo } from '@/components/logo'
2021-09-04 15:05:34 +02:00
// import 'vue-country-code/dist/vue-country-code.css'
import { CTitleBanner } from '../CTitleBanner'
import { CCopyBtn } from '../CCopyBtn'
import { CRegistration } from '../CRegistration'
2022-03-12 22:21:40 +01:00
import { PagePolicy } from '../PagePolicy'
2023-01-03 16:51:45 +01:00
import { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue'
2021-09-16 21:08:02 +02:00
import { CSignIn } from '@/components/CSignIn'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { DefaultProfile, useUserStore } from '@store/UserStore'
import useValidate from '@vuelidate/core'
import useVuelidate from '@vuelidate/core'
2022-01-05 19:11:47 +01:00
import { minLength, required, sameAs } from '@vuelidate/validators'
2021-12-29 18:26:41 +01:00
2021-09-19 02:59:24 +02:00
// import { ValidationRuleset } from 'vuelidate'
import { complexity, complexityUser, registereduser, aportadorexist } from '../../validation'
2021-09-16 21:08:02 +02:00
2021-12-31 01:44:16 +01:00
// import 'vue3-tel-input/dist/vue3-tel-input.css'
2021-12-29 18:26:41 +01:00
import { useRoute, useRouter } from 'vue-router'
import { static_data } from '@/db/static_data'
import { useGlobalStore } from '@store/globalStore'
2021-09-04 15:05:34 +02:00
// import {Loading, QSpinnerFacebook, QSpinnerGears} from 'quasar'
2021-09-16 21:08:02 +02:00
export default defineComponent({
2021-09-04 15:05:34 +02:00
name: 'CSignUp',
components: { Logo, CTitleBanner, PagePolicy, CCopyBtn, CRegistration },
2021-09-16 21:08:02 +02:00
props: {
showadultcheck: {
type: Boolean,
required: false,
default: false,
},
showcell: {
type: Boolean,
required: false,
default: false,
},
2021-12-29 18:26:41 +01:00
showaportador: {
type: Boolean,
required: false,
default: false,
},
2021-09-16 21:08:02 +02:00
shownationality: {
type: Boolean,
required: false,
default: false,
},
show_namesurname: {
type: Boolean,
required: false,
default: true,
},
regexpire: {
type: String,
required: false,
default: '',
},
2023-01-03 16:51:45 +01:00
name_default: {
type: String,
required: false,
default: '',
},
username_default: {
type: String,
required: false,
default: '',
},
need_Telegram: {
type: Boolean,
required: false,
default: false,
},
2023-01-03 16:51:45 +01:00
collettivo: {
type: Boolean,
required: false,
default: false,
},
2021-09-16 21:08:02 +02:00
},
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const userStore = useUserStore()
2021-12-29 18:26:41 +01:00
const $route = useRoute()
const $router = useRouter()
2021-09-16 21:08:02 +02:00
const countryname = ref('')
const iamadult = ref(false)
const duplicate_email = ref(false)
const duplicate_username = ref(false)
const visureg = ref(false)
2022-03-12 22:21:40 +01:00
const showpolicy = ref(false)
const visubuttBOT = ref(false)
const isalreadyReg = ref(false)
const needTelegram = ref(false)
2022-12-17 14:12:04 +01:00
const slide = ref('1')
2022-12-20 10:58:55 +01:00
const inputAportador = ref(<any>null)
2022-12-17 14:12:04 +01:00
const inputEmail = ref(<any>null)
const inputUsername = ref(<any>null)
const inputName = ref(<any>null)
const inputSurname = ref(<any>null)
2022-12-17 14:12:04 +01:00
const inputPassword = ref(<any>null)
const inputPassword2 = ref(<any>null)
const checkifDisabled = computed(() => {
let ret = true
if (slide.value === '1') {
// Invitante + Email
2022-12-20 10:58:55 +01:00
ret = !signup.email || !signup.aportador_solidario || inputAportador.value.hasError || (inputEmail.value && inputEmail.value.hasError)
2022-12-17 14:12:04 +01:00
} else if (slide.value === '2') {
// Username
ret = !signup.username || (inputUsername.value && inputUsername.value.hasError)
} else if (slide.value === '3') {
// Password
ret = !signup.password || (!inputPassword.value && inputPassword.value.hasError) || (!inputPassword2.value && inputPassword2.value.hasError)
}
return ret
})
const typePassword = ref('password')
const ap_iniziale = ref('')
const globalStore = useGlobalStore()
2022-11-23 10:27:36 +01:00
const site = computed(() => globalStore.site)
2021-12-29 18:26:41 +01:00
const signup = reactive(<ISignupOptions>{
email: '',
username: '',
name: '',
surname: '',
password: '',
repeatPassword: '',
terms: false,
2021-09-16 21:08:02 +02:00
profile: DefaultProfile,
aportador_solidario: '',
})
2021-09-19 02:59:24 +02:00
const validations: any = computed(() => {
let valid: any = {
2021-09-19 02:59:24 +02:00
repeatPassword: {
required,
repeatPassword: sameAs(signup.password),
},
password: {
required,
minLength: minLength(8),
complexity,
},
username: {
required,
2023-01-03 16:51:45 +01:00
minLength: minLength(3),
complexityUser,
2021-09-19 02:59:24 +02:00
registereduser,
},
2023-01-03 16:51:45 +01:00
name: {
required: props.collettivo ? true : false,
},
2021-09-19 02:59:24 +02:00
terms: {
required,
},
2021-12-29 18:26:41 +01:00
aportador_solidario: {
aportadorexist,
required
}
2021-09-19 02:59:24 +02:00
}
if (props.show_namesurname) {
valid.name = {
}
valid.surname = {
}
}
return valid
2021-09-19 02:59:24 +02:00
})
2021-09-16 21:08:02 +02:00
// @ts-ignore
const v$ = useVuelidate(validations, signup)
2021-12-29 18:26:41 +01:00
const invited = ref($route.params.invited)
const usernameteleg = ref($route.params.usernameteleg)
const idteleg = ref($route.params.idteleg)
2021-12-29 18:26:41 +01:00
watch(() => invited, (to: any, from: any) => {
if (props.showaportador) {
console.log('changeaportador', $route.params.invited)
if (!signup.aportador_solidario) {
if ($route.params.invited) {
// @ts-ignore
signup.aportador_solidario = $route.params.invited
}
}
}
})
2021-09-16 21:08:02 +02:00
function allowSubmit() {
let error = v$.value.$error || v$.value.$invalid || globalStore.serverError
2021-09-16 21:08:02 +02:00
if (props.showadultcheck)
error = error || !iamadult.value
if (props.showcell) {
if (signup.profile)
error = error || signup.profile.cell!.length <= 6
else
error = true
}
2021-09-04 15:05:34 +02:00
if (tools.getAskToVerifyReg()) {
error = error || !signup.aportador_solidario
}
2021-09-16 21:08:02 +02:00
return !error
}
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
function env() {
return process.env
2021-09-04 15:05:34 +02:00
}
2021-09-16 21:08:02 +02:00
function changeemail() {
signup.email = tools.removespaces(signup.email!)
signup.email = signup.email.toLowerCase()
emit('update:value', signup.email)
2021-09-04 15:05:34 +02:00
}
2021-09-16 21:08:02 +02:00
function changeusername(value: string) {
signup.username = tools.removespaces(signup.username)
emit('update:value', signup.username)
}
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
function submitOk() {
v$.value.$touch()
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
signup.email = tools.removespaces(signup.email!)
signup.email = signup.email.toLowerCase()
signup.username = tools.removespaces(signup.username)
2021-09-04 15:05:34 +02:00
// remove @
signup.username = tools.removeAt(signup.username)
2021-09-16 21:08:02 +02:00
duplicate_email.value = false
duplicate_username.value = false
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
if (!signup.terms) {
tools.showNotif($q, t('reg.err.terms'))
return
}
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
/*if (v$.signup.$error) {
tools.showNotif($q, t('reg.err.errore_generico'))
return
} */
2021-09-04 15:05:34 +02:00
if (signup.name) {
signup.name = tools.CapitalizeAllWords(signup.name)
signup.surname = tools.CapitalizeAllWords(signup.surname)
}
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
$q.loading.show({ message: t('reg.incorso') })
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
console.log(signup)
return userStore.signup(tools.clone(signup))
.then((ris: any) => {
2021-12-29 18:26:41 +01:00
if (tools.SignUpcheckErrors($q, $router, ris.code, ris.msg))
2021-09-16 21:08:02 +02:00
$q.loading.hide()
}).catch((error: string) => {
console.log('ERROR = ' + error)
$q.loading.hide()
})
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
}
2021-09-04 15:05:34 +02:00
2021-09-16 21:08:02 +02:00
function intcode_change(coderec: any) {
// console.log('intcode', coderec)
if (signup.profile) {
signup.profile.intcode_cell = '+' + coderec.dialCode
signup.profile.iso2_cell = coderec.iso2
}
}
2021-09-04 15:05:34 +02:00
2021-12-29 18:26:41 +01:00
function selectcountry({ name, iso2, dialCode }: {name: string, iso2: string, dialCode: string}) {
2021-09-16 21:08:02 +02:00
// console.log(name, iso2, dialCode)
signup.profile.nationality = iso2
countryname.value = name
}
2021-09-04 15:05:34 +02:00
async function created() {
2021-12-29 18:26:41 +01:00
needTelegram.value = props.need_Telegram
2021-12-29 18:26:41 +01:00
console.log('$route.params', $route.params)
ap_iniziale.value = !!$route.params.invited ? $route.params.invited.toString() : ''
signup.aportador_solidario = !!$route.params.invited ? $route.params.invited.toString() : ''
signup.username = !!$route.params.usernameteleg ? $route.params.usernameteleg.toString() : ''
signup.regexpire = !!$route.params.regexpire ? $route.params.regexpire.toString() : props.regexpire
if (signup.username)
isalreadyReg.value = await tools.registeredusername(signup.username)
signup.profile.username_telegram = signup.username
if (!!$route.params.idteleg) {
signup.profile.teleg_id = $route.params.idteleg ? parseInt($route.params.idteleg.toString(), 10) : 0
}
2021-12-29 18:26:41 +01:00
2023-01-03 16:51:45 +01:00
if (props.collettivo) {
signup.username = props.username_default!
signup.name = props.name_default!
}
2021-12-29 18:26:41 +01:00
console.log('1) aportador_solidario', signup.aportador_solidario)
if (!signup.aportador_solidario)
signup.aportador_solidario = tools.getCookie(tools.APORTADOR_SOLIDARIO, signup.aportador_solidario)
if (!signup.aportador_solidario || signup.aportador_solidario === 'undefined') {
if (!tools.getAskToVerifyReg()) {
signup.aportador_solidario = tools.APORTADOR_NONE
}
2021-12-29 18:26:41 +01:00
}
console.log('signup.aportador_solidario', signup.aportador_solidario)
2023-11-03 12:49:17 +01:00
console.log('getasktoverify', tools.getAskToVerifyReg())
if (tools.getAskToVerifyReg()) {
if (!signup.username || !signup.profile.teleg_id) {
// tools.copyStringToClipboard($q, signup.aportador_solidario, true)
visubuttBOT.value = true
// window.location.href = tools.getLinkBotTelegram()
}
}
2021-12-29 18:26:41 +01:00
}
2022-01-05 19:11:47 +01:00
function myRuleEmail(val: string) {
return new Promise((resolve, reject) => {
// call
// resolve(true)
// --> content is valid
// resolve(false)
// --> content is NOT valid, no error message
// resolve(error_message)
// --> content is NOT valid, we have error message
2022-12-17 14:12:04 +01:00
tools.registeredemail(val).then((emailOk) => {
let risp = !!emailOk || t('reg.err.duplicate_email')
if (emailOk) {
2022-01-05 19:11:47 +01:00
risp = tools.isEmail(val) || t('reg.err.invalid_email')
2022-12-17 14:12:04 +01:00
emailOk = emailOk && tools.isEmail(val)
2022-01-05 19:11:47 +01:00
}
2022-12-17 14:12:04 +01:00
if (emailOk) {
risp = !tools.isEmailNoMicroZozz(val) || t('reg.err.invalid_email_micro')
}
2022-01-05 19:11:47 +01:00
resolve(risp)
})
// calling reject(...) will also mark the input
// as having an error, but there will not be any
// error message displayed below the input
// (only in browser console)
})
}
function showPassword() {
//
typePassword.value = typePassword.value === 'password' ? 'text' : 'password'
}
2022-12-17 14:12:04 +01:00
function regEventEmail(invited: boolean) {
console.log('EVENT RECEIVED: regEventEmail', invited)
// reg
visubuttBOT.value = false
needTelegram.value = false
}
2021-12-29 18:26:41 +01:00
created()
2021-09-16 21:08:02 +02:00
return {
changeemail,
changeusername,
submitOk,
selectcountry,
intcode_change,
tools,
countryname,
signup,
iamadult,
v$,
t,
2021-09-16 21:08:02 +02:00
allowSubmit,
2022-01-05 19:11:47 +01:00
myRuleEmail,
visureg,
2022-03-12 22:21:40 +01:00
showpolicy,
visubuttBOT,
isalreadyReg,
2022-11-23 10:27:36 +01:00
site,
showPassword,
typePassword,
ap_iniziale,
regEventEmail,
needTelegram,
2022-12-17 14:12:04 +01:00
slide,
checkifDisabled,
2022-12-20 10:58:55 +01:00
inputAportador,
2022-12-17 14:12:04 +01:00
inputEmail,
inputUsername,
inputName,
inputSurname,
2022-12-17 14:12:04 +01:00
inputPassword,
inputPassword2,
2021-09-16 21:08:02 +02:00
}
},
})