Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Animation card #16

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VITE_API_KEY=25269b1222c2d59b0848b099daeb7d9b
69 changes: 64 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,67 @@
# React + Vite
Submitted by: Marvin Howell-Aguirre

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Estimated time spent: 23.5 hours spent in total

Currently, two official plugins are available:
Deployed Application (optional): [Flixster Deployed Site](https://flixster-project.onrender.com/)

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
### Application Features

#### CORE FEATURES

- [x] **Display Movies**
- [x] Users can view a list of current movies from The Movie Database API.
- [x] For each movie displayed, users can see its title, poster image, and votes.
- [x] Users can load more current movies by clicking a button at the bottom of the list (page should not be reloaded).
- [x] **Search Functionality**
- [x] Users can search for movies and view the results in a grid.
- [x] Users can clear results and view previous current movies displayed.
- [x] **Accessibility Features**
- [x] Website implements accessibility features (semantic HTML, color contrast, font sizing, alt text for images).
- [x] **Responsive Design**
- [x] Website implements responsive web design.
- [x] **Movie Details**
- [x] Users can view more details about a movie in a popup, such as runtime in minutes, backdrop poster, release date, genres, and/or an overview.
- [x] **Sorting Options**
- [x] Users can click on a filter by drop down to sort product by type (alphabetic, release date, rating).
- [x] **Layout**
- [x] Website displays header, banner, search, movie grid, about, contact, and footer section.

#### STRETCH FEATURES

- [x] **Deployment**
- [x] Website is deployed via Render.
- [x] **Embedded Movie Trailers**
- [x] Within the popup displaying a movie's details, users can play the movie trailer.
- [x] **Watched Checkbox**
- [x] For each movie displayed, users can mark the movie as watched.
- [x] **Favorite Button**
- [x] For each movie displayed, users can favorite the movie.
- [] **Sidebar**
- [ ] Users can open a sidebar
- [ ] The sidebar displays the user's favorited and watched movies

### Walkthrough Video


https://github.com/Mar1789/flixster-starter/assets/116681148/254312c2-9aff-453e-922d-ba618c04d158

### Reflection
* Did the topics discussed in your labs prepare you to complete the assignment? Be specific, which features in your weekly assignment did you feel unprepared to complete?

The topics discussed in my labs did prepare me to complete the assignment, but it only prepared me with useState and useEffect. I wish the labs went over passing variables to sibling components.

* If you had more time, what would you have done differently? Would you have added additional features? Changed the way your project responded to a particular event, etc.

I think I would not have change my code differently since my project runs well and completes the core features and almost all of the stretch features. I configured it so anything to modify the movie cards would reuse the same useEffect property.

* Reflect on your project demo, what went well? Were there things that maybe didn't go as planned? Did you notice something that your peer did that you would like to try next time?

I believe what went well was showing the movie cards and adding a footer and header. What did not go as planned was setting up the modal since I originally thought it would be the same process as the week 1 project, but I had to learn about passing variables between sibling components to fix the issue.

### Open-source libraries used

N/A

### Shout out

I would like to give a shout out to George for helping me debug my code and taught me how I can improve my skills on fixing my errors. I also would like to shout out Theo for helping me fix my like button stretch feature error I had when I imported my project into render.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"start": "vite",
"build": "vite build",
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
Expand Down
Binary file added public/heart1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/heart2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
255 changes: 243 additions & 12 deletions src/App.css
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
.App {
text-align: center;
background-color: #282c34;
}


.App-header {
background-color: #282c34;
background-color: black;
display: flex;
flex-direction: row;
align-items: center;
Expand All @@ -12,17 +14,246 @@
padding: 20px;
}

@media (max-width: 600px) {
.movie-card {
width: 100%;
}
.image{
width: 265px;
}
.img{
position: relative;
top: -280px;
right: -300px;
width: 200px;
}

.movie-container{
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 30px;
width: 100%;
flex-direction:row;
}

form{
height: 200px;
margin-bottom: -100px;
}
.load{
border-radius: 30px;
width: 600px;
height: 300px;
margin-top: 30px;
margin-bottom: 30px;
border-radius: 30px;
width: 326px;
height: 46px;
}

input{
border-radius: 20px;
position: relative;
margin-left: 0px;
width: 190px;
height: 11% ;
}
h2{
font-size: 60px;
margin: 0;
margin-bottom: 28px;
color: white;
height: 100%;
}
.search{
position: relative;
margin-left: 14px;
border-radius: 20px;
width: 190px;
height: 19%;
}
.reset{
position: relative;
margin-left: 14px;
top: -100px;
right: -400px;
border-radius: 20px;
width: 170px;
height: 38px;
}
.title{
position: relative;
top: -301px;
right: -300px;
font-size: 30px;
}
.overview{
position: relative;
top: -270px;
right: -650px;
width: 700px;
}
.genre{
position: absolute;
top: 500px;
left:50px;
width: 550px;
}
.release-date{
position: absolute;
top: 460px;
left: 150px ;
}
#modal {
display: block; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
}
.modal-content {
top: -97px;
grid-auto-flow: column;
position: relative;
background-color: #404753;
text-transform: capitalize;
color: #fff;
font-size: 20px;
margin: 15% auto; /* 15% from the top and centered */
padding: 2px;
height: 69%;
border-radius: 20.7px;
border: 2px solid white;
width: 80%; /* Could be more or less, depending on screen size */
overflow-y: auto;
overflow-x: hidden;
}
.runtime{
position: absolute;
top: 420px;
left: 160px;
}
.close {
top: -862px;
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
.dropbtn {
transition: transform 250ms;
background-color: #3498DB;
color: white;
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;

}
.dropbtn:hover, .dropbtn:focus {
background-color: #2980B9;
}

.dropbtn:hover {
transform: translateY(-10px);
background-color: #01DF8E;
}

.search-bar {
flex-direction: column;
gap: 10px;
}
.dropdown {
text-align: center;
transition: transform 250ms;
font-size: 16px;
height: 28px;
width: 120px;
color: white;
background-color: #04AA6D;
border-radius: 20px;
position: relative;
display: inline-block;
left: -365px;
top: -95px;
}
.dropdown:hover {
transform: translateY(-10px);
background-color: #01DF8E;
}

footer {
color: white;
background-color: #2C2C2C;
position: relative;
height: 80px;
}
footer p{
position: relative;
top: 30px;
right: -620px;
}

.search-bar form {
flex-direction: column;
}
.dropdown-right {
text-align: center;
transition: transform 250ms;
font-size: 16px;
height: 28px;
width: 120px;
color: white;
background-color: #04AA6D;
border-radius: 20px;
position: relative;
display: inline-block;
left: 365px;
top: -97px;
}

.dropdown-right:hover {
transform: translateY(-10px);
background-color: #01DF8E;
}

header{
margin-bottom: 22px;
max-height: 153px;
top: 0px;
background-color: #2C2C2C;
}

.dropdown-content-right a{
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content-right a:active {background-color: #f1f1f1;}
.dropdown-right:hover .dropdown-content-right {display: block;}
.dropdown-right:focus .dropbtn {background-color: #3e8e41;}

.heart {
right: 21px;
position: absolute;
top: 0px;
width: 300px;
height: 50px;
}
.heart-image{
position: relative;
width: 20px;
top: 419px;
left: 118px;
}
#scales{
right: -122px;
height: 32%;
position: relative;
top: 417px;
width: 17px;
}
iframe{
position: relative;
top: 90px;
left: -400px;
}
11 changes: 10 additions & 1 deletion src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
import { useState } from 'react'
import './App.css'
import React from 'react'
import MovieCard from './MovieCard'
import MovieList from './MovieList'
import Modal from './Modal'


const App = () => {
let search;

return(
<div className="App">

<MovieList/>
</div>
)
}

export default App
Loading