react-native-advanced-input-mask
Version:
Text input mask for React Native on iOS, Android and web. Synchronous and easy formatting without hustle
46 lines (34 loc) • 1.14 kB
text/typescript
import { getCharacterTypeString } from "../utils";
import State from "./State";
import type { Notation } from "../../../types";
import type { Next, StateType } from "../types";
class OptionalValueState extends State {
stateType: StateType | Notation;
constructor(child: State, stateType: StateType | Notation) {
super(child);
this.stateType = stateType;
}
private accepts(character: string): boolean {
if (this.stateType) {
if ("name" in this.stateType) {
return this.stateType.regex.test(character);
}
return this.stateType.characterSet.includes(character);
}
return false;
}
accept: (character: string) => Next = (character) =>
this.accepts(character)
? {
state: this.nextState(),
insert: character,
pass: true,
value: character,
}
: { state: this.nextState(), insert: null, pass: false, value: null };
toString: () => string = () => {
const typeStr = getCharacterTypeString(this.stateType);
return `${typeStr} -> ${this.child?.toString() ?? "null"}`;
};
}
export default OptionalValueState;