diff --git a/frontend/src/lib/components/textfield/TelephoneField.svelte b/frontend/src/lib/components/textfield/TelephoneField.svelte index 788a30c..0456033 100644 --- a/frontend/src/lib/components/textfield/TelephoneField.svelte +++ b/frontend/src/lib/components/textfield/TelephoneField.svelte @@ -15,10 +15,10 @@ // You must use E164 number format. It's guarantee the parsing and storing consistency. export let value: E164Number | null = '+36301234567'; - // Validity - let valid = true; - export let invalid: boolean = false; - $: invalid = !valid; + // Validity + let valid = true; + export let error: string = ''; + $: error = valid ? '' : 'Zadejte platný telefon s předvolbou. Například +420 123 456 789'; // Optional - Extended details about the parsed phone number let parsedTelInput: NormalizedTelNumber | null = null; @@ -33,10 +33,11 @@ }; const isTooltip = helperText ? tippy : () => {}; - $: tooltipDelay = invalid ? 0 : 1000; + $: tooltipDelay = !valid ? 0 : 1000; -
-
- +
+ @@ -75,29 +81,29 @@ \ No newline at end of file + .wrapper :global(.invalid) { + /* border-color: red; */ + @apply border-red-700; + } + diff --git a/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte b/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte index d02da74..d4d48a7 100644 --- a/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte +++ b/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte @@ -18,7 +18,6 @@ import { SvelteToast, toast } from '@zerodevx/svelte-toast'; import { createForm } from 'svelte-forms-lib'; - import { writable, type Writable } from 'svelte/store'; import * as yup from 'yup'; import type { CandidateData } from '$lib/stores/candidate'; import AccountLinkCheckBox from '$lib/components/checkbox/AccountLinkCheckBox.svelte'; @@ -28,11 +27,13 @@ import { isPersonalIdNumberWithBirthdateValid } from '$lib/utils/personalIdFormat'; import PersonalIdErrorModal from '$lib/components/modal/PersonalIdErrorModal.svelte'; import LinkErrorModal from '$lib/components/modal/LinkErrorModal.svelte'; + import type { Writable } from 'svelte/store'; let pageIndex = 0; let pagesFilled = [false, false, false, false, false, false, false, false]; - let editModePageIndex = 3; + const editModePageIndex = 3; const pageCount = pagesFilled.length; + let pageTexts = [ $LL.candidate.register.second.title(), $LL.candidate.register.third.title(), @@ -46,20 +47,6 @@ export let data: PageData; let details = data.candidate; let baseCandidateDetails = data.whoami; - let componentErrors = writable( { - candidate: { - telephone: false, - personalIdMatch: false, - }, - parents: [ - { - telephone: false, - }, - { - telephone: false, - } - ] - }); const formInitialValues = { gdpr: false, @@ -117,9 +104,7 @@ name: yup.string().required(), surname: yup.string().required(), email: yup.string().email().required(), - telephone: yup - .string() - .required(), // already validated by the 'TelephoneField' component + telephone: yup.string().required(), // already validated by the 'TelephoneField' component birthplace: yup.string().required(), birthdate: yup .string() @@ -186,7 +171,12 @@ } return _val !== ''; }), - telephone: yup.string() + telephone: yup.string().test((_val, context) => { + if (context.path.includes('parents[1]')) { + return true; + } + return _val !== ''; + }) }) ) }); @@ -231,17 +221,15 @@ '--toastBarBackground': '#7f1d1d' } }); - $componentErrors['candidate']['personalIdMatch'] = true; throw new Error('Rodné číslo neodpovídá datumu narození'); } } - $componentErrors['candidate']['personalIdMatch'] = false; - } + }; const onSubmit = async (values: CandidateData) => { - console.log("submit button clicked"); + console.log('submit button clicked'); console.log(pagesFilled.map((_, i) => !isPageInvalid(i))); - + if (pageIndex === pageCount) { console.log('submitting'); // clone values to oldValues @@ -320,8 +308,7 @@ $typedErrors['candidate']['name'] || $typedErrors['candidate']['surname'] || $typedErrors['candidate']['email'] || - // $typedErrors['candidate']['telephone'] || - $componentErrors['candidate']['telephone'] || + $typedErrors['candidate']['telephone'] || $typedErrors['candidate']['city'] || $typedErrors['candidate']['street'] || $typedErrors['candidate']['houseNumber'] || @@ -340,8 +327,7 @@ $typedErrors['candidate']['birthdate'] || $typedErrors['candidate']['birthplace'] || $typedErrors['candidate']['personalIdNumber'] || - $typedErrors['candidate']['testLanguage'] || - $componentErrors['candidate']['personalIdMatch'] + $typedErrors['candidate']['testLanguage'] ) { return true; } @@ -351,8 +337,7 @@ $typedErrors['parents'][0]['name'] || $typedErrors['parents'][0]['surname'] || $typedErrors['parents'][0]['email'] || - // $typedErrors['parents'][0]['telephone'] - $componentErrors['parents'][0]['telephone'] + $typedErrors['parents'][0]['telephone'] ) { return true; } @@ -362,8 +347,7 @@ $typedErrors['parents'][1]['name'] || $typedErrors['parents'][1]['surname'] || $typedErrors['parents'][1]['email'] || - // $typedErrors['parents'][1]['telephone'] - $componentErrors['parents'][1]['telephone'] + $typedErrors['parents'][1]['telephone'] ) { return true; } @@ -525,32 +509,32 @@
-
- - - - - - +
+ + + + + + +
-
@@ -718,7 +702,7 @@ @@ -767,7 +751,7 @@ await handleSubmit(e); console.log(pagesFilled.map((_, i) => !isPageInvalid(i))); if (isPageInvalid(pageIndex)) return; - if (pageIndex !== pageCount) { + if (pageIndex !== pageCount) { pagesFilled[pageIndex] = true; pageIndex++; }