fix crash on rick-roll pickup points (WTF InPost?!)

This commit is contained in:
Laura Liberda 2021-02-02 17:29:36 +01:00
parent 0abedfc12a
commit bd394c4c00

View file

@ -268,16 +268,21 @@ const refreshPackages = async (response?: Package[]) => {
const details = row.insertCell(4); const details = row.insertCell(4);
const opener = row.insertCell(5); const opener = row.insertCell(5);
row.dataset.pickupPointLat = shipment.pickupPoint.location.latitude.toString(); // apparently there are rick-roll pickup points
row.dataset.pickupPointLon = shipment.pickupPoint.location.longitude.toString(); if (shipment.pickupPoint.location) {
row.dataset.pickupPointLat = shipment.pickupPoint.location.latitude.toString();
row.dataset.pickupPointLon = shipment.pickupPoint.location.longitude.toString();
}
row.dataset.pickupPointDescription = shipment.pickupPoint.description; row.dataset.pickupPointDescription = shipment.pickupPoint.description;
row.dataset.pickupPointName = shipment.pickupPoint.name; row.dataset.pickupPointName = shipment.pickupPoint.name;
row.dataset.pickupPointStatus = shipment.pickupPoint.status; row.dataset.pickupPointStatus = shipment.pickupPoint.status;
row.dataset.pickupPointStreet = shipment.pickupPoint.address.street; if (shipment.pickupPoint.address) {
row.dataset.pickupPointStreetNumber = shipment.pickupPoint.address.buildingNumber; row.dataset.pickupPointStreet = shipment.pickupPoint.address.street;
row.dataset.pickupPointCity = shipment.pickupPoint.address.city; row.dataset.pickupPointStreetNumber = shipment.pickupPoint.address.buildingNumber;
row.dataset.pickupPointProvince = shipment.pickupPoint.address.province; row.dataset.pickupPointCity = shipment.pickupPoint.address.city;
row.dataset.pickupPointPostCode = shipment.pickupPoint.address.postCode; row.dataset.pickupPointProvince = shipment.pickupPoint.address.province;
row.dataset.pickupPointPostCode = shipment.pickupPoint.address.postCode;
}
row.dataset.openCode = shipment.openCode; row.dataset.openCode = shipment.openCode;
row.dataset.id = shipment.shipmentNumber; row.dataset.id = shipment.shipmentNumber;
row.dataset.sender = shipment.senderName; row.dataset.sender = shipment.senderName;
@ -296,44 +301,49 @@ const refreshPackages = async (response?: Package[]) => {
const detailsBox = document.querySelector(".details-box")! as HTMLDivElement; const detailsBox = document.querySelector(".details-box")! as HTMLDivElement;
detailsBox.style.display = "block"; detailsBox.style.display = "block";
const data = ((event.target as Element).parentNode!.parentNode as HTMLElement).dataset; const data = ((event.target as Element).parentNode!.parentNode as HTMLElement).dataset;
// maybe this looks like shit, but it works if (data.pickupPointLat && data.pickupPointLon) {
let leafletLoaded = false; showElements(["#map"]);
try { // maybe this looks like shit, but it works
leafletLoaded = !!L; let leafletLoaded = false;
} catch (e) { try {
if (!(e instanceof ReferenceError)) { leafletLoaded = !!L;
throw e; } catch (e) {
if (!(e instanceof ReferenceError)) {
throw e;
}
} }
} if (!leafletLoaded) {
if (!leafletLoaded) { document.querySelector("head")!.appendChild(leafletLoaderCSS);
document.querySelector("head")!.appendChild(leafletLoaderCSS); document.querySelector("head")!.appendChild(leafletLoaderJS);
document.querySelector("head")!.appendChild(leafletLoaderJS); await new Promise<void>((resolve, reject) => {
await new Promise((resolve, reject) => { leafletLoaderJS.addEventListener("load", () => {
leafletLoaderJS.addEventListener("load", () => { resolve();
resolve(); });
leafletLoaderJS.addEventListener("error", () => {
reject();
});
}); });
leafletLoaderJS.addEventListener("error", () => { map = L.map("map");
reject(); }
}); map!.setView([parseFloat(data.pickupPointLat!), parseFloat(data.pickupPointLon!)], 17);
}); L.tileLayer("https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", {
map = L.map("map"); attribution:
'Map data &copy; <a href="https://openstreetmap.org/copyright">OpenStreetMap contributors</a>',
maxZoom: 19,
}).addTo(map!);
// delete previous markers
while (markers.length > 0) {
// @ts-ignore it's always marker, while loop checks length
map.removeLayer(markers.pop());
}
const marker = L.marker([
parseFloat(data.pickupPointLat!),
parseFloat(data.pickupPointLon!),
]).addTo(map!);
markers.push(marker);
} else {
hideElements(["#map"]);
} }
map!.setView([parseFloat(data.pickupPointLat!), parseFloat(data.pickupPointLon!)], 17);
L.tileLayer("https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", {
attribution:
'Map data &copy; <a href="https://openstreetmap.org/copyright">OpenStreetMap contributors</a>',
maxZoom: 19,
}).addTo(map!);
// delete previous markers
while (markers.length > 0) {
// @ts-ignore it's always marker, while loop checks length
map.removeLayer(markers.pop());
}
const marker = L.marker([
parseFloat(data.pickupPointLat!),
parseFloat(data.pickupPointLon!),
]).addTo(map!);
markers.push(marker);
const openButton = detailsBox.querySelector( const openButton = detailsBox.querySelector(
".modal-card-foot button.is-primary", ".modal-card-foot button.is-primary",
)! as HTMLButtonElement; )! as HTMLButtonElement;