From 1961b412688f90f7b099d1f086bd5629dd1515e1 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Wed, 18 May 2022 19:31:49 -0500 Subject: [PATCH] Last batch of bugfixes (#1262) * Refactored code to show action bar instead of drawer in immersive mode * Card grid * adding margin for pagination gap * Fixed a rare routing case that wouldn't redirect * Fixed a bug where series detail would show blank filtering * Fixing image scaling and library card spacing * Refactored some methods to be static * Adding card grid to series detail * Fixed a bug with webtoon going to non-webtoon mode, resulting in black screen. * Ensure emails are trimmed when trying to invite. * Don't show More In if there is only 1 item in there on library recommended tab * Fixed some bugs around locking metadata fields where the correct param wasn't being sent to backend. * Added some UI error messaging when the email doesn't match the confirm-email (or rather any email in the system). * Fixed some pages where actions weren't working (library detail) and removed some actionable buttons where they didn't make sense * Refactored the series detail to use Robbie's new grid system. * some styling fixes * Styling fixes - Removing select border gap - fixing switches on lite theme - fixing search result text-light * better css var naming * changing search lite text color override * fixing as per feedback * Removing boolean from being visible in bookreader * Fixed some bugs in bulk operations not being visible on light/eink screens. Added --bulk-selection-highlight-text-color and --bulk-selection-text-color. Co-authored-by: Robbie Davis --- API.Tests/Services/SeriesServiceTests.cs | 2 +- API/Controllers/AccountController.cs | 6 ++ API/DTOs/Account/InviteUserDto.cs | 2 +- API/DTOs/SeriesMetadataDto.cs | 20 +++--- API/Data/DataContext.cs | 4 +- API/Services/SeriesService.cs | 20 +++--- UI/Web/src/app/_models/series-metadata.ts | 2 +- .../invite-user/invite-user.component.ts | 2 +- UI/Web/src/app/app-routing.module.ts | 1 + .../book-reader/book-reader.component.html | 4 +- .../book-reader/book-reader.component.ts | 21 ++++++- .../reader-settings.component.ts | 1 + .../edit-series-modal.component.html | 4 +- .../bulk-operations.component.scss | 12 +++- .../card-detail-layout.component.html | 4 +- .../card-detail-layout.component.scss | 6 ++ .../card-detail-layout.component.ts | 2 +- .../cards/card-item/card-item.component.scss | 8 ++- .../all-collections.component.html | 3 +- .../library-detail.component.html | 2 +- .../library-detail.component.scss | 3 +- .../library-detail.component.ts | 8 +++ .../library-recommended.component.html | 12 ++-- .../manga-reader/manga-reader.component.html | 6 +- .../manga-reader/manga-reader.component.ts | 16 ++++- .../nav/nav-header/nav-header.component.scss | 4 ++ .../reading-lists.component.html | 1 - .../series-detail.component.html | 63 +++++++++---------- .../series-detail.component.scss | 9 ++- .../app/typeahead/typeahead.component.html | 2 +- .../src/app/typeahead/typeahead.component.ts | 7 ++- UI/Web/src/styles.scss | 1 - UI/Web/src/theme/components/_card.scss | 1 + UI/Web/src/theme/themes/dark.scss | 12 +++- UI/Web/src/theme/themes/e-ink.scss | 10 ++- UI/Web/src/theme/themes/light.scss | 12 +++- 36 files changed, 195 insertions(+), 98 deletions(-) diff --git a/API.Tests/Services/SeriesServiceTests.cs b/API.Tests/Services/SeriesServiceTests.cs index 0726931ea..217eb63e0 100644 --- a/API.Tests/Services/SeriesServiceTests.cs +++ b/API.Tests/Services/SeriesServiceTests.cs @@ -770,7 +770,7 @@ public class SeriesServiceTests { SeriesId = 1, Publishers = new List() {new () {Id = 0, Name = "Existing Person", Role = PersonRole.Publisher}}, - PublisherLocked = true + PublishersLocked = true }, CollectionTags = new List() }); diff --git a/API/Controllers/AccountController.cs b/API/Controllers/AccountController.cs index dfa30b18d..cc0b66ec1 100644 --- a/API/Controllers/AccountController.cs +++ b/API/Controllers/AccountController.cs @@ -353,6 +353,7 @@ namespace API.Controllers _logger.LogInformation("{User} is inviting {Email} to the server", adminUser.UserName, dto.Email); // Check if there is an existing invite + dto.Email = dto.Email.Trim(); var emailValidationErrors = await _accountService.ValidateEmail(dto.Email); if (emailValidationErrors.Any()) { @@ -454,6 +455,11 @@ namespace API.Controllers { var user = await _unitOfWork.UserRepository.GetUserByEmailAsync(dto.Email); + if (user == null) + { + return BadRequest("The email does not match the registered email"); + } + // Validate Password and Username var validationErrors = new List(); validationErrors.AddRange(await _accountService.ValidateUsername(dto.Username)); diff --git a/API/DTOs/Account/InviteUserDto.cs b/API/DTOs/Account/InviteUserDto.cs index 42d4bdf8e..9d0d9416d 100644 --- a/API/DTOs/Account/InviteUserDto.cs +++ b/API/DTOs/Account/InviteUserDto.cs @@ -6,7 +6,7 @@ namespace API.DTOs.Account; public class InviteUserDto { [Required] - public string Email { get; init; } + public string Email { get; set; } /// /// List of Roles to assign to user. If admin not present, Pleb will be applied. /// If admin present, all libraries will be granted access and will ignore those from DTO. diff --git a/API/DTOs/SeriesMetadataDto.cs b/API/DTOs/SeriesMetadataDto.cs index fa41c5cee..9a396f5d1 100644 --- a/API/DTOs/SeriesMetadataDto.cs +++ b/API/DTOs/SeriesMetadataDto.cs @@ -69,16 +69,16 @@ namespace API.DTOs public bool PublicationStatusLocked { get; set; } public bool GenresLocked { get; set; } public bool TagsLocked { get; set; } - public bool WriterLocked { get; set; } - public bool CharacterLocked { get; set; } - public bool ColoristLocked { get; set; } - public bool EditorLocked { get; set; } - public bool InkerLocked { get; set; } - public bool LettererLocked { get; set; } - public bool PencillerLocked { get; set; } - public bool PublisherLocked { get; set; } - public bool TranslatorLocked { get; set; } - public bool CoverArtistLocked { get; set; } + public bool WritersLocked { get; set; } + public bool CharactersLocked { get; set; } + public bool ColoristsLocked { get; set; } + public bool EditorsLocked { get; set; } + public bool InkersLocked { get; set; } + public bool LetterersLocked { get; set; } + public bool PencillersLocked { get; set; } + public bool PublishersLocked { get; set; } + public bool TranslatorsLocked { get; set; } + public bool CoverArtistsLocked { get; set; } public int SeriesId { get; set; } diff --git a/API/Data/DataContext.cs b/API/Data/DataContext.cs index 4f0a212b4..154cdf2fc 100644 --- a/API/Data/DataContext.cs +++ b/API/Data/DataContext.cs @@ -81,7 +81,7 @@ namespace API.Data } - void OnEntityTracked(object sender, EntityTrackedEventArgs e) + static void OnEntityTracked(object sender, EntityTrackedEventArgs e) { if (!e.FromQuery && e.Entry.State == EntityState.Added && e.Entry.Entity is IEntityDate entity) { @@ -91,7 +91,7 @@ namespace API.Data } - void OnEntityStateChanged(object sender, EntityStateChangedEventArgs e) + static void OnEntityStateChanged(object sender, EntityStateChangedEventArgs e) { if (e.NewState == EntityState.Modified && e.Entry.Entity is IEntityDate entity) entity.LastModified = DateTime.Now; diff --git a/API/Services/SeriesService.cs b/API/Services/SeriesService.cs index ada58dc19..63fb87d66 100644 --- a/API/Services/SeriesService.cs +++ b/API/Services/SeriesService.cs @@ -156,16 +156,16 @@ public class SeriesService : ISeriesService series.Metadata.LanguageLocked = updateSeriesMetadataDto.SeriesMetadata.LanguageLocked; series.Metadata.GenresLocked = updateSeriesMetadataDto.SeriesMetadata.GenresLocked; series.Metadata.TagsLocked = updateSeriesMetadataDto.SeriesMetadata.TagsLocked; - series.Metadata.CharacterLocked = updateSeriesMetadataDto.SeriesMetadata.CharacterLocked; - series.Metadata.ColoristLocked = updateSeriesMetadataDto.SeriesMetadata.ColoristLocked; - series.Metadata.EditorLocked = updateSeriesMetadataDto.SeriesMetadata.EditorLocked; - series.Metadata.InkerLocked = updateSeriesMetadataDto.SeriesMetadata.InkerLocked; - series.Metadata.LettererLocked = updateSeriesMetadataDto.SeriesMetadata.LettererLocked; - series.Metadata.PencillerLocked = updateSeriesMetadataDto.SeriesMetadata.PencillerLocked; - series.Metadata.PublisherLocked = updateSeriesMetadataDto.SeriesMetadata.PublisherLocked; - series.Metadata.TranslatorLocked = updateSeriesMetadataDto.SeriesMetadata.TranslatorLocked; - series.Metadata.CoverArtistLocked = updateSeriesMetadataDto.SeriesMetadata.CoverArtistLocked; - series.Metadata.WriterLocked = updateSeriesMetadataDto.SeriesMetadata.WriterLocked; + series.Metadata.CharacterLocked = updateSeriesMetadataDto.SeriesMetadata.CharactersLocked; + series.Metadata.ColoristLocked = updateSeriesMetadataDto.SeriesMetadata.ColoristsLocked; + series.Metadata.EditorLocked = updateSeriesMetadataDto.SeriesMetadata.EditorsLocked; + series.Metadata.InkerLocked = updateSeriesMetadataDto.SeriesMetadata.InkersLocked; + series.Metadata.LettererLocked = updateSeriesMetadataDto.SeriesMetadata.LetterersLocked; + series.Metadata.PencillerLocked = updateSeriesMetadataDto.SeriesMetadata.PencillersLocked; + series.Metadata.PublisherLocked = updateSeriesMetadataDto.SeriesMetadata.PublishersLocked; + series.Metadata.TranslatorLocked = updateSeriesMetadataDto.SeriesMetadata.TranslatorsLocked; + series.Metadata.CoverArtistLocked = updateSeriesMetadataDto.SeriesMetadata.CoverArtistsLocked; + series.Metadata.WriterLocked = updateSeriesMetadataDto.SeriesMetadata.WritersLocked; series.Metadata.SummaryLocked = updateSeriesMetadataDto.SeriesMetadata.SummaryLocked; if (!_unitOfWork.HasChanges()) diff --git a/UI/Web/src/app/_models/series-metadata.ts b/UI/Web/src/app/_models/series-metadata.ts index 361140546..d15dcc2f8 100644 --- a/UI/Web/src/app/_models/series-metadata.ts +++ b/UI/Web/src/app/_models/series-metadata.ts @@ -35,7 +35,7 @@ export interface SeriesMetadata { tagsLocked: boolean; writersLocked: boolean; coverArtistsLocked: boolean; - publisherLocked: boolean; + publishersLocked: boolean; charactersLocked: boolean; pencillersLocked: boolean; inkersLocked: boolean; diff --git a/UI/Web/src/app/admin/invite-user/invite-user.component.ts b/UI/Web/src/app/admin/invite-user/invite-user.component.ts index b5066c99c..13f18b7eb 100644 --- a/UI/Web/src/app/admin/invite-user/invite-user.component.ts +++ b/UI/Web/src/app/admin/invite-user/invite-user.component.ts @@ -42,7 +42,7 @@ export class InviteUserComponent implements OnInit { invite() { this.isSending = true; - const email = this.inviteForm.get('email')?.value; + const email = this.inviteForm.get('email')?.value.trim(); this.accountService.inviteUser({ email, libraries: this.selectedLibraries, diff --git a/UI/Web/src/app/app-routing.module.ts b/UI/Web/src/app/app-routing.module.ts index f3461be1d..6a2bfff34 100644 --- a/UI/Web/src/app/app-routing.module.ts +++ b/UI/Web/src/app/app-routing.module.ts @@ -78,6 +78,7 @@ const routes: Routes = [ }, {path: 'login', loadChildren: () => import('../app/registration/registration.module').then(m => m.RegistrationModule)}, {path: '**', pathMatch: 'full', redirectTo: 'libraries'}, + {path: '', pathMatch: 'full', redirectTo: 'libraries'}, ]; @NgModule({ diff --git a/UI/Web/src/app/book-reader/book-reader/book-reader.component.html b/UI/Web/src/app/book-reader/book-reader/book-reader.component.html index 51af3c552..7750b91b5 100644 --- a/UI/Web/src/app/book-reader/book-reader/book-reader.component.html +++ b/UI/Web/src/app/book-reader/book-reader/book-reader.component.html @@ -54,7 +54,7 @@ (fullscreen)="toggleFullscreen()" (layoutModeUpdate)="updateLayoutMode($event)" (readingDirection)="updateReadingDirection($event)" - (immersiveMode)="immersiveMode = $event" + (immersiveMode)="updateImmersiveMode($event)" > @@ -96,7 +96,7 @@ -
+