Skip to content

Commit 5b35a10

Browse files
committed
refactor: streamline favorite movie functionality by consolidating setIsFavorite logic
1 parent 28f22f2 commit 5b35a10

File tree

11 files changed

+87
-123
lines changed

11 files changed

+87
-123
lines changed

exercises/01.start/01.problem.vite-plugin/app/movies-data.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
export async function setIsFavorite(formData: FormData) {
2+
// Simulate API call delay
3+
await new Promise((resolve) => setTimeout(resolve, 50))
4+
5+
const movieId = Number(formData.get('id'))
6+
const isFavorite = formData.get('isFavorite') === 'true'
7+
// Update the movie's favorite status
8+
const movie = movies.find((m) => m.id === movieId)
9+
if (movie) {
10+
movie.isFavorite = isFavorite
11+
}
12+
}
13+
114
// Mock data for demonstration
215
let movies = [
316
{
@@ -85,20 +98,3 @@ export async function getMovie(id: number) {
8598
}
8699
return movie
87100
}
88-
89-
export async function setIsFavorite({
90-
movieId,
91-
isFavorite,
92-
}: {
93-
movieId: number
94-
isFavorite: boolean
95-
}) {
96-
// Simulate API call delay
97-
await new Promise((resolve) => setTimeout(resolve, 50))
98-
99-
// Update the movie's favorite status
100-
const movie = movies.find((m) => m.id === movieId)
101-
if (movie) {
102-
movie.isFavorite = isFavorite
103-
}
104-
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,8 @@ export async function loader({ params }: Route.LoaderArgs) {
99
}
1010

1111
export async function action({ request }: Route.ActionArgs) {
12-
// Simulate API call delay
13-
await new Promise((resolve) => setTimeout(resolve, 50))
1412
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 })
13+
await setIsFavorite(formData)
2014
return { success: true }
2115
}
2216

exercises/01.start/01.problem.vite-plugin/vite.config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@ export default defineConfig({
1313
plugins: [
1414
tailwindcss(),
1515
tsconfigPaths(),
16-
// here we go...
16+
// 💣 replace this:
1717
reactRouter(),
18+
// 🐨 with this:
19+
// reactRouterRSC(),
20+
// rsc(),
1821
devtoolsJson(),
1922
],
2023
})

exercises/01.start/01.solution.vite-plugin/app/movies-data.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
export async function setIsFavorite(formData: FormData) {
2+
// Simulate API call delay
3+
await new Promise((resolve) => setTimeout(resolve, 50))
4+
5+
const movieId = Number(formData.get('id'))
6+
const isFavorite = formData.get('isFavorite') === 'true'
7+
// Update the movie's favorite status
8+
const movie = movies.find((m) => m.id === movieId)
9+
if (movie) {
10+
movie.isFavorite = isFavorite
11+
}
12+
}
13+
114
// Mock data for demonstration
215
let movies = [
316
{
@@ -85,20 +98,3 @@ export async function getMovie(id: number) {
8598
}
8699
return movie
87100
}
88-
89-
export async function setIsFavorite({
90-
movieId,
91-
isFavorite,
92-
}: {
93-
movieId: number
94-
isFavorite: boolean
95-
}) {
96-
// Simulate API call delay
97-
await new Promise((resolve) => setTimeout(resolve, 50))
98-
99-
// Update the movie's favorite status
100-
const movie = movies.find((m) => m.id === movieId)
101-
if (movie) {
102-
movie.isFavorite = isFavorite
103-
}
104-
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,8 @@ export async function loader({ params }: Route.LoaderArgs) {
99
}
1010

1111
export async function action({ request }: Route.ActionArgs) {
12-
// Simulate API call delay
13-
await new Promise((resolve) => setTimeout(resolve, 50))
1412
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 })
13+
await setIsFavorite(formData)
2014
return { success: true }
2115
}
2216

exercises/01.start/02.solution.loader-rsc/app/movies-data.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
export async function setIsFavorite(formData: FormData) {
2+
// Simulate API call delay
3+
await new Promise((resolve) => setTimeout(resolve, 50))
4+
5+
const movieId = Number(formData.get('id'))
6+
const isFavorite = formData.get('isFavorite') === 'true'
7+
// Update the movie's favorite status
8+
const movie = movies.find((m) => m.id === movieId)
9+
if (movie) {
10+
movie.isFavorite = isFavorite
11+
}
12+
}
13+
114
// Mock data for demonstration
215
let movies = [
316
{
@@ -85,20 +98,3 @@ export async function getMovie(id: number) {
8598
}
8699
return movie
87100
}
88-
89-
export async function setIsFavorite({
90-
movieId,
91-
isFavorite,
92-
}: {
93-
movieId: number
94-
isFavorite: boolean
95-
}) {
96-
// Simulate API call delay
97-
await new Promise((resolve) => setTimeout(resolve, 50))
98-
99-
// Update the movie's favorite status
100-
const movie = movies.find((m) => m.id === movieId)
101-
if (movie) {
102-
movie.isFavorite = isFavorite
103-
}
104-
}

exercises/01.start/02.solution.loader-rsc/app/routes/movie-details.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,8 @@ export async function loader({ params }: Route.LoaderArgs) {
99
}
1010

1111
export async function action({ request }: Route.ActionArgs) {
12-
// Simulate API call delay
13-
await new Promise((resolve) => setTimeout(resolve, 50))
1412
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 })
13+
await setIsFavorite(formData)
2014
return { success: true }
2115
}
2216

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

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
export async function setIsFavorite(formData: FormData) {
2+
// Simulate API call delay
3+
await new Promise((resolve) => setTimeout(resolve, 50))
4+
5+
const movieId = Number(formData.get('id'))
6+
const isFavorite = formData.get('isFavorite') === 'true'
7+
8+
// Update the movie's favorite status
9+
const movie = movies.find((m) => m.id === movieId)
10+
if (movie) {
11+
movie.isFavorite = isFavorite
12+
}
13+
}
14+
115
// Mock data for demonstration
216
let movies = [
317
{
@@ -85,20 +99,3 @@ export async function getMovie(id: number) {
8599
}
86100
return movie
87101
}
88-
89-
export async function setIsFavorite({
90-
movieId,
91-
isFavorite,
92-
}: {
93-
movieId: number
94-
isFavorite: boolean
95-
}) {
96-
// Simulate API call delay
97-
await new Promise((resolve) => setTimeout(resolve, 50))
98-
99-
// Update the movie's favorite status
100-
const movie = movies.find((m) => m.id === movieId)
101-
if (movie) {
102-
movie.isFavorite = isFavorite
103-
}
104-
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,8 @@ export async function loader({ params }: Route.LoaderArgs) {
99
}
1010

1111
export async function action({ request }: Route.ActionArgs) {
12-
// Simulate API call delay
13-
await new Promise((resolve) => setTimeout(resolve, 50))
1412
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 })
13+
await setIsFavorite(formData)
2014
return { success: true }
2115
}
2216

exercises/01.start/04.solution.server-fns/app/movies-data.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
'use server'
22

3+
export async function setIsFavorite(formData: FormData) {
4+
// Simulate API call delay
5+
await new Promise((resolve) => setTimeout(resolve, 50))
6+
7+
const movieId = Number(formData.get('id'))
8+
const isFavorite = formData.get('isFavorite') === 'true'
9+
// Update the movie's favorite status
10+
const movie = movies.find((m) => m.id === movieId)
11+
if (movie) {
12+
movie.isFavorite = isFavorite
13+
}
14+
}
15+
316
// Mock data for demonstration
417
let movies = [
518
{
@@ -87,16 +100,3 @@ export async function getMovie(id: number) {
87100
}
88101
return movie
89102
}
90-
91-
export async function setIsFavorite(formData: FormData) {
92-
// Simulate API call delay
93-
await new Promise((resolve) => setTimeout(resolve, 50))
94-
95-
const movieId = Number(formData.get('id'))
96-
const isFavorite = formData.get('isFavorite') === 'true'
97-
// Update the movie's favorite status
98-
const movie = movies.find((m) => m.id === movieId)
99-
if (movie) {
100-
movie.isFavorite = isFavorite
101-
}
102-
}

0 commit comments

Comments
 (0)