59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { __, sprintf } from '@wordpress/i18n';
|
|
|
|
/**
|
|
* Ensures that a given value contains a string, or throws an error.
|
|
*/
|
|
export const mustContain = (
|
|
value: string,
|
|
requiredValue: string
|
|
): true | never => {
|
|
if ( ! value.includes( requiredValue ) ) {
|
|
throw Error(
|
|
sprintf(
|
|
/* translators: %1$s value passed to filter, %2$s : value that must be included. */
|
|
__(
|
|
'Returned value must include %1$s, you passed "%2$s"',
|
|
'woo-gutenberg-products-block'
|
|
),
|
|
requiredValue,
|
|
value
|
|
)
|
|
);
|
|
}
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Converts an input's validityState to a string to display on the frontend.
|
|
*
|
|
* This returns custom messages for invalid/required fields. Other error types use defaults from the browser (these
|
|
* could be implemented in the future but are not currently used by the block checkout).
|
|
*/
|
|
export const getValidityMessageForInput = (
|
|
label: string,
|
|
inputElement: HTMLInputElement
|
|
): string => {
|
|
const { valid, customError, valueMissing, badInput, typeMismatch } =
|
|
inputElement.validity;
|
|
|
|
// No errors, or custom error - return early.
|
|
if ( valid || customError ) {
|
|
return inputElement.validationMessage;
|
|
}
|
|
|
|
const invalidFieldMessage = sprintf(
|
|
/* translators: %s field label */
|
|
__( 'Please enter a valid %s', 'woo-gutenberg-products-block' ),
|
|
label.toLowerCase()
|
|
);
|
|
|
|
if ( valueMissing || badInput || typeMismatch ) {
|
|
return invalidFieldMessage;
|
|
}
|
|
|
|
return inputElement.validationMessage || invalidFieldMessage;
|
|
};
|