diff --git a/dist/js/contact-data-services.js b/dist/js/contact-data-services.js index 9d2472b..eb87737 100644 --- a/dist/js/contact-data-services.js +++ b/dist/js/contact-data-services.js @@ -629,6 +629,8 @@ ContactDataServices.address = function(options){ if(event){ event.preventDefault(); } + // Enable searching + instance.enabled = true; // Hide formatted address instance.result.hide(); // Show search input @@ -640,6 +642,22 @@ ContactDataServices.address = function(options){ instance.events.trigger("post-reset"); }; + // How to handle unauthorised (invalid token?) requests + instance.unauthorised = function(){ + instance.enabled = false; + + // As searching is disabled, show button to render final address instead + var button = document.createElement("button"); + button.innerText = "Submit"; + instance.input.parentNode.insertBefore(button, instance.input.nextSibling); + button.addEventListener("click", function(){ + // Simulate a manual "use address entered" entry + instance.picklist.useAddressEntered.click(); + // Remove the button + instance.input.parentNode.removeChild(button); + }); + }; + // Use this to initiate and track XMLHttpRequests instance.request = { currentRequest: null, @@ -658,9 +676,9 @@ ContactDataServices.address = function(options){ // We reached our target server, but it returned an error instance.searchSpinner.hide(); - // If the request is unauthorized we should probably disable future requests + // If the request is unauthorized (invalid token) we should probably disable future requests if(instance.request.currentRequest.status === 401){ - instance.enabled = false; + instance.unauthorised(); } } }; diff --git a/dist/js/contact-data-services.min.js b/dist/js/contact-data-services.min.js index eba3215..85b12c9 100644 --- a/dist/js/contact-data-services.min.js +++ b/dist/js/contact-data-services.min.js @@ -1,3 +1,3 @@ /*! contact-data-services.js | https://github.com/experiandataquality/contactdataservices | Apache-2.0 * Experian Data Quality | https://github.com/experiandataquality */ -!function(a,b,c){"use strict";var d=a.ContactDataServices=a.ContactDataServices||{};d.defaults={input:{placeholderText:"Start typing an address"},formattedAddress:{headingType:"h3",headingText:"Formatted address"},editAddressText:"Edit address",searchAgainText:"Search again",useAddressEnteredText:"Use address entered"},d.eventFactory=function(){var a={};return a.collection={},a.on=function(b,c){a.collection[b]=a.collection[b]||[],a.collection[b].push(c)},a.trigger=function(b,c){if(a.collection[b])for(var d=0;d-1&&(f.currentFormatUrl=f.currentFormatUrl.replace("https://api.edq.com","http://int-test-01")),f.request.get(f.currentFormatUrl,f.result.show)},f.picklist={size:0,maxSize:25,show:function(a){f.picklist.items=a.results,f.picklist.size=f.picklist.items.length,f.picklist.container=f.picklist.container||f.picklist.createList(),f.picklist.container.innerHTML="",f.picklist.resetTabCount(),f.searchSpinner.hide(),f.picklist.useAddressEntered.element=f.picklist.useAddressEntered.element||f.picklist.useAddressEntered.create(),f.picklist.items.length>0&&(f.events.trigger("pre-picklist-create",f.picklist.items),f.picklist.items.forEach(function(a){var b=f.picklist.createListItem(a);f.picklist.container.appendChild(b),f.picklist.listen(b)}),f.events.trigger("post-picklist-create"))},hide:function(){f.picklist.currentItem=null,f.picklist.useAddressEntered.destroy(),f.picklist.container&&(f.input.parentNode.removeChild(f.picklist.container),f.picklist.container=c)},useAddressEntered:{create:function(){var a={suggestion:d.defaults.useAddressEnteredText,format:""},b=f.picklist.createListItem(a);return b.classList.add("use-address-entered"),f.picklist.container.parentNode.insertBefore(b,f.picklist.container.nextSibling),b.addEventListener("click",f.picklist.useAddressEntered.click),b},destroy:function(){f.picklist.useAddressEntered.element&&(f.picklist.container.parentNode.removeChild(f.picklist.useAddressEntered.element),f.picklist.useAddressEntered.element=c)},click:function(){var a={address:[]};if(f.currentSearchTerm){var b=f.currentSearchTerm.split(",");if(b.length>0)for(var c=0;cd.length-1&&(f.picklist.tabCount=0,b=!0);var e=d[f.picklist.tabCount],g=f.picklist.container.querySelector(".selected");g&&g.classList.remove("selected"),e.classList.add("selected"),f.picklist.currentItem=e;var h={top:f.picklist.container.offsetTop,bottom:f.picklist.container.offsetTop+f.picklist.container.offsetHeight,scrollTop:f.picklist.container.scrollTop,selectedTop:e.offsetTop,selectedBottom:e.offsetTop+e.offsetHeight,scrollAmount:e.offsetHeight};b?f.picklist.container.scrollTop=0:c?f.picklist.container.scrollTop=999:h.selectedBottom+h.scrollAmount>h.bottom?f.picklist.container.scrollTop=h.scrollTop+h.scrollAmount:h.selectedTop-h.scrollAmount-h.top";c=c.substring(0,b[d][0])+e+c.substring(b[d][1])}return c},listen:function(a){a.addEventListener("click",f.picklist.pick.bind(null,a))},checkEnter:function(){f.picklist.currentItem&&f.picklist.pick(f.picklist.currentItem)},pick:function(a){f.events.trigger("post-picklist-selection",a),f.format(a.getAttribute("format"))}},f.result={show:function(a){if(f.searchSpinner.hide(),f.picklist.hide(),f.input.value="",a.address.length>0){f.events.trigger("post-formatting-search",a),f.result.formattedAddress=f.elements.formattedAddress||f.result.createFormattedAddressContainer();for(var b=[],c=0;c0)for(var b=0;b=200&&f.request.currentRequest.status<400){var a=JSON.parse(f.request.currentRequest.responseText);b(a)}else f.searchSpinner.hide(),401===f.request.currentRequest.status&&(f.enabled=!1)},f.request.currentRequest.onerror=function(){},f.request.currentRequest.ontimeout=function(){},f.request.currentRequest.send()}},f.init(),f}}(window,window.document); \ No newline at end of file +!function(a,b,c){"use strict";var d=a.ContactDataServices=a.ContactDataServices||{};d.defaults={input:{placeholderText:"Start typing an address"},formattedAddress:{headingType:"h3",headingText:"Formatted address"},editAddressText:"Edit address",searchAgainText:"Search again",useAddressEnteredText:"Use address entered"},d.eventFactory=function(){var a={};return a.collection={},a.on=function(b,c){a.collection[b]=a.collection[b]||[],a.collection[b].push(c)},a.trigger=function(b,c){if(a.collection[b])for(var d=0;d-1&&(f.currentFormatUrl=f.currentFormatUrl.replace("https://api.edq.com","http://int-test-01")),f.request.get(f.currentFormatUrl,f.result.show)},f.picklist={size:0,maxSize:25,show:function(a){f.picklist.items=a.results,f.picklist.size=f.picklist.items.length,f.picklist.container=f.picklist.container||f.picklist.createList(),f.picklist.container.innerHTML="",f.picklist.resetTabCount(),f.searchSpinner.hide(),f.picklist.useAddressEntered.element=f.picklist.useAddressEntered.element||f.picklist.useAddressEntered.create(),f.picklist.items.length>0&&(f.events.trigger("pre-picklist-create",f.picklist.items),f.picklist.items.forEach(function(a){var b=f.picklist.createListItem(a);f.picklist.container.appendChild(b),f.picklist.listen(b)}),f.events.trigger("post-picklist-create"))},hide:function(){f.picklist.currentItem=null,f.picklist.useAddressEntered.destroy(),f.picklist.container&&(f.input.parentNode.removeChild(f.picklist.container),f.picklist.container=c)},useAddressEntered:{create:function(){var a={suggestion:d.defaults.useAddressEnteredText,format:""},b=f.picklist.createListItem(a);return b.classList.add("use-address-entered"),f.picklist.container.parentNode.insertBefore(b,f.picklist.container.nextSibling),b.addEventListener("click",f.picklist.useAddressEntered.click),b},destroy:function(){f.picklist.useAddressEntered.element&&(f.picklist.container.parentNode.removeChild(f.picklist.useAddressEntered.element),f.picklist.useAddressEntered.element=c)},click:function(){var a={address:[]};if(f.currentSearchTerm){var b=f.currentSearchTerm.split(",");if(b.length>0)for(var c=0;cd.length-1&&(f.picklist.tabCount=0,b=!0);var e=d[f.picklist.tabCount],g=f.picklist.container.querySelector(".selected");g&&g.classList.remove("selected"),e.classList.add("selected"),f.picklist.currentItem=e;var h={top:f.picklist.container.offsetTop,bottom:f.picklist.container.offsetTop+f.picklist.container.offsetHeight,scrollTop:f.picklist.container.scrollTop,selectedTop:e.offsetTop,selectedBottom:e.offsetTop+e.offsetHeight,scrollAmount:e.offsetHeight};b?f.picklist.container.scrollTop=0:c?f.picklist.container.scrollTop=999:h.selectedBottom+h.scrollAmount>h.bottom?f.picklist.container.scrollTop=h.scrollTop+h.scrollAmount:h.selectedTop-h.scrollAmount-h.top";c=c.substring(0,b[d][0])+e+c.substring(b[d][1])}return c},listen:function(a){a.addEventListener("click",f.picklist.pick.bind(null,a))},checkEnter:function(){f.picklist.currentItem&&f.picklist.pick(f.picklist.currentItem)},pick:function(a){f.events.trigger("post-picklist-selection",a),f.format(a.getAttribute("format"))}},f.result={show:function(a){if(f.searchSpinner.hide(),f.picklist.hide(),f.input.value="",a.address.length>0){f.events.trigger("post-formatting-search",a),f.result.formattedAddress=f.elements.formattedAddress||f.result.createFormattedAddressContainer();for(var b=[],c=0;c0)for(var b=0;b=200&&f.request.currentRequest.status<400){var a=JSON.parse(f.request.currentRequest.responseText);b(a)}else f.searchSpinner.hide(),401===f.request.currentRequest.status&&f.unauthorised()},f.request.currentRequest.onerror=function(){},f.request.currentRequest.ontimeout=function(){},f.request.currentRequest.send()}},f.init(),f}}(window,window.document); \ No newline at end of file diff --git a/src/js/main-address.js b/src/js/main-address.js index 278fa49..aae8ced 100644 --- a/src/js/main-address.js +++ b/src/js/main-address.js @@ -542,6 +542,8 @@ ContactDataServices.address = function(options){ if(event){ event.preventDefault(); } + // Enable searching + instance.enabled = true; // Hide formatted address instance.result.hide(); // Show search input @@ -553,6 +555,22 @@ ContactDataServices.address = function(options){ instance.events.trigger("post-reset"); }; + // How to handle unauthorised (invalid token?) requests + instance.unauthorised = function(){ + instance.enabled = false; + + // As searching is disabled, show button to render final address instead + var button = document.createElement("button"); + button.innerText = "Submit"; + instance.input.parentNode.insertBefore(button, instance.input.nextSibling); + button.addEventListener("click", function(){ + // Simulate a manual "use address entered" entry + instance.picklist.useAddressEntered.click(); + // Remove the button + instance.input.parentNode.removeChild(button); + }); + }; + // Use this to initiate and track XMLHttpRequests instance.request = { currentRequest: null, @@ -571,9 +589,9 @@ ContactDataServices.address = function(options){ // We reached our target server, but it returned an error instance.searchSpinner.hide(); - // If the request is unauthorized we should probably disable future requests + // If the request is unauthorized (invalid token) we should probably disable future requests if(instance.request.currentRequest.status === 401){ - instance.enabled = false; + instance.unauthorised(); } } };