cityssm/lottery-licence-manager

View on GitHub
public/javascripts/location-search.min.js

Summary

Maintainability
A
0 mins
Test Coverage
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.dateDiff,t=document.querySelector("main").dataset.urlPrefix,a=document.querySelector("#form--searchFilters"),s=document.querySelector("#filter--limit"),n=document.querySelector("#filter--offset"),i=document.querySelector("#container--searchResults"),r="true"===document.querySelector("main").dataset.canCreate;let o=new Date,c=[];const l=(a,s)=>{const n=document.createElement("tr");n.innerHTML="<td></td>";const i=document.createElement("a");i.textContent=a.locationDisplayName,i.href=t+"/locations/"+a.locationID.toString(),n.querySelector("td").append(i);const c=document.createElement("td");c.innerHTML=(""===a.locationAddress1?"":cityssm.escapeHTML(a.locationAddress1)+"<br />")+(""===a.locationAddress2?"":"<small>"+cityssm.escapeHTML(a.locationAddress2)+"</small><br />")+(""===a.locationCity?"":"<small>"+cityssm.escapeHTML(a.locationCity)+", "+a.locationProvince+"</small>"),n.append(c);let l="";if(""!==a.licences_endDateMaxString){const t=cityssm.dateStringToDate(a.licences_endDateMaxString);t<o&&(l='<br /><span class="is-size-7">'+e(t,o).formatted+" ago</span>")}if(n.insertAdjacentHTML("beforeend",'<td class="has-text-centered">'+(""===a.licences_endDateMaxString?'<span class="has-text-grey">Not Used</span>':a.licences_endDateMaxString+l)+"</td>"),n.insertAdjacentHTML("beforeend",'<td class="has-text-centered">'+(a.locationIsManufacturer?'<span data-tooltip="Manufacturer"><span class="tag is-success">Yes</span><br />'+(""===a.manufacturer_endDateMaxString?'<span class="has-text-grey">Never Used</span>':a.manufacturer_endDateMaxString)+"</span>":'<span class="sr-only">No</span>')+"</td>"),n.insertAdjacentHTML("beforeend",'<td class="has-text-centered">'+(a.locationIsDistributor?'<span data-tooltip="Distributor"><span class="tag is-success">Yes</span><br />'+(""===a.distributor_endDateMaxString?'<span class="has-text-grey">Never Used</span>':a.distributor_endDateMaxString)+"</span>":'<span class="sr-only">No</span>')+"</td>"),r){const e=a.canUpdate&&0===a.licences_count&&0===a.distributor_count&&0===a.manufacturer_count;n.insertAdjacentHTML("beforeend",'<td class="is-hidden-print has-text-right is-nowrap">'+(a.canUpdate?'<a class="button is-small" data-tooltip="Edit Location" href="/locations/'+a.locationID.toString()+'/edit"><span class="icon"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span> <span>Edit</span></a>':"")+(e?' <button class="button is-small is-danger is-delete-location-button" data-tooltip="Delete Location" data-location-index="'+s.toString()+'" type="button"><span class="icon"><i class="fas fa-trash" aria-hidden="true"></i></span></button>':"")+"</td>"),e&&n.querySelector(".is-delete-location-button").addEventListener("click",p)}return n},d=()=>{const e=Number.parseInt(s.value,10),u=Number.parseInt(n.value,10);c=[],i.innerHTML='<p class="has-text-centered has-text-grey-lighter"><i class="fas fa-3x fa-circle-notch fa-spin" aria-hidden="true"></i><br /><em>Loading locations...</em></p>',cityssm.postJSON(t+"/locations/doGetLocations",a,t=>{if(0===(c=t.locations).length)return void(i.innerHTML='<div class="message is-info"><div class="message-body"><strong>Your search returned no results.</strong><br />Please try expanding your search criteria.</div></div>');o=new Date,i.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th>Location</th><th>Address</th><th class="has-text-centered">Last Licence End Date</th><th class="has-text-centered">Last Manufacturer End Date</th><th class="has-text-centered">Last Distributor End Date</th>'+(r?'<th class="is-hidden-print"><span class="sr-only">Options</span></th>':"")+"</tr></thead><tbody></tbody></table>";const a=i.querySelector("tbody");for(const[e,t]of c.entries()){const s=l(t,e);a.append(s)}if(i.insertAdjacentHTML("beforeend",'<div class="level is-block-print"><div class="level-left has-text-weight-bold">Displaying locations '+(u+1).toString()+" to "+Math.min(e+u,t.count).toString()+" of "+t.count.toString()+"</div></div>"),e<t.count){const a=document.createElement("nav");if(a.className="level-right is-hidden-print",a.setAttribute("role","pagination"),a.setAttribute("aria-label","pagination"),u>0){const t=document.createElement("a");t.className="button",t.textContent="Previous",t.addEventListener("click",t=>{t.preventDefault(),n.value=Math.max(0,u-e).toString(),d()}),a.append(t)}if(e+u<t.count){const t=document.createElement("a");t.className="button ml-3",t.innerHTML='<span>Next Locations</span><span class="icon"><i class="fas fa-chevron-right" aria-hidden="true"></i></span>',t.addEventListener("click",t=>{t.preventDefault(),n.value=(u+e).toString(),d()}),a.append(t)}i.querySelector(".level").append(a)}})},u=()=>{n.value="0",d()},p=e=>{e.preventDefault();const a=Number.parseInt(e.currentTarget.dataset.locationIndex,10),s=c[a];cityssm.confirmModal("Delete Location",`Are you sure you want to delete ${cityssm.escapeHTML(s.locationDisplayName)}?`,"Yes, Delete","warning",()=>{cityssm.postJSON(t+"/locations/doDelete",{locationID:s.locationID},e=>{e.success&&d()})})};a.addEventListener("submit",e=>{e.preventDefault()}),document.querySelector("#filter--locationNameAddress").addEventListener("change",u),document.querySelector("#filter--locationIsDistributor").addEventListener("change",u),document.querySelector("#filter--locationIsManufacturer").addEventListener("change",u),document.querySelector("#filter--locationIsActive").addEventListener("change",u),u()})();