Skip to content

Commit

Permalink
[ECP-9544] Support all Oney/Facilypay variants (#78)
Browse files Browse the repository at this point in the history
* [ECP-9544] Create an abstract method renderer for Oney/Facilypay variants

* [ECP-9544] Bump the dependency version

* [ECP-9544] Remove breakpoints

---------

Co-authored-by: Can Demiralp <[email protected]>
  • Loading branch information
candemiralp and Can Demiralp authored Feb 18, 2025
1 parent 300001a commit e9a4e51
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 0 deletions.
4 changes: 4 additions & 0 deletions etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
<item name="adyen_affirm" xsi:type="string">adyen-affirm-method.phtml</item>
<item name="adyen_amazonpay" xsi:type="string">adyen-amazonpay-method.phtml</item>
<item name="adyen_facilypay_3x" xsi:type="string">adyen-facilypay-3x-method.phtml</item>
<item name="adyen_facilypay_4x" xsi:type="string">adyen-facilypay-method.phtml</item>
<item name="adyen_facilypay_6x" xsi:type="string">adyen-facilypay-method.phtml</item>
<item name="adyen_facilypay_10x" xsi:type="string">adyen-facilypay-method.phtml</item>
<item name="adyen_facilypay_12x" xsi:type="string">adyen-facilypay-method.phtml</item>
</argument>
<argument name="customMagewireClasses" xsi:type="array">
<item name="adyen_cc" xsi:type="object">Adyen\Hyva\Magewire\Payment\Method\CreditCard</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ use Magento\Framework\View\Element\Template;
/** @var Template $block */
/** @var Escaper $escaper */

/**
* @deprecated This file will be removed on V2. Use `adyen-facilypay-method.phtml` instead.
*/
?>

<div>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
<?php
use Adyen\Hyva\Magewire\Payment\Method\AbstractPaymentMethodWire;
use Magento\Framework\Escaper;
use Magento\Framework\View\Element\Template;

/** @var AbstractPaymentMethodWire $magewire */
/** @var Template $block */
/** @var Escaper $escaper */

?>

<div>

<div id="<?= $escaper->escapeHtml($magewire->getContainerName()) ?>ActionContainer" wire:ignore></div>

<script>
class facilypayComponentHandler extends componentHandler {
constructor(paymentMethodCode, wire, elementLabel) {
super(paymentMethodCode, wire, elementLabel);
}

buildConfiguration(paymentMethod, paymentMethodsExtraInfo) {
let baseComponentConfiguration = super.buildConfiguration(paymentMethod, paymentMethodsExtraInfo);

let formattedShippingAddress = {};
let formattedBillingAddress = {};
let shopperDateOfBirth = '';
let email = '';

const shippingAddress = this.wire.get('shippingAddress');
const billingAddress = this.wire.get('billingAddress');
const quoteData = this.wire.get('quoteData');
const customerData = this.wire.get('customerData');


if (customerData) {
const parsedCustomerData = JSON.parse(customerData);
shopperDateOfBirth = parsedCustomerData.shopper_date_of_birth || '';
email = parsedCustomerData.email || '';
}

if (!email && quoteData) {
const parsedQuoteData = JSON.parse(quoteData);
email = parsedQuoteData.shopper_email || '';
}

if (shippingAddress) {
formattedShippingAddress = this.getFormattedAddress(JSON.parse(shippingAddress));
}

if (billingAddress) {
formattedBillingAddress = this.getFormattedAddress(JSON.parse(billingAddress));
}

baseComponentConfiguration.data = {};

if (formattedShippingAddress) {
baseComponentConfiguration.data.deliveryAddress = {
city: formattedShippingAddress.city,
country: formattedShippingAddress.country,
houseNumberOrName: formattedShippingAddress.houseNumber,
postalCode: formattedShippingAddress.postalCode,
street: formattedShippingAddress.street
};
}

if (formattedBillingAddress) {
baseComponentConfiguration.data.personalDetails = {
firstName: formattedBillingAddress.firstName,
lastName: formattedBillingAddress.lastName,
telephoneNumber: formattedBillingAddress.telephone,
shopperEmail: email,
dateOfBirth: shopperDateOfBirth,
};
baseComponentConfiguration.data.billingAddress = {
city: formattedBillingAddress.city,
country: formattedBillingAddress.country,
houseNumberOrName: formattedBillingAddress.houseNumber,
postalCode: formattedBillingAddress.postalCode,
street: formattedBillingAddress.street,
};
}

return baseComponentConfiguration;
}
}

window.addEventListener('checkout:payment:method-list-boot', async (event) => {
unmountAdyenComponent();
await init(event.detail.method);
});

window.addEventListener('checkout:payment:method-activate', async (event) => {
await init(event.detail.method);
});

window.addEventListener('checkout:init:evaluation', event => {
hyvaCheckout.evaluation.registerValidator('validate-adyen-component-state', (element, component) => {
let isValid;
if (!window.AdyenPaymentHandler.actionComponent.isValid) {
window.AdyenPaymentHandler.actionComponent.showValidation();
isValid = false;
} else {
isValid = true;
}
return isValid;
});
});

async function init(methodCode) {
try {
let wire = Magewire.find('checkout.payment.methods.' + methodCode);

wire.refreshProperties()
.then(() => {
let methodHandler = new facilypayComponentHandler(
methodCode,
wire,
'<?= $escaper->escapeHtml($magewire->getContainerName()) ?>ActionContainer'
);
window.AdyenPaymentHandler = methodHandler;
if (methodCode !== '<?= $escaper->escapeHtml($magewire->getMethodCode()) ?>') {
methodHandler.renderMethodUnavailableMessage();
return;
}
if (wire.get('requiresShipping')) {
methodHandler.renderMessage('Please select shipping method.');
} else {
let rawResponse = wire.get('paymentResponse');
let paymentMethods = JSON.parse(rawResponse);
methodHandler.activatePaymentMethod(
methodCode,
paymentMethods,
'<?= $escaper->escapeHtml($magewire->getContainerName()) ?>ActionContainer'
);
showPrimaryButton();
}
}).catch(() => {
console.error(`Error occurred during ${methodCode} component load`);
});
} catch (e) {
console.error('Error in init function:', e);
}
}
</script>
</div>

0 comments on commit e9a4e51

Please sign in to comment.