mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2025-12-13 07:46:10 +00:00
e-mail and phone validation in group-subheader component
This commit is contained in:
parent
594784e77a
commit
1923e180d4
@ -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}
|
||||||
|
|||||||
@ -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>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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) => ({
|
||||||
|
|||||||
@ -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) => ({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user