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); 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) => { return (value) => {
const lower = value && value.toLowerCase(); const lower = value && value.toLowerCase();
if (isValid(lower)) { if (isValid(lower)) {
return lower; return lower;
} else { } else {
if (allowNumbers) {
const convNumber = +value;
if (!isNaN(convNumber)) {
return value;
}
}
throw new Error('Invalid value: ' + value); throw new Error('Invalid value: ' + value);
} }
}; };

View File

@ -48,12 +48,12 @@ export const placeholderColorProperty = new CssProperty<Style, Color>({
}); });
placeholderColorProperty.register(Style); 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 }); export const keyboardTypeProperty = new Property<EditableTextBase, KeyboardType>({ name: 'keyboardType', valueConverter: keyboardTypeConverter });
keyboardTypeProperty.register(EditableTextBase); 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 }); export const returnKeyTypeProperty = new Property<EditableTextBase, ReturnKeyType>({ name: 'returnKeyType', valueConverter: returnKeyTypeConverter });
returnKeyTypeProperty.register(EditableTextBase); returnKeyTypeProperty.register(EditableTextBase);
@ -68,7 +68,7 @@ editableProperty.register(EditableTextBase);
export const updateTextTriggerProperty = new Property<EditableTextBase, UpdateTextTrigger>({ name: 'updateTextTrigger', defaultValue: 'textChanged' }); export const updateTextTriggerProperty = new Property<EditableTextBase, UpdateTextTrigger>({ name: 'updateTextTrigger', defaultValue: 'textChanged' });
updateTextTriggerProperty.register(EditableTextBase); 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>({ export const autocapitalizationTypeProperty = new Property<EditableTextBase, AutocapitalizationType>({
name: 'autocapitalizationType', name: 'autocapitalizationType',

View File

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

View File

@ -27,6 +27,13 @@ export class TextField extends TextFieldBase {
setSecureAndKeyboardType(): void { setSecureAndKeyboardType(): void {
let inputType: number; 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. // Password variations are supported only for Text and Number classes.
if (this.secure) { if (this.secure) {
if (this.keyboardType === 'number') { if (this.keyboardType === 'number') {