import { Constructor } from '../../../models/mixin.model'; import { ICaInput } from '../config/ca-input.config'; import { InputTransformStringEnum } from '../enums/input-text-transform.enum'; export function RestrictionPipeMixin< T extends Constructor<{ restrictInput: ICaInput }>, >(Base: T) { return class extends Base { public checkRangeRegex(value: string): boolean { if ( (!this.restrictInput.minValue && !this.restrictInput.maxValue) || !value ) { return true; // ✅ No limits, always valid } const min = this.restrictInput.minValue ?? -Infinity; const max = this.restrictInput.maxValue ?? Infinity; // ✅ Ensure the value is a valid number const tempValue = value.replace(/[^0-9]/g, ''); const numericValue = Number(tempValue); // ✅ Check if value is within the valid range return numericValue >= min && numericValue <= max; } public getTextTransformation( value: string, textTransform: InputTransformStringEnum | undefined ): string | undefined { switch (textTransform) { case InputTransformStringEnum.CAPITALIZE: return ( value.charAt(0).toUpperCase() + value.substring(1).toLowerCase() ); case InputTransformStringEnum.UPPERCASE: return value.toLocaleUpperCase('en-US'); case InputTransformStringEnum.CAPITALIZED_CASE: const capitalizedCaseWords = value.replace( /(^\w{1})|(\s+\w{1})/g, (letter: string) => letter.toUpperCase() ); return capitalizedCaseWords; default: return value; } } }; }