e-mail and phone validation in group-subheader component

This commit is contained in:
Anton Tranelis 2024-11-22 13:27:15 +01:00
parent 594784e77a
commit 1923e180d4
4 changed files with 62 additions and 48 deletions

View File

@ -13,6 +13,8 @@ type InputTextProps = {
defaultValue?: string defaultValue?: string
placeholder?: string placeholder?: string
autocomplete?: string autocomplete?: string
pattern?: string
required?: boolean
updateFormValue?: (value: string) => void updateFormValue?: (value: string) => void
} }
@ -26,6 +28,8 @@ export function TextInput({
defaultValue, defaultValue,
placeholder, placeholder,
autocomplete, autocomplete,
pattern,
required = true,
updateFormValue, updateFormValue,
}: InputTextProps) { }: InputTextProps) {
const [inputValue, setInputValue] = useState<string>(defaultValue || '') const [inputValue, setInputValue] = useState<string>(defaultValue || '')
@ -50,7 +54,8 @@ export function TextInput({
</label> </label>
) : null} ) : null}
<input <input
required required={required}
pattern={pattern}
type={type || 'text'} type={type || 'text'}
name={dataField} name={dataField}
value={inputValue} value={inputValue}

View File

@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-misused-promises */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/restrict-template-expressions */
@ -147,6 +146,23 @@ export function ProfileForm() {
<MapOverlayPage <MapOverlayPage
backdrop backdrop
className='tw-mx-4 tw-mt-4 tw-mb-4 tw-overflow-x-hidden tw-w-[calc(100%-32px)] md:tw-w-[calc(50%-32px)] tw-max-w-3xl !tw-left-auto tw-top-0 tw-bottom-0' className='tw-mx-4 tw-mt-4 tw-mb-4 tw-overflow-x-hidden tw-w-[calc(100%-32px)] md:tw-w-[calc(50%-32px)] tw-max-w-3xl !tw-left-auto tw-top-0 tw-bottom-0'
>
<form
onSubmit={(e) => {
e.preventDefault()
void onUpdateItem(
state,
item,
tags,
addTag,
setLoading,
navigate,
updateItem,
addItem,
user,
urlParams,
)
}}
> >
<div className='tw-flex tw-flex-col tw-h-full'> <div className='tw-flex tw-flex-col tw-h-full'>
<FormHeader item={item} state={state} setState={setState} /> <FormHeader item={item} state={state} setState={setState} />
@ -177,20 +193,7 @@ export function ProfileForm() {
<div className='tw-mt-4'> <div className='tw-mt-4'>
<button <button
className={loading ? ' tw-loading tw-btn tw-float-right' : 'tw-btn tw-float-right'} className={loading ? ' tw-loading tw-btn tw-float-right' : 'tw-btn tw-float-right'}
onClick={() => type='submit'
onUpdateItem(
state,
item,
tags,
addTag,
setLoading,
navigate,
updateItem,
addItem,
user,
urlParams,
)
}
style={{ style={{
backgroundColor: `${item.layer?.itemColorField && getValue(item, item.layer?.itemColorField) ? getValue(item, item.layer?.itemColorField) : getItemTags(item) && getItemTags(item)[0] && getItemTags(item)[0].color ? getItemTags(item)[0].color : item?.layer?.markerDefaultColor}`, backgroundColor: `${item.layer?.itemColorField && getValue(item, item.layer?.itemColorField) ? getValue(item, item.layer?.itemColorField) : getItemTags(item) && getItemTags(item)[0] && getItemTags(item)[0].color ? getItemTags(item)[0].color : item?.layer?.markerDefaultColor}`,
color: '#fff', color: '#fff',
@ -200,6 +203,7 @@ export function ProfileForm() {
</button> </button>
</div> </div>
</div> </div>
</form>
</MapOverlayPage> </MapOverlayPage>
</> </>
) )

View File

@ -22,6 +22,7 @@ export const ContactInfoForm = ({
<TextInput <TextInput
placeholder='Email' placeholder='Email'
type='email' type='email'
required={false}
defaultValue={state.contact} defaultValue={state.contact}
updateFormValue={(v) => updateFormValue={(v) =>
setState((prevState) => ({ setState((prevState) => ({
@ -41,6 +42,9 @@ export const ContactInfoForm = ({
</label> </label>
<TextInput <TextInput
placeholder='Telefonnummer' placeholder='Telefonnummer'
type='tel'
required={false}
pattern='^\+?[0-9\s\-]{7,15}$'
defaultValue={state.telephone} defaultValue={state.telephone}
updateFormValue={(v) => updateFormValue={(v) =>
setState((prevState) => ({ setState((prevState) => ({

View File

@ -44,6 +44,7 @@ export const FormHeader = ({ item, state, setState }) => {
/> />
<TextInput <TextInput
placeholder='Subtitle' placeholder='Subtitle'
required={false}
defaultValue={item?.subname ? item.subname : ''} defaultValue={item?.subname ? item.subname : ''}
updateFormValue={(v) => updateFormValue={(v) =>
setState((prevState) => ({ setState((prevState) => ({