{"version":3,"file":"DcoFqk-t.js","sources":["../../../../src/components/formFields/email/email.vue","../../../../src/components/form/registration/composables/useRegistrationForm.ts"],"sourcesContent":["\n\n","import {\n useCachedGet,\n useSecureSessionPost,\n} from '~~/src/composables/dataFetching/genericFetchers';\nimport type { Result as GetResult } from '~~/src/server/api/[site]/user/register.get';\nimport type { Result } from '~~/src/server/api/[site]/user/register.post';\nimport type { RegistrationFormData } from '../types';\nimport type { ErrorIdent } from '~/@types/errorIdents';\nimport type { UserData } from '@/server/gateway/connections/shopware/actions/registerUser';\nimport { CustomerGroupId } from '~/@types/customerGroupIds';\nimport useCustomerGroupMaps from '~/composables/user/useCustomerGroupMaps';\nimport { useSessionStore } from '~/stores/useSessionStore';\nimport { handleLoadingError } from '~/utils/handleLoadingError';\nimport { componentVisibilitySettings as componentVisibilitySettings_IK } from '@/injectionSymbols';\nimport useValidateAddressExternal from '~/components/formTools/address/validation/composables/useValidateAddressExternal';\nimport { getNode } from '@formkit/core';\nimport useRecaptcha from '@/components/formTools/recaptcha/useRecaptcha';\n\nexport function useRegistrationForm(isInDialogRef: Ref) {\n const site = useSiteIdent();\n const useValidateAddress = useValidateAddressExternal();\n const registerData = ref(null);\n const errors = ref([]);\n\n const isLoading = ref(false);\n const initialized = ref(false);\n const injected = inject(componentVisibilitySettings_IK);\n const showSuccessScreen = ref(false);\n const customerTypeOptions = ref([]);\n const groups = ref([]);\n const selectedType = ref();\n const session = useSessionStore();\n const { captcha } = useRecaptcha();\n const usesCaptcha = computed(() => !!captcha.value);\n\n const hasVerificationFiles = computed(() => {\n return useCustomerGroupMaps().verificationNeeded[site].includes(\n selectedType.value,\n );\n });\n\n const canPossiblyBuyDrugs = computed(() => {\n return useCustomerGroupMaps().drugPurchasePossible[site].includes(\n selectedType.value,\n );\n });\n\n const isInDialog = ref(false);\n watch(\n () => isInDialogRef.value,\n (v) => {\n isInDialog.value = v;\n },\n );\n\n if (import.meta.client) {\n setTimeout(() => load(), 0);\n }\n\n async function load() {\n const result = await useCachedGet(`/api/${site}/user/register`);\n const lang = useNuxtApp().$languageCode;\n\n if (result.data?.value?.groups && result.data?.value?.countries) {\n registerData.value = result.data.value;\n groups.value = result.data.value.groups;\n customerTypeOptions.value = result.data.value.groups\n .sort(function (a: any, b: any) {\n return a.sort.localeCompare(b.sort, lang, { numeric: true });\n })\n .map((group) => ({\n value: group.id,\n label: group.name,\n }));\n selectedType.value = customerTypeOptions.value[0].value;\n initialized.value = true;\n }\n }\n\n async function checkValidity() {\n const form = document.getElementById('registration-form');\n if (!form) return;\n\n // Sleep for quarter second till form is updated with validation information\n await new Promise((r) => setTimeout(r, 250));\n const invalidElements = form.querySelectorAll('[data-invalid=true]');\n\n if (!invalidElements.length) return;\n\n invalidElements[0].scrollIntoView({\n behavior: 'smooth',\n });\n }\n\n async function onSubmit(data: RegistrationFormData) {\n //needed because when the form is subitted while the input is focused, formkit throws an error when it tries to blur the already unmounted input\n (document.activeElement as HTMLElement)?.blur();\n isLoading.value = true;\n\n try {\n await useValidateAddress.validateAddress({\n countryId: registerData.value.countries.find(\n (country) => country.code === data.country,\n )?.code,\n city: data.zipCity.city,\n zipcode: data.zipCity.zip,\n street: data.streetNumber.street,\n number: data.streetNumber.houseNumber,\n });\n } catch (e) {\n handleLoadingError(e);\n // We just keep going and ignore the validation if it fails (for any reason)\n }\n\n if (useValidateAddress.needsManualCheck.value) {\n isLoading.value = false;\n return;\n }\n\n await register(data);\n isLoading.value = false;\n }\n\n async function register(formData: RegistrationFormData) {\n try {\n const postData: UserData = {\n groupId: selectedType.value,\n title: formData.title,\n firstname: formData.firstname,\n lastname: formData.lastname,\n email: formData.email,\n billingEmail: formData.billingEmail,\n password: formData.password.password,\n confirmPassword: formData.password.confirmPassword,\n billingAddress: {\n name1: formData.name1,\n name2: formData.name2 ?? '',\n street: formData.streetNumber.street,\n number: formData.streetNumber.houseNumber,\n zipcode: formData.zipCity.zip,\n city: formData.zipCity.city,\n countryId: registerData.value.countries.find(\n (country) => country.code === formData.country,\n )?.id,\n phone: formData.phone.fullPhoneNumber,\n taxId: formData.hasTaxId ? formData.taxId : undefined,\n },\n };\n\n const fileInputs = document.querySelectorAll('[name^=\"files\"]');\n const body = new FormData();\n body.append('userData', JSON.stringify(postData));\n body.append(\n 'captcha',\n JSON.stringify(\n await (captcha.value ? captcha.value?.execute('submit') : null),\n ),\n );\n fileInputs.forEach((input) => {\n if ((input as HTMLInputElement)?.files?.length) {\n body.append(\n (input as HTMLInputElement).name,\n (input as HTMLInputElement)?.files?.[0],\n );\n }\n });\n\n const data = await useSecureSessionPost(\n `/api/${site}/user/register`,\n body,\n );\n\n if (data?.sessionId) {\n session.login(data.sessionId);\n showSuccessScreen.value = true;\n }\n\n isLoading.value = false;\n } catch (e: any) {\n errors.value = e?.data?.data?.errors ?? [];\n if (isInDialog.value) {\n document.querySelector('.js-dialog-scroll-container')?.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n } else\n document.querySelector('.js-error-container')?.scrollIntoView({\n behavior: 'smooth',\n });\n isLoading.value = false;\n handleLoadingError(e);\n }\n }\n\n function handleFillAddress(data: any) {\n useValidateAddress.resetManualCheck();\n getNode('registrationStreet').input(data.street);\n getNode('registrationHouseNumber').input(data.number);\n getNode('registrationCity').input(data.city);\n getNode('registrationZip').input(data.zipcode);\n }\n\n const showWarning = computed(\n () =>\n injected?.showRegistrationHint &&\n (selectedType.value === CustomerGroupId.OTHER ||\n selectedType.value === CustomerGroupId.STUDENT ||\n selectedType.value === CustomerGroupId.COMPANY),\n );\n return {\n onSubmit,\n customerTypeOptions,\n isLoading,\n initialized,\n errors,\n checkValidity,\n showSuccessScreen,\n registerData,\n selectedType,\n hasVerificationFiles,\n showWarning,\n canPossiblyBuyDrugs,\n needsManualCheck: useValidateAddress.needsManualCheck,\n resetManualCheck: useValidateAddress.resetManualCheck,\n validationResult: useValidateAddress.validationResult,\n handleFillAddress,\n usesCaptcha,\n };\n}\n"],"names":["props","__props","emit","__emit","value","ref","watch","newValue","useRegistrationForm","isInDialogRef","site","useSiteIdent","useValidateAddress","useValidateAddressExternal","registerData","errors","isLoading","initialized","injected","inject","componentVisibilitySettings_IK","showSuccessScreen","customerTypeOptions","groups","selectedType","session","useSessionStore","captcha","useRecaptcha","usesCaptcha","computed","hasVerificationFiles","useCustomerGroupMaps","canPossiblyBuyDrugs","isInDialog","v","load","result","useCachedGet","lang","useNuxtApp","_b","_a","_d","_c","a","b","group","checkValidity","form","r","invalidElements","onSubmit","data","country","e","handleLoadingError","register","formData","postData","fileInputs","body","input","useSecureSessionPost","_e","_f","handleFillAddress","getNode","showWarning","CustomerGroupId"],"mappings":"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"}