fix(android): KeyboardType now respects numbers (#9240)

This commit is contained in:
Nathanael Anderson
2021-02-26 18:23:50 -06:00
committed by GitHub
parent c04e1b59e5
commit f08fcb17b4
4 changed files with 24 additions and 6 deletions

View File

@ -1546,12 +1546,18 @@ export function makeValidator<T>(...values: T[]): (value: any) => value is T {
return (value: any): value is T => set.has(value);
}
export function makeParser<T>(isValid: (value: any) => boolean): (value: any) => T {
export function makeParser<T>(isValid: (value: any) => boolean, allowNumbers = false): (value: any) => T {
return (value) => {
const lower = value && value.toLowerCase();
if (isValid(lower)) {
return lower;
} else {
if (allowNumbers) {
const convNumber = +value;
if (!isNaN(convNumber)) {
return value;
}
}
throw new Error('Invalid value: ' + value);
}
};

View File

@ -48,12 +48,12 @@ export const placeholderColorProperty = new CssProperty<Style, Color>({
});
placeholderColorProperty.register(Style);
const keyboardTypeConverter = makeParser<KeyboardType>(makeValidator<KeyboardType>('datetime', 'phone', 'number', 'url', 'email', 'integer'));
const keyboardTypeConverter = makeParser<KeyboardType>(makeValidator<KeyboardType>('datetime', 'phone', 'number', 'url', 'email', 'integer'), true);
export const keyboardTypeProperty = new Property<EditableTextBase, KeyboardType>({ name: 'keyboardType', valueConverter: keyboardTypeConverter });
keyboardTypeProperty.register(EditableTextBase);
const returnKeyTypeConverter = makeParser<ReturnKeyType>(makeValidator<ReturnKeyType>('done', 'next', 'go', 'search', 'send'));
const returnKeyTypeConverter = makeParser<ReturnKeyType>(makeValidator<ReturnKeyType>('done', 'next', 'go', 'search', 'send'), true);
export const returnKeyTypeProperty = new Property<EditableTextBase, ReturnKeyType>({ name: 'returnKeyType', valueConverter: returnKeyTypeConverter });
returnKeyTypeProperty.register(EditableTextBase);
@ -68,7 +68,7 @@ editableProperty.register(EditableTextBase);
export const updateTextTriggerProperty = new Property<EditableTextBase, UpdateTextTrigger>({ name: 'updateTextTrigger', defaultValue: 'textChanged' });
updateTextTriggerProperty.register(EditableTextBase);
const autocapitalizationTypeConverter = makeParser<AutocapitalizationType>(makeValidator<AutocapitalizationType>('none', 'words', 'sentences', 'allcharacters'));
const autocapitalizationTypeConverter = makeParser<AutocapitalizationType>(makeValidator<AutocapitalizationType>('none', 'words', 'sentences', 'allcharacters'), true);
export const autocapitalizationTypeProperty = new Property<EditableTextBase, AutocapitalizationType>({
name: 'autocapitalizationType',

View File

@ -216,7 +216,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
const nativeView = this.nativeTextViewProtected;
try {
this._changeFromCode = true;
nativeView.setInputType(inputType);
nativeView.setInputType(parseInt(<any>inputType, 10));
} finally {
this._changeFromCode = false;
}
@ -281,7 +281,12 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
break;
default:
newInputType = value;
const inputType = +value;
if (!isNaN(inputType)) {
newInputType = inputType;
} else {
newInputType = android.text.InputType.TYPE_CLASS_TEXT;
}
break;
}

View File

@ -27,6 +27,13 @@ export class TextField extends TextFieldBase {
setSecureAndKeyboardType(): void {
let inputType: number;
// Check for a passed in Number value
const value = +this.keyboardType;
if (!isNaN(value)) {
this._setInputType(value);
return;
}
// Password variations are supported only for Text and Number classes.
if (this.secure) {
if (this.keyboardType === 'number') {