From 02d169e1eed1792bec68154558de6b01687c72a3 Mon Sep 17 00:00:00 2001 From: Joshua Hsueh <joshua12696@gmail.com> Date: Sun, 31 Jan 2021 03:44:14 -0500 Subject: [PATCH] added portfolio feature --- backend/config/.env | 4 +-- frontend/.env | 2 +- frontend/src/components/Bank.js | 4 +-- frontend/src/components/Browse.js | 24 +++++++-------- frontend/src/components/Login.js | 45 ++++++++++++++-------------- frontend/src/components/Nav.js | 32 ++++++++++---------- frontend/src/components/Portfolio.js | 43 ++++++++++++++++++++------ frontend/src/components/Profile.js | 4 +-- 8 files changed, 91 insertions(+), 67 deletions(-) diff --git a/backend/config/.env b/backend/config/.env index 30d4393..ccd9ae7 100644 --- a/backend/config/.env +++ b/backend/config/.env @@ -1,4 +1,4 @@ -DEBUG= -SECRET_KEY= +DEBUG=True +SECRET_KEY=wjtowjatiowjatioawtawt DATABASE_USER= DATABASE_PASSWORD= \ No newline at end of file diff --git a/frontend/.env b/frontend/.env index f7736f1..7b4778e 100644 --- a/frontend/.env +++ b/frontend/.env @@ -1 +1 @@ -REACT_APP_API_ENDPOINT=api.reinvest.com/api +REACT_APP_API_ENDPOINT=https://api.reinvest.space/api \ No newline at end of file diff --git a/frontend/src/components/Bank.js b/frontend/src/components/Bank.js index edc1fd0..8d5c8a3 100644 --- a/frontend/src/components/Bank.js +++ b/frontend/src/components/Bank.js @@ -15,8 +15,8 @@ const Bank = (props) => { }; return ( - <div class="container"> - <h1 class="d-flex justify-content-center m-2 p-4">Bank</h1> + <div className="container"> + <h1 className="d-flex justify-content-center m-2 p-4">Bank</h1> <h1></h1> </div> ); diff --git a/frontend/src/components/Browse.js b/frontend/src/components/Browse.js index 2173c02..d7f1409 100644 --- a/frontend/src/components/Browse.js +++ b/frontend/src/components/Browse.js @@ -37,16 +37,16 @@ const Browse = (props) => { <div className="container"> <h1 className="d-flex justify-content-center m-2 p-4">Browse</h1> <input - class="form-control" + className="form-control" name="stock" type="text" id="stocksearch" placeholder="Search stock..." /> - <h4 class="h4"> + <h4 className="h4"> ${(stockChartYValues[0] - stockChartYValues[1]).toFixed(2)} </h4> - <h4 class="h4"> + <h4 className="h4"> {( ((stockChartYValues[0] - stockChartYValues[1]) / stockChartYValues[1]) * @@ -55,7 +55,7 @@ const Browse = (props) => { % </h4> <button - class="btn" + className="btn" onClick={() => setStock(document.getElementById("stocksearch").value)} > Search @@ -72,17 +72,17 @@ const Browse = (props) => { ]} layout={{ width: 720, height: 440, title: `${stock} ` }} /> - <div class="d-inline bg-dark text-white"> - <button class="btn" onClick={() => setDays(5)}> + <div className="d-inline bg-dark text-white"> + <button className="btn" onClick={() => setDays(5)}> 5D </button> - <button class="btn" onClick={() => setDays(14)}> + <button className="btn" onClick={() => setDays(14)}> 14D </button> - <button class="btn" onClick={() => setDays(30)}> + <button className="btn" onClick={() => setDays(30)}> 30D </button> - <button class="btn" onClick={() => setDays(100)}> + <button className="btn" onClick={() => setDays(100)}> 100D </button> </div> @@ -90,16 +90,16 @@ const Browse = (props) => { <br></br> <form method="POST" action="/browse/"> <div id="form-group"> - <label class="h4">Amount:</label> + <label className="h4">Amount:</label> <input - class="form-control" + className="form-control" name="username" type="number" step="0.01" /> </div> <br /> - <input class="btn btn-primary" type="submit" value="Submit" /> + <input className="btn btn-primary" type="submit" value="Submit" /> </form> </div> </div> diff --git a/frontend/src/components/Login.js b/frontend/src/components/Login.js index 71a5793..1f2ec84 100644 --- a/frontend/src/components/Login.js +++ b/frontend/src/components/Login.js @@ -1,26 +1,25 @@ -import React from 'react'; +import React from "react"; const Login = (props) => { - return ( + return ( + <form> + <div className="form-inner"> + <h2>Login</h2> + <div className="form-group"> + <label htmlFor="name">Name:</label> + <input type="text" name="name" id="name" /> + </div> + <div className="form-group"> + <label htmlFor="email">Email: </label> + <input type="email" name="email" id="email" /> + </div> + <div className="form-group"> + <label htmlFor="password">Password:</label> + <input type="password" name="password" id="password" /> + </div> + </div> + </form> + ); +}; - <form> - <div className="form-inner"> - <h2>Login</h2> - <div className="form-group"> - <label htmlFor="name">Name:</label> - <input type="text" name="name" id="name"/> - </div> - <div className="form-group"> - <label htmlFor="email">Email: </label> - <input type="email" name="email" id="email"/> - </div> - <div className="form-group"> - <label htmlFor="password">Password:</label> - <input type="password" name="password" id="password"/> - </div> - </div> - </form> - ) -} - -export default Login +export default Login; diff --git a/frontend/src/components/Nav.js b/frontend/src/components/Nav.js index 9e0d861..ad9c652 100644 --- a/frontend/src/components/Nav.js +++ b/frontend/src/components/Nav.js @@ -1,10 +1,10 @@ -import React, { useState, useEffect } from "react"; +import React from "react"; const Nav = (props) => { return ( - <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> + <nav className="navbar navbar-expand-lg navbar-dark bg-dark"> <button - class="navbar-toggler" + className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" @@ -12,27 +12,27 @@ const Nav = (props) => { aria-expanded="false" aria-label="Toggle navigation" > - <span class="navbar-toggler-icon"></span> + <span className="navbar-toggler-icon"></span> </button> - <div class="collapse navbar-collapse" id="navbarNavDropdown"> - <ul class="navbar-nav mr-auto"> - <li class="nav-item"> - <a class="nav-link text-white" href="/"> - Portfolio <span class="sr-only">(current)</span> + <div className="collapse navbar-collapse" id="navbarNavDropdown"> + <ul className="navbar-nav mr-auto"> + <li className="nav-item"> + <a className="nav-link text-white" href="/"> + Portfolio <span className="sr-only">(current)</span> </a> </li> - <li class="nav-item"> - <a class="nav-link text-white" href="/profile"> - Profile <span class="sr-only">(current)</span> + <li className="nav-item"> + <a className="nav-link text-white" href="/profile"> + Profile <span className="sr-only">(current)</span> </a> </li> - <li class="nav-item"> - <a class="nav-link text-white" href="/banking"> + <li className="nav-item"> + <a className="nav-link text-white" href="/banking"> Bank </a> </li> - <li class="nav-item"> - <a class="nav-link text-white" href="/browse"> + <li className="nav-item"> + <a className="nav-link text-white" href="/browse"> Browse </a> </li> diff --git a/frontend/src/components/Portfolio.js b/frontend/src/components/Portfolio.js index 92ef647..a4d7b94 100644 --- a/frontend/src/components/Portfolio.js +++ b/frontend/src/components/Portfolio.js @@ -2,23 +2,48 @@ import React, { useState, useEffect } from "react"; import "./assets/Portfolio.css"; const Portfolio = (props) => { - const [state, setState] = useState({}); + const [state, setState] = useState({ + user: { username: "", first_name: "", last_name: "" }, + charity: "", + stocks: [], + }); useEffect(() => { callAPI(); - }); + }, [state]); + const requestOptions = { + method: "GET", + headers: { + Authorization: `JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjEyMDgyNzM3LCJlbWFpbCI6ImFkbWluQGdtYWlsLmNvbSJ9.hmTYX9LO1koP-1OLfY7EYBHZPtviGz2ilBA9qq4MChw`, + }, + }; const callAPI = () => { - fetch("http://localhost:9000/FETCHURL") - .then((res) => res.text()) - .then((res) => setState(res)) - .catch((err) => err); + fetch(`${process.env.REACT_APP_API_ENDPOINT}/profile`, requestOptions) + .then((response) => response.json()) + .then((data) => setState(data)); }; return ( - <div class="container"> - <h1 class="d-flex justify-content-center m-2 p-4">Portfolio</h1> + <div> + <h1 className="d-flex justify-content-center m-2 p-4">Portfolio</h1> + <h1>Hello {state.user.username}!</h1> + <h4 className="h4">Your Charity of Choice: {state.charity}</h4> - <h1></h1> + <div className="bg-dark text-white"> + <h4 className="d-flex justify-content-center m-2 p-4">Your Stocks:</h4> + {state.stocks.map((stock) => { + return ( + <div className="d-inline-flex m-1 text-wrap bg-warning rounded p-3"> + <h3>Stock: {stock.ticker}</h3> + <p>Quantity: {stock.quantity}</p> + <p>Buy Price: {stock.buy_price}</p> + <form method="POST" action="/delete/"> + <input type="submit" value="Delete" class="btn btn-danger" /> + </form> + </div> + ); + })} + </div> </div> ); }; diff --git a/frontend/src/components/Profile.js b/frontend/src/components/Profile.js index 2bf6cf3..c497cee 100644 --- a/frontend/src/components/Profile.js +++ b/frontend/src/components/Profile.js @@ -15,8 +15,8 @@ const Profile = (props) => { }; return ( - <div class="container"> - <h1 class="d-flex justify-content-center m-2 p-4">Profile</h1> + <div className="container"> + <h1 className="d-flex justify-content-center m-2 p-4">Profile</h1> <h1></h1> </div> );