11import React from 'react' ;
22const $ = require ( 'jquery' ) ;
3-
3+ import StockChart from './StockChart.jsx' ;
44
55class App extends React . Component {
66 constructor ( props ) {
77 super ( props ) ;
8- }
8+ this . state = {
9+ priceData :[ ] ,
10+ currentPrice : 0 ,
11+ stockName : '' ,
12+ date : new Date ( ) ,
13+ stockData : [ ] ,
14+ closingCost : 0 ,
15+ type : '1D' ,
16+ ticker : 'TSLA' ,
917
18+ }
19+ this . retrieveData = this . retrieveData . bind ( this ) ;
20+ this . handleGraphTypeChange = this . handleGraphTypeChange . bind ( this ) ;
21+ this . generateStockDataArray = this . generateStockDataArray . bind ( this ) ;
22+ }
1023
1124 componentDidMount ( ) {
25+ //retrieve the path and filename of current page
26+ let pathName = window . location . pathname . match ( / \/ s t o c k s \/ ( \w + ) / i) ;
27+ let ticker = pathName ? pathName [ 1 ] : null ;
28+ if ( ticker ) {
29+ this . setState ( { ticker} , ( ) => this . retrieveData ( ) ) ;
30+ }
31+ }
32+
33+ //a function that makes an http GET request using the ticker and graph type
34+ retrieveData ( ) {
1235 $ . ajax ( {
13- url : ' /api/stocks/prices' ,
36+ url : ` /api/stocks/${ this . state . ticker } / prices/ ${ this . state . type } ` ,
1437 type : 'GET' ,
1538 success : ( data ) => {
39+ this . setState ( {
40+ priceData : data ,
41+ stockName : data [ 0 ] . name
42+ } , ( ) => this . generateStockDataArray ( ) )
1643 console . log ( 'GET request successful' , data ) ;
1744 } ,
1845 error : ( err ) => {
@@ -21,14 +48,104 @@ class App extends React.Component {
2148 } )
2249 }
2350
51+ //a function that updates the type and data on the state when the graph type is changed
52+ handleGraphTypeChange ( event ) {
53+ event . preventDefault ( ) ;
54+ this . setState ( {
55+ type : event . target . name
56+ } , ( ) => this . retrieveData ( ) )
57+ }
58+
59+ //a function that creates a stock data object for each retrieved price data point
60+ generateStockDataArray ( ) {
61+ let graphData = [ ] ;
62+ let today = this . state . date ;
63+ let type = this . state . type ;
64+ let dd = String ( today . getDate ( ) ) . padStart ( 2 , '0' ) ;
65+ let mm = String ( today . getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ; //January is 0!
66+ let yyyy = today . getFullYear ( ) ;
67+ let month ;
68+ let schedule = [ '9:00 AM' , '9:30 AM' , '10:00 AM' , '10:30 AM' , '11:30 AM' , '12:00 PM' , '12:30 PM' , '1:00 PM' , '1:30 PM' , '2:00 PM' , '2:30 PM' , '3:00 PM' , '3:30 PM' , '4:00 PM' , '4:30 PM' , '5:00 PM' ]
69+ if ( mm === 0 ) {
70+ month = 'JAN' ;
71+ } else if ( mm === 1 ) {
72+ month = 'FEB' ;
73+ } else if ( mm === 2 ) {
74+ month = 'MAR' ;
75+ } else if ( mm === 3 ) {
76+ month = 'APR' ;
77+ } else if ( mm === 4 ) {
78+ month = 'MAY' ;
79+ } else if ( mm === 5 ) {
80+ month = 'JUN' ;
81+ } else if ( mm === 6 ) {
82+ month = 'JUL' ;
83+ } else if ( mm === 7 ) {
84+ month = 'AUG' ;
85+ } else if ( mm === 8 ) {
86+ month = 'SEPT' ;
87+ } else if ( mm === 9 ) {
88+ month = 'OCT' ;
89+ } else if ( mm === 10 ) {
90+ month = 'NOV' ;
91+ } else if ( mm === 11 ) {
92+ month = 'DEC'
93+ }
94+ const data = this . state . priceData . slice ( ) ;
95+ if ( type === '1D' ) {
96+ for ( var i = 0 ; i < data . length ; i ++ ) {
97+ graphData . push ( { dateString : `${ schedule [ i ] } ET` , x : i , y : data [ i ] . price } ) ;
98+ }
99+ this . setState ( {
100+ stockData : graphData
101+ } )
102+ } else if ( type === '1W' ) {
103+ for ( var i = 0 ; i < data . length ; i ++ ) {
104+ graphData . push ( { dateString : `${ schedule [ i ] } , ${ month } ${ dd } ET` , x : i , y : data [ i ] . price } ) ;
105+ }
106+ this . setState ( {
107+ stockData : graphData
108+ } )
109+ } else if ( type === '1M' ) {
110+ for ( var i = 0 ; i < data . length ; i ++ ) {
111+ graphData . push ( { dateString : `${ schedule [ i ] } , ${ month } ${ dd } ET` , x : i , y : data [ i ] . price } ) ;
112+ }
113+ this . setState ( {
114+ stockData : graphData
115+ } )
116+ } else if ( type === '3M' ) {
117+ for ( var i = 0 ; i < data . length ; i ++ ) {
118+ graphData . push ( { dateString : `${ schedule [ i ] } , ${ month } ${ dd } ET` , x : i , y : data [ i ] . price } ) ;
119+ }
120+ this . setState ( {
121+ stockData : graphData
122+ } )
123+ } else if ( type === '1Y' ) {
124+ for ( var i = 0 ; i < data . length ; i ++ ) {
125+ graphData . push ( { dateString : today , x : i , y : data [ i ] . price } ) ;
126+ }
127+ this . setState ( {
128+ stockData : graphData
129+ } )
130+ } else if ( type === '5Y' ) {
131+ for ( var i = 0 ; i < data . length ; i ++ ) {
132+ graphData . push ( { dateString : today , x : i , y : data [ i ] . price } ) ;
133+ }
134+ this . setState ( {
135+ stockData : graphData
136+ } )
137+ }
138+ }
139+
24140 render ( ) {
25141 return (
26142 < div >
27- < h1 > Robinhood.com </ h1 >
28- < h3 > Stock Chart </ h3 >
143+ < StockChart currentPrice = { this . state . currentPrice } stockName = { this . state . stockName } stockData = { this . state . stockData } market = { this . state . market } handleGraphTypeChange = { this . handleGraphTypeChange } type = { this . state . type } />
29144 </ div >
145+
30146 )
31147 }
32- }
148+ } ;
149+
150+ export default App ;
33151
34- export default App ;
0 commit comments