Skip to content

Commit

Permalink
Error handling changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Oksydan committed Oct 3, 2023
1 parent 83761c7 commit f376718
Show file tree
Hide file tree
Showing 21 changed files with 111 additions and 56 deletions.
15 changes: 15 additions & 0 deletions _dev/js/theme/components/http/error/GenericHttpRequestError.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Generic Http Request error
* @class GenericHttpRequestError
* @property {string} message - Error message
*/
class GenericHttpRequestError extends Error {
NAME = 'GenericHttpRequestError';

constructor(message) {
super(message);
this.name = this.NAME;
}
}

export default GenericHttpRequestError;
4 changes: 2 additions & 2 deletions _dev/js/theme/components/http/useDefaultHttpRequest.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import prestashop from 'prestashop';
import useHttpRequest from './useHttpRequest';
import GenericHttpRequestError from "./error/GenericHttpRequestError";

/**
* Default http request accepting payload as object and returning promise with response
Expand All @@ -19,7 +19,7 @@ const useDefaultHttpRequest = (url, payload, options = {}) => {
resolve(resp);
})
.catch(() => {
reject(Error(prestashop.t.alert.genericHttpError));
reject(new GenericHttpRequestError('Error while sending request'));
});
});
};
Expand Down
15 changes: 4 additions & 11 deletions _dev/js/theme/core/address/handler/changeAddressCountryHandler.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import prestashop from 'prestashop';
import useAlertToast from '../../../components/useAlertToast';
import parseToHtml from '../../../utils/parseToHtml';
import updateAddressRequest from '../request/updateAddressRequest';

const { danger } = useAlertToast();

/**
* Change address country handler
* @returns {Promise<void>}
Expand Down Expand Up @@ -69,14 +66,10 @@ const changeAddressCountryHandler = async () => {
data,
});
} catch (error) {
prestashop.emit(
'handleError',
{
eventType: 'updateAddressForm',
resp: {},
},
);
danger(prestashop.t.alert.genericHttpError);
prestashop.emit('httpRequestError', {
eventType: 'updateAddressForm',
error,
});
}
};

Expand Down
3 changes: 2 additions & 1 deletion _dev/js/theme/core/address/request/updateAddressRequest.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import useHttpRequest from '../../../components/http/useHttpRequest';
import useHttpController from '../../../components/http/useHttpController';
import useHttpPayloadDefinition from '../../../components/http/useHttpPayloadDefinition';
import GenericHttpRequestError from '../../../components/http/error/GenericHttpRequestError';

const { dispatch, abortAll } = useHttpController();

Expand Down Expand Up @@ -68,7 +69,7 @@ const updateAddressRequest = (url, payload) => {
return;
}

reject(e);
reject(new GenericHttpRequestError('Error while sending request'));
}));
});

Expand Down
23 changes: 15 additions & 8 deletions _dev/js/theme/core/cart/handler/cart/addToCartHandler.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import useAlertToast from '../../../../components/useAlertToast';
import addToCartRequest from '../../request/cart/addToCartRequest';
import sprintf from '../../../../utils/sprintf';
import prestashop from "prestashop";

const { danger } = useAlertToast();

Expand All @@ -27,11 +28,15 @@ const addToCartHandler = async (event) => {
return validInput;
};

const idProduct = Number.parseInt(form.querySelector('[name=id_product]').value, 10);
const idProductInput = form.querySelector('[name=id_product]');
const quantityInput = form.querySelector('[name=qty]');
const idProductAttributeInput = form.querySelector('[name=id_product_attribute]');
const idCustomizationInout = form.querySelector('[name=id_product_attribute]');

const idProduct = Number.parseInt((idProductInput?.value || null), 10);
const qty = Number.parseInt(quantityInput?.value, 10) || 0;
const idProductAttribute = form.querySelector('[name=id_product_attribute]')?.value || 0;
const idCustomization = form.querySelector('[name=id_customization]')?.value || 0;
const idProductAttribute = Number.parseInt((idProductAttributeInput?.value || null), 10);
const idCustomization = Number.parseInt(idCustomizationInout?.value, 10) || 0;

const onInvalidQuantity = (input) => {
danger(sprintf(prestashop.t.alert.minimalQuantity, input.getAttribute('min')));
Expand Down Expand Up @@ -74,14 +79,16 @@ const addToCartHandler = async (event) => {
eventType: 'addProductToCart',
resp,
});
addToCartButton.removeAttribute('disabled');
}
} catch (error) {
danger(error.message);
}

setTimeout(() => {
prestashop.emit('handleError', {
eventType: 'addProductToCart',
resp: {},
error,
});
addToCartButton.removeAttribute('disabled');
}, 1000);
}
};

export default addToCartHandler;
10 changes: 6 additions & 4 deletions _dev/js/theme/core/cart/handler/cart/deleteFromCartHandler.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import useAlertToast from '../../../../components/useAlertToast';
import deleteFromCartRequest from '../../request/cart/deleteFromCartRequest';

const { danger } = useAlertToast();
import prestashop from "prestashop";

/**
* Delete product from cart handler
Expand Down Expand Up @@ -38,7 +36,11 @@ const deleteFromCartHandler = async (event) => {
});
}
} catch (error) {
danger(error.message);
prestashop.emit('handleError', {
eventType: 'deleteFromCart',
resp: {},
error,
});
}
};

Expand Down
9 changes: 5 additions & 4 deletions _dev/js/theme/core/cart/handler/cart/quantityChangeHandler.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import prestashop from 'prestashop';
import quantityChangeRequest from '../../request/cart/quantityChangeRequest';
import useAlertToast from '../../../../components/useAlertToast';
import cartStateStore from '../../store/cartStateStore';

const { danger } = useAlertToast();

const { setIsUpdateOperation, setHasError, setErrorMsg } = cartStateStore();

/**
Expand Down Expand Up @@ -55,7 +52,11 @@ const quantityChangeHandler = async (operation, qtyDifference, input) => {
});
}
} catch (error) {
danger(error.message);
prestashop.emit('handleError', {
eventType: 'updateProductQuantityInCart',
resp: {},
error,
});
}

document.querySelector('body').classList.remove('cart-loading');
Expand Down
9 changes: 5 additions & 4 deletions _dev/js/theme/core/cart/handler/cart/updateCartHandler.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import prestashop from 'prestashop';
import parseToHtml from '../../../../utils/parseToHtml';
import useAlertToast from '../../../../components/useAlertToast';
import updateCartContentRequest from '../../request/cart/updateCartContentRequest';

const { danger } = useAlertToast();

/**
* Update cart handler - update cart content and emit updatedCart event
* @param {object} event - update cart event object
Expand Down Expand Up @@ -39,7 +36,11 @@ const updateCartHandler = async (event) => {

prestashop.emit('updatedCart', { eventType: 'updateCart', resp });
} catch (error) {
danger(error.message);
prestashop.emit('handleError', {
eventType: 'updateCart',
resp: {},
error,
});
}
};

Expand Down
10 changes: 6 additions & 4 deletions _dev/js/theme/core/cart/handler/voucher/deleteVoucherHandler.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import useAlertToast from '../../../../components/useAlertToast';
import deleteVoucherFromCartRequest from '../../request/voucher/deleteVoucherFromCartRequest';

const { danger } = useAlertToast();
import prestashop from "prestashop";

/**
* Delete voucher handler
Expand Down Expand Up @@ -35,7 +33,11 @@ const deleteVoucherHandler = async (event) => {
});
}
} catch (error) {
danger(error.message);
prestashop.emit('handleError', {
eventType: 'deleteVoucherFromCart',
resp: {},
error,
});
}
};

Expand Down
10 changes: 6 additions & 4 deletions _dev/js/theme/core/cart/handler/voucher/submitVoucherHandler.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import addVoucherToCartRequest from '../../request/voucher/addVoucherToCartRequest';
import parseToHtml from '../../../../utils/parseToHtml';
import useAlertToast from '../../../../components/useAlertToast';

const { danger } = useAlertToast();
import prestashop from "prestashop";

/**
* Submit voucher handler
Expand Down Expand Up @@ -46,7 +44,11 @@ const submitVoucherHandler = async (event) => {
}
}
} catch (error) {
danger(error.message);
prestashop.emit('handleError', {
eventType: 'submitVoucher',
resp: {},
error,
});
}

btn.disabled = false;
Expand Down
4 changes: 2 additions & 2 deletions _dev/js/theme/core/checkout/checkoutController.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import orderConfirmationErrorsHandler from './handler/payment/orderConfirmationE
import toggleOrderButtonStateHandler from './handler/payment/toggleOrderButtonStateHandler';
import togglePaymentOptionsHandler from './handler/payment/togglePaymentOptionsHandler';
import confirmOrderHandler from './handler/payment/confirmOrderHandler';
import checkoutFormSubmitHandler from './handler/misc/checkoutFormSubmitHandler';
import checkoutStepChangeHandler from './handler/misc/checkoutStepChangeHandler';
import checkoutFormSubmitHandler from './handler/process/checkoutFormSubmitHandler';
import checkoutStepChangeHandler from './handler/process/checkoutStepChangeHandler';

const { on } = useEvent();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { formSerializeArray, fromSerializeObject } from '../../../../utils/formSerialize';
import selectDeliveryMethodRequest from '../../request/selectDeliveryMethodRequest';
import parseToHtml from '../../../../utils/parseToHtml';
import useAlertToast from '../../../../components/useAlertToast';
import refreshCheckoutPage from '../../utils/refreshCheckoutPage';
import { each } from '../../../../utils/DOMHelpers';

const { danger } = useAlertToast();
import prestashop from "prestashop";

/**
* Change delivery method handler
Expand Down Expand Up @@ -49,10 +47,10 @@ const changeDeliveryMethodHandler = async (event) => {
resp,
});
} catch (error) {
danger(error.message);
prestashop.emit('handleError', {
eventType: 'updateDeliveryOptions',
resp: {},
error,
});
}
};
Expand Down
6 changes: 5 additions & 1 deletion _dev/js/theme/core/listing/handler/updateFacetsHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ const updateFacetsHandler = async (url) => {
prestashop.emit('updateProductList', data);
window.history.pushState(data, document.title, data.current_url);
} catch (error) {
danger(prestashop.t.alert.genericHttpError);
prestashop.emit('handleError', {
eventType: 'updateFacets',
resp: {},
error,
});
}
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import useHttpRequest from '../../../components/http/useHttpRequest';
import useHttpController from '../../../components/http/useHttpController';
import GenericHttpRequestError from "../../../components/http/error/GenericHttpRequestError";

const { dispatch, abortAll } = useHttpController();

Expand Down Expand Up @@ -60,7 +61,7 @@ const updateListingFacetsRequest = (url) => {
return;
}

reject(e);
reject(new GenericHttpRequestError('Error while sending request'));
}));
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import updateQuantityInputHandler from './updateQuantityInputHandler';
import updateProductCustomizationHandler from './updateProductCustomizationHandler';
import updateProductDOMElementsHandler from './updateProductDOMElementsHandler';
import { fromSerializeObject } from '../../../../utils/formSerialize';
import useAlertToast from '../../../../components/useAlertToast';

const { danger } = useAlertToast();
const { getCurrentRequestDelayedId, setCurrentRequestDelayedId } = productStateStore();

/**
Expand Down Expand Up @@ -61,8 +59,12 @@ const updateProductHandler = async ({ eventType }) => {
persist(form);

prestashop.emit('updatedProduct', data, getPersistedData());
} catch (e) {
danger(prestashop.t.alert.genericHttpError);
} catch (error) {
prestashop.emit('handleError', {
eventType: 'updateProduct',
resp: {},
error,
});
}

setCurrentRequestDelayedId(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ const quickViewHandler = async (idProduct, idProductAttribute) => {
reason: 'openQuickView',
resp,
});
} catch (e) {
} catch (error) {
prestashop.emit('handleError', {
eventType: 'clickQuickView',
resp: {},
error,
});
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import prestashop from 'prestashop';
import useHttpRequest from '../../../../components/http/useHttpRequest';
import useHttpController from '../../../../components/http/useHttpController';
import useHttpPayloadDefinition from '../../../../components/http/useHttpPayloadDefinition';
import GenericHttpRequestError from '../../../../components/http/error/GenericHttpRequestError';

const { dispatch, abortAll } = useHttpController();

Expand Down Expand Up @@ -123,7 +124,7 @@ const updateProductRequest = (payload) => {
return;
}

reject();
reject(new GenericHttpRequestError('Error while sending request'));
}));
});
};
Expand Down
21 changes: 21 additions & 0 deletions _dev/js/theme/handler/error/httpRequestErrorHandler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import GenericHttpRequestError from "../../components/http/error/GenericHttpRequestError";
import useAlertToast from "../../components/useAlertToast";
import prestashop from 'prestashop';

const { danger } = useAlertToast();

const httpRequestErrorHandler = ({
resp = {},
error = null,
}) => {
if (error && error instanceof GenericHttpRequestError) {
danger(prestashop.t.alert.genericHttpError);
} else if (typeof resp.errors !== 'undefined') {
const errors = resp.errors;
const errorMessage = Array.isArray(errors) ? errors.join('\n') : errors;

danger(errorMessage);
}
}

export default httpRequestErrorHandler;
Loading

0 comments on commit f376718

Please sign in to comment.