2021-08-03 04:44:13 +03:00
|
|
|
/*
|
|
|
|
* https://github.com/morethanwords/tweb
|
|
|
|
* Copyright (C) 2019-2021 Eduard Kuzmenko
|
|
|
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE
|
|
|
|
*/
|
|
|
|
|
|
|
|
import InputField, { InputFieldOptions } from "./inputField";
|
|
|
|
|
|
|
|
export default class CodeInputField extends InputField {
|
|
|
|
constructor(options: InputFieldOptions & {
|
|
|
|
length: number,
|
|
|
|
onFill: (code: string) => void
|
|
|
|
}) {
|
|
|
|
super({
|
|
|
|
plainText: true,
|
|
|
|
...options
|
|
|
|
});
|
|
|
|
|
|
|
|
const input = this.input as HTMLInputElement;
|
|
|
|
input.type = 'tel';
|
|
|
|
input.setAttribute('required', '');
|
|
|
|
input.autocomplete = 'off';
|
|
|
|
|
|
|
|
let lastLength = 0;
|
|
|
|
this.input.addEventListener('input', (e) => {
|
|
|
|
this.input.classList.remove('error');
|
|
|
|
this.setLabel();
|
|
|
|
|
|
|
|
const value = this.value.replace(/\D/g, '').slice(0, options.length);
|
|
|
|
this.setValueSilently(value);
|
|
|
|
|
|
|
|
const length = this.value.length;
|
|
|
|
if(length === options.length) { // submit code
|
|
|
|
options.onFill(this.value);
|
|
|
|
} else if(length === lastLength) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
lastLength = length;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|