{% sw_extends "@Storefront/storefront/component/account/register.html.twig" %}
{% block component_account_register %}
{{ parent() }}
{% if config('WexoProjectCustomizations').config.activateAutocomplete %}
<div class="autocomplete-form"></div>
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDhHvbZden9wcgx8IQ5ZGX4X43YiaZGRqw&libraries=places&callback=initAutocomplete"
async defer>
</script>
<script>
let autocompleteBilling;
let billingAddress1Field;
let billingPostCode;
let billingCity;
let autocompleteShipping;
let shippingAddress1Field;
let shippingPostCode;
let shippingCity;
function initAutocomplete() {
initAutocompleteBilling();
initAutocompleteShipping();
}
function initAutocompleteBilling() {
billingAddress1Field = document.querySelector("#billingAddressAddressStreet");
billingPostCode = document.querySelector("#billingAddressAddressZipcode");
billingCity = document.querySelector("#billingAddressAddressCity");
// Create the autocomplete object, restricting the search predictions to
autocompleteBilling = new google.maps.places.Autocomplete(billingAddress1Field, {
fields: ["address_components", "geometry"],
types: ["address"],
componentRestrictions: {country:'dk'}
});
// When the user selects an address from the drop-down, populate the
// address fields in the form.
autocompleteBilling.addListener("place_changed", fillInAddressBilling);
}
function fillInAddressBilling() {
// Get the place details from the autocomplete object.
const place = autocompleteBilling.getPlace();
let address1 = "";
let postcode = "";
// Get each component of the address from the place details,
// and then fill-in the corresponding field on the form.
// place.address_components are google.maps.GeocoderAddressComponent objects
// which are documented at http://goo.gle/3l5i5Mr
for (const component of place.address_components) {
const componentType = component.types[0];
switch (componentType) {
case "route": {
address1 = `${component.long_name} ${address1}`;
break;
}
case "street_number": {
address1 += component.short_name;
break;
}
case "postal_code": {
document.querySelector("#billingAddressAddressZipcode").value = component.long_name;
break;
}
case "postal_code_suffix": {
postcode = `${postcode}-${component.long_name}`;
break;
}
case "postal_town": {
document.querySelector("#billingAddressAddressCity").value = component.long_name;
break;
}
case "locality": {
document.querySelector("#billingAddressAddressCity").value = component.long_name;
break;
}
case "administrative_area_level_1": {
document.querySelector("#state").value = component.short_name;
break;
}
case "country": {
$("#billingAddressAddressCountry option[data-iso='" + component.short_name + "']").prop("selected", true);
break;
}
}
}
billingAddress1Field.value = address1;
}
function initAutocompleteShipping() {
shippingAddress1Field = document.querySelector("#shippingAddressAddressStreet");
shippingPostCode = document.querySelector("#shippingAddressAddressZipcode");
shippingCity = document.querySelector("#shippingAddressAddressCity");
// Create the autocomplete object, restricting the search predictions to
autocompleteShipping = new google.maps.places.Autocomplete(shippingAddress1Field, {
fields: ["address_components", "geometry"],
types: ["address"],
componentRestrictions: {country:'dk'}
});
// When the user selects an address from the drop-down, populate the
// address fields in the form.
autocompleteShipping.addListener("place_changed", fillInAddressShipping);
}
function fillInAddressShipping() {
// Get the place details from the autocomplete object.
const place = autocompleteShipping.getPlace();
let address1 = "";
let postcode = "";
// Get each component of the address from the place details,
// and then fill-in the corresponding field on the form.
// place.address_components are google.maps.GeocoderAddressComponent objects
// which are documented at http://goo.gle/3l5i5Mr
for (const component of place.address_components) {
const componentType = component.types[0];
switch (componentType) {
case "route": {
address1 = `${component.long_name} ${address1}`;
break;
}
case "street_number": {
address1 += component.short_name;
break;
}
case "postal_code": {
document.querySelector("#shippingAddressAddressZipcode").value = component.long_name;
break;
}
case "postal_code_suffix": {
postcode = `${postcode}-${component.long_name}`;
break;
}
case "postal_town": {
document.querySelector("#shippingAddressAddressCity").value = component.long_name;
break;
}
case "locality": {
document.querySelector("#shippingAddressAddressCity").value = component.long_name;
break;
}
case "administrative_area_level_1": {
document.querySelector("#state").value = component.short_name;
break;
}
case "country": {
if (document.querySelector("#state").value === "Northern Ireland") {
$("#shippingAddressAddressCountry option[value='315f0beac6764136a4482f7ff5635148']").prop("selected", true);
} else if (document.querySelector("#state").value === "England") {
$("#shippingAddressAddressCountry option[value='92c4bbd1cb884370a0b1ee11de0825e0']").prop("selected", true);
} else {
$("#shippingAddressAddressCountry option[data-iso='" + component.short_name + "']").prop("selected", true);
}
break;
}
}
}
shippingAddress1Field.value = address1;
}
</script>
{% endif %}
{% endblock %}