mirror of
https://github.com/Nezumi-2711/react-training.git
synced 2026-09-22 20:01:59 +00:00
Updated code
This commit is contained in:
@@ -51,20 +51,35 @@ const average = (arr) =>
|
||||
arr.reduce((acc, cur, i, arr) => acc + cur / arr.length, 0);
|
||||
|
||||
export default function App() {
|
||||
const [movies, setMovies] = useState(tempMovieData);
|
||||
const [watched, setWatched] = useState(tempWatchedData);
|
||||
|
||||
return (
|
||||
<>
|
||||
<NavBar />
|
||||
<Main />
|
||||
<NavBar>
|
||||
<Search />
|
||||
<NumResults movies={movies} />
|
||||
</NavBar>
|
||||
|
||||
<Main>
|
||||
<Box>
|
||||
<MovieList movies={movies} />
|
||||
</Box>
|
||||
|
||||
<Box>
|
||||
<WatchedSummary watched={watched} />
|
||||
<WatchMovieList watched={watched} />
|
||||
</Box>
|
||||
</Main>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function NavBar() {
|
||||
function NavBar({ children }) {
|
||||
return (
|
||||
<nav className="nav-bar">
|
||||
<Logo />
|
||||
<Search />
|
||||
<NumResults />
|
||||
{children}
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
@@ -91,42 +106,54 @@ function Search() {
|
||||
);
|
||||
}
|
||||
|
||||
function NumResults() {
|
||||
function NumResults({ movies }) {
|
||||
return (
|
||||
<p className="num-results">
|
||||
Found <strong>X</strong> results
|
||||
Found <strong>{movies.length}</strong> results
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
function Main() {
|
||||
return (
|
||||
<main className="main">
|
||||
<ListBox />
|
||||
<WatchedBox />
|
||||
</main>
|
||||
);
|
||||
function Main({ children }) {
|
||||
return <main className="main">{children}</main>;
|
||||
}
|
||||
|
||||
function ListBox() {
|
||||
const [isOpen1, setIsOpen1] = useState(true);
|
||||
function Box({ children }) {
|
||||
const [isOpen, setIsOpen] = useState(true);
|
||||
|
||||
return (
|
||||
<div className="box">
|
||||
<button
|
||||
className="btn-toggle"
|
||||
onClick={() => setIsOpen1((open) => !open)}
|
||||
>
|
||||
{isOpen1 ? "–" : "+"}
|
||||
<button className="btn-toggle" onClick={() => setIsOpen((open) => !open)}>
|
||||
{isOpen ? "–" : "+"}
|
||||
</button>
|
||||
{isOpen1 && <MovieList />}
|
||||
{isOpen && children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function MovieList() {
|
||||
const [movies, setMovies] = useState(tempMovieData);
|
||||
// function WatchedBox() {
|
||||
// const [watched, setWatched] = useState(tempWatchedData);
|
||||
// const [isOpen2, setIsOpen2] = useState(true);
|
||||
|
||||
// return (
|
||||
// <div className="box">
|
||||
// <button
|
||||
// className="btn-toggle"
|
||||
// onClick={() => setIsOpen2((open) => !open)}
|
||||
// >
|
||||
// {isOpen2 ? "–" : "+"}
|
||||
// </button>
|
||||
// {isOpen2 && (
|
||||
// <>
|
||||
// <WatchedSummary watched={watched} />
|
||||
// <WatchMovieList watched={watched} />
|
||||
// </>
|
||||
// )}
|
||||
// </div>
|
||||
// );
|
||||
// }
|
||||
|
||||
function MovieList({ movies }) {
|
||||
return (
|
||||
<ul className="list">
|
||||
{movies?.map((movie) => (
|
||||
@@ -151,28 +178,6 @@ function Movie({ movie }) {
|
||||
);
|
||||
}
|
||||
|
||||
function WatchedBox() {
|
||||
const [watched, setWatched] = useState(tempWatchedData);
|
||||
const [isOpen2, setIsOpen2] = useState(true);
|
||||
|
||||
return (
|
||||
<div className="box">
|
||||
<button
|
||||
className="btn-toggle"
|
||||
onClick={() => setIsOpen2((open) => !open)}
|
||||
>
|
||||
{isOpen2 ? "–" : "+"}
|
||||
</button>
|
||||
{isOpen2 && (
|
||||
<>
|
||||
<WatchedSummary watched={watched} />
|
||||
<WatchMovieList watched={watched} />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function WatchedSummary({ watched }) {
|
||||
const avgImdbRating = average(watched.map((movie) => movie.imdbRating));
|
||||
const avgUserRating = average(watched.map((movie) => movie.userRating));
|
||||
|
||||
Reference in New Issue
Block a user