2020-10-10 19:26:30 -06:00
/ *
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2.0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
* /
2021-01-22 12:06:20 -07:00
function openTrackingInfoPage ( code ) {
if ( typeof code == "undefined" || code == null || code == "" ) {
app . input . validate ( "#trackingcode" ) ;
2020-10-24 17:28:17 -06:00
return ;
}
2020-10-24 18:23:00 -06:00
2021-01-22 12:06:20 -07:00
router . navigate ( "/track/" + code ) ;
2020-10-10 19:26:30 -06:00
}
2021-01-22 12:06:20 -07:00
function addTrackingSuggestions ( ) {
2022-01-26 15:28:19 -07:00
$ ( "#tracking-history-list ul" ) . html ( "" ) ;
2021-01-22 12:06:20 -07:00
var history = getTrackingHistory ( ) ;
2022-01-26 15:52:42 -07:00
if ( history == false || history . length == 0 ) {
$ ( "#tracking-history-list ul" ) . append ( '<li class="item-content">'
2021-01-22 12:06:20 -07:00
+ '<div class="item-inner"><div class="item-title">'
2022-01-26 15:52:42 -07:00
+ "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"><div class="item-title">You haven\'t tracked anything yet.</div></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" href="/track/' + history [ i ] + '">'
+ '<div class="item-inner"><div class="item-title">'
+ history [ i ]
+ '</div></div></a></li>' ) ;
}
2020-10-24 18:23:00 -06:00
}
2022-01-26 15:28:19 -07:00
if ( inStorage ( "accountkey" ) && inStorage ( "accountnumber" ) ) {
apirequest ( SETTINGS . apis . gettrackingnumbers , {
accountnumber : getStorage ( "accountnumber" ) ,
accountkey : getStorage ( "accountkey" )
} , function ( success ) {
if ( success . status == "OK" ) {
$ ( "#tracking-account-list ul" ) . html ( "" ) ;
for ( var i = 0 ; i < success . trackingnumbers . length ; i ++ ) {
$ ( "#tracking-account-list ul" ) . append ( '<li><a class="item-link item-content hapticbtn" href="/track/' + success . trackingnumbers [ i ] . trackingcode + '">'
+ '<div class="item-inner">'
+ '<div class="item-title">'
+ '<div class="item-header">' + success . trackingnumbers [ i ] . nickname + '</div>'
+ success . trackingnumbers [ i ] . trackingcode
+ '<div class="item-footer">' + success . trackingnumbers [ i ] . datetimestring + '</div>'
+ '</div>'
+ '</div></a></li>' ) ;
}
if ( success . trackingnumbers . length == 0 ) {
$ ( "#tracking-account-list ul" ) . html ( '<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title">You have no recent shipments.</div></div></li>' ) ;
}
} else {
$ ( "#tracking-account-list ul" ) . html ( '<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title">Error: ' + success . msg + '</div></div></li>' ) ;
}
} , function ( xhr , status , error ) {
$ ( "#tracking-account-list ul" ) . html ( '<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title">Server or network error. Try again later.</div></div></li>' ) ;
sendErrorReport ( "Tracking" , "Couldn't get account tracking codes" , "Server/network problem: " + xhr . status + ": " + xhr . statusText ) ;
} , "GET" ) ;
} else {
$ ( "#tracking-account-list ul" ) . html ( '<li class="item-content"><div class="item-inner justify-content-center"><div class="item-title">Get an account to use this feature.</div></div></li>' ) ;
}
2020-10-24 18:23:00 -06:00
}
2021-01-22 19:17:19 -07:00
function openTrackingBarcodeScanner ( ) {
scanBarcode ( function ( result ) {
var code = "" ;
2021-01-22 19:33:09 -07:00
var coderegex = /^[0-9a-zA-Z]{5,40}$/ ;
2021-01-22 19:17:19 -07:00
if ( result . startsWith ( "https://helena.express/track#" ) ) {
code = result . split ( "#" ) [ 1 ] ;
} else if ( result . startsWith ( "http" ) && result . includes ( "#" ) ) {
2021-01-22 19:33:09 -07:00
if ( coderegex . test ( result . split ( "#" ) [ 1 ] ) ) {
2021-01-22 19:17:19 -07:00
code = result . split ( "#" ) [ 1 ] ;
2021-01-22 19:33:43 -07:00
} else {
app . dialog . alert ( "This app can't understand what's in that barcode." , "Error" ) ;
return ;
2021-01-22 19:17:19 -07:00
}
2021-01-22 19:33:09 -07:00
} else if ( coderegex . test ( result ) ) {
2021-01-22 19:17:19 -07:00
code = result ;
} else {
app . dialog . alert ( "This app can't understand what's in that barcode." , "Error" ) ;
return ;
}
code = code . toUpperCase ( ) ;
openTrackingInfoPage ( code ) ;
} , function ( ) {
app . dialog . alert ( "Something went wrong and we can't scan right now." , "Error" ) ;
} ) ;
}
2021-10-02 14:34:53 -06:00
function trackOpenAsync ( { to , resolve , reject } ) {
2020-10-10 19:26:30 -06:00
app . dialog . preloader ( "Loading..." ) ;
apirequest (
SETTINGS . apis . track ,
{
2021-10-02 14:34:53 -06:00
code : to . params . code ,
2020-10-10 19:26:30 -06:00
format : "json"
} ,
function ( resp ) {
app . dialog . close ( ) ;
2021-01-22 12:06:20 -07:00
if ( resp . status == "OK" ) {
addToTrackingHistory ( resp . code ) ;
2020-10-10 19:26:30 -06:00
2021-01-22 12:06:20 -07:00
var context = {
code : resp . code ,
info : [
2021-01-23 17:26:54 -07:00
{ label : "Tracking Code" , value : resp . code } ,
2021-01-22 12:06:20 -07:00
] ,
2021-01-23 17:26:54 -07:00
events : [ ] ,
map : {
2021-10-02 19:57:41 -06:00
enabled : ( typeof resp . info . latitude == "number" && typeof resp . info . longitude == "number" && MapControl . supported ( ) ) ,
2021-01-23 17:26:54 -07:00
latitude : resp . info . latitude ,
longitude : resp . info . longitude ,
accurate : resp . info . geoaccurate
}
2021-01-22 12:06:20 -07:00
} ;
if ( resp . info . statustext ) {
context . info . push ( { label : "Status" , value : resp . info . statustext } ) ;
}
if ( resp . info . carrier ) {
2021-10-09 18:31:16 -06:00
if ( resp . info . carrier _logo ) {
2021-10-09 18:39:40 -06:00
context . info . push ( { label : "Carrier" , value : "<img style=\"height: 2em; padding: 0.667em; max-width: 80%; background-color: white; border-radius: 0.25em; margin-top: 0.5em;\" src=\"" + resp . info . carrier _logo + "\" />" } ) ;
2021-10-09 18:31:16 -06:00
} else {
context . info . push ( { label : "Carrier" , value : resp . info . carrier } ) ;
}
2021-01-22 12:06:20 -07:00
}
if ( resp . info . delivery _date ) {
var deliverydatelabel = "Estimated delivery on" ;
if ( resp . info . status == "DELIVERED" ) {
deliverydatelabel = "Delivered on" ;
}
context . info . push ( { label : deliverydatelabel , value : formatTimestamp ( "F j Y" , resp . info . delivery _date _unixtime ) } ) ;
}
2021-10-09 16:01:15 -06:00
if ( resp . info . carrier _tracking _url ) {
context . carrierurl = resp . info . carrier _tracking _url ;
}
2021-10-09 18:31:16 -06:00
if ( resp . info . carrier _attribution ) {
context . carrier _attribution = resp . info . carrier _attribution ;
}
2021-01-22 12:06:20 -07:00
for ( var i = 0 ; i < resp . events . length ; i ++ ) {
context . events . push ( {
text : resp . events [ i ] . text ,
2021-01-30 20:17:17 -07:00
date : resp . events [ i ] . timestring ,
2021-01-22 12:06:20 -07:00
icon : "./assets/images/icons/" + resp . events [ i ] . icon + ".svg"
} ) ;
}
2020-10-10 19:26:30 -06:00
2021-01-26 21:42:39 -07:00
if ( context . events . length == 0 ) {
context . events = false ;
}
2022-01-26 14:10:09 -07:00
sendActionReport ( "Tracking" , "Tracked package" ) ;
2020-10-10 19:26:30 -06:00
resolve ( {
2021-10-02 14:34:53 -06:00
content : compiledPages . trackresult ( context )
2020-10-10 19:26:30 -06:00
} ) ;
2021-01-22 12:06:20 -07:00
} else {
app . dialog . alert ( resp . msg , "Error" ) ;
2022-01-26 14:10:09 -07:00
sendErrorReport ( "Tracking" , "Couldn't get tracking" , resp . msg ) ;
2021-01-22 12:06:20 -07:00
reject ( ) ;
2020-10-10 19:26:30 -06:00
}
} ,
function ( xhr ) {
app . dialog . close ( ) ;
2021-01-23 18:45:54 -07:00
try {
var error = $ . parseJSON ( xhr . responseText ) ;
if ( error && typeof error . msg != 'undefined' ) {
app . dialog . alert ( error . msg , "Error" ) ;
2022-01-26 14:10:09 -07:00
sendErrorReport ( "Tracking" , "Couldn't get tracking" , error . msg ) ;
2021-01-23 18:45:54 -07:00
} else {
app . dialog . alert ( "There's a server or network problem. Check your Internet connection or try again later." , "Error" ) ;
2022-01-26 14:10:09 -07:00
sendErrorReport ( "Tracking" , "Couldn't get tracking" , "Server/network problem: " + xhr . status + ": " + xhr . statusText ) ;
2021-01-23 18:45:54 -07:00
}
} catch ( ex ) {
app . dialog . alert ( "There's a server or network problem. Check your Internet connection or try again later." , "Error" ) ;
2022-01-26 14:10:09 -07:00
sendErrorReport ( "Tracking" , "Couldn't get tracking" , "Server/network problem: " + xhr . status + ": " + xhr . statusText ) ;
2020-10-10 19:26:30 -06:00
}
reject ( ) ;
} , "GET" ) ;
}
function getTrackingHistory ( ) {
2021-01-22 12:06:20 -07:00
var history = getStorage ( "trackinghistory" ) ;
2020-10-10 19:26:30 -06:00
if ( history != null ) {
return JSON . parse ( history ) ;
} else {
return [ ] ;
}
}
2021-01-22 12:06:20 -07:00
function addToTrackingHistory ( code ) {
2020-10-10 19:26:30 -06:00
var history = getTrackingHistory ( ) ;
for ( var i = 0 ; i < history . length ; i ++ ) {
2021-01-22 12:06:20 -07:00
if ( history [ i ] == code ) {
2020-10-10 19:26:30 -06:00
history . splice ( i , 1 ) ;
}
}
// Add the code back to the list so it's at the top
2021-01-22 12:06:20 -07:00
history . push ( code ) ;
2020-10-10 19:26:30 -06:00
while ( history . length > 10 ) {
history . shift ( ) ;
}
2021-01-22 12:06:20 -07:00
setStorage ( "trackinghistory" , JSON . stringify ( history ) ) ;
2020-10-10 19:26:30 -06:00
}