Skip to content

Commit

Permalink
Merge pull request #1 from Vendic/feature/add-company-autocomplete
Browse files Browse the repository at this point in the history
Trigger autocomplete on company field
  • Loading branch information
Tjitse-E committed Oct 18, 2023
2 parents f9bd711 + caa1c6f commit ab17190
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 8 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ There is no disable/enable configuration. To disable the module, simply remove t
## Features
- [x] Autocomplete for billing address in the Hyvä checkout
- [x] Autocomplete for shipping address in the Hyvä checkout
- [x] Works on the company field and street 0. To add additonal fields, check `\Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\AutoCompleteSelectors`
- [x] Housenumber validation to check if the housenumber contains digits.

## Compatibility
If you want Google Address autocomplete in the "my account"-section, you will need [this module](https://github.com/Vendic/hyva-google-address-autocomplete)
Expand Down
23 changes: 23 additions & 0 deletions ViewModel/AutoCompleteSelectors.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php declare(strict_types=1);
/**
* @copyright Copyright (c) Vendic B.V https://vendic.nl/
*/

namespace Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel;

use Magento\Framework\View\Element\Block\ArgumentInterface;

class AutoCompleteSelectors implements ArgumentInterface
{
public function __construct(private readonly array $selectors)
{
}

/**
* To add more fields to the autocomplete, add them to the selectors array via DI injection.
*/
public function get() : array
{
return array_values($this->selectors);
}
}
13 changes: 13 additions & 0 deletions etc/frontend/di.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<!-- Map Google address autocomplete API response to Hyva checkout fields -->
<type name="Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\FieldMapping">
<arguments>
<argument name="fieldMapping" xsi:type="array">
Expand All @@ -15,6 +16,18 @@
</arguments>
</type>

<!-- Google address auto complete works for the following inputs -->
<type name="Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\AutoCompleteSelectors">
<arguments>
<argument name="selectors" xsi:type="array">
<item name="billing_street_0" xsi:type="string">input#shipping-street-0</item>
<item name="shipping_street_0" xsi:type="string">input#billing-street-0</item>
<item name="shipping_company" xsi:type="string">input#shipping-company</item>
<item name="billing_company" xsi:type="string">input#billing-company</item>
</argument>
</arguments>
</type>

<type name="Hyva\Checkout\Model\Form\EntityField\EavEntityAddress\StreetAttributeField">
<plugin name="vendic_hyva_checkout_google_address_autocomplete_required_housenumber_field"
type="Vendic\HyvaCheckoutGoogleAddressAutocomplete\Plugin\RequiredHousenumberFieldPlugin"/>
Expand Down
28 changes: 20 additions & 8 deletions view/frontend/templates/checkout/google-autocomplete-js.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,28 @@

// phpcs:disable Generic.Files.LineLength

/** @var \Magento\Framework\Escaper $escaper */
/** @var \Magento\Framework\View\Element\Template $block */
/** @var \Hyva\Theme\Model\ViewModelRegistry $viewModels */
/** @var Escaper $escaper */
/** @var Template $block */
/** @var ViewModelRegistry $viewModels */

/** @var \Vendic\GoogleAutocomplete\ViewModel\Settings $googleAutocompleteSettings */
$googleAutocompleteSettings = $viewModels->require(\Vendic\GoogleAutocomplete\ViewModel\Settings::class);
/** @var Settings $googleAutocompleteSettings */

use Hyva\Theme\Model\ViewModelRegistry;
use Magento\Framework\Escaper;
use Magento\Framework\View\Element\Template;
use Vendic\GoogleAutocomplete\ViewModel\Settings;
use Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\AutoCompleteSelectors;
use Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\FieldMapping;

$googleAutocompleteSettings = $viewModels->require(Settings::class);
$apiKey = $escaper->escapeHtml($googleAutocompleteSettings->getApiKey());

/** @var \Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\FieldMapping $fieldMapping */
$fieldMapping = $viewModels->require(\Vendic\HyvaCheckoutGoogleAddressAutocomplete\ViewModel\FieldMapping::class);
/** @var AutoCompleteSelectors $autocompleteSelectorsViewModel */
$autocompleteSelectorsViewModel = $viewModels->require(AutoCompleteSelectors::class);
$autocompleteSelectors = $autocompleteSelectorsViewModel->get();

/** @var FieldMapping $fieldMapping */
$fieldMapping = $viewModels->require(FieldMapping::class);

if (!$apiKey) {
return;
Expand Down Expand Up @@ -78,7 +90,7 @@ if (!$apiKey) {
}

function setAutoCompleteInputs() {
const querySelectors = ['input#shipping-street-0', 'input#billing-street-0'];
const querySelectors = <?= /* @noEscape */ json_encode($autocompleteSelectors) ?>;
let inputs = [];

// Loop through the query selectors and find the inputs
Expand Down

0 comments on commit ab17190

Please sign in to comment.