Skip to content

Commit b1433c5

Browse files
committed
better order
1 parent bfd7824 commit b1433c5

32 files changed

+79
-70
lines changed
File renamed without changes.

exercises/01.start/04.solution.rsc-route/app/movies-data.ts renamed to exercises/01.start/03.solution.rsc-route/app/movies-data.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
'use server'
2-
31
// Mock data for demonstration
42
let movies = [
53
{
@@ -88,12 +86,16 @@ export async function getMovie(id: number) {
8886
return movie
8987
}
9088

91-
export async function setIsFavorite(formData: FormData) {
89+
export async function setIsFavorite({
90+
movieId,
91+
isFavorite,
92+
}: {
93+
movieId: number
94+
isFavorite: boolean
95+
}) {
9296
// Simulate API call delay
9397
await new Promise((resolve) => setTimeout(resolve, 50))
9498

95-
const movieId = Number(formData.get('id'))
96-
const isFavorite = formData.get('isFavorite') === 'true'
9799
// Update the movie's favorite status
98100
const movie = movies.find((m) => m.id === movieId)
99101
if (movie) {

exercises/01.start/04.solution.rsc-route/app/routes/movie-details.tsx renamed to exercises/01.start/03.solution.rsc-route/app/routes/movie-details.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { href, Link } from 'react-router'
1+
import { Form, href, Link } from 'react-router'
22
import { MovieTrailer } from '#app/movie-trailer.tsx'
33
import { getMovie, setIsFavorite } from '#app/movies-data.ts'
44
import { type Route } from './+types/movie-details'
@@ -8,6 +8,18 @@ export async function loader({ params }: Route.LoaderArgs) {
88
return { movie }
99
}
1010

11+
export async function action({ request }: Route.ActionArgs) {
12+
// Simulate API call delay
13+
await new Promise((resolve) => setTimeout(resolve, 50))
14+
const formData = await request.formData()
15+
16+
const movieId = Number(formData.get('id'))
17+
const isFavorite = formData.get('isFavorite') === 'true'
18+
// Update the movie's favorite status
19+
await setIsFavorite({ movieId, isFavorite })
20+
return { success: true }
21+
}
22+
1123
export default function MovieDetailsPage({ loaderData }: Route.ComponentProps) {
1224
const { movie } = loaderData
1325

@@ -40,7 +52,7 @@ export default function MovieDetailsPage({ loaderData }: Route.ComponentProps) {
4052
<div className="mb-4 flex items-center gap-4">
4153
<span className="rr-text text-lg">{movie.year}</span>
4254
<span className="rr-badge">Rating: {movie.rating}/10</span>
43-
<form action={setIsFavorite}>
55+
<Form method="post" preventScrollReset>
4456
<input type="hidden" name="id" value={movie.id} />
4557
<input
4658
type="hidden"
@@ -53,7 +65,7 @@ export default function MovieDetailsPage({ loaderData }: Route.ComponentProps) {
5365
>
5466
{movie.isFavorite ? 'Favorite' : 'Not Favorite'}
5567
</button>
56-
</form>
68+
</Form>
5769
</div>
5870
<p className="rr-text mb-6">{movie.description}</p>
5971
<MovieTrailer movie={movie} />

exercises/01.start/04.solution.rsc-route/package.json renamed to exercises/01.start/03.solution.rsc-route/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "exercises_01.start_04.solution.rsc-route",
2+
"name": "exercises_01.start_03.solution.rsc-route",
33
"private": true,
44
"type": "module",
55
"imports": {

0 commit comments

Comments
 (0)