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

331 lines
8.9 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'
2022-03-12 22:21:40 +01:00
import { PagePolicy } from '../PagePolicy'
2021-12-29 18:26:41 +01:00
import { computed, defineComponent, 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 },
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,
},
need_Telegram: {
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 globalStore = useGlobalStore()
2021-12-29 18:26:41 +01:00
const signup = reactive(<ISignupOptions>{
2021-09-16 21:08:02 +02:00
email: process.env.TEST_EMAIL || '',
username: process.env.TEST_USERNAME || '',
name: static_data.functionality.SHOW_NAMESURNAME ? (process.env.TEST_NAME || '') : '',
surname: static_data.functionality.SHOW_NAMESURNAME ? (process.env.TEST_SURNAME || '') : '',
2021-09-16 21:08:02 +02:00
password: process.env.TEST_PASSWORD || '',
repeatPassword: process.env.TEST_PASSWORD || '',
terms: !process.env.PROD,
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,
minLength: minLength(6),
complexityUser,
2021-09-19 02:59:24 +02:00
registereduser,
},
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 = {
required,
}
valid.surname = {
required,
}
}
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
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
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
2021-09-16 21:08:02 +02:00
function inputUsername(value: string) {
signup.username = value.trim()
}
2021-09-04 15:05:34 +02:00
async function created() {
2021-12-29 18:26:41 +01:00
console.log('$route.params', $route.params)
signup.aportador_solidario = !!$route.params.invited ? $route.params.invited.toString() : ''
signup.username = !!$route.params.usernameteleg ? $route.params.usernameteleg.toString() : ''
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()) : 0
}
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') {
signup.aportador_solidario = tools.APORTADOR_NONE
}
console.log('signup.aportador_solidario', signup.aportador_solidario)
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
tools.registeredemail(val).then((ris) => {
let risp = !!ris || t('reg.err.duplicate_email')
if (ris) {
risp = tools.isEmail(val) || t('reg.err.invalid_email')
}
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)
})
}
2021-12-29 18:26:41 +01:00
created()
2021-09-16 21:08:02 +02:00
return {
changeemail,
changeusername,
submitOk,
inputUsername,
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,
2021-09-16 21:08:02 +02:00
}
},
})