forked from MapComplete/MapComplete
Nailed phone number input
This commit is contained in:
parent
585a4243f7
commit
07c85bb218
3 changed files with 52 additions and 19 deletions
|
@ -140,9 +140,7 @@ export default class ValidatedTextField {
|
|||
}
|
||||
return parsePhoneNumberFromString(str, country?.toUpperCase())?.isValid() ?? false
|
||||
},
|
||||
(str, country: any) => {
|
||||
return parsePhoneNumberFromString(str, country?.toUpperCase()).formatInternational()
|
||||
}
|
||||
(str, country: any) => parsePhoneNumberFromString(str, country?.toUpperCase()).formatInternational()
|
||||
)
|
||||
]
|
||||
|
||||
|
@ -170,21 +168,38 @@ export default class ValidatedTextField {
|
|||
value?: UIEventSource<string>,
|
||||
textArea?: boolean,
|
||||
textAreaRows?: number,
|
||||
isValid?: ((s: string) => boolean)
|
||||
isValid?: ((s: string, country: string) => boolean),
|
||||
country?: string
|
||||
}): InputElement<string> {
|
||||
options = options ?? {};
|
||||
options.placeholder = options.placeholder ?? type;
|
||||
const tp: TextFieldDef = ValidatedTextField.AllTypes[type]
|
||||
let isValid = tp.isValid;
|
||||
const isValidTp = tp.isValid;
|
||||
let isValid;
|
||||
if (options.isValid) {
|
||||
const optValid = options.isValid;
|
||||
isValid = (str, country) => {
|
||||
return ValidatedTextField.AllTypes[type](str, country) && optValid(str);
|
||||
if(str === undefined){
|
||||
return false;
|
||||
}
|
||||
return isValidTp(str, country ?? options.country) && optValid(str, country ?? options.country);
|
||||
}
|
||||
}else{
|
||||
isValid = isValidTp;
|
||||
}
|
||||
options.isValid = isValid;
|
||||
|
||||
let input: InputElement<string> = new TextField(options);
|
||||
if (tp.reformat) {
|
||||
input.GetValue().addCallbackAndRun(str => {
|
||||
if (!options.isValid(str, options.country)) {
|
||||
return;
|
||||
}
|
||||
const formatted = tp.reformat(str, options.country);
|
||||
input.GetValue().setData(formatted);
|
||||
})
|
||||
}
|
||||
|
||||
if (tp.inputHelper) {
|
||||
input = new CombinedInputElement(input, tp.inputHelper(input.GetValue()));
|
||||
}
|
||||
|
@ -252,11 +267,12 @@ export default class ValidatedTextField {
|
|||
startValidated?: boolean,
|
||||
textArea?: boolean,
|
||||
textAreaRows?: number,
|
||||
isValid?: ((string: string) => boolean)
|
||||
isValid?: ((string: string) => boolean),
|
||||
country?: string
|
||||
}): InputElement<T> {
|
||||
let textField: InputElement<string>;
|
||||
if (options.type) {
|
||||
textField = ValidatedTextField.InputForType(options.type);
|
||||
textField = ValidatedTextField.InputForType(options.type, options);
|
||||
} else {
|
||||
textField = new TextField(options);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue