Add multi tracking tab to see status of several packages at once

master
Skylar Ittner 2 years ago
parent 058ef54793
commit 25c42f3a91

@ -17,7 +17,7 @@ function addTrackingSuggestions() {
$("#tracking-history-list ul").html("");
var history = getTrackingHistory();
if (history == false || history.length == 0) {
$("#tracking-history-list ul").html('<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title" style="color: var(--f7-list-item-footer-text-color);">You haven\'t tracked anything yet.</div></div></li>');
$("#tracking-history-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center" style="color: var(--f7-list-item-footer-text-color);">You haven\'t tracked anything yet.</div></li>');
} else {
for (var i = history.length - 1; i >= 0; i--) {
$("#tracking-history-list ul").append('<li><a class="item-link item-content hapticbtn tracking-code-history-link" data-trackingcode="' + history[i] + '" href="/track/' + history[i] + '">'
@ -57,6 +57,65 @@ function addTrackingSuggestions() {
} else {
$("#tracking-account-list ul").html('<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title" style="color: var(--f7-list-item-footer-text-color);">Get an account to use this feature.</div></div></li>');
}
var codes = getTrackingMultiList();
if (codes.length > 0) {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">Loading...</div></li>');
// Only update if we're on that tab, since it's not the easiest API call for the server to do
if ($("#tracking-multi-list").hasClass("tab-active")) {
updateTrackingMultiListStatus();
}
} else {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">Quickly see the latest status for multiple packages at the same time right here. <span class="taptext">Long-press</span><span class="clicktext">Right-click</span>&nbsp;a tracking code in the Recent tab to add it.</div></li>');
}
}
function updateTrackingMultiListStatus() {
var codes = getTrackingMultiList();
console.log(codes.length);
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title">Loading...</div></div></li>');
if (codes.length > 0) {
$("#tracking-multi-list ul").html("");
for (var i = 0; i < codes.length; i++) {
$("#tracking-multi-list ul").append('<li><div style="cursor: pointer" class="item-content tracking-code-multi-link" data-trackingcode="' + codes[i] + '" onclick="router.navigate(\'/track/' + codes[i] + '\')">'
+ '<div class="item-inner item-cell"><div class="item-row"><div class="item-cell">' + codes[i] + '</div></div>'
+ '<div class="item-row"><div class="item-cell">'
+ '<img src="" class="trackingeventicon tracking-multi-status-icon" /> <span class="tracking-multi-status-text">Unknown</span>'
+ '</div></div></div></div></li>');
}
apirequest(SETTINGS.apis.trackmultiple, {
code: codes.join(",")
}, function (resp) {
if (resp.status == "OK") {
for (const code in resp.results) {
$(".tracking-code-multi-link[data-trackingcode=\"" + code + "\"] .tracking-multi-status-text").text(resp.results[code].text);
$(".tracking-code-multi-link[data-trackingcode=\"" + code + "\"] .tracking-multi-status-icon").attr("src", "./assets/images/icons/" + resp.results[code].icon + ".svg");
}
$("#tracking-multi-list ul").append('<li class="item-content"><div class="item-inner display-block text-align-center" style="color: var(--f7-list-item-footer-text-color);"><i class="fas fa-info-circle"></i>&nbsp;<span class="taptext">Long-press</span><span class="clicktext">Right-click</span>&nbsp;an entry to remove it.</div></li>');
} else {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">Error: ' + resp.msg + '</div></li>');
sendErrorReport("Tracking", "Couldn't get multi tracking", resp.msg);
}
}, function (xhr) {
try {
var resp = $.parseJSON(xhr.responseText);
if (resp && typeof resp.msg != 'undefined') {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">Error: ' + resp.msg + '</div></li>');
sendErrorReport("Tracking", "Couldn't get multi tracking", resp.msg);
} else {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">There\'s a server or network problem. Check your Internet connection or try again later.</div></li>');
sendErrorReport("Tracking", "Couldn't get multi tracking", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
}
} catch (ex) {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">There\'s a server or network problem. Check your Internet connection or try again later.</div></li>');
sendErrorReport("Tracking", "Couldn't get multi tracking", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
}
});
} else {
$("#tracking-multi-list ul").html('<li class="item-content"><div class="item-inner justify-content-center text-align-center">Quickly see the latest status for multiple packages at the same time right here. Long-press or right click a tracking code in the Recent tab to add it.</div></li>');
}
}
function openTrackingBarcodeScanner() {
@ -191,7 +250,14 @@ $("#app").on("contextmenu", ".tracking-code-history-link", function (evt) {
}
},
{
text: 'Remove From List',
text: 'Add to Multi list',
onClick: function () {
addToTrackingMultiList(code);
addTrackingSuggestions();
}
},
{
text: 'Remove From History',
onClick: function () {
removeFromTrackingHistory(code);
addTrackingSuggestions();
@ -211,6 +277,44 @@ $("#app").on("contextmenu", ".tracking-code-history-link", function (evt) {
return false;
});
$("#app").on("contextmenu", ".tracking-code-multi-link", function (evt) {
var code = $(this).data("trackingcode");
var action = app.actions.create({
buttons: [
[
{
text: 'Track',
bold: true,
onClick: function () {
openTrackingInfoPage(code);
}
},
{
text: 'Remove from list',
onClick: function () {
removeFromTrackingMultiList(code);
addTrackingSuggestions();
}
}
],
[
{
text: 'Cancel',
color: 'red'
}
]
]
});
action.open();
return false;
});
$("#app").on("tab:show", "#tracking-multi-list", function (evt) {
updateTrackingMultiListStatus();
});
function getTrackingHistory() {
var history = getStorage("trackinghistory");
if (history == "false" || history == "null" || history == null) {
@ -252,4 +356,48 @@ function removeFromTrackingHistory(code) {
setStorage("trackinghistory", JSON.stringify(history));
$(".tracking-code-history-link[data-trackingcode=\"" + code + "\"]").parent("li").remove();
}
function getTrackingMultiList() {
var history = getStorage("multitrackingcodes");
if (history == "false" || history == "null" || history == null) {
return [];
} else {
return JSON.parse(history);
}
}
function addToTrackingMultiList(code) {
var history = getTrackingMultiList();
for (var i = 0; i < history.length; i++) {
if (history[i] == code) {
history.splice(i, 1);
}
}
// Add the code back to the list so it's at the top
history.push(code);
while (history.length > 10) {
history.shift();
}
setStorage("multitrackingcodes", JSON.stringify(history));
}
function removeFromTrackingMultiList(code) {
var history = getTrackingMultiList();
for (var i = 0; i < history.length; i++) {
if (history[i] == code) {
history.splice(i, 1);
}
}
while (history.length > 10) {
history.shift();
}
setStorage("multitrackingcodes", JSON.stringify(history));
$(".tracking-code-multi-link[data-trackingcode=\"" + code + "\"]").parent("li").remove();
}

@ -53,6 +53,10 @@
<i class="fas fa-user"></i>
<span class="tabbar-label">From Me</span>
</a>
<a href="#tracking-multi-list" class="tab-link">
<i class="fas fa-tasks-alt"></i>
<span class="tabbar-label">Multi</span>
</a>
</div>
</div>
<div class="tabs-animated-wrap">
@ -75,6 +79,17 @@
</ul>
</div>
</div>
<div id="tracking-multi-list" class="tab">
<div class="list">
<ul>
<li class="item-content">
<div class="item-inner justify-content-center">
<div class="item-title">Loading...</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>

@ -7,6 +7,7 @@
var SETTINGS = {
apis: {
track: "http://localhost/helena.express/apis/track/",
trackmultiple: "http://localhost/helena.express/apis/trackmultiple/",
rates: "http://localhost/helena.express/apis/rates/",
appointmentredirect: "http://localhost/helena.express/apis/appointmentredirect/",
requestpickup: "http://localhost/helena.express/apis/requestpickup/",

Loading…
Cancel
Save