Skip to content

Commit b722303

Browse files
committed
better
1 parent 78f032a commit b722303

File tree

2 files changed

+62
-60
lines changed
  • exercises/01.start

2 files changed

+62
-60
lines changed

exercises/01.start/01.problem.vite-plugin/app/routes/index.tsx

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,36 @@ export async function loader() {
99

1010
export default function MoviesPage({ loaderData }: Route.ComponentProps) {
1111
const { movies } = loaderData
12+
13+
const moviesUI = movies.map((movie) => (
14+
<Link
15+
key={movie.id}
16+
to={href('/:movieId', { movieId: String(movie.id) })}
17+
className="rr-card transition-shadow hover:shadow-lg"
18+
>
19+
<div className="mb-4">
20+
<img
21+
src={movie.poster}
22+
alt={`${movie.title} poster`}
23+
className="mb-4 h-64 w-full rounded-lg object-cover"
24+
/>
25+
<h3 className="rr-heading text-lg font-semibold">{movie.title}</h3>
26+
<p className="rr-text mb-2">Year: {movie.year}</p>
27+
<p className="rr-text mb-2">Rating: {movie.rating}/10</p>
28+
<p className="rr-text mb-4 text-sm text-gray-600">
29+
{movie.description}
30+
</p>
31+
<div className="flex items-center gap-2">
32+
<span
33+
className={`rr-badge ${movie.isFavorite ? 'rr-badge-red' : ''}`}
34+
>
35+
{movie.isFavorite ? 'Favorite' : 'Not Favorite'}
36+
</span>
37+
</div>
38+
</div>
39+
</Link>
40+
))
41+
1242
return (
1343
<main className="bg-background movies-page min-h-screen">
1444
<title>React Router RSC Movies</title>
@@ -23,36 +53,7 @@ export default function MoviesPage({ loaderData }: Route.ComponentProps) {
2353
</h1>
2454

2555
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
26-
{movies.map((movie) => (
27-
<Link
28-
key={movie.id}
29-
to={href('/:movieId', { movieId: String(movie.id) })}
30-
className="rr-card transition-shadow hover:shadow-lg"
31-
>
32-
<div className="mb-4">
33-
<img
34-
src={movie.poster}
35-
alt={`${movie.title} poster`}
36-
className="mb-4 h-64 w-full rounded-lg object-cover"
37-
/>
38-
<h3 className="rr-heading text-lg font-semibold">
39-
{movie.title}
40-
</h3>
41-
<p className="rr-text mb-2">Year: {movie.year}</p>
42-
<p className="rr-text mb-2">Rating: {movie.rating}/10</p>
43-
<p className="rr-text mb-4 text-sm text-gray-600">
44-
{movie.description}
45-
</p>
46-
<div className="flex items-center gap-2">
47-
<span
48-
className={`rr-badge ${movie.isFavorite ? 'rr-badge-red' : ''}`}
49-
>
50-
{movie.isFavorite ? 'Favorite' : 'Not Favorite'}
51-
</span>
52-
</div>
53-
</div>
54-
</Link>
55-
))}
56+
{moviesUI}
5657
</div>
5758
</div>
5859
</div>

exercises/01.start/01.solution.vite-plugin/app/routes/index.tsx

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,36 @@ export async function loader() {
99

1010
export default function MoviesPage({ loaderData }: Route.ComponentProps) {
1111
const { movies } = loaderData
12+
13+
const moviesUI = movies.map((movie) => (
14+
<Link
15+
key={movie.id}
16+
to={href('/:movieId', { movieId: String(movie.id) })}
17+
className="rr-card transition-shadow hover:shadow-lg"
18+
>
19+
<div className="mb-4">
20+
<img
21+
src={movie.poster}
22+
alt={`${movie.title} poster`}
23+
className="mb-4 h-64 w-full rounded-lg object-cover"
24+
/>
25+
<h3 className="rr-heading text-lg font-semibold">{movie.title}</h3>
26+
<p className="rr-text mb-2">Year: {movie.year}</p>
27+
<p className="rr-text mb-2">Rating: {movie.rating}/10</p>
28+
<p className="rr-text mb-4 text-sm text-gray-600">
29+
{movie.description}
30+
</p>
31+
<div className="flex items-center gap-2">
32+
<span
33+
className={`rr-badge ${movie.isFavorite ? 'rr-badge-red' : ''}`}
34+
>
35+
{movie.isFavorite ? 'Favorite' : 'Not Favorite'}
36+
</span>
37+
</div>
38+
</div>
39+
</Link>
40+
))
41+
1242
return (
1343
<main className="bg-background movies-page min-h-screen">
1444
<title>React Router RSC Movies</title>
@@ -23,36 +53,7 @@ export default function MoviesPage({ loaderData }: Route.ComponentProps) {
2353
</h1>
2454

2555
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
26-
{movies.map((movie) => (
27-
<Link
28-
key={movie.id}
29-
to={href('/:movieId', { movieId: String(movie.id) })}
30-
className="rr-card transition-shadow hover:shadow-lg"
31-
>
32-
<div className="mb-4">
33-
<img
34-
src={movie.poster}
35-
alt={`${movie.title} poster`}
36-
className="mb-4 h-64 w-full rounded-lg object-cover"
37-
/>
38-
<h3 className="rr-heading text-lg font-semibold">
39-
{movie.title}
40-
</h3>
41-
<p className="rr-text mb-2">Year: {movie.year}</p>
42-
<p className="rr-text mb-2">Rating: {movie.rating}/10</p>
43-
<p className="rr-text mb-4 text-sm text-gray-600">
44-
{movie.description}
45-
</p>
46-
<div className="flex items-center gap-2">
47-
<span
48-
className={`rr-badge ${movie.isFavorite ? 'rr-badge-red' : ''}`}
49-
>
50-
{movie.isFavorite ? 'Favorite' : 'Not Favorite'}
51-
</span>
52-
</div>
53-
</div>
54-
</Link>
55-
))}
56+
{moviesUI}
5657
</div>
5758
</div>
5859
</div>

0 commit comments

Comments
 (0)