-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implementing hyva compatibility #357
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<?xml version="1.0"?> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @ogomezba una pregunta, esto así se importa sólo cuando se detecta que existe el tema hyva? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hola @sofia-doofinder ! Sí, justo lo comentaba en la descripción del PR. Según comentan en la documentación de hyva aquí, una de las cosas que hace el tema es crear layout handles por cada uno de los que ya se tengan pero añadiendo el hyva_ delante. Aunque mi conocimiento de los detalles de Magento es el que es, por lo que he entendido, los handles vienen a ser los layout.xml que se usan y se calculan matcheando la ruta con el nombre del archivo layout (excepto el default que parece que afecta a todos). Entonces, como se matchea por nombre, al llamarse el archivo hyva_default.xml, en temas normales no va a matchear nada por lo que no se carga. No obstante, el tema hyva parece que modifica este comportamiento y matchea también "hyva_lo_que_toque_por_ruta.xml". Entonces, para temas hyva sí que se añade. De todas formas, he probado este comportamiento en la tienda del cliente con hyva y en mi tienda local sin hyva y he visto que se comportaba así. |
||
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> | ||
<head> | ||
<!-- For hyva themes, jQuery can't be used among other modifications. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Excellent approach!! 🏆 |
||
In that case we use a different JS --> | ||
<remove src="Doofinder_Feed::js/df_add_to_cart.js"/> | ||
<script src="Doofinder_Feed::js/df_add_to_cart_hyva.js"/> | ||
</head> | ||
<body> | ||
<referenceBlock name="head.additional"> | ||
<block | ||
class="Doofinder\Feed\Block\Display\Layer" | ||
name="doofinderfeed_display_layer" | ||
as="doofinderfeed.display.layer" | ||
template="Doofinder_Feed::display/layer.phtml" | ||
ifconfig="doofinder_config_config/doofinder_layer/doofinder_layer_enabled" | ||
after="-"/> | ||
</referenceBlock> | ||
</body> | ||
</page> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
class DoofinderAddToCartError extends Error { | ||
constructor(reason, status = "") { | ||
const message = | ||
"Error adding an item to the cart. Reason: " + | ||
reason + | ||
". Status code: " + | ||
status; | ||
super(message); | ||
this.name = "DoofinderAddToCartError"; | ||
} | ||
} | ||
|
||
document.addEventListener("doofinder.cart.add", function (event) { | ||
const { item_id, amount, statusPromise } = event.detail; | ||
addToCart(item_id, amount, statusPromise); | ||
}); | ||
|
||
function addToCart(item_id, amount, statusPromise) { | ||
amount = !amount ? 1 : parseInt(amount); | ||
item_id = parseInt(item_id); | ||
|
||
const params = new URLSearchParams({ | ||
form_key: hyva.getFormKey(), | ||
id: item_id, | ||
qty: amount, | ||
}); | ||
|
||
fetch(`${BASE_URL}doofinderfeed/Product/AddToCart?${params.toString()}`, { | ||
method: "POST", | ||
}) | ||
.then((response) => { | ||
if (!response.ok) { | ||
return response.text().then((error) => { | ||
throw new Error(error); | ||
}); | ||
} | ||
|
||
return response.json(); | ||
}) | ||
.then((data) => { | ||
if (data.product_url) { | ||
statusPromise.reject( | ||
new DoofinderAddToCartError( | ||
"Configurable product. Redirecting to product URL", | ||
200, | ||
), | ||
); | ||
window.location = data.product_url; | ||
return; | ||
} | ||
|
||
statusPromise.resolve( | ||
"The item has been successfully added to the cart.", | ||
); | ||
dispatchEvent(new Event("reload-customer-section-data")); | ||
}) | ||
.catch((error) => { | ||
statusPromise.reject(new DoofinderAddToCartError(error)); | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you think that this PR contains breaking changes to a degree that you have to declare it as a major version change? 😱
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Jaja, realmente no debería haber ningún breaking change, solamente "fixing" changes. Era porque estaba comentando con @sofia-doofinder que en algún momento podríamos poner la 1.0.0 y habíamos comentado que quizá era un bueno momento.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yo me esperaría a una más grande, pero bueno, como el código funciona lo apruebo 😄