$(function () { "use strict"; // Responses are expected to only depend on the GET parameters passed, so we can have a little client-side cache // to prevent fetching the same thing many times. var responseCache = {}; const cleanName = (name) => { // Remove form prefix name = name.split("-").pop(); // Remove settings prefix name = name.replace(/^invoice_address_from_/, ""); return name } $("[data-address-information-url]").each(function () { let xhr; const form = $(this); const dependencies = $(this).find("[data-trigger-address-info]"); const loader = $("").hide().prependTo(dependencies.closest(".form-group").find("label").first()) const baseUrl = this.getAttribute('data-address-information-url') const isAnyRequired = dependencies.toArray().some(function (e) { return $(e).closest(".form-group").is(".required") }); const dependents = { 'city': form.find("input[name$=city]"), 'zipcode': form.find("input[name$=zipcode]"), 'street': form.find("textarea[name$=street]"), 'state': form.find("select[name$=state]"), 'vat_id': form.find("input[name$=vat_id]"), }; form.find("select[name*=transmission_], textarea[name*=transmission_], input[name*=transmission_]").each(function () { dependents[cleanName($(this).attr("name"))] = $(this) }) if (!Object.values(dependents).some((el) => el.length)) { // No address fields found, do not create request return; } const update_form = function (data) { var selected_state = dependents.state.prop("data-selected-value"); if (selected_state) dependents.state.prop("data-selected-value", ""); dependents.state.find("option:not([value=''])").remove(); $.each(data.data, function (k, s) { var o = $("