Merge pull request #136 from woocommerce/PCP-100-show-wc-message-on-account-creating-error

Show WC message on account creating error
This commit is contained in:
Emili Castells 2021-03-16 16:55:32 +01:00 committed by GitHub
commit 7732d1d3eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 6 deletions

View file

@ -36,7 +36,18 @@ class CheckoutActionHandler {
}).then(function (data) {
if (!data.success) {
spinner.unblock();
//handle both messages sent from Woocommerce (data.messages) and this plugin (data.data.message)
if (typeof(data.messages) !== 'undefined' )
{
const domParser = new DOMParser();
errorHandler.appendPreparedErrorMessageElement(
domParser.parseFromString(data.messages, 'text/html')
.querySelector('ul')
);
} else {
errorHandler.message(data.data.message, true);
}
return;
}
const input = document.createElement('input');

View file

@ -4,6 +4,7 @@ class ErrorHandler {
{
this.genericErrorText = genericErrorText;
this.wrapper = document.querySelector('.woocommerce-notices-wrapper');
this.messagesList = document.querySelector('ul.woocommerce-error');
}
genericError() {
@ -14,18 +15,55 @@ class ErrorHandler {
this.message(this.genericErrorText)
}
appendPreparedErrorMessageElement(errorMessageElement)
{
if(this.messagesList === null) {
this.prepareMessagesList();
}
this.messagesList.replaceWith(errorMessageElement);
}
message(text, persist = false)
{
this.wrapper.classList.add('woocommerce-error');
if(! typeof String || text.length === 0){
throw new Error('A new message text must be a non-empty string.');
}
if(this.messagesList === null){
this.prepareMessagesList();
}
if (persist) {
this.wrapper.classList.add('ppcp-persist');
} else {
this.wrapper.classList.remove('ppcp-persist');
}
this.wrapper.innerHTML = this.sanitize(text);
let messageNode = this.prepareMessagesListItem(text);
this.messagesList.appendChild(messageNode);
jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'))
}
prepareMessagesList()
{
if(this.messagesList === null){
this.messagesList = document.createElement('ul');
this.messagesList.setAttribute('class', 'woocommerce-error');
this.messagesList.setAttribute('role', 'alert');
this.wrapper.appendChild(this.messagesList);
}
}
prepareMessagesListItem(message)
{
const li = document.createElement('li');
li.innerHTML = message;
return li;
}
sanitize(text)
{
const textarea = document.createElement('textarea');

View file

@ -163,7 +163,7 @@ class CreateOrderEndpoint implements EndpointInterface {
$this->set_bn_code( $data );
$needs_shipping = WC()->cart && WC()->cart->needs_shipping();
$shipping_address_is_fix = $needs_shipping && 'checkout' === $data['context'] ? true : false;
$shipping_address_is_fix = $needs_shipping && 'checkout' === $data['context'];
$order = $this->api_endpoint->create(
$purchase_units,
$this->payer( $data, $wc_order ),
@ -173,7 +173,7 @@ class CreateOrderEndpoint implements EndpointInterface {
$shipping_address_is_fix
);
if ( 'checkout' === $data['context'] ) {
$this->validate_checkout_form( $data['form'], $order );
$this->process_checkout_form( $data['form'], $order );
}
if ( 'pay-now' === $data['context'] && get_option( 'woocommerce_terms_page_id', '' ) !== '' ) {
$this->validate_paynow_form( $data['form'] );
@ -263,7 +263,7 @@ class CreateOrderEndpoint implements EndpointInterface {
*
* @throws \Exception On Error.
*/
private function validate_checkout_form( string $form_values, Order $order ) {
private function process_checkout_form( string $form_values, Order $order ) {
$this->order = $order;
$form_values = explode( '&', $form_values );