From f19c1a7216b5f7609ac4e01de128b9c36adf1e8a Mon Sep 17 00:00:00 2001 From: Berack96 Date: Tue, 20 Jan 2026 15:12:37 +0100 Subject: [PATCH 1/3] refactor table for reuse --- Components/Layout/MovieTable.razor | 35 ++++++++++++++++++++++++++++++ Components/Pages/Favorites.razor | 20 ++++++++++------- Components/Pages/Home.razor | 30 +------------------------ Components/Pages/MovieDetail.razor | 2 +- Models/Movie.cs | 5 +---- Models/MovieSearch.cs | 5 +---- Services/ManageFavorite.cs | 28 ++++++++++++------------ 7 files changed, 65 insertions(+), 60 deletions(-) create mode 100644 Components/Layout/MovieTable.razor 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 @@ + + + + + + + + + + @if (Movies?.Search != null) + { + @foreach (var movie in Movies.Search) + { + + + + + + } + } + +
TitleYear
@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 @@ - - - - - - - - - - @if (movies?.Search != null) - { - @foreach (var movie in movies.Search) - { - - - - - - } - } - -
TitleYear
@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 -- 2.49.1 From 1ce2ad400cf2373cf134a97af99718b385ff8959 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Tue, 20 Jan 2026 15:21:24 +0100 Subject: [PATCH 2/3] fix --- Components/Pages/Favorites.razor | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Components/Pages/Favorites.razor b/Components/Pages/Favorites.razor index 6b2a1f2..c046717 100644 --- a/Components/Pages/Favorites.razor +++ b/Components/Pages/Favorites.razor @@ -9,14 +9,18 @@ @code { public MovieSearch? movies = null; - protected override async Task OnInitializedAsync() + protected override async Task OnAfterRenderAsync(bool firstRender) { - await ManageFavorite.LoadFavorites(); - var favoriteMovies = ManageFavorite.GetFavoriteMovies(); - movies = new MovieSearch + if (firstRender) { - Search = favoriteMovies.ToArray(), - TotalResults = favoriteMovies.Count.ToString() - }; + await ManageFavorite.LoadFavorites(); + var favoriteMovies = ManageFavorite.GetFavoriteMovies(); + movies = new MovieSearch + { + Search = favoriteMovies.ToArray(), + TotalResults = favoriteMovies.Count.ToString() + }; + StateHasChanged(); + } } } -- 2.49.1 From 65685afa8c90ab9f74c5298c9d49606e5b5de1f8 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Tue, 20 Jan 2026 15:23:30 +0100 Subject: [PATCH 3/3] removed unnecessary css --- Components/Pages/MovieDetail.razor | 32 +++++++----------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/Components/Pages/MovieDetail.razor b/Components/Pages/MovieDetail.razor index b81b1bc..de76a8f 100644 --- a/Components/Pages/MovieDetail.razor +++ b/Components/Pages/MovieDetail.razor @@ -2,41 +2,23 @@ Movie Details - - -
+
@if (movie is not null) {

@movie.Title

-
- @movie.Title Poster -
+
+ @movie.Title Poster +
+

@movie.Runtime

@movie.Plot

@if(ManageFavorite.IsFavorite(id)) { - + } else { - + }
} -- 2.49.1