react-native-moyasar-sdk
Version:
Official React Native Moyasar SDK - Integrate Credit Cards, Apple Pay, Samsung Pay, and STC Pay with simple interfaces for a seamless payment experience in your React Native app
64 lines (56 loc) • 1.94 kB
text/typescript
import type { CreditCardNetwork } from '../../models/credit_card_network';
type Predicate = (
value: string,
creditCardNumber: string | undefined,
supportedNetworks: CreditCardNetwork[] | undefined
) => boolean;
interface ValidationRule {
predicate: Predicate;
error: string;
}
export class FieldValidator {
private rules: ValidationRule[] = [];
private shouldErr: boolean = false;
addRule(error: string, predicate: Predicate): void {
this.rules.push({ predicate, error });
}
// TODO: Refactor to named params
/**
* Validates input but only shows errors after the field has been touched
* @param value The value to validate
* @param creditCardNumber Optional credit card number
* @param supportedNetworks Optional array of supported credit card networks (Needed for supported networks validation)
* @returns Error message if validation fails and the field has been touched, null otherwise
*/
visualValidate(
value: string,
creditCardNumber?: string,
supportedNetworks?: CreditCardNetwork[]
): string | null {
this.shouldErr = this.shouldErr || value !== '';
if (!this.shouldErr) {
return null;
}
return this.validate(value, creditCardNumber, supportedNetworks);
}
// TODO: Refactor to named params
/**
* Validates input against defined rules
* @param value The value to validate
* @param creditCardNumber Optional credit card number
* @param supportedNetworks Optional array of supported credit card networks (Needed for supported networks validation)
* @returns Error message if validation fails, null if validation passes
*/
validate(
value: string,
creditCardNumber?: string,
supportedNetworks?: CreditCardNetwork[]
): string | null {
for (const rule of this.rules) {
if (rule.predicate(value, creditCardNumber, supportedNetworks)) {
return rule.error;
}
}
return null;
}
}