woocommerce/plugins/woocommerce-blocks/packages/checkout/utils/validation/get-validity-message-for-in...

54 lines
1.4 KiB
TypeScript
Raw Normal View History

/**
* External dependencies
*/
import { __, sprintf } from '@wordpress/i18n';
Checkout: Add password field to create account form (#48985) * Add site title to account checkbox * Add customer_password support to Store API * Hide password nag if defining own password * Add woocommerce_registration_generate_password option to block assets * Change login prompt to just "log in" * Add default styling to password inputs * Reset line height for checkbox inputs * Add customer password to store * Add password field to contact information block * Handle customer password in checkout processor * Styling for new elements * Update tests so they match new create account label * Update log in link in tests * Add e2e tests for password field * Add validation message and fix rendering when account is required * Changelog * Add missing api to tests * Remove console log * rerender checkout * Update log in link in test * Adjust validation so we can change the label in messages with custom callback * Use queryByText in test * Make sure password generation is on in tests * Create password if provided password is empty * Skip "Place order" button translation test * Revert "Skip "Place order" button translation test" This reverts commit 7aed6137e88cdb3577f74f6f0c05258b531ed534. * Update plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update plugins/woocommerce-blocks/assets/js/data/checkout/reducers.ts Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Comment empty condition * Update CSS classnames * Return null in CreateAccountUI if nothing to display * Linting: Return return param * Document $password param --------- Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com> Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
2024-07-15 10:43:02 +00:00
const defaultValidityMessage =
( label: string | undefined ) =>
( validity: ValidityState ): string | undefined => {
const fieldLabel = label
? label.toLowerCase()
: __( 'field', 'woocommerce' );
const invalidFieldMessage = sprintf(
/* translators: %s field label */
__( 'Please enter a valid %s', 'woocommerce' ),
fieldLabel
);
if (
validity.valueMissing ||
validity.badInput ||
validity.typeMismatch
) {
return invalidFieldMessage;
}
};
/**
* 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).
*/
const getValidityMessageForInput = (
Checkout: Add password field to create account form (#48985) * Add site title to account checkbox * Add customer_password support to Store API * Hide password nag if defining own password * Add woocommerce_registration_generate_password option to block assets * Change login prompt to just "log in" * Add default styling to password inputs * Reset line height for checkbox inputs * Add customer password to store * Add password field to contact information block * Handle customer password in checkout processor * Styling for new elements * Update tests so they match new create account label * Update log in link in tests * Add e2e tests for password field * Add validation message and fix rendering when account is required * Changelog * Add missing api to tests * Remove console log * rerender checkout * Update log in link in test * Adjust validation so we can change the label in messages with custom callback * Use queryByText in test * Make sure password generation is on in tests * Create password if provided password is empty * Skip "Place order" button translation test * Revert "Skip "Place order" button translation test" This reverts commit 7aed6137e88cdb3577f74f6f0c05258b531ed534. * Update plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update plugins/woocommerce-blocks/assets/js/data/checkout/reducers.ts Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Comment empty condition * Update CSS classnames * Return null in CreateAccountUI if nothing to display * Linting: Return return param * Document $password param --------- Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com> Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
2024-07-15 10:43:02 +00:00
label: string | undefined,
inputElement: HTMLInputElement,
customValidityMessage?: ( validity: ValidityState ) => string | undefined
): string => {
// No errors, or custom error - return early.
Checkout: Add password field to create account form (#48985) * Add site title to account checkbox * Add customer_password support to Store API * Hide password nag if defining own password * Add woocommerce_registration_generate_password option to block assets * Change login prompt to just "log in" * Add default styling to password inputs * Reset line height for checkbox inputs * Add customer password to store * Add password field to contact information block * Handle customer password in checkout processor * Styling for new elements * Update tests so they match new create account label * Update log in link in tests * Add e2e tests for password field * Add validation message and fix rendering when account is required * Changelog * Add missing api to tests * Remove console log * rerender checkout * Update log in link in test * Adjust validation so we can change the label in messages with custom callback * Use queryByText in test * Make sure password generation is on in tests * Create password if provided password is empty * Skip "Place order" button translation test * Revert "Skip "Place order" button translation test" This reverts commit 7aed6137e88cdb3577f74f6f0c05258b531ed534. * Update plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update plugins/woocommerce-blocks/assets/js/data/checkout/reducers.ts Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Comment empty condition * Update CSS classnames * Return null in CreateAccountUI if nothing to display * Linting: Return return param * Document $password param --------- Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com> Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
2024-07-15 10:43:02 +00:00
if ( inputElement.validity.valid || inputElement.validity.customError ) {
return inputElement.validationMessage;
}
Checkout: Add password field to create account form (#48985) * Add site title to account checkbox * Add customer_password support to Store API * Hide password nag if defining own password * Add woocommerce_registration_generate_password option to block assets * Change login prompt to just "log in" * Add default styling to password inputs * Reset line height for checkbox inputs * Add customer password to store * Add password field to contact information block * Handle customer password in checkout processor * Styling for new elements * Update tests so they match new create account label * Update log in link in tests * Add e2e tests for password field * Add validation message and fix rendering when account is required * Changelog * Add missing api to tests * Remove console log * rerender checkout * Update log in link in test * Adjust validation so we can change the label in messages with custom callback * Use queryByText in test * Make sure password generation is on in tests * Create password if provided password is empty * Skip "Place order" button translation test * Revert "Skip "Place order" button translation test" This reverts commit 7aed6137e88cdb3577f74f6f0c05258b531ed534. * Update plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update plugins/woocommerce-blocks/assets/js/data/checkout/reducers.ts Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Comment empty condition * Update CSS classnames * Return null in CreateAccountUI if nothing to display * Linting: Return return param * Document $password param --------- Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com> Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
2024-07-15 10:43:02 +00:00
const validityMessageCallback =
customValidityMessage || defaultValidityMessage( label );
Checkout: Add password field to create account form (#48985) * Add site title to account checkbox * Add customer_password support to Store API * Hide password nag if defining own password * Add woocommerce_registration_generate_password option to block assets * Change login prompt to just "log in" * Add default styling to password inputs * Reset line height for checkbox inputs * Add customer password to store * Add password field to contact information block * Handle customer password in checkout processor * Styling for new elements * Update tests so they match new create account label * Update log in link in tests * Add e2e tests for password field * Add validation message and fix rendering when account is required * Changelog * Add missing api to tests * Remove console log * rerender checkout * Update log in link in test * Adjust validation so we can change the label in messages with custom callback * Use queryByText in test * Make sure password generation is on in tests * Create password if provided password is empty * Skip "Place order" button translation test * Revert "Skip "Place order" button translation test" This reverts commit 7aed6137e88cdb3577f74f6f0c05258b531ed534. * Update plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update plugins/woocommerce-blocks/assets/js/data/checkout/reducers.ts Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Comment empty condition * Update CSS classnames * Return null in CreateAccountUI if nothing to display * Linting: Return return param * Document $password param --------- Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com> Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com>
2024-07-15 10:43:02 +00:00
return (
validityMessageCallback( inputElement.validity ) ||
inputElement.validationMessage
);
};
export default getValidityMessageForInput;