diff --git a/Components/Layout/MovieTable.razor b/Components/Layout/MovieTable.razor
new file mode 100644
index 0000000..eb94a65
--- /dev/null
+++ b/Components/Layout/MovieTable.razor
@@ -0,0 +1,35 @@
+
+
+
+
+
Title
+
Year
+
+
+
+ @if (Movies?.Search != null)
+ {
+ @foreach (var movie in Movies.Search)
+ {
+
+
+
@movie.Title
+
@movie.Year
+
+ }
+ }
+
+
+
+@inject NavigationManager NavigationManager
+
+@code {
+
+ [Parameter]
+ public MovieSearch? Movies { get; set; }
+
+ private async Task OnMovieSelected(string imdbID)
+ {
+ NavigationManager.NavigateTo($"/movie/{imdbID}");
+ }
+}
\ No newline at end of file
diff --git a/Components/Pages/Favorites.razor b/Components/Pages/Favorites.razor
index 2662792..6b2a1f2 100644
--- a/Components/Pages/Favorites.razor
+++ b/Components/Pages/Favorites.razor
@@ -2,17 +2,21 @@
Favorites
-
TODO
+
-
-
-@inject OmdbService OmdbService
-@inject IJSRuntime JSRuntime
+@inject ManageFavorite ManageFavorite
@code {
- private async Task FaiCose()
+ public MovieSearch? movies = null;
+
+ protected override async Task OnInitializedAsync()
{
- var movies = await OmdbService.FetchMovies("Matrix");
- var movieDetail = await OmdbService.FetchMovieDetail("tt11749868");
+ await ManageFavorite.LoadFavorites();
+ var favoriteMovies = ManageFavorite.GetFavoriteMovies();
+ movies = new MovieSearch
+ {
+ Search = favoriteMovies.ToArray(),
+ TotalResults = favoriteMovies.Count.ToString()
+ };
}
}
diff --git a/Components/Pages/Home.razor b/Components/Pages/Home.razor
index 7d5fc28..1d1ea44 100644
--- a/Components/Pages/Home.razor
+++ b/Components/Pages/Home.razor
@@ -12,42 +12,14 @@
-
-
-
-
-
Title
-
Year
-
-
-
- @if (movies?.Search != null)
- {
- @foreach (var movie in movies.Search)
- {
-
-
-
@movie.Title
-
@movie.Year
-
- }
- }
-
-
-
+
@inject OmdbService OmdbService
-@inject NavigationManager NavigationManager
@code {
private string searchTitle = "";
private MovieSearch? movies = null;
- private async Task OnMovieSelected(string imdbID)
- {
- NavigationManager.NavigateTo($"/movie/{imdbID}");
- }
-
private async Task OnSearch()
{
movies = await OmdbService.FetchMovies(searchTitle);
diff --git a/Components/Pages/MovieDetail.razor b/Components/Pages/MovieDetail.razor
index 86afece..b81b1bc 100644
--- a/Components/Pages/MovieDetail.razor
+++ b/Components/Pages/MovieDetail.razor
@@ -71,6 +71,6 @@
private async Task ToggleFavoriteMovie()
{
- await ManageFavorite.ToggleFavoriteMovie(id);
+ await ManageFavorite.ToggleFavoriteMovie(movie!);
}
}
diff --git a/Models/Movie.cs b/Models/Movie.cs
index e59d11b..6eb8346 100644
--- a/Models/Movie.cs
+++ b/Models/Movie.cs
@@ -1,13 +1,10 @@
-
-
using System.Text.Json.Serialization;
-
///
/// Rappresenta un film con le sue proprietà principali.
/// Non ho preso tutte le proprietà disponibili dall'API OMDB, solo quelle richieste.
///
-class Movie
+public class Movie
{
public required string Title { get; set; }
public required string Year { get; set; }
diff --git a/Models/MovieSearch.cs b/Models/MovieSearch.cs
index d1a7f83..cbfe5c8 100644
--- a/Models/MovieSearch.cs
+++ b/Models/MovieSearch.cs
@@ -1,13 +1,10 @@
-
-
using System.Text.Json.Serialization;
-
///
/// Modello per rappresentare i risultati di una ricerca di film.
/// Ha solo scopo di deserializzazione della risposta JSON dell'API OMDB.
///
-class MovieSearch
+public class MovieSearch
{
public required Movie[] Search { get; set; }
[JsonPropertyName("totalResults")]
diff --git a/Services/ManageFavorite.cs b/Services/ManageFavorite.cs
index e3a7e4a..ad48753 100644
--- a/Services/ManageFavorite.cs
+++ b/Services/ManageFavorite.cs
@@ -8,7 +8,7 @@ class ManageFavorite(Blazored.LocalStorage.ILocalStorageService localStorage)
{
// Inject the local storage service
private readonly Blazored.LocalStorage.ILocalStorageService LocalStorage = localStorage;
- private readonly List MoviesIDs = [];
+ private readonly List Movies = [];
///
/// Load favorite movies from local storage
@@ -17,9 +17,9 @@ class ManageFavorite(Blazored.LocalStorage.ILocalStorageService localStorage)
///
public async Task LoadFavorites()
{
- var favorites = await LocalStorage.GetItemAsync>("favorite") ?? [];
- MoviesIDs.Clear();
- MoviesIDs.AddRange(favorites);
+ var favorites = await LocalStorage.GetItemAsync>("favorite") ?? [];
+ Movies.Clear();
+ Movies.AddRange(favorites);
}
///
@@ -29,35 +29,35 @@ class ManageFavorite(Blazored.LocalStorage.ILocalStorageService localStorage)
/// True if the movie is favorite, otherwise false
public bool IsFavorite(string movieID)
{
- return MoviesIDs.Contains(movieID);
+ return Movies.Any(m => m.IdIMDB == movieID);
}
///
/// Toggle favorite status of a movie (by ID)
///
- /// The movie ID to toggle
+ /// The movie ID to toggle
/// The new favorite status
- public async Task ToggleFavoriteMovie(string movieID)
+ public async Task ToggleFavoriteMovie(Movie movie)
{
- if (!IsFavorite(movieID))
+ if (!IsFavorite(movie.IdIMDB))
{
- MoviesIDs.Add(movieID);
+ Movies.Add(movie);
}
else
{
- MoviesIDs.RemoveAll(id => id == movieID);
+ Movies.RemoveAll(m => m.IdIMDB == movie.IdIMDB);
}
- await LocalStorage.SetItemAsync("favorite", MoviesIDs);
- return IsFavorite(movieID);
+ await LocalStorage.SetItemAsync("favorite", Movies);
+ return IsFavorite(movie.IdIMDB);
}
///
/// Get the list of favorite movie IDs
///
/// The list of favorite movie IDs
- public List GetFavoriteMovies()
+ public List GetFavoriteMovies()
{
- return MoviesIDs;
+ return Movies;
}
}
\ No newline at end of file