From 89f25d67ecff9fdf95646e53e3434cadaae67b03 Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Mon, 24 Jun 2019 15:35:43 -0700 Subject: [PATCH 01/43] adding initial structure for VideoStore component --- package.json | 12 ++++++++++++ src/App.js | 13 ++++--------- src/VideoStore.js | 22 ++++++++++++++++++++++ 3 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 src/VideoStore.js diff --git a/package.json b/package.json index e7e4a7c62..b3eb42e1a 100644 --- a/package.json +++ b/package.json @@ -12,5 +12,17 @@ "build": "react-scripts build", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] } } diff --git a/src/App.js b/src/App.js index 203067e4d..d9a9b17af 100644 --- a/src/App.js +++ b/src/App.js @@ -1,19 +1,14 @@ import React, { Component } from 'react'; import logo from './logo.svg'; import './App.css'; +import VideoStore from './VideoStore' class App extends Component { render() { return ( -
-
- logo -

Welcome to React

-
-

- To get started, edit src/App.js and save to reload. -

-
+
+ {} +
); } } diff --git a/src/VideoStore.js b/src/VideoStore.js new file mode 100644 index 000000000..8445dd0fe --- /dev/null +++ b/src/VideoStore.js @@ -0,0 +1,22 @@ +import {React, Component} from 'react' + +class VideoStore extends Component { + constructor(props) { + super(props) + this.state = { + movieCollection: [], + currentCustomer: null, + } + } + + //TODO: the api call will happen here + + render () { + return ( +
+ Video Store +
+ ) + } + +} \ No newline at end of file From bfee07e66b6d8038af90c797b88b20c32f376b1c Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 12:00:42 -0700 Subject: [PATCH 02/43] setup of components folder and created of library files --- components/Library.css | 0 components/Library.js | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 components/Library.css create mode 100644 components/Library.js diff --git a/components/Library.css b/components/Library.css new file mode 100644 index 000000000..e69de29bb diff --git a/components/Library.js b/components/Library.js new file mode 100644 index 000000000..e69de29bb From 0671e1205fcba59c1b1ca4d21db2b2ca82995995 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 12:09:29 -0700 Subject: [PATCH 03/43] Library.js with imports, class, render and return. Comments added for next steps --- components/Library.js | 37 +++++++++++++++++++++++++++++++++++++ components/Movie.css | 0 components/Movie.js | 0 3 files changed, 37 insertions(+) create mode 100644 components/Movie.css create mode 100644 components/Movie.js diff --git a/components/Library.js b/components/Library.js index e69de29bb..c45d7e9c8 100644 --- a/components/Library.js +++ b/components/Library.js @@ -0,0 +1,37 @@ +import React from 'react'; +import axios from 'axios'; +import Movie from './Movie'; +import './Library.css'; + +class Library extends React.Component { + constructor(props) { + super(props); + + this.state = { + movies: [], + }; + } + + // TO DO: add componentDidMount function with axios to retrieve movies + + render() { + console.log(this.props) + + const movieCollection = this.state.movies.map((movie) => { + return + }); + return ( +
+ {movieCollection} +
+ ) + } + +} + +export default Library; diff --git a/components/Movie.css b/components/Movie.css new file mode 100644 index 000000000..e69de29bb diff --git a/components/Movie.js b/components/Movie.js new file mode 100644 index 000000000..e69de29bb From 88610301ad9dffa1ad03d8df628c8246b9de1e06 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 12:14:05 -0700 Subject: [PATCH 04/43] Movie.js with imports, const, onMovieClick, movie card, and propTypes --- components/Movie.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/components/Movie.js b/components/Movie.js index e69de29bb..218029666 100644 --- a/components/Movie.js +++ b/components/Movie.js @@ -0,0 +1,38 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import './Movie.css' + +const Movie = (props) => { + + const onMovieClick = () => { + props.callback(props.id) + } + + return ( + + +
+ {props.title} +
+ +

{props.title}

+

{props.releaseDate}

+
+
+ ) +} + +Movie.propTypes = { + id: PropTypes.number, + title: PropTypes.string, + releaseDate: PropTypes.string, + imageUrl: PropTypes.string, + external_id: PropTypes.number +}; + +export default Movie; + From 558abfc78b1edf67d82efc3369a0a7c9a98e193a Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 12:24:58 -0700 Subject: [PATCH 05/43] componentDidMount and get axios code added to Library.js --- components/Library.js | 12 +++++++++++- package-lock.json | 32 ++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/components/Library.js b/components/Library.js index c45d7e9c8..9bcf4ce43 100644 --- a/components/Library.js +++ b/components/Library.js @@ -12,7 +12,17 @@ class Library extends React.Component { }; } - // TO DO: add componentDidMount function with axios to retrieve movies + componentDidMount() { + axios.get('http://localhost:3000/movies') + .then((response) => { + this.setState({movies: response.data}) + }) + .catch((error) => { + this.setState({error: error.message}) + }) + } + + // TO DO: find movie for the rental render() { console.log(this.props) diff --git a/package-lock.json b/package-lock.json index 2207e63b9..47823f065 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1902,6 +1902,38 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", diff --git a/package.json b/package.json index e7e4a7c62..259c11fa7 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "axios": "^0.19.0", "react": "^16.8.6", "react-dom": "^16.8.6", "react-scripts": "3.0.1" From 879c403f0f53b0f3e65f2a77dc419da2f7a44d51 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 12:30:30 -0700 Subject: [PATCH 06/43] findMovieforRental drafted, no sure it works yet --- components/Library.js | 8 +++++++- components/Movie.js | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/components/Library.js b/components/Library.js index 9bcf4ce43..11b60a954 100644 --- a/components/Library.js +++ b/components/Library.js @@ -2,6 +2,7 @@ import React from 'react'; import axios from 'axios'; import Movie from './Movie'; import './Library.css'; +import { workers } from 'cluster'; class Library extends React.Component { constructor(props) { @@ -22,7 +23,12 @@ class Library extends React.Component { }) } - // TO DO: find movie for the rental + // TO DO: confirm this works + findMovieForRental = (movieId) => { + console.log(`In Library ${movieId}`); + const clickedMovie = this.state.movies.find( movie => movie.id === movieId) + this.props.selectedMovie(clickedMovie.title) + } render() { console.log(this.props) diff --git a/components/Movie.js b/components/Movie.js index 218029666..f5a13ac27 100644 --- a/components/Movie.js +++ b/components/Movie.js @@ -10,7 +10,6 @@ const Movie = (props) => { return ( -
{props.title}
From 9a2cd4ae5c983defe51a9e714ebb95bb94b1e48e Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 13:30:43 -0700 Subject: [PATCH 07/43] git commit, got axios get request to talk to rails api --- package-lock.json | 32 ++++++++++++++++++++++++++++++++ package.json | 1 + src/App.js | 32 +++++++++++++++++++++++++++----- src/VideoStore.js | 22 ---------------------- src/components/CustomerList.js | 13 +++++++++++++ 5 files changed, 73 insertions(+), 27 deletions(-) delete mode 100644 src/VideoStore.js create mode 100644 src/components/CustomerList.js diff --git a/package-lock.json b/package-lock.json index 2207e63b9..47823f065 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1902,6 +1902,38 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", diff --git a/package.json b/package.json index b3eb42e1a..3aae7f405 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "axios": "^0.19.0", "react": "^16.8.6", "react-dom": "^16.8.6", "react-scripts": "3.0.1" diff --git a/src/App.js b/src/App.js index d9a9b17af..bbfa4cc8e 100644 --- a/src/App.js +++ b/src/App.js @@ -1,14 +1,36 @@ import React, { Component } from 'react'; -import logo from './logo.svg'; +import axios from 'axios' import './App.css'; -import VideoStore from './VideoStore' +import CustomerList from './components/CustomerList' class App extends Component { + state = { + movieCollection: [], + customers: [], + selectedCustomer: null, + selectedMovie: null, + } + + + componentDidMount () { + axios.get('http://localhost:3000/movies/', { crossdomain: true }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.log(error.message) + }) + } render() { return ( -
- {} -
+
+
+ +
+
+ {/* */} +
+
); } } diff --git a/src/VideoStore.js b/src/VideoStore.js deleted file mode 100644 index 8445dd0fe..000000000 --- a/src/VideoStore.js +++ /dev/null @@ -1,22 +0,0 @@ -import {React, Component} from 'react' - -class VideoStore extends Component { - constructor(props) { - super(props) - this.state = { - movieCollection: [], - currentCustomer: null, - } - } - - //TODO: the api call will happen here - - render () { - return ( -
- Video Store -
- ) - } - -} \ No newline at end of file diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js new file mode 100644 index 000000000..11511a502 --- /dev/null +++ b/src/components/CustomerList.js @@ -0,0 +1,13 @@ +import React from 'react' + +const CustomerList = (props) => { + + + return ( +
+ Test me out +
+ ); +} + +export default CustomerList; \ No newline at end of file From 6bcd7505152a39a48b977f532fe0c95aee668a3e Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 13:35:54 -0700 Subject: [PATCH 08/43] moved files into src/components --- {components => src/components}/Library.css | 0 {components => src/components}/Library.js | 0 {components => src/components}/Movie.css | 0 {components => src/components}/Movie.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {components => src/components}/Library.css (100%) rename {components => src/components}/Library.js (100%) rename {components => src/components}/Movie.css (100%) rename {components => src/components}/Movie.js (100%) diff --git a/components/Library.css b/src/components/Library.css similarity index 100% rename from components/Library.css rename to src/components/Library.css diff --git a/components/Library.js b/src/components/Library.js similarity index 100% rename from components/Library.js rename to src/components/Library.js diff --git a/components/Movie.css b/src/components/Movie.css similarity index 100% rename from components/Movie.css rename to src/components/Movie.css diff --git a/components/Movie.js b/src/components/Movie.js similarity index 100% rename from components/Movie.js rename to src/components/Movie.js From a82c1c4d0760683454b9dc686bfd88dc7d0d273a Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 14:12:51 -0700 Subject: [PATCH 09/43] added customer list and customer cards --- src/App.js | 18 +++------- src/components/Customer.js | 48 ++++++++++++++++++++++++++ src/components/CustomerList.js | 61 ++++++++++++++++++++++++++++++---- src/components/Library.js | 8 +++-- src/components/Movie.js | 4 +-- 5 files changed, 113 insertions(+), 26 deletions(-) create mode 100644 src/components/Customer.js diff --git a/src/App.js b/src/App.js index bbfa4cc8e..55bb3a6db 100644 --- a/src/App.js +++ b/src/App.js @@ -1,26 +1,16 @@ import React, { Component } from 'react'; -import axios from 'axios' +// import axios from 'axios' import './App.css'; import CustomerList from './components/CustomerList' +import Library from './components/Library' + class App extends Component { state = { - movieCollection: [], - customers: [], selectedCustomer: null, selectedMovie: null, } - - componentDidMount () { - axios.get('http://localhost:3000/movies/', { crossdomain: true }) - .then(response => { - console.log(response.data) - }) - .catch(error => { - console.log(error.message) - }) - } render() { return (
@@ -28,7 +18,7 @@ class App extends Component {
- {/* */} +
); diff --git a/src/components/Customer.js b/src/components/Customer.js new file mode 100644 index 000000000..e92a1d09c --- /dev/null +++ b/src/components/Customer.js @@ -0,0 +1,48 @@ +import React from 'react' +import PropType from 'prop-types' + +const Customer = (props) => { + const { + name, phone, address, city, state, postalCode, + moviesCheckedOutCount, accountCredit + } = props + + const onSelectCustomer = () => { + console.log('Selecting this customer') + // Callback function up to App. + } + + return ( + +
+
+

{name}

+

{phone}

+

{address}

+

{city}

+

{state}

+

{postalCode}

+

{accountCredit}

+
{moviesCheckedOutCount}
+ +
+
+ ) +} + +Customer.propTypes = { + acountCredit: PropType.number, + address: PropType.string, + city: PropType.string, + moviesCheckedOutCount: PropType.number, + name: PropType.string, + postalCode: PropType.string, + phone: PropType.string, + state: PropType.string, +}; + +export default Customer; diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index 11511a502..593b36b15 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -1,13 +1,60 @@ import React from 'react' +import axios from 'axios'; +import Customer from './Customer' -const CustomerList = (props) => { - +class CustomerList extends React.Component { + constructor(props) { + super(props); + + this.state = { + customers: [] + }; + } + + componentDidMount() { + axios.get('http://localhost:3000/customers') + .then((response) => { + this.setState({customers: response.data}) + console.log(this.state.customers) + }) + .catch((error) => { + this.setState({error: error.message}) + }) + } - return ( -
- Test me out -
- ); + + + render() { + const customerList = this.state.customers.map(cust => { + + return + }) + return ( +
+ {customerList} +
+ ); + } } + +// account_credit: 13.15 +// address: "Ap #292-5216 Ipsum Rd." +// city: "Hillsboro" +// id: 1 +// movies_checked_out_count: 0 +// name: "Shelley Rocha" +// phone: "(322) 510-8695" +// postal_code: "24309" +// registered_at: "2015-04-29T14:54:14.000Z" +// state: "OR" export default CustomerList; \ No newline at end of file diff --git a/src/components/Library.js b/src/components/Library.js index 11b60a954..18b4cbe81 100644 --- a/src/components/Library.js +++ b/src/components/Library.js @@ -2,7 +2,7 @@ import React from 'react'; import axios from 'axios'; import Movie from './Movie'; import './Library.css'; -import { workers } from 'cluster'; + class Library extends React.Component { constructor(props) { @@ -10,6 +10,7 @@ class Library extends React.Component { this.state = { movies: [], + errorMessage: '' }; } @@ -17,9 +18,11 @@ class Library extends React.Component { axios.get('http://localhost:3000/movies') .then((response) => { this.setState({movies: response.data}) + console.log(this.state.movies) }) .catch((error) => { - this.setState({error: error.message}) + this.setState({errorMessage: error.message}) + console.log(error.message) }) } @@ -31,7 +34,6 @@ class Library extends React.Component { } render() { - console.log(this.props) const movieCollection = this.state.movies.map((movie) => { return { const onMovieClick = () => { - props.callback(props.id) + // props.callback(props.id) } return ( @@ -16,7 +16,7 @@ const Movie = (props) => {

{props.title}

{props.releaseDate}

From 5f527acb73308f49e4fc7da54ce981b8a602263a Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 14:13:19 -0700 Subject: [PATCH 10/43] commented out callback function in Movie --- src/components/Movie.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Movie.js b/src/components/Movie.js index 79803e5ef..a2ea06048 100644 --- a/src/components/Movie.js +++ b/src/components/Movie.js @@ -6,6 +6,7 @@ const Movie = (props) => { const onMovieClick = () => { // props.callback(props.id) + console.log('movie onClick callback') } return ( From ab54165c5e6fe85025336048bd030efc671e4d91 Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 14:14:35 -0700 Subject: [PATCH 11/43] added key to map function in CustomerList --- src/components/CustomerList.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index 593b36b15..c6162b6f9 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -25,9 +25,10 @@ class CustomerList extends React.Component { render() { - const customerList = this.state.customers.map(cust => { + const customerList = this.state.customers.map((cust, i) => { return Date: Tue, 25 Jun 2019 14:28:02 -0700 Subject: [PATCH 12/43] navmenu js and css created --- src/components/NavMenu.css | 0 src/components/NavMenu.js | 41 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/components/NavMenu.css create mode 100644 src/components/NavMenu.js diff --git a/src/components/NavMenu.css b/src/components/NavMenu.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js new file mode 100644 index 000000000..094c24cd3 --- /dev/null +++ b/src/components/NavMenu.js @@ -0,0 +1,41 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import Selection from './Selection'; +import './NavMenu.css'; + +const NavMenu = (props) => { + return ( +
+
    +
  • +

    The Name of Our Video Store

  • +
  • + + + +
  • +
  • + + + +
  • +
  • + + + +
  • +
  • + + + +
  • +
  • + {/* Something like this...? */} + {/* */} +
  • +
+
+ ) +} + +export default NavMenu; From c3e6cfacbc645e55b3d4c71fe3e7960cb64258b1 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 14:34:31 -0700 Subject: [PATCH 13/43] movie search js and css created. js file is bare bones currently --- src/components/MovieSearch.css | 0 src/components/MovieSearch.js | 20 ++++++++++++++++++++ src/components/NavMenu.js | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/components/MovieSearch.css create mode 100644 src/components/MovieSearch.js diff --git a/src/components/MovieSearch.css b/src/components/MovieSearch.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js new file mode 100644 index 000000000..fb657a133 --- /dev/null +++ b/src/components/MovieSearch.js @@ -0,0 +1,20 @@ +import React from 'react'; +import axios from 'axios'; +import Movie from './Movie'; +import './MovieSearch.css'; + +class MovieSearch extends React.Component { + constructor(props) { + super(props); + + this.state = { + title: '', + movies: [], + } + } + + // TO DO: event handlers + // TO DO: add movie to library with axios post +} + +export default MovieSearch; diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js index 094c24cd3..fe7cbe6ab 100644 --- a/src/components/NavMenu.js +++ b/src/components/NavMenu.js @@ -8,7 +8,7 @@ const NavMenu = (props) => {
  • -

    The Name of Our Video Store

  • +

    Rewind Video

  • From b022d28b2ed2f0c6af11204aa0f7b5011315994c Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 14:59:41 -0700 Subject: [PATCH 14/43] working out state in MovieSearch.js --- src/components/CustomerList.js | 2 -- src/components/MovieSearch.js | 35 ++++++++++++++++++++++++++++++++++ src/components/NavMenu.js | 8 +++----- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index 593b36b15..358494aee 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -22,8 +22,6 @@ class CustomerList extends React.Component { }) } - - render() { const customerList = this.state.customers.map(cust => { diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index fb657a133..cb596e916 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -13,6 +13,41 @@ class MovieSearch extends React.Component { } } + onInputChange = (event) => { + const updatedState = {}; + + const field = event.target.name; + const value = event.target.value; + + updatedState[field] = value; + this.setState(updatedState); + } + + onFormSubmit = (event) => { + event.preventDefault(); + + const searchQuery = { + title: this.state.title, + }; + + this.setState({ + title: '', + }); + + const url = `http://localhost:3000/movies?query=${searchQuery.title}` + axios.get(url) + .then((response) => { + console.log(searchQuery); + console.log(url); + console.log(response.data); + this.setState({movies: response.data}) + }) + .catch((error) => { + console.log(error); + this.setState({error: error.message}) + }); + } + // TO DO: event handlers // TO DO: add movie to library with axios post } diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js index fe7cbe6ab..a39b72593 100644 --- a/src/components/NavMenu.js +++ b/src/components/NavMenu.js @@ -1,12 +1,10 @@ import React from 'react'; -import { Link } from 'react-router-dom'; -import Selection from './Selection'; import './NavMenu.css'; const NavMenu = (props) => { return (
    -
      + {/*
      • Rewind Video

      • @@ -32,8 +30,8 @@ const NavMenu = (props) => {
      • {/* Something like this...? */} {/* */} -
      • -
      + {/* */} + {/*
    */}
    ) } From 21e7c4e8b3d4d9a7378546ed41c23a5f8acefebf Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 15:26:33 -0700 Subject: [PATCH 15/43] addMovietoLibrary code added to MovieSearch.js --- src/components/MovieSearch.js | 57 +++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index cb596e916..289b0716b 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -46,10 +46,61 @@ class MovieSearch extends React.Component { console.log(error); this.setState({error: error.message}) }); - } + } + + + addMovieToLibrary = (movieId) => { + // TO DO: make sure following line syntax is okay + const clickedMovie = this.state.movies.find(movie) + + const movieData = { + title: clickedMovie.title, + overview: clickedMovie.overview, + release_date: clickedMovie.release_date, + inventory: clickedMovie.inventory, + image_url: clickedMovie.image_url, + external_id: clickedMovie.external_id + } - // TO DO: event handlers - // TO DO: add movie to library with axios post + axios.post('http://localhost:3000/movies/', movieData) + .then((response) => { + alert(`Sucessfully added ${movieData.title} to rental library!`); + }) + .catch((error) => { + alert(`Error: ${error.message}`); + }) + } + + render() { + const searchResults = this.state.movies.map((movie, index) => { + return + }); + + return ( +
    +
    +
    + + +
    +
    + +
    + {searchResults} +
    +
    + ); + } } export default MovieSearch; From 8dc9d46e83b40e01ac5224dab56241f34c2f3e16 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Tue, 25 Jun 2019 15:41:54 -0700 Subject: [PATCH 16/43] Selection.js and Selection.css created --- src/App.js | 21 +++++++++++++++ src/components/Selection.css | 0 src/components/Selection.js | 50 ++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 src/components/Selection.css create mode 100644 src/components/Selection.js diff --git a/src/App.js b/src/App.js index 55bb3a6db..23fe3d611 100644 --- a/src/App.js +++ b/src/App.js @@ -10,6 +10,27 @@ class App extends Component { selectedCustomer: null, selectedMovie: null, } + + // Grace's suggested edits for this portion, starting with line 9: + // constructor() { + // super(); + // this.state = { + // selectedMovie: null, + // selectedCustomer: null, + // }; + // } + + // selectMovieForRental = (movieTitle) => { + // this.setState({ + // selectedMovie: movieTitle + // }) + // } + + // selectCustomerForRental = (customerObject) => { + // this.setState({ + // selectedCustomer: customerObject + // }) + // } render() { return ( diff --git a/src/components/Selection.css b/src/components/Selection.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/Selection.js b/src/components/Selection.js new file mode 100644 index 000000000..41d9affc3 --- /dev/null +++ b/src/components/Selection.js @@ -0,0 +1,50 @@ +import React from 'react'; +import axios from 'axios'; +import './Selection.css'; + + +const Selection = (props) => { + + const title = props.selectedMovie + const customerId = props.selectedCustomer.id + + const today = new Date(); + today.setDate(today.getDate() +1 ); + const day = today.getDate(); + const month = today.getMonth() + 1; + const year = today.getFullYear(); + const dueDate = `${year}-${month}-${day}` + + const url = `http://localhost:3000/rentals/${title}/check-out?customer_id=${customerId}&due_date=${dueDate}` + + const createNewRental = () => { + axios.post(url) + .then((response) => { + alert(`Successfully created new rental!`); + window.location.reload(); + }) + .catch((error) => { + alert(`There has been an error. ${error}: ${error.message}`); + }); + } + + return ( +
    +
    +

    + Selected Movie: + {props.selectedMovie} +

    +

    + Selected Customer: + {props.selectedCustomer.name ? props.selectedCustomer.name : props.selectedCustomer} +

    +
    + +
    + ) +} + +export default Selection; From 0420e266805f9a861548ff4b195b036bbae9127a Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 15:55:04 -0700 Subject: [PATCH 17/43] added routing to index and created route component --- package-lock.json | 102 +++++++++++++++++++++++++++++++++ package.json | 1 + src/App.js | 22 +++---- src/Route.js | 18 ++++++ src/components/Customer.js | 17 +++--- src/components/CustomerList.js | 18 ++---- src/components/Library.js | 1 + src/index.js | 27 ++++++++- 8 files changed, 171 insertions(+), 35 deletions(-) create mode 100644 src/Route.js diff --git a/package-lock.json b/package-lock.json index 47823f065..9bc9f54a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5635,6 +5635,11 @@ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "gzip-size": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", @@ -5809,6 +5814,19 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "history": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", + "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^0.4.0" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -5819,6 +5837,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -8166,6 +8192,16 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, + "mini-create-react-context": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz", + "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==", + "requires": { + "@babel/runtime": "^7.4.0", + "gud": "^1.0.0", + "tiny-warning": "^1.0.2" + } + }, "mini-css-extract-plugin": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", @@ -10226,6 +10262,52 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" }, + "react-router": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.1.tgz", + "integrity": "sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.3.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.1.tgz", + "integrity": "sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.0.1", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, "react-scripts": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz", @@ -10607,6 +10689,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, + "resolve-pathname": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -11717,6 +11804,16 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-invariant": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", + "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==" + }, + "tiny-warning": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", + "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -12154,6 +12251,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "value-equal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 3aae7f405..eeff31f0a 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "axios": "^0.19.0", "react": "^16.8.6", "react-dom": "^16.8.6", + "react-router-dom": "^5.0.1", "react-scripts": "3.0.1" }, "scripts": { diff --git a/src/App.js b/src/App.js index 55bb3a6db..a40b87c71 100644 --- a/src/App.js +++ b/src/App.js @@ -1,25 +1,25 @@ import React, { Component } from 'react'; -// import axios from 'axios' +import {Route, Switch, Link} from 'react-router-dom' import './App.css'; import CustomerList from './components/CustomerList' import Library from './components/Library' class App extends Component { - state = { - selectedCustomer: null, - selectedMovie: null, - } + state = { + selectedCustomer: null, + selectedMovie: null, + } + + selectCustomer = (customerID) => { + console.log('select Customer in App') + + } render() { return (
    -
    - -
    -
    - -
    +

    Rewind Movies Home Page

    ); } diff --git a/src/Route.js b/src/Route.js new file mode 100644 index 000000000..28e29d2e9 --- /dev/null +++ b/src/Route.js @@ -0,0 +1,18 @@ +import React from 'react' +import ReactDOM from 'react-dom' +import './index.css' +import { Route, Link, BrowserRouter as Router } from 'react-router-dom' +import App from './App' +import Library from './components/Library' +import CustomerList from './components/CustomerList' + +const routing = ( + +
    + + + +
    +
    +) +ReactDOM.render(routing, document.getElementById('root')) \ No newline at end of file diff --git a/src/components/Customer.js b/src/components/Customer.js index e92a1d09c..7757e66f5 100644 --- a/src/components/Customer.js +++ b/src/components/Customer.js @@ -7,23 +7,22 @@ const Customer = (props) => { moviesCheckedOutCount, accountCredit } = props - const onSelectCustomer = () => { + const onSelectCustomer = (e) => { + e.preventDefault(); console.log('Selecting this customer') - // Callback function up to App. + props.selectCustCallback(props.id) } return (
    -

    {name}

    +

    {name}

    {phone}

    -

    {address}

    -

    {city}

    -

    {state}

    -

    {postalCode}

    -

    {accountCredit}

    -
    {moviesCheckedOutCount}
    +

    {address}

    +

    {city}, {state}, {postalCode}

    +

    Account credit: {accountCredit}

    +

    Movies checked out: {moviesCheckedOutCount === 0 ? 'none' : moviesCheckedOutCount}

    - -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • - {/* Something like this...? */} - {/* */} - {/*
  • */} - {/*
*/} -
- ) -} - -export default NavMenu; diff --git a/src/images/image.jpeg b/src/images/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ebd97693781a6a7f23e7cf706ae5d0a1d0ba9d65 GIT binary patch literal 128842 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 literal 0 HcmV?d00001 diff --git a/src/index.css b/src/index.css index b4cc7250b..532fb9670 100644 --- a/src/index.css +++ b/src/index.css @@ -1,5 +1,28 @@ body { margin: 0; padding: 0; - font-family: sans-serif; + font-family: 'Open Sans', sans-serif; + } + +h1 { + font-family: 'Luckiest Guy', cursive; + font-size: 4.5em; + text-align: center; +} + +.nav-menu { + display: flex; + justify-content: space-around; + align-items: center; + list-style: none; + background-color:#DC5107; + color: white; + list-style: none; + line-height: 4em; +} + +a:active { + color: none; + text-decoration: none; +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 1e68c1307..43d2886bd 100644 --- a/src/index.js +++ b/src/index.js @@ -6,14 +6,15 @@ import App from './App'; import Library from './components/Library' import CustomerList from './components/CustomerList' + import registerServiceWorker from './registerServiceWorker'; const routing = (
-
    +
    • - Rewind Movies + Home
    • Movies @@ -28,6 +29,7 @@ const routing = (
) + ReactDOM.render( routing, document.getElementById('root') ); registerServiceWorker(); From cd5ffba99c9ed2f731bc4085bde00e1d8912be0f Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 20:12:06 -0700 Subject: [PATCH 20/43] removed bug with having router in index.js and App --- src/App.js | 51 +++++++++++++++++++++------------- src/Route.js | 18 ------------ src/components/Customer.js | 6 ++-- src/components/CustomerList.js | 3 +- src/index.js | 25 +---------------- src/notfound.js | 3 ++ 6 files changed, 39 insertions(+), 67 deletions(-) create mode 100644 src/notfound.js diff --git a/src/App.js b/src/App.js index 52b5a1a3a..6913237c5 100644 --- a/src/App.js +++ b/src/App.js @@ -1,30 +1,23 @@ import React, { Component } from 'react'; -import {Route, Switch, Link} from 'react-router-dom' +import {BrowserRouter as Router, Link, Switch, Route} from 'react-router-dom' import './App.css'; -import CustomerList from './components/CustomerList' import Library from './components/Library' - +import CustomerList from './components/CustomerList' +import Notfound from './notfound' class App extends Component { - state = { - selectedCustomer: null, - selectedMovie: null, + constructor() { + super(); + this.state = { + selectedCustomer: null, + selectedMovie: null, + } } - + selectCustomer = (customerID) => { console.log('select Customer in App') } - - // Grace's suggested edits for this portion, starting with line 9: - // constructor() { - // super(); - // this.state = { - // selectedMovie: null, - // selectedCustomer: null, - // }; - // } - // selectMovieForRental = (movieTitle) => { // this.setState({ // selectedMovie: movieTitle @@ -39,11 +32,29 @@ class App extends Component { render() { return ( -
-

Rewind Movies Home Page

+ +
+
    +
  • + Rewind Movies +
  • +
  • + Movies +
  • +
  • + Customer Registry +
  • +
+ + (

Rewind Movies

)}/> /> + + ()} /> + +
- ); +
); } } + export default App; diff --git a/src/Route.js b/src/Route.js index 28e29d2e9..e69de29bb 100644 --- a/src/Route.js +++ b/src/Route.js @@ -1,18 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' -import './index.css' -import { Route, Link, BrowserRouter as Router } from 'react-router-dom' -import App from './App' -import Library from './components/Library' -import CustomerList from './components/CustomerList' - -const routing = ( - -
- - - -
-
-) -ReactDOM.render(routing, document.getElementById('root')) \ No newline at end of file diff --git a/src/components/Customer.js b/src/components/Customer.js index 7757e66f5..9418dc5b8 100644 --- a/src/components/Customer.js +++ b/src/components/Customer.js @@ -3,14 +3,14 @@ import PropType from 'prop-types' const Customer = (props) => { const { - name, phone, address, city, state, postalCode, - moviesCheckedOutCount, accountCredit + name, id, phone, address, city, state, postalCode, + moviesCheckedOutCount, accountCredit, selectCustCallback } = props const onSelectCustomer = (e) => { e.preventDefault(); console.log('Selecting this customer') - props.selectCustCallback(props.id) + selectCustCallback(id) } return ( diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index 327a36083..467863e87 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -5,12 +5,10 @@ import Customer from './Customer' class CustomerList extends React.Component { constructor(props) { super(props); - this.state = { customers: [] }; } - componentDidMount() { axios.get('http://localhost:3000/customers') .then((response) => { @@ -22,6 +20,7 @@ class CustomerList extends React.Component { } render() { + console.log(this.props) const customerList = this.state.customers.map((cust, i) => { return -
-
    -
  • - Rewind Movies -
  • -
  • - Movies -
  • -
  • - Customer Registry -
  • -
- - - -
- -) -ReactDOM.render( routing, document.getElementById('root') +ReactDOM.render( , document.getElementById('root') ); registerServiceWorker(); diff --git a/src/notfound.js b/src/notfound.js new file mode 100644 index 000000000..632844c02 --- /dev/null +++ b/src/notfound.js @@ -0,0 +1,3 @@ +import React from 'react' +const Notfound = () =>

Not found

+export default Notfound \ No newline at end of file From d8034bd2d695b1bf9096d8fb8487d51e6f7fa7a8 Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Tue, 25 Jun 2019 20:21:01 -0700 Subject: [PATCH 21/43] creating smaller functional component for movieRental --- src/App.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/App.js b/src/App.js index f2e7cdc93..e91176604 100644 --- a/src/App.js +++ b/src/App.js @@ -19,6 +19,15 @@ class App extends Component { selectCustomer = (customerID) => { console.log('select Customer in App') + } + + showHome() { + return ( +
+

Rewind Movies

+ theater +
+ ) } // selectMovieForRental = (movieTitle) => { // this.setState({ @@ -47,20 +56,23 @@ class App extends Component { Customer Registry -

Rewind Movies

-
- theater -
- (

Rewind Movies

)}/> /> + (this.showHome())}/> /> ()} />
+ ); } } - export default App; + +const movieRental = (props) => { + const {customerID, movieID} = props + return ( +
+ ) +} \ No newline at end of file From f2f17a91715fa0c0f581a462b3858ce7c612b09e Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Wed, 26 Jun 2019 09:37:14 -0700 Subject: [PATCH 22/43] customer list styling --- package-lock.json | 273 ++++++++++++++++++++++++++++++++ package.json | 2 + public/index.html | 1 + src/App.css | 2 +- src/App.js | 2 +- src/components/Customer.css | 14 +- src/components/Customer.js | 26 +-- src/components/CustomerList.css | 7 + src/components/CustomerList.js | 3 + src/images/frontpage.jpg | Bin 0 -> 185863 bytes src/index.css | 13 +- 11 files changed, 320 insertions(+), 23 deletions(-) create mode 100644 src/components/CustomerList.css create mode 100644 src/images/frontpage.jpg diff --git a/package-lock.json b/package-lock.json index 9bc9f54a4..db958783b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1162,6 +1162,39 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@react-bootstrap/react-popper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@react-bootstrap/react-popper/-/react-popper-1.2.1.tgz", + "integrity": "sha512-4l3q7LcZEhrSkI4d3Ie3g4CdrXqqTexXX4PFT45CB0z5z2JUbaxgRwKNq7r5j2bLdVpZm+uvUGqxJw8d9vgbJQ==", + "requires": { + "babel-runtime": "6.x.x", + "create-react-context": "^0.2.1", + "popper.js": "^1.14.4", + "prop-types": "^15.6.1", + "typed-styles": "^0.0.5", + "warning": "^3.0.0" + }, + "dependencies": { + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "@restart/context": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", + "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==" + }, + "@restart/hooks": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.1.tgz", + "integrity": "sha512-kjGGlli8iTe5TFDw6qHZJ5QK1naITMveIO+o8yQJJqwX8VIkiQzLddK98Lduga2krJMzWlNqDR/4isGLiyBlUA==" + }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", @@ -2428,6 +2461,11 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "bootstrap": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3359,6 +3397,11 @@ } } }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, "clean-css": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", @@ -3709,6 +3752,15 @@ "sha.js": "^2.4.8" } }, + "create-react-context": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", + "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -4266,6 +4318,14 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -4392,6 +4452,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -5232,6 +5300,35 @@ "bser": "^2.0.0" } }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + } + } + }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", @@ -6436,6 +6533,15 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -7759,6 +7865,11 @@ "array-includes": "^3.0.3" } }, + "keycode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", + "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -8398,6 +8509,15 @@ "lower-case": "^1.1.1" } }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, "node-forge": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", @@ -9051,6 +9171,11 @@ "ts-pnp": "^1.0.0" } }, + "popper.js": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", + "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" + }, "portfinder": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", @@ -9992,6 +10117,25 @@ "react-is": "^16.8.1" } }, + "prop-types-extra": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.0.tgz", + "integrity": "sha512-QFyuDxvMipmIVKD2TwxLVPzMnO4e5oOf1vr3tJIomL8E7d0lr6phTHd5nkPhFIzTD1idBLLEPeylL9g+rrTzRg==", + "requires": { + "react-is": "^16.3.2", + "warning": "^3.0.0" + }, + "dependencies": { + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, "property-information": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.1.0.tgz", @@ -10164,6 +10308,33 @@ "whatwg-fetch": "3.0.0" } }, + "react-bootstrap": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.0.0-beta.9.tgz", + "integrity": "sha512-M0BYLuuUdMITJ16+DDDb1p4vWV87csEBi/uOxZYODuDZh7hvbrJVahfvPXcqeqq4eEpNL+PKSlqb9fNaY0HZyA==", + "requires": { + "@babel/runtime": "^7.4.2", + "@react-bootstrap/react-popper": "1.2.1", + "@restart/context": "^2.1.4", + "@restart/hooks": "^0.3.0", + "classnames": "^2.2.6", + "dom-helpers": "^3.4.0", + "invariant": "^2.2.4", + "keycode": "^2.2.0", + "popper.js": "^1.14.7", + "prop-types": "^15.7.2", + "prop-types-extra": "^1.1.0", + "react-overlays": "^1.2.0", + "react-transition-group": "^4.0.0", + "uncontrollable": "^6.1.0", + "warning": "^4.0.3" + } + }, + "react-context-toolbox": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-context-toolbox/-/react-context-toolbox-2.0.2.tgz", + "integrity": "sha512-tY4j0imkYC3n5ZlYSgFkaw7fmlCp3IoQQ6DxpqeNHzcD0hf+6V+/HeJxviLUZ1Rv1Yn3N3xyO2EhkkZwHn0m1A==" + }, "react-dev-utils": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz", @@ -10262,6 +10433,50 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" }, + "react-overlays": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-1.2.0.tgz", + "integrity": "sha512-i/FCV8wR6aRaI+Kz/dpJhOdyx+ah2tN1RhT9InPrexyC4uzf3N4bNayFTGtUeQVacj57j1Mqh1CwV60/5153Iw==", + "requires": { + "classnames": "^2.2.6", + "dom-helpers": "^3.4.0", + "prop-types": "^15.6.2", + "prop-types-extra": "^1.1.0", + "react-context-toolbox": "^2.0.2", + "react-popper": "^1.3.2", + "uncontrollable": "^6.0.0", + "warning": "^4.0.2" + } + }, + "react-popper": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.3.tgz", + "integrity": "sha512-ynMZBPkXONPc5K4P5yFWgZx5JGAUIP3pGGLNs58cfAPgK67olx7fmLp+AdpZ0+GoQ+ieFDa/z4cdV6u7sioH6w==", + "requires": { + "@babel/runtime": "^7.1.2", + "create-react-context": "<=0.2.2", + "popper.js": "^1.14.4", + "prop-types": "^15.6.1", + "typed-styles": "^0.0.7", + "warning": "^4.0.2" + }, + "dependencies": { + "create-react-context": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.2.tgz", + "integrity": "sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, + "typed-styles": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", + "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" + } + } + }, "react-router": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.1.tgz", @@ -10368,6 +10583,27 @@ "workbox-webpack-plugin": "4.2.0" } }, + "react-transition-group": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.1.1.tgz", + "integrity": "sha512-K/N1wqJ2GRP2yj3WBqEUYa0KV5fiaAWpUfU9SpHOHefeKvyrO+VrnMBML21M19QZoVbDZKmuQFHZYoMMi1xuJA==", + "requires": { + "@babel/runtime": "^7.4.5", + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", + "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -11950,11 +12186,21 @@ "mime-types": "~2.1.24" } }, + "typed-styles": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.5.tgz", + "integrity": "sha512-ht+rEe5UsdEBAa3gr64+QjUOqjOLJfWLvl5HZR5Ev9uo/OnD3p43wPeFSB1hNFc13GXQF/JU1Bn0YHLUqBRIlw==" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "ua-parser-js": { + "version": "0.7.20", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", + "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -11976,6 +12222,25 @@ } } }, + "uncontrollable": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-6.2.3.tgz", + "integrity": "sha512-VgOAoBU2ptCL2bfTG2Mra0I8i1u6Aq84AFonD5tmCAYSfs3hWvr2Rlw0q2ntoxXTHjcQOmZOh3FKaN+UZVyREQ==", + "requires": { + "@babel/runtime": "^7.4.5", + "invariant": "^2.2.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", + "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -12346,6 +12611,14 @@ "makeerror": "1.0.x" } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", diff --git a/package.json b/package.json index eeff31f0a..e092f2f8c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "private": true, "dependencies": { "axios": "^0.19.0", + "bootstrap": "^4.3.1", "react": "^16.8.6", + "react-bootstrap": "^1.0.0-beta.9", "react-dom": "^16.8.6", "react-router-dom": "^5.0.1", "react-scripts": "3.0.1" diff --git a/public/index.html b/public/index.html index 9f26cf708..5f54bb1a3 100644 --- a/public/index.html +++ b/public/index.html @@ -21,6 +21,7 @@ --> React App +
) From 9744a193079dd9da89c6062fb05f6cdb1f31bc37 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Wed, 26 Jun 2019 11:31:23 -0700 Subject: [PATCH 24/43] overviews included in the movie cards --- src/components/Library.js | 12 +++--------- src/components/Movie.js | 5 +++-- src/components/MovieSearch.js | 1 + src/index.js | 4 ++-- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/components/Library.js b/src/components/Library.js index 98319d59e..98a0a8e6d 100644 --- a/src/components/Library.js +++ b/src/components/Library.js @@ -25,27 +25,21 @@ class Library extends React.Component { console.log(error.message) }) } - - // TO DO: confirm this works - findMovieForRental = (movieId) => { - console.log(`In Library ${movieId}`); - const clickedMovie = this.state.movies.find( movie => movie.id === movieId) - this.props.selectedMovie(clickedMovie.title) - } - + render() { const movieCollection = this.state.movies.map((movie) => { return }); return (
-

Rewind Movies libary

+

Rewind Movies Library

{movieCollection}
) diff --git a/src/components/Movie.js b/src/components/Movie.js index a2ea06048..b3a9666fd 100644 --- a/src/components/Movie.js +++ b/src/components/Movie.js @@ -20,6 +20,7 @@ const Movie = (props) => { Add to Library

{props.title}

+

{props.overview}

{props.releaseDate}

@@ -29,10 +30,10 @@ const Movie = (props) => { Movie.propTypes = { id: PropTypes.number, title: PropTypes.string, + overview: PropTypes.string, releaseDate: PropTypes.string, imageUrl: PropTypes.string, external_id: PropTypes.number }; -export default Movie; - +export default Movie; \ No newline at end of file diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index 4f03f1398..32f5886e4 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -79,6 +79,7 @@ class MovieSearch extends React.Component { return Home
  • - Movies + Rewind Movies
  • Customer Registry
  • - Search Movies + Search Movie Database
  • From 909dc0697b03e3605bc8a22d5d9902867055a445 Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 11:50:40 -0700 Subject: [PATCH 25/43] writing Rental class to handle rental reservations --- src/App.js | 41 ++++++++++------------- src/components/Library.js | 2 +- src/components/Rentals.js | 70 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 24 deletions(-) create mode 100644 src/components/Rentals.js diff --git a/src/App.js b/src/App.js index e91176604..33d92b878 100644 --- a/src/App.js +++ b/src/App.js @@ -5,22 +5,22 @@ import Library from './components/Library' import CustomerList from './components/CustomerList' import Notfound from './notfound' import image from './images/image.jpeg' - +import Rentals from './components/Rentals' class App extends Component { constructor() { super(); this.state = { selectedCustomer: null, - selectedMovie: null, } } selectCustomer = (customerID) => { console.log('select Customer in App') - + this.setState({selectedCustomer: customerID}) } + showHome() { return (
    @@ -29,17 +29,11 @@ class App extends Component {
    ) } - // selectMovieForRental = (movieTitle) => { - // this.setState({ - // selectedMovie: movieTitle - // }) - // } - - // selectCustomerForRental = (customerObject) => { - // this.setState({ - // selectedCustomer: customerObject - // }) - // } + selectMovieForRental = (movieTitle) => { + this.setState({ + selectedMovie: movieTitle + }) + } render() { return ( @@ -53,7 +47,10 @@ class App extends Component { Movies
  • - Customer Registry + Customer Registry +
  • +
  • + Movie Rentals
  • @@ -61,6 +58,11 @@ class App extends Component { (this.showHome())}/> /> ()} /> + ( + ) + } /> @@ -68,11 +70,4 @@ class App extends Component { } } -export default App; - -const movieRental = (props) => { - const {customerID, movieID} = props - return ( -
    - ) -} \ No newline at end of file +export default App; \ No newline at end of file diff --git a/src/components/Library.js b/src/components/Library.js index 98319d59e..0c496e954 100644 --- a/src/components/Library.js +++ b/src/components/Library.js @@ -39,7 +39,7 @@ class Library extends React.Component { return }); diff --git a/src/components/Rentals.js b/src/components/Rentals.js new file mode 100644 index 000000000..1ac1105fa --- /dev/null +++ b/src/components/Rentals.js @@ -0,0 +1,70 @@ +import React, {Component} from 'react'; +import axios from 'axios'; + +class Rentals extends Component { + constructor(props) { + super(props); + + this.cleared = { + movie: '', + rentalLibrary: [], + selectedMovie: '', + } + + this.state = this.cleared + } + + componentDidMount() { + axios.get('http://localhost:3000/movies') + .then((response) => { + this.setState({rentalLibrary: response.data}) + console.log(this.state.rentalLibrary) + }) + .catch((error) => { + this.setState({errorMessage: error.message}) + console.log(error.message) + }) + } + + // TO DO: confirm this works + addToRental = (movieTitle, e) => { + e.preventDefault(); + console.log(movieTitle); + this.setState({movie: movieTitle}) + + } + + render() { + const rentalCollection = this.state.rentalLibrary.map((movie, i) => { + return( + + {movie.id} + {movie.title} + {movie.release_date} + + + ) + }); + return ( +
    +

    Rewind Rentals

    + + + + + + + + + + + {rentalCollection} + +
    Rental IDTitleRelease Date Reserve
    +
    + ) + } +} + + +export default Rentals \ No newline at end of file From 735724a967bf98b2fbef72c777b7425b33929dae Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 11:53:28 -0700 Subject: [PATCH 26/43] added callback function for rental selection, better name home --- src/App.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/App.js b/src/App.js index 33d92b878..50dac6be8 100644 --- a/src/App.js +++ b/src/App.js @@ -6,7 +6,9 @@ import CustomerList from './components/CustomerList' import Notfound from './notfound' import image from './images/image.jpeg' import Rentals from './components/Rentals' +import axios from 'axios'; +const rentalURL = '' class App extends Component { constructor() { super(); @@ -20,8 +22,17 @@ class App extends Component { this.setState({selectedCustomer: customerID}) } - - showHome() { + componentDidMount() { + axios.post() + .then(response => { + + }) + .catch(error => { + + }); + } + + showHomePage() { return (

    Rewind Movies

    @@ -29,11 +40,6 @@ class App extends Component {
    ) } - selectMovieForRental = (movieTitle) => { - this.setState({ - selectedMovie: movieTitle - }) - } render() { return ( @@ -55,7 +61,7 @@ class App extends Component { - (this.showHome())}/> /> + (this.showHomePage())}/> /> ()} /> ( From efffd0aafd7356d05beb634e096b0af8640bd5da Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Wed, 26 Jun 2019 12:22:09 -0700 Subject: [PATCH 27/43] navbar styling fixed --- src/App.css | 19 ++++++++++++------- src/App.js | 12 ++++++++---- src/index.js | 4 +--- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/App.css b/src/App.css index de72996fd..e730bf1a0 100644 --- a/src/App.css +++ b/src/App.css @@ -1,4 +1,4 @@ -.App { +/* .App { text-align: center; } @@ -25,7 +25,7 @@ @keyframes App-logo-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } -} +} */ img { display: block; @@ -35,16 +35,21 @@ img { } .nav-menu { - display: flex; - justify-content: space-around; - align-items: center; - list-style: none; background-color:#BE1805; color: white; - list-style: none; line-height: 4em; } +.nav-container { + display: flex; + justify-content: space-evenly; +} + +.nav-menu li { + list-style: none; + justify-content: space-evenly; +} + a { color: white; } diff --git a/src/App.js b/src/App.js index 02cf2e531..d697b0595 100644 --- a/src/App.js +++ b/src/App.js @@ -45,13 +45,16 @@ class App extends Component { render() { return ( -
    -
      +
      +
      • - Rewind Movies + Home
      • - Movies + Rewind Movies +
      • +
      • + Search Movie Database
      • Customer Registry @@ -64,6 +67,7 @@ class App extends Component { (this.showHomePage())}/> /> + ()} /> ( Date: Wed, 26 Jun 2019 13:28:51 -0700 Subject: [PATCH 28/43] adding form to search or customer --- src/App.js | 4 +-- src/components/Rentals.js | 55 ++++++++++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/App.js b/src/App.js index 02cf2e531..0b567d2c8 100644 --- a/src/App.js +++ b/src/App.js @@ -45,8 +45,8 @@ class App extends Component { render() { return ( -
        -
          +
          +
          • Rewind Movies
          • diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 1ac1105fa..271eb55ac 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -1,21 +1,45 @@ import React, {Component} from 'react'; import axios from 'axios'; +const rentalURL = 'http://localhost:3000/rentals/' class Rentals extends Component { constructor(props) { super(props); this.cleared = { movie: '', + checkoutDate: '', + dueDate: '', rentalLibrary: [], - selectedMovie: '', + } this.state = this.cleared } + componentDidMount() { - axios.get('http://localhost:3000/movies') + axios.get('http://localhost:3000/movies') + .then((response) => { + this.setState({rentalLibrary: response.data}) + console.log(this.state.rentalLibrary) + }) + .catch((error) => { + this.setState({errorMessage: error.message}) + console.log(error.message) + }) + } + + // TO DO: confirm this works + onButtonClick = (movieTitle, e) => { + e.preventDefault(); + console.log(movieTitle); + const rentalDate = Date.now(); + this.setState({movie: movieTitle, checkoutDate: rentalDate, dueDate: rentalDate + 2}) + } + + reserveRental () { + axios.post(`${rentalURL}${this.state.movie}/checkout`) .then((response) => { this.setState({rentalLibrary: response.data}) console.log(this.state.rentalLibrary) @@ -24,16 +48,12 @@ class Rentals extends Component { this.setState({errorMessage: error.message}) console.log(error.message) }) - } + } + + findCustomer(params) { + + } - // TO DO: confirm this works - addToRental = (movieTitle, e) => { - e.preventDefault(); - console.log(movieTitle); - this.setState({movie: movieTitle}) - - } - render() { const rentalCollection = this.state.rentalLibrary.map((movie, i) => { return( @@ -41,13 +61,24 @@ class Rentals extends Component { {movie.id} {movie.title} {movie.release_date} - + ) }); return (

            Rewind Rentals

            +
            +

            Current Customer ID: {this.props.customerID ? this.props.customerID : 'none'}

            +
            + + +
            +

            Reserved movie: {this.state.movie ? this.state.movie : 'none selected'}

            +
            From 6153a97960e0db153e6e4fb0701ebdad9b13473e Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 14:57:49 -0700 Subject: [PATCH 29/43] working on rental reservation func --- src/App.js | 17 ++++--- src/components/Customer.js | 4 +- src/components/CustomerList.js | 1 + src/components/Rentals.js | 84 ++++++++++++++++++++++------------ 4 files changed, 67 insertions(+), 39 deletions(-) diff --git a/src/App.js b/src/App.js index 0b567d2c8..954a42984 100644 --- a/src/App.js +++ b/src/App.js @@ -15,6 +15,8 @@ class App extends Component { super(); this.state = { selectedCustomer: null, + selectedRental: null, + customerSearch: [], } } @@ -23,14 +25,9 @@ class App extends Component { this.setState({selectedCustomer: customerID}) } - componentDidMount() { - axios.post() - .then(response => { - - }) - .catch(error => { - - }); + selectRental =(movieTitle) => { + console.log(movieTitle); + this.setState({movieTitle: movieTitle}) } showHomePage() { @@ -67,7 +64,9 @@ class App extends Component { ()} /> ( ) } /> diff --git a/src/components/Customer.js b/src/components/Customer.js index 340fd020f..5ad97b27b 100644 --- a/src/components/Customer.js +++ b/src/components/Customer.js @@ -25,9 +25,9 @@ const Customer = (props) => { {phone} ${accountCredit} account credit {moviesCheckedOutCount} movies currently checked out - + ) diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index ce70282ce..edc83991e 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -10,6 +10,7 @@ class CustomerList extends React.Component { customers: [] }; } + componentDidMount() { axios.get('http://localhost:3000/customers') .then((response) => { diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 271eb55ac..6e123fda3 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -1,17 +1,20 @@ import React, {Component} from 'react'; import axios from 'axios'; +import Customer from './Customer' const rentalURL = 'http://localhost:3000/rentals/' + class Rentals extends Component { constructor(props) { super(props); this.cleared = { - movie: '', - checkoutDate: '', - dueDate: '', + checkoutDate: null, + dueDate: null, rentalLibrary: [], - + searchName: '', + customerID: null, + customers: [] } this.state = this.cleared @@ -33,51 +36,76 @@ class Rentals extends Component { // TO DO: confirm this works onButtonClick = (movieTitle, e) => { e.preventDefault(); - console.log(movieTitle); const rentalDate = Date.now(); - this.setState({movie: movieTitle, checkoutDate: rentalDate, dueDate: rentalDate + 2}) + + // due in 3 days + this.setState({checkoutDate: rentalDate, dueDate: rentalDate + 259200000}) + this.props.selectRentalCallback(movieTitle) } - reserveRental () { - axios.post(`${rentalURL}${this.state.movie}/checkout`) + reserveRental = () => { + const newRental = { + title: this.props.movie + '/checkout', + customer_id: this.props.customerID, + due_date: new Date(this.state.dueDate) + } + + axios.post(rentalURL, newRental) .then((response) => { - this.setState({rentalLibrary: response.data}) - console.log(this.state.rentalLibrary) + console.log(response.data) }) .catch((error) => { this.setState({errorMessage: error.message}) - console.log(error.message) + console.log(error) }) } - findCustomer(params) { + handleChange = (event) => { + this.setState({searchName: event.target.value}); + } + + onSubmitCustomerName = (e) => { + e.preventDefault() } render() { - const rentalCollection = this.state.rentalLibrary.map((movie, i) => { - return( - - - - - - - ) - }); + const rentalCollection = this.state.rentalLibrary.map((movie, i) => { + return( + + + + + + + ) + }); + + let makeReservation = true; + if(this.props.customerID && this.props.movie) { + makeReservation = false; + } return (

            Rewind Rentals

            Current Customer ID: {this.props.customerID ? this.props.customerID : 'none'}

            -
            +

            Reserved movie: {this.props.movie ? this.props.movie : 'none selected'}

            + + {/* - - -

            Reserved movie: {this.state.movie ? this.state.movie : 'none selected'}

            + + */}
            {movie.id}{movie.title} {movie.release_date}
            {movie.id}{movie.title} {movie.release_date}
            From a22700ceeb196093c82892168a83fbbcd3ce0b4c Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 15:16:08 -0700 Subject: [PATCH 30/43] rental post request works! --- src/components/Rentals.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 6e123fda3..028128a86 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -45,14 +45,13 @@ class Rentals extends Component { reserveRental = () => { const newRental = { - title: this.props.movie + '/checkout', customer_id: this.props.customerID, due_date: new Date(this.state.dueDate) } - - axios.post(rentalURL, newRental) + console.log(newRental) + axios.post(rentalURL + this.props.movie + '/check-out', newRental) .then((response) => { - console.log(response.data) + console.log(response.status) }) .catch((error) => { this.setState({errorMessage: error.message}) @@ -85,6 +84,7 @@ class Rentals extends Component { if(this.props.customerID && this.props.movie) { makeReservation = false; } + return (

            Rewind Rentals

            From e2028dfa9cb6a52afd9019028f810babb661b11d Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 15:27:43 -0700 Subject: [PATCH 31/43] renamed selectedCustomer to rentalCustomerID for clarity --- src/App.js | 7 +++---- src/components/Rentals.js | 23 ++++++----------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/App.js b/src/App.js index ae03ec18e..536ebefeb 100644 --- a/src/App.js +++ b/src/App.js @@ -14,15 +14,14 @@ class App extends Component { constructor() { super(); this.state = { - selectedCustomer: null, + rentalCustomerID: null, selectedRental: null, - customerSearch: [], } } selectCustomer = (customerID) => { console.log('select Customer in App') - this.setState({selectedCustomer: customerID}) + this.setState({rentalCustomerID: customerID}) } selectRental =(movieTitle) => { @@ -68,7 +67,7 @@ class App extends Component { ()} /> ( ) diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 028128a86..e24859efa 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -1,6 +1,6 @@ import React, {Component} from 'react'; import axios from 'axios'; -import Customer from './Customer' +// import Customer from './Customer' const rentalURL = 'http://localhost:3000/rentals/' @@ -11,13 +11,14 @@ class Rentals extends Component { this.cleared = { checkoutDate: null, dueDate: null, - rentalLibrary: [], searchName: '', customerID: null, - customers: [] } - this.state = this.cleared + this.state = { + ...this.cleared, + rentalLibrary: [], + } } @@ -48,7 +49,6 @@ class Rentals extends Component { customer_id: this.props.customerID, due_date: new Date(this.state.dueDate) } - console.log(newRental) axios.post(rentalURL + this.props.movie + '/check-out', newRental) .then((response) => { console.log(response.status) @@ -57,6 +57,7 @@ class Rentals extends Component { this.setState({errorMessage: error.message}) console.log(error) }) + this.setState({...this.cleared}) } handleChange = (event) => { @@ -94,18 +95,6 @@ class Rentals extends Component { - {/*
            - - - */}
            From f178b7697a8598d7fa8eb77d5e39a2963e0c77dc Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Wed, 26 Jun 2019 15:32:54 -0700 Subject: [PATCH 32/43] working on adding movie to library --- src/components/Movie.js | 19 +++++++++------- src/components/MovieSearch.js | 42 +++++++++++++++++------------------ 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/components/Movie.js b/src/components/Movie.js index b3a9666fd..5cdced3dc 100644 --- a/src/components/Movie.js +++ b/src/components/Movie.js @@ -5,19 +5,21 @@ import './Movie.css' const Movie = (props) => { const onMovieClick = () => { - // props.callback(props.id) - console.log('movie onClick callback') + props.callback(props.id) } + + return ( +
            {props.title}

            {props.title}

            {props.overview}

            @@ -28,12 +30,13 @@ const Movie = (props) => { } Movie.propTypes = { - id: PropTypes.number, + imageUrl: PropTypes.string, title: PropTypes.string, - overview: PropTypes.string, releaseDate: PropTypes.string, - imageUrl: PropTypes.string, - external_id: PropTypes.number + overview: PropTypes.string, + id: PropTypes.number, + callback: PropTypes.func, + buttonText: PropTypes.string, }; -export default Movie; \ No newline at end of file +export default Movie; diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index 32f5886e4..2df92d407 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -30,7 +30,7 @@ class MovieSearch extends React.Component { title: this.state.title, }; - console.log(searchQuery.title) + // console.log(searchQuery.title) this.setState({ title: '', @@ -53,26 +53,26 @@ class MovieSearch extends React.Component { addMovieToLibrary = (movieId) => { - // TO DO: make sure following line syntax is okay - const clickedMovie = this.state.movies.find(movie => movie.external_id === movieId) - - const movieData = { - title: clickedMovie.title, - overview: clickedMovie.overview, - release_date: clickedMovie.release_date, - inventory: clickedMovie.inventory, - image_url: clickedMovie.image_url, - external_id: clickedMovie.external_id - } - - axios.post('http://localhost:3000/movies/', movieData) - .then((response) => { - alert(`Sucessfully added ${movieData.title} to rental library!`); - }) - .catch((error) => { - alert(`Error: ${error.message}`); - }) - } + + const clickedMovie = this.state.movies.find( movie => movie.external_id === movieId) + + const movieData = { + title: clickedMovie.title, + overview: clickedMovie.overview, + release_date: clickedMovie.release_date, + inventory: clickedMovie.release_date, + image_url: clickedMovie.image_url, + external_id: clickedMovie.external_id + } + + axios.post('http://localhost:3000/movies/', movieData) + .then((response) => { + alert(`Sucessfully added ${movieData.title} to rental library!`); + }) + .catch((error) => { + alert(`Error: ${error.message}`); + }) + } render() { const searchResults = this.state.movies.map((movie, index) => { From 249a96b5970fb79534f277319053490a21b2f5d8 Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 16:17:20 -0700 Subject: [PATCH 33/43] clearing out rental info after reservation --- src/App.js | 16 ++++++++++------ src/components/Rentals.js | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/App.js b/src/App.js index 536ebefeb..586092555 100644 --- a/src/App.js +++ b/src/App.js @@ -6,17 +6,17 @@ import CustomerList from './components/CustomerList' import MovieSearch from './components/MovieSearch' import Notfound from './notfound' import Rentals from './components/Rentals' -import axios from 'axios'; import image from './images/frontpage.jpg' -const rentalURL = '' class App extends Component { constructor() { super(); - this.state = { + this.cleared = { rentalCustomerID: null, selectedRental: null, } + + this.state = this.cleared } selectCustomer = (customerID) => { @@ -24,9 +24,12 @@ class App extends Component { this.setState({rentalCustomerID: customerID}) } + clearRentalReservation = () => { + this.setState({...this.cleared}) + } selectRental =(movieTitle) => { console.log(movieTitle); - this.setState({movieTitle: movieTitle}) + this.setState({selectedRental: movieTitle}) } showHomePage() { @@ -68,8 +71,9 @@ class App extends Component { ( ) } /> diff --git a/src/components/Rentals.js b/src/components/Rentals.js index e24859efa..1eba170a8 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -57,7 +57,8 @@ class Rentals extends Component { this.setState({errorMessage: error.message}) console.log(error) }) - this.setState({...this.cleared}) + this.setState({...this.cleared}); + this.props.clearRentalCallback(); } handleChange = (event) => { From 3b918a6f695fb9f924c11c281c500253f2fdc6cd Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 18:06:11 -0700 Subject: [PATCH 34/43] removed inventory (for now) from table --- src/components/MovieSearch.js | 9 +++++---- src/components/Rentals.js | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index 2df92d407..e33b07592 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -37,12 +37,12 @@ class MovieSearch extends React.Component { }); - const url = `http://localhost:3000/movies?query=` + searchQuery.title - axios.get(url) - .then((response) => { + const url = `http://localhost:3000/movies?query=${searchQuery.title}` console.log(searchQuery); console.log(url); - console.log(response.data); + axios.get(url) + .then((response) => { + this.setState({movies: response.data}) }) .catch((error) => { @@ -68,6 +68,7 @@ class MovieSearch extends React.Component { axios.post('http://localhost:3000/movies/', movieData) .then((response) => { alert(`Sucessfully added ${movieData.title} to rental library!`); + console.log(response.status) }) .catch((error) => { alert(`Error: ${error.message}`); diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 1eba170a8..6d38743d4 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -26,7 +26,7 @@ class Rentals extends Component { axios.get('http://localhost:3000/movies') .then((response) => { this.setState({rentalLibrary: response.data}) - console.log(this.state.rentalLibrary) + console.log(response.data) }) .catch((error) => { this.setState({errorMessage: error.message}) From b6ed11bdbf4c2a83228e1a8e07eef8c9a0e6d55b Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Wed, 26 Jun 2019 19:11:07 -0700 Subject: [PATCH 35/43] made rental info (customer and movie) visible everywhere --- src/App.js | 43 +++++++++++++++++++++++++++++++++- src/components/Customer.js | 10 +++++++- src/components/CustomerList.js | 2 +- src/components/Rentals.js | 36 ++-------------------------- 4 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/App.js b/src/App.js index 586092555..a284cd5a7 100644 --- a/src/App.js +++ b/src/App.js @@ -7,6 +7,9 @@ import MovieSearch from './components/MovieSearch' import Notfound from './notfound' import Rentals from './components/Rentals' import image from './images/frontpage.jpg' +import axios from 'axios' + +const rentalURL = 'http://localhost:3000/rentals/' class App extends Component { constructor() { @@ -14,6 +17,8 @@ class App extends Component { this.cleared = { rentalCustomerID: null, selectedRental: null, + dueDate: null, + checkoutDate: null, } this.state = this.cleared @@ -27,9 +32,15 @@ class App extends Component { clearRentalReservation = () => { this.setState({...this.cleared}) } + selectRental =(movieTitle) => { console.log(movieTitle); - this.setState({selectedRental: movieTitle}) + const rentalDate = Date.now(); + // due in 3 days + this.setState({ + selectedRental: movieTitle, + checkoutDate: rentalDate, + dueDate: rentalDate + 259200000}) } showHomePage() { @@ -40,6 +51,33 @@ class App extends Component {
            ) } + + reserveRental = () => { + const newRental = { + customer_id: this.state.rentalCustomerID, + due_date: new Date(this.state.dueDate) + } + axios.post(rentalURL + this.state.selectedRental + '/check-out', newRental) + .then((response) => { + console.log(response.status) + }) + .catch((error) => { + this.setState({errorMessage: error.message}) + console.log(error) + }) + this.setState({...this.cleared}); + this.clearRentalReservation(); + } + + showRentalDetails() { + return ( + + ) + } render() { return ( @@ -63,6 +101,9 @@ class App extends Component {
            +
            + {this.showRentalDetails()} +
            (this.showHomePage())}/> /> diff --git a/src/components/Customer.js b/src/components/Customer.js index 5ad97b27b..85da5b96a 100644 --- a/src/components/Customer.js +++ b/src/components/Customer.js @@ -15,6 +15,14 @@ const Customer = (props) => { selectCustCallback(id) } + const checkedOutFormat = (count) => { + if (count === 1) { + return (`${count} movie currently checked out.`) + } + else { + return (`${count} movies currently checked out.`) + } + } return ( @@ -24,7 +32,7 @@ const Customer = (props) => { {city}, {state}, {postalCode} {phone} ${accountCredit} account credit - {moviesCheckedOutCount} movies currently checked out + {checkedOutFormat(moviesCheckedOutCount)} diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index edc83991e..9abb9945c 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -22,7 +22,7 @@ class CustomerList extends React.Component { } render() { - console.log(this.props) + console.log(this.state.customers) const customerList = this.state.customers.map((cust, i) => { return { @@ -37,37 +35,7 @@ class Rentals extends Component { // TO DO: confirm this works onButtonClick = (movieTitle, e) => { e.preventDefault(); - const rentalDate = Date.now(); - - // due in 3 days - this.setState({checkoutDate: rentalDate, dueDate: rentalDate + 259200000}) - this.props.selectRentalCallback(movieTitle) - } - - reserveRental = () => { - const newRental = { - customer_id: this.props.customerID, - due_date: new Date(this.state.dueDate) - } - axios.post(rentalURL + this.props.movie + '/check-out', newRental) - .then((response) => { - console.log(response.status) - }) - .catch((error) => { - this.setState({errorMessage: error.message}) - console.log(error) - }) - this.setState({...this.cleared}); - this.props.clearRentalCallback(); - } - - handleChange = (event) => { - this.setState({searchName: event.target.value}); - } - - onSubmitCustomerName = (e) => { - e.preventDefault() - + this.props.selectRentalCallback(movieTitle); } render() { @@ -94,7 +62,7 @@ class Rentals extends Component {

            Current Customer ID: {this.props.customerID ? this.props.customerID : 'none'}

            Reserved movie: {this.props.movie ? this.props.movie : 'none selected'}

            From d0d8a06268ae08c6187d2135e6482724ff155d7a Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Thu, 27 Jun 2019 09:00:27 -0700 Subject: [PATCH 36/43] styling of table in rentals and of current selected block --- src/components/Rentals.css | 14 ++++++++++++++ src/components/Rentals.js | 1 + 2 files changed, 15 insertions(+) create mode 100644 src/components/Rentals.css diff --git a/src/components/Rentals.css b/src/components/Rentals.css new file mode 100644 index 000000000..4b360dce2 --- /dev/null +++ b/src/components/Rentals.css @@ -0,0 +1,14 @@ +table, td, th { + border: 1px solid black; +} + +table { + border-collapse: collapse; + width: 100%; + margin: 4%; + max-width: 90%; +} + +th { + height: 50px; +} \ No newline at end of file diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 698bc0739..1007b29cc 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -1,5 +1,6 @@ import React, {Component} from 'react'; import axios from 'axios'; +import './Rentals.css'; // import Customer from './Customer' From c83236eac3a5ca68790063c35a858c42266222ba Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Thu, 27 Jun 2019 09:11:24 -0700 Subject: [PATCH 37/43] quick fix to library header --- src/components/Library.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/Library.js b/src/components/Library.js index 98a0a8e6d..611ef7554 100644 --- a/src/components/Library.js +++ b/src/components/Library.js @@ -38,10 +38,12 @@ class Library extends React.Component { external_id={movie.external_id}/> }); return ( -
            -

            Rewind Movies Library

            - {movieCollection} -
            +
            +

            Rewind Movies Library

            +
            + {movieCollection} +
            +
            ) } From 421c647acdc90d0559f2ac409a674712162d9587 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Thu, 27 Jun 2019 09:55:39 -0700 Subject: [PATCH 38/43] header added to search page --- src/components/MovieSearch.css | 4 ++++ src/components/MovieSearch.js | 1 + 2 files changed, 5 insertions(+) diff --git a/src/components/MovieSearch.css b/src/components/MovieSearch.css index 7bf9ed0b0..a7056bd61 100644 --- a/src/components/MovieSearch.css +++ b/src/components/MovieSearch.css @@ -9,3 +9,7 @@ padding-right: 25%; padding-bottom: 10px; } + +.form { + min-width: 25%; +} \ No newline at end of file diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index e33b07592..e68034469 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -89,6 +89,7 @@ class MovieSearch extends React.Component { return (
            +

            Search for New Inventory

            Date: Thu, 27 Jun 2019 10:33:31 -0700 Subject: [PATCH 39/43] styling of current rental box --- src/components/CustomerList.js | 14 +++-- src/components/Library.css | 4 ++ src/components/Library.js | 4 +- src/components/MovieSearch.js | 4 +- src/components/Rentals.css | 4 ++ src/components/Rentals.js | 12 +--- src/components/Selection.css | 4 +- src/components/Selection.js | 100 ++++++++++++++++----------------- 8 files changed, 75 insertions(+), 71 deletions(-) diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index 9abb9945c..35bd79053 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -39,12 +39,14 @@ class CustomerList extends React.Component { /> }) return ( -
            -

            Customer Registry

            -
            - {customerList} -
            -
            +
            +
            +

            Customer Registry

            +
            + {customerList} +
            +
            +
            ); } } diff --git a/src/components/Library.css b/src/components/Library.css index a8377b038..b242edf2b 100644 --- a/src/components/Library.css +++ b/src/components/Library.css @@ -3,3 +3,7 @@ flex-wrap: wrap; justify-content:center; } + +main { + margin-left: 15%; +} \ No newline at end of file diff --git a/src/components/Library.js b/src/components/Library.js index 611ef7554..3c39e3654 100644 --- a/src/components/Library.js +++ b/src/components/Library.js @@ -38,12 +38,12 @@ class Library extends React.Component { external_id={movie.external_id}/> }); return ( -
            +

            Rewind Movies Library

            {movieCollection}
            -
            + ) } diff --git a/src/components/MovieSearch.js b/src/components/MovieSearch.js index e68034469..72115452d 100644 --- a/src/components/MovieSearch.js +++ b/src/components/MovieSearch.js @@ -88,7 +88,7 @@ class MovieSearch extends React.Component { }); return ( -
            +

            Search for New Inventory

            @@ -104,7 +104,7 @@ class MovieSearch extends React.Component {
            {searchResults}
            -
            + ); } } diff --git a/src/components/Rentals.css b/src/components/Rentals.css index 4b360dce2..5ae336619 100644 --- a/src/components/Rentals.css +++ b/src/components/Rentals.css @@ -11,4 +11,8 @@ table { th { height: 50px; +} + +main { + margin-left: 15%; } \ No newline at end of file diff --git a/src/components/Rentals.js b/src/components/Rentals.js index 1007b29cc..1b0087902 100644 --- a/src/components/Rentals.js +++ b/src/components/Rentals.js @@ -57,15 +57,9 @@ class Rentals extends Component { } return ( -
            +

            Rewind Rentals

            -
            -

            Current Customer ID: {this.props.customerID ? this.props.customerID : 'none'}

            -

            Reserved movie: {this.props.movie ? this.props.movie : 'none selected'}

            - -
            +
            @@ -79,7 +73,7 @@ class Rentals extends Component { {rentalCollection}
            -
            + ) } } diff --git a/src/components/Selection.css b/src/components/Selection.css index 45e2e563a..bd2789ea7 100644 --- a/src/components/Selection.css +++ b/src/components/Selection.css @@ -1,4 +1,4 @@ -.selection-box { +/* .selection-box { display: flex; flex-direction: column; justify-content: center; @@ -19,4 +19,4 @@ span { border: 2px black solid; padding: 2px; margin: 5px; -} +} */ diff --git a/src/components/Selection.js b/src/components/Selection.js index 41d9affc3..b32bd5dc2 100644 --- a/src/components/Selection.js +++ b/src/components/Selection.js @@ -1,50 +1,50 @@ -import React from 'react'; -import axios from 'axios'; -import './Selection.css'; - - -const Selection = (props) => { - - const title = props.selectedMovie - const customerId = props.selectedCustomer.id - - const today = new Date(); - today.setDate(today.getDate() +1 ); - const day = today.getDate(); - const month = today.getMonth() + 1; - const year = today.getFullYear(); - const dueDate = `${year}-${month}-${day}` - - const url = `http://localhost:3000/rentals/${title}/check-out?customer_id=${customerId}&due_date=${dueDate}` - - const createNewRental = () => { - axios.post(url) - .then((response) => { - alert(`Successfully created new rental!`); - window.location.reload(); - }) - .catch((error) => { - alert(`There has been an error. ${error}: ${error.message}`); - }); - } - - return ( -
            -
            -

            - Selected Movie: - {props.selectedMovie} -

            -

            - Selected Customer: - {props.selectedCustomer.name ? props.selectedCustomer.name : props.selectedCustomer} -

            -
            - -
            - ) -} - -export default Selection; +// import React from 'react'; +// import axios from 'axios'; +// import './Selection.css'; + + +// const Selection = (props) => { + +// const title = props.selectedMovie +// const customerId = props.selectedCustomer.id + +// const today = new Date(); +// today.setDate(today.getDate() +1 ); +// const day = today.getDate(); +// const month = today.getMonth() + 1; +// const year = today.getFullYear(); +// const dueDate = `${year}-${month}-${day}` + +// const url = `http://localhost:3000/rentals/${title}/check-out?customer_id=${customerId}&due_date=${dueDate}` + +// const createNewRental = () => { +// axios.post(url) +// .then((response) => { +// alert(`Successfully created new rental!`); +// window.location.reload(); +// }) +// .catch((error) => { +// alert(`There has been an error. ${error}: ${error.message}`); +// }); +// } + +// return ( +//
            +//
            +//

            +// Selected Movie: +// {props.selectedMovie} +//

            +//

            +// Selected Customer: +// {props.selectedCustomer.name ? props.selectedCustomer.name : props.selectedCustomer} +//

            +//
            +// +//
            +// ) +// } + +// export default Selection; From 2d10ebf5b794e1776e295e037a563ad51f945d6b Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Fri, 28 Jun 2019 12:11:46 -0700 Subject: [PATCH 40/43] styling to search bar --- src/App.css | 20 ++++++++++++++++++++ src/App.js | 19 +++++++++++++------ src/components/MovieSearch.css | 34 +++++++++++++++++++++++----------- src/components/MovieSearch.js | 1 + 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/App.css b/src/App.css index e730bf1a0..32d6ca25e 100644 --- a/src/App.css +++ b/src/App.css @@ -61,4 +61,24 @@ a:visited { a:hover { font-size: 1.5em; +} + +.Snapshot { + background-color: #BE1805; + color: white; + /* font-style: bold; */ + padding: 1%; + max-width: 10%; + position: fixed; + margin-left: 2%; +} + +.show-title { + text-decoration: underline; + font-size: 1.2em; + text-align: center; +} + +.main { + max-width: 75%; } \ No newline at end of file diff --git a/src/App.js b/src/App.js index a284cd5a7..0b2d08b27 100644 --- a/src/App.js +++ b/src/App.js @@ -46,9 +46,12 @@ class App extends Component { showHomePage() { return (
            -

            Rewind Movies

            - theater +
            +

            Rewind Movies

            + theater +
            + ) } @@ -68,13 +71,17 @@ class App extends Component { this.setState({...this.cleared}); this.clearRentalReservation(); } + showRentalDetails() { return ( -
          From c5e18109003544dc9f5ddbea5fb7130ef823e72a Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Fri, 28 Jun 2019 12:26:15 -0700 Subject: [PATCH 41/43] adding error display for views --- src/components/CustomerList.js | 3 ++- src/components/Library.js | 3 ++- src/components/Movie.js | 6 +----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/components/CustomerList.js b/src/components/CustomerList.js index 9abb9945c..1ed66e7d8 100644 --- a/src/components/CustomerList.js +++ b/src/components/CustomerList.js @@ -7,7 +7,8 @@ class CustomerList extends React.Component { constructor(props) { super(props); this.state = { - customers: [] + customers: [], + errorMessage: null }; } diff --git a/src/components/Library.js b/src/components/Library.js index 98a0a8e6d..b96cc6dba 100644 --- a/src/components/Library.js +++ b/src/components/Library.js @@ -10,7 +10,7 @@ class Library extends React.Component { this.state = { movies: [], - errorMessage: '' + errorMessage: null, }; } @@ -40,6 +40,7 @@ class Library extends React.Component { return (

          Rewind Movies Library

          +
          {this.state.errorMessage ? `An error has occurred: ${this.state.errorMessage}` : null }
          {movieCollection}
          ) diff --git a/src/components/Movie.js b/src/components/Movie.js index 5cdced3dc..7dc27d180 100644 --- a/src/components/Movie.js +++ b/src/components/Movie.js @@ -7,12 +7,8 @@ const Movie = (props) => { const onMovieClick = () => { props.callback(props.id) } - - - + return ( - -
          {props.title}
          From a509cefc1a3e1d3f9524ea8df164edb2708e0f24 Mon Sep 17 00:00:00 2001 From: Grace Shea Date: Fri, 28 Jun 2019 12:35:56 -0700 Subject: [PATCH 42/43] table styling --- src/components/MovieSearch.css | 5 +++++ src/components/Rentals.css | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/components/MovieSearch.css b/src/components/MovieSearch.css index 09bdc6dcb..55659f02b 100644 --- a/src/components/MovieSearch.css +++ b/src/components/MovieSearch.css @@ -1,3 +1,8 @@ +.search-results-container { + display: flex; + flex-wrap: wrap; + justify-content:center; +} input[type=text], select { diff --git a/src/components/Rentals.css b/src/components/Rentals.css index 5ae336619..6c230b9e2 100644 --- a/src/components/Rentals.css +++ b/src/components/Rentals.css @@ -2,6 +2,15 @@ table, td, th { border: 1px solid black; } +th { + background-color: #BE1805; + color:white; +} + +tr:nth-child(even) { + background-color: #ECECEC; +} + table { border-collapse: collapse; width: 100%; From 067f6c16ca34af01af87cdf9c9cf7b770fa4ff5d Mon Sep 17 00:00:00 2001 From: Tatiana Quintana Date: Fri, 28 Jun 2019 12:39:26 -0700 Subject: [PATCH 43/43] merged and tidy up --- src/App.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App.js b/src/App.js index 0b2d08b27..5196cc4ef 100644 --- a/src/App.js +++ b/src/App.js @@ -78,8 +78,8 @@ class App extends Component {

          Current Rental

          -

          Selected Customer: {this.state.rentalCustomerID}

          -

          Selected Movie: {this.state.selectedRental}

          +

          Customer: {this.state.rentalCustomerID}

          +

          Movie: {this.state.selectedRental}