react-native-advanced-input-mask
Version:
Text input mask for React Native on iOS, Android and web. Synchronous and easy formatting without hustle
43 lines (29 loc) • 1.04 kB
text/typescript
import { CaretGravityType } from "../model/types";
import type CaretString from "../model/CaretString";
class CaretStringIterator {
protected caretString: CaretString;
protected currentIndex: number;
constructor(caretString: CaretString, currentIndex: number = 0) {
this.caretString = caretString;
this.currentIndex = currentIndex;
}
insertionAffectsCaret(): boolean {
const { caretGravity, caretPosition } = this.caretString;
const isBackwardGravity = caretGravity.type === CaretGravityType.Backward;
return isBackwardGravity
? this.currentIndex <= caretPosition
: this.currentIndex < caretPosition;
}
deletionAffectsCaret: () => boolean = () =>
this.currentIndex < this.caretString.caretPosition;
next(): string | null {
const { string } = this.caretString;
if (this.currentIndex >= string.length) {
return null;
}
const char = string.charAt(this.currentIndex);
this.currentIndex += 1;
return char;
}
}
export default CaretStringIterator;