Skip to content

Commit

Permalink
Implementing hyva compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
Oscar Gomez committed Nov 14, 2024
1 parent c6391f5 commit d89c34e
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 3 deletions.
4 changes: 3 additions & 1 deletion Controller/Product/AddToCart.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public function execute()

$params = new DataObject($params);
$result = $quote->addProduct($product, $params);
$resultJson = $this->resultJsonFactory->create();

if (is_a($result, QuoteItem::class)) {
//Update totals
Expand All @@ -90,12 +91,13 @@ public function execute()
$quote->collectTotals();
$this->cartRepository->save($quote);
$session->replaceQuote($quote)->unsLastRealOrderId();

return $resultJson->setData(['success' => true]);
} else {
$this->logger->info("This product is variable, return the url");
$product_url = $product->getProductUrl();
$this->logger->info("Product url: ", ["product_url" => $product_url]);

$resultJson = $this->resultJsonFactory->create();
return $resultJson->setData(['product_url' => $product_url]);
}
}
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "doofinder/doofinder-magento2",
"version": "0.14.13",
"version": "1.0.0",
"description": "Doofinder module for Magento 2",
"type": "magento2-module",
"require": {
Expand Down
2 changes: 1 addition & 1 deletion etc/module.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Doofinder_Feed" setup_version="0.14.13">
<module name="Doofinder_Feed" setup_version="1.0.0">
<sequence>
<module name="Magento_Integration" />
</sequence>
Expand Down
21 changes: 21 additions & 0 deletions view/frontend/layout/hyva_default.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<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.
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>
60 changes: 60 additions & 0 deletions view/frontend/web/js/df_add_to_cart_hyva.js
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));
});
}

0 comments on commit d89c34e

Please sign in to comment.