2020-02-27 21:37:10 -06:00
var filterContext = { } ;
let createMasterFilterFrame = ( ) => {
let theFrameDiv = document . createElement ( "div" ) ;
theFrameDiv . setAttribute ( "id" , "frmMasterFilter" ) ;
theFrameDiv . className = "container-fluid "
window . document . getElementById ( 'app' ) . append ( theFrameDiv ) ;
theFrameDiv . innerHTML = `
< div id = 'datePicker' > < / d i v >
2020-04-25 14:18:07 -05:00
< div class = "dropdown" id = "grpSymbol" >
2020-04-25 20:56:09 -05:00
< button class = "btn btn-primary dropdown-toggle ddMnuBtn" type = "button" id = "ddMnuBtnSymbol" data - toggle = "dropdown" aria - haspopup = "true" aria - expanded = "false" >
2020-04-25 14:18:07 -05:00
Symbol
< / b u t t o n >
< div class = "dropdown-menu" aria - labelledby = "ddMnuBtnSymbol" id = 'lbSymbol' >
2020-04-25 21:05:36 -05:00
< a class = "dropdown-item" href = "#" > Not Yet Loaded ... < / a >
2020-04-25 14:18:07 -05:00
< / d i v >
< / d i v >
2020-02-27 21:37:10 -06:00
2020-04-25 14:18:07 -05:00
< div class = "dropdown" id = "grpTime" >
2020-04-25 20:56:09 -05:00
< button class = "btn btn-primary dropdown-toggle ddMnuBtn" type = "button" id = "ddMnuBtnTime" data - toggle = "dropdown" aria - haspopup = "true" aria - expanded = "false" >
2020-04-25 14:18:07 -05:00
Time
< / b u t t o n >
< div class = "dropdown-menu" aria - labelledby = "ddMnuBtnTime" id = 'lbTime' >
2020-04-25 21:05:36 -05:00
< a class = "dropdown-item" href = "#" > Select Date first . < / a >
2020-04-25 14:18:07 -05:00
< / d i v >
< / d i v >
< h1 id = 'tbSymbol' > SELECT SYMBOL ! < / h 1 >
2020-04-24 21:00:37 -05:00
< h2 id = 'tbUnderlyingPrice' > < / h 2 >
2020-04-25 14:18:07 -05:00
< h2 id = 'tbSelectedTime' > < / h 2 >
2020-02-27 21:37:10 -06:00
<!-- button onclick = 'rq()' > LOAD < / b u t t o n - - >
` ;
fetchSymbols ( ) ;
return true ;
}
let beforeShowDay = ( theDate ) => {
let isoDate = theDate . toISOString ( ) . substr ( 0 , 10 ) ;
2020-03-10 21:46:30 -05:00
//console.log("BeforeShow",isoDate,theDate);
2020-02-27 21:37:10 -06:00
2020-03-09 10:49:19 -05:00
let isDateFound = false ;
for ( let i = 0 ; i < filterContext . availableDates . length ; i ++ ) {
if ( filterContext . availableDates [ i ] . Date === theDate . toISOString ( ) . substr ( 0 , 10 ) ) {
isDateFound = true ;
break ;
} ;
}
if ( ! isDateFound ) {
2020-02-27 21:37:10 -06:00
return { enabled : false , tooltip : "No data" } ;
}
}
let fetchSymbols = ( ) => {
2020-03-09 10:49:19 -05:00
$ . get ( {
2020-04-24 00:58:12 -05:00
url : "/getSymbols"
2020-02-27 21:37:10 -06:00
} ) . done ( response => {
2020-03-09 10:49:19 -05:00
let allSymbols = response ;
2020-02-27 21:37:10 -06:00
console . log ( allSymbols ) ;
2020-03-09 10:49:19 -05:00
refreshSymbolList ( allSymbols ) ;
2020-02-27 21:37:10 -06:00
} ) ;
}
let getCurrentSymbol = ( ) => {
2020-04-25 14:18:07 -05:00
return ( filterContext . theSymbol ) ;
2020-02-27 21:37:10 -06:00
}
2020-04-25 14:18:07 -05:00
let symbolChanged = ( newSymbol ) => {
console . log ( "symbolChanged" , newSymbol ) ;
filterContext . theSymbol = newSymbol
2020-03-10 21:46:30 -05:00
document . title = getCurrentSymbol ( ) ;
$ ( "#tbSymbol" ) . text ( getCurrentSymbol ( ) ) ;
2020-04-25 20:56:09 -05:00
2020-04-24 20:39:45 -05:00
getAvailDatesForSymbol ( getCurrentSymbol ( ) ) . done ( _ => {
2020-04-28 18:46:31 -05:00
$ ( "#datePicker" ) . datepicker ( 'destroy' ) ;
$ ( "#datePicker" ) . datepicker ( { beforeShowDay : beforeShowDay } ) ;
if ( document . getElementById ( "datePicker" ) . hasHandler !== true ) { // work around multiple binding of the eventhandler - it seems that destroy doesn't remove the old handler....
$ ( "#datePicker" ) . datepicker ( ) . on ( 'changeDate' , ( e ) => {
if ( e . date !== undefined ) {
console . log ( "DatePicker changed date" , e . date ) ;
filterContext . theDate = e . date . toISOString ( ) . substr ( 0 , 10 ) ;
showTimesForDay ( filterContext . theDate ) ;
}
} ) ;
document . getElementById ( "datePicker" ) . hasHandler = true ;
}
2020-04-25 20:56:09 -05:00
if ( filterContext . theDate === undefined ) {
console . log ( "no date in contest, setting date to the last in chain." ) ;
filterContext . theDate = filterContext . availableDates [ filterContext . availableDates . length - 1 ] . Date ;
}
2020-04-25 21:00:21 -05:00
currentTZDate = new Date ( Date . parse ( filterContext . theDate ) + new Date ( ) . getTimezoneOffset ( ) * 60000 ) ;
2020-04-25 20:56:09 -05:00
console . log ( "setting datepicker date to " , filterContext . theDate , currentTZDate ) ;
$ ( "#datePicker" ) . datepicker ( 'setDate' , currentTZDate ) ;
2020-02-27 21:37:10 -06:00
} ) ;
}
2020-04-25 14:18:07 -05:00
let timeChanged = ( newTime ) => {
if ( filterContext . selectedTime !== newTime ) {
filterContext . selectedTime = newTime ;
$ ( "#tbSelectedTime" ) . text ( newTime ) ;
console . log ( "Time changed" , newTime ) ;
2020-03-10 21:46:30 -05:00
}
2020-04-25 20:56:09 -05:00
requestOptionChain ( ) ;
2020-02-27 21:37:10 -06:00
}
let requestOptionChain = ( ) => {
$ . ajax ( {
2020-04-24 00:58:12 -05:00
url : "/getOptionChain?Date=" + filterContext . theDate + "&Symbol=" + filterContext . theSymbol + "&Time=" + filterContext . selectedTime
2020-02-27 21:37:10 -06:00
} ) . done ( response => {
2020-03-09 10:49:19 -05:00
dta = JSON . parse ( response [ 0 ] . Data ) ;
2020-03-10 21:46:30 -05:00
//console.log("received",dta);
2020-02-27 21:37:10 -06:00
displayOptionChain ( ) ;
2020-04-24 21:00:37 -05:00
$ ( "#tbUnderlyingPrice" ) . text ( dta . underlyingPrice . toLocaleString ( 'en' , { minimumFractionDigits : 2 , maximumFractionDigits : 2 } ) ) ;
2020-02-27 21:37:10 -06:00
} ) ;
}
2020-03-09 10:49:19 -05:00
let showTimesForDay = ( ) => {
return $ . ajax ( {
2020-04-24 00:58:12 -05:00
url : "/getTimes?Date=" + filterContext . theDate + "&Symbol=" + filterContext . theSymbol
2020-03-09 10:49:19 -05:00
} ) . done ( response => {
let availableTimes = response ;
2020-03-10 21:46:30 -05:00
//console.log(availableTimes);
2020-03-09 10:49:19 -05:00
let lbTime = $ ( "#lbTime" ) ;
lbTime . empty ( ) ;
allTimes = availableTimes ;
for ( let i = 0 ; i < allTimes . length ; i ++ ) {
theTime = allTimes [ i ] . Time ;
2020-04-25 20:56:09 -05:00
if ( filterContext . selectedTime !== undefined ) {
if ( filterContext . selectedTime . substring ( 0 , 4 ) === theTime . substring ( 0 , 4 ) ) {
timeChanged ( theTime ) ;
}
} else {
if ( i == 4 ) {
// select the 4th time in the day... that's usually around 9:30
timeChanged ( theTime ) ;
}
}
2020-04-25 14:18:07 -05:00
//lbTime.append($(`<option ${selectedFlag}>${theTime}</option>`))
2020-04-25 20:56:09 -05:00
lbTime . append ( $ ( ` <button onclick="timeChanged(' ${ theTime } ');" class="dropdown-item" type="button"> ${ theTime . substring ( 0 , 5 ) } </button> ` ) )
2020-04-25 14:18:07 -05:00
2020-03-09 10:49:19 -05:00
}
2020-03-10 21:46:30 -05:00
$ ( "#lbTime" ) . change ( ) ;
2020-03-09 10:49:19 -05:00
} ) ;
2020-02-27 21:37:10 -06:00
}
let getAvailDatesForSymbol = ( theSymbol ) => {
return $ . ajax ( {
2020-04-24 20:39:45 -05:00
url : "/getDates?Symbol=" + theSymbol
2020-02-27 21:37:10 -06:00
} ) . done ( response => {
2020-03-09 10:49:19 -05:00
let availableDates = response ;
2020-03-10 21:46:30 -05:00
//console.log(availableDates);
2020-02-27 21:37:10 -06:00
filterContext . availableDates = availableDates ;
} ) ;
}
let refreshSymbolList = ( allSymbols ) => {
let lbSymbol = $ ( "#lbSymbol" ) ;
lbSymbol . empty ( ) ;
for ( let i = 0 ; i < allSymbols . length ; i ++ ) {
2020-03-09 10:49:19 -05:00
theSymbol = allSymbols [ i ] . Symbol ;
2020-02-27 21:37:10 -06:00
console . log ( theSymbol ) ;
2020-04-25 14:18:07 -05:00
lbSymbol . append ( $ ( ` <button onclick="symbolChanged(' ${ theSymbol } ');" class="dropdown-item" type="button"> ${ theSymbol } </button> ` ) )
2020-02-27 21:37:10 -06:00
}
2020-04-24 00:58:12 -05:00
}