mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
Refactored InProgress to OnDeck where the logic is slightly changed. Now series with recent updates are now pushed to the front of the list. (#743)
This commit is contained in:
parent
61ad7f0b8a
commit
740fc62549
@ -65,15 +65,15 @@ namespace API.Controllers
|
|||||||
SetFeedId(feed, "root");
|
SetFeedId(feed, "root");
|
||||||
feed.Entries.Add(new FeedEntry()
|
feed.Entries.Add(new FeedEntry()
|
||||||
{
|
{
|
||||||
Id = "inProgress",
|
Id = "onDeck",
|
||||||
Title = "In Progress",
|
Title = "On Deck",
|
||||||
Content = new FeedEntryContent()
|
Content = new FeedEntryContent()
|
||||||
{
|
{
|
||||||
Text = "Browse by In Progress"
|
Text = "Browse by On Deck"
|
||||||
},
|
},
|
||||||
Links = new List<FeedLink>()
|
Links = new List<FeedLink>()
|
||||||
{
|
{
|
||||||
CreateLink(FeedLinkRelation.SubSection, FeedLinkType.AtomNavigation, Prefix + $"{apiKey}/in-progress"),
|
CreateLink(FeedLinkRelation.SubSection, FeedLinkType.AtomNavigation, Prefix + $"{apiKey}/on-deck"),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
feed.Entries.Add(new FeedEntry()
|
feed.Entries.Add(new FeedEntry()
|
||||||
@ -374,9 +374,9 @@ namespace API.Controllers
|
|||||||
return CreateXmlResult(SerializeXml(feed));
|
return CreateXmlResult(SerializeXml(feed));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{apiKey}/in-progress")]
|
[HttpGet("{apiKey}/on-deck")]
|
||||||
[Produces("application/xml")]
|
[Produces("application/xml")]
|
||||||
public async Task<IActionResult> GetInProgress(string apiKey, [FromQuery] int pageNumber = 1)
|
public async Task<IActionResult> GetOnDeck(string apiKey, [FromQuery] int pageNumber = 1)
|
||||||
{
|
{
|
||||||
if (!(await _unitOfWork.SettingsRepository.GetSettingsDtoAsync()).EnableOpds)
|
if (!(await _unitOfWork.SettingsRepository.GetSettingsDtoAsync()).EnableOpds)
|
||||||
return BadRequest("OPDS is not enabled on this server");
|
return BadRequest("OPDS is not enabled on this server");
|
||||||
@ -386,16 +386,16 @@ namespace API.Controllers
|
|||||||
PageNumber = pageNumber,
|
PageNumber = pageNumber,
|
||||||
PageSize = 20
|
PageSize = 20
|
||||||
};
|
};
|
||||||
var results = await _unitOfWork.SeriesRepository.GetInProgress(userId, 0, userParams, _filterDto);
|
var results = await _unitOfWork.SeriesRepository.GetOnDeck(userId, 0, userParams, _filterDto);
|
||||||
var listResults = results.DistinctBy(s => s.Name).Skip((userParams.PageNumber - 1) * userParams.PageSize)
|
var listResults = results.DistinctBy(s => s.Name).Skip((userParams.PageNumber - 1) * userParams.PageSize)
|
||||||
.Take(userParams.PageSize).ToList();
|
.Take(userParams.PageSize).ToList();
|
||||||
var pagedList = new PagedList<SeriesDto>(listResults, listResults.Count, userParams.PageNumber, userParams.PageSize);
|
var pagedList = new PagedList<SeriesDto>(listResults, listResults.Count, userParams.PageNumber, userParams.PageSize);
|
||||||
|
|
||||||
Response.AddPaginationHeader(pagedList.CurrentPage, pagedList.PageSize, pagedList.TotalCount, pagedList.TotalPages);
|
Response.AddPaginationHeader(pagedList.CurrentPage, pagedList.PageSize, pagedList.TotalCount, pagedList.TotalPages);
|
||||||
|
|
||||||
var feed = CreateFeed("In Progress", $"{apiKey}/in-progress", apiKey);
|
var feed = CreateFeed("On Deck", $"{apiKey}/on-deck", apiKey);
|
||||||
SetFeedId(feed, "in-progress");
|
SetFeedId(feed, "on-deck");
|
||||||
AddPagination(feed, pagedList, $"{Prefix}{apiKey}/in-progress");
|
AddPagination(feed, pagedList, $"{Prefix}{apiKey}/on-deck");
|
||||||
|
|
||||||
foreach (var seriesDto in pagedList)
|
foreach (var seriesDto in pagedList)
|
||||||
{
|
{
|
||||||
|
@ -230,12 +230,19 @@ namespace API.Controllers
|
|||||||
return Ok(series);
|
return Ok(series);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("in-progress")]
|
/// <summary>
|
||||||
public async Task<ActionResult<IEnumerable<SeriesDto>>> GetInProgress(FilterDto filterDto, [FromQuery] UserParams userParams, [FromQuery] int libraryId = 0)
|
/// Fetches series that are on deck aka have progress on them.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filterDto"></param>
|
||||||
|
/// <param name="userParams"></param>
|
||||||
|
/// <param name="libraryId">Default of 0 meaning all libraries</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("on-deck")]
|
||||||
|
public async Task<ActionResult<IEnumerable<SeriesDto>>> GetOnDeck(FilterDto filterDto, [FromQuery] UserParams userParams, [FromQuery] int libraryId = 0)
|
||||||
{
|
{
|
||||||
// NOTE: This has to be done manually like this due to the DistinctBy requirement
|
// NOTE: This has to be done manually like this due to the DistinctBy requirement
|
||||||
var userId = await _unitOfWork.UserRepository.GetUserIdByUsernameAsync(User.GetUsername());
|
var userId = await _unitOfWork.UserRepository.GetUserIdByUsernameAsync(User.GetUsername());
|
||||||
var results = await _unitOfWork.SeriesRepository.GetInProgress(userId, libraryId, userParams, filterDto);
|
var results = await _unitOfWork.SeriesRepository.GetOnDeck(userId, libraryId, userParams, filterDto);
|
||||||
|
|
||||||
var listResults = results.DistinctBy(s => s.Name).Skip((userParams.PageNumber - 1) * userParams.PageSize)
|
var listResults = results.DistinctBy(s => s.Name).Skip((userParams.PageNumber - 1) * userParams.PageSize)
|
||||||
.Take(userParams.PageSize).ToList();
|
.Take(userParams.PageSize).ToList();
|
||||||
|
@ -312,14 +312,15 @@ namespace API.Data.Repositories
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns Series that the user has some partial progress on
|
/// Returns Series that the user has some partial progress on. Sorts based on activity. Sort first by User progress, but if a series
|
||||||
|
/// has been updated recently, bump it to the front.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userId"></param>
|
/// <param name="userId"></param>
|
||||||
/// <param name="libraryId">Library to restrict to, if 0, will apply to all libraries</param>
|
/// <param name="libraryId">Library to restrict to, if 0, will apply to all libraries</param>
|
||||||
/// <param name="userParams">Pagination information</param>
|
/// <param name="userParams">Pagination information</param>
|
||||||
/// <param name="filter">Optional (default null) filter on query</param>
|
/// <param name="filter">Optional (default null) filter on query</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IEnumerable<SeriesDto>> GetInProgress(int userId, int libraryId, UserParams userParams, FilterDto filter)
|
public async Task<IEnumerable<SeriesDto>> GetOnDeck(int userId, int libraryId, UserParams userParams, FilterDto filter)
|
||||||
{
|
{
|
||||||
var formats = filter.GetSqlFilter();
|
var formats = filter.GetSqlFilter();
|
||||||
IList<int> userLibraries;
|
IList<int> userLibraries;
|
||||||
@ -352,6 +353,7 @@ namespace API.Data.Repositories
|
|||||||
&& s.PagesRead > 0
|
&& s.PagesRead > 0
|
||||||
&& s.PagesRead < s.Series.Pages)
|
&& s.PagesRead < s.Series.Pages)
|
||||||
.OrderByDescending(s => s.LastModified)
|
.OrderByDescending(s => s.LastModified)
|
||||||
|
.ThenByDescending(s => s.Series.LastModified)
|
||||||
.Select(s => s.Series)
|
.Select(s => s.Series)
|
||||||
.ProjectTo<SeriesDto>(_mapper.ConfigurationProvider)
|
.ProjectTo<SeriesDto>(_mapper.ConfigurationProvider)
|
||||||
.AsSplitQuery()
|
.AsSplitQuery()
|
||||||
|
@ -45,7 +45,7 @@ namespace API.Interfaces.Repositories
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task AddSeriesModifiers(int userId, List<SeriesDto> series);
|
Task AddSeriesModifiers(int userId, List<SeriesDto> series);
|
||||||
Task<string> GetSeriesCoverImageAsync(int seriesId);
|
Task<string> GetSeriesCoverImageAsync(int seriesId);
|
||||||
Task<IEnumerable<SeriesDto>> GetInProgress(int userId, int libraryId, UserParams userParams, FilterDto filter);
|
Task<IEnumerable<SeriesDto>> GetOnDeck(int userId, int libraryId, UserParams userParams, FilterDto filter);
|
||||||
Task<PagedList<SeriesDto>> GetRecentlyAdded(int libraryId, int userId, UserParams userParams, FilterDto filter); // NOTE: Probably put this in LibraryRepo
|
Task<PagedList<SeriesDto>> GetRecentlyAdded(int libraryId, int userId, UserParams userParams, FilterDto filter); // NOTE: Probably put this in LibraryRepo
|
||||||
Task<SeriesMetadataDto> GetSeriesMetadata(int seriesId);
|
Task<SeriesMetadataDto> GetSeriesMetadata(int seriesId);
|
||||||
Task<PagedList<SeriesDto>> GetSeriesDtoForCollectionAsync(int collectionId, int userId, UserParams userParams);
|
Task<PagedList<SeriesDto>> GetSeriesDtoForCollectionAsync(int collectionId, int userId, UserParams userParams);
|
||||||
|
@ -6,7 +6,6 @@ import { environment } from 'src/environments/environment';
|
|||||||
import { Chapter } from '../_models/chapter';
|
import { Chapter } from '../_models/chapter';
|
||||||
import { CollectionTag } from '../_models/collection-tag';
|
import { CollectionTag } from '../_models/collection-tag';
|
||||||
import { InProgressChapter } from '../_models/in-progress-chapter';
|
import { InProgressChapter } from '../_models/in-progress-chapter';
|
||||||
import { MangaFormat } from '../_models/manga-format';
|
|
||||||
import { PaginatedResult } from '../_models/pagination';
|
import { PaginatedResult } from '../_models/pagination';
|
||||||
import { Series } from '../_models/series';
|
import { Series } from '../_models/series';
|
||||||
import { SeriesFilter } from '../_models/series-filter';
|
import { SeriesFilter } from '../_models/series-filter';
|
||||||
@ -112,13 +111,13 @@ export class SeriesService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
getInProgress(libraryId: number = 0, pageNum?: number, itemsPerPage?: number, filter?: SeriesFilter) {
|
getOnDeck(libraryId: number = 0, pageNum?: number, itemsPerPage?: number, filter?: SeriesFilter) {
|
||||||
const data = this.createSeriesFilter(filter);
|
const data = this.createSeriesFilter(filter);
|
||||||
|
|
||||||
let params = new HttpParams();
|
let params = new HttpParams();
|
||||||
params = this._addPaginationIfExists(params, pageNum, itemsPerPage);
|
params = this._addPaginationIfExists(params, pageNum, itemsPerPage);
|
||||||
|
|
||||||
return this.httpClient.post<Series[]>(this.baseUrl + 'series/in-progress?libraryId=' + libraryId, data, {observe: 'response', params}).pipe(
|
return this.httpClient.post<Series[]>(this.baseUrl + 'series/on-deck?libraryId=' + libraryId, data, {observe: 'response', params}).pipe(
|
||||||
map(response => {
|
map(response => {
|
||||||
return this._cachePaginatedResults(response, new PaginatedResult<Series[]>());
|
return this._cachePaginatedResults(response, new PaginatedResult<Series[]>());
|
||||||
}));
|
}));
|
||||||
|
@ -7,7 +7,7 @@ import { RecentlyAddedComponent } from './recently-added/recently-added.componen
|
|||||||
import { UserLoginComponent } from './user-login/user-login.component';
|
import { UserLoginComponent } from './user-login/user-login.component';
|
||||||
import { AuthGuard } from './_guards/auth.guard';
|
import { AuthGuard } from './_guards/auth.guard';
|
||||||
import { LibraryAccessGuard } from './_guards/library-access.guard';
|
import { LibraryAccessGuard } from './_guards/library-access.guard';
|
||||||
import { InProgressComponent } from './in-progress/in-progress.component';
|
import { OnDeckComponent } from './on-deck/on-deck.component';
|
||||||
import { DashboardComponent } from './dashboard/dashboard.component';
|
import { DashboardComponent } from './dashboard/dashboard.component';
|
||||||
|
|
||||||
// TODO: Once we modularize the components, use this and measure performance impact: https://angular.io/guide/lazy-loading-ngmodules#preloading-modules
|
// TODO: Once we modularize the components, use this and measure performance impact: https://angular.io/guide/lazy-loading-ngmodules#preloading-modules
|
||||||
@ -54,7 +54,7 @@ const routes: Routes = [
|
|||||||
children: [
|
children: [
|
||||||
{path: 'library', component: DashboardComponent},
|
{path: 'library', component: DashboardComponent},
|
||||||
{path: 'recently-added', component: RecentlyAddedComponent},
|
{path: 'recently-added', component: RecentlyAddedComponent},
|
||||||
{path: 'in-progress', component: InProgressComponent},
|
{path: 'on-deck', component: OnDeckComponent},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{path: 'login', component: UserLoginComponent},
|
{path: 'login', component: UserLoginComponent},
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { BrowserModule, Title } from '@angular/platform-browser';
|
import { BrowserModule, Title } from '@angular/platform-browser';
|
||||||
import { APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { APP_BASE_HREF } from '@angular/common';
|
import { APP_BASE_HREF } from '@angular/common';
|
||||||
|
|
||||||
import { AppRoutingModule } from './app-routing.module';
|
import { AppRoutingModule } from './app-routing.module';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
|
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||||
import { NgbCollapseModule, NgbDropdownModule, NgbNavModule, NgbPaginationModule, NgbRatingModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbCollapseModule, NgbDropdownModule, NgbNavModule, NgbPaginationModule, NgbRatingModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { NavHeaderComponent } from './nav-header/nav-header.component';
|
import { NavHeaderComponent } from './nav-header/nav-header.component';
|
||||||
import { JwtInterceptor } from './_interceptors/jwt.interceptor';
|
import { JwtInterceptor } from './_interceptors/jwt.interceptor';
|
||||||
@ -25,7 +25,7 @@ import { CarouselModule } from './carousel/carousel.module';
|
|||||||
import { PersonBadgeComponent } from './person-badge/person-badge.component';
|
import { PersonBadgeComponent } from './person-badge/person-badge.component';
|
||||||
import { TypeaheadModule } from './typeahead/typeahead.module';
|
import { TypeaheadModule } from './typeahead/typeahead.module';
|
||||||
import { RecentlyAddedComponent } from './recently-added/recently-added.component';
|
import { RecentlyAddedComponent } from './recently-added/recently-added.component';
|
||||||
import { InProgressComponent } from './in-progress/in-progress.component';
|
import { OnDeckComponent } from './on-deck/on-deck.component';
|
||||||
import { DashboardComponent } from './dashboard/dashboard.component';
|
import { DashboardComponent } from './dashboard/dashboard.component';
|
||||||
import { CardsModule } from './cards/cards.module';
|
import { CardsModule } from './cards/cards.module';
|
||||||
import { CollectionsModule } from './collections/collections.module';
|
import { CollectionsModule } from './collections/collections.module';
|
||||||
@ -46,7 +46,7 @@ import { ConfigData } from './_models/config-data';
|
|||||||
ReviewSeriesModalComponent,
|
ReviewSeriesModalComponent,
|
||||||
PersonBadgeComponent,
|
PersonBadgeComponent,
|
||||||
RecentlyAddedComponent,
|
RecentlyAddedComponent,
|
||||||
InProgressComponent,
|
OnDeckComponent,
|
||||||
DashboardComponent,
|
DashboardComponent,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<p>You haven't been granted access to any libraries.</p>
|
<p>You haven't been granted access to any libraries.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<app-carousel-reel [items]="inProgress" title="In Progress" (sectionClick)="handleSectionClick($event)">
|
<app-carousel-reel [items]="inProgress" title="On Deck" (sectionClick)="handleSectionClick($event)">
|
||||||
<ng-template #carouselItem let-item let-position="idx">
|
<ng-template #carouselItem let-item let-position="idx">
|
||||||
<app-series-card [data]="item" [libraryId]="item.libraryId" (reload)="reloadInProgress($event)" (dataChanged)="reloadInProgress($event)"></app-series-card>
|
<app-series-card [data]="item" [libraryId]="item.libraryId" (reload)="reloadInProgress($event)" (dataChanged)="reloadInProgress($event)"></app-series-card>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
@ -92,7 +92,7 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadInProgress() {
|
loadInProgress() {
|
||||||
this.seriesService.getInProgress().pipe(takeUntil(this.onDestroy)).subscribe((updatedSeries) => {
|
this.seriesService.getOnDeck().pipe(takeUntil(this.onDestroy)).subscribe((updatedSeries) => {
|
||||||
this.inProgress = updatedSeries.result;
|
this.inProgress = updatedSeries.result;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -108,8 +108,8 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||||||
this.router.navigate(['collections']);
|
this.router.navigate(['collections']);
|
||||||
} else if (sectionTitle.toLowerCase() === 'recently added') {
|
} else if (sectionTitle.toLowerCase() === 'recently added') {
|
||||||
this.router.navigate(['recently-added']);
|
this.router.navigate(['recently-added']);
|
||||||
} else if (sectionTitle.toLowerCase() === 'in progress') {
|
} else if (sectionTitle.toLowerCase() === 'on deck') {
|
||||||
this.router.navigate(['in-progress']);
|
this.router.navigate(['on-deck']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ export class NotConnectedComponent implements OnInit {
|
|||||||
constructor(private memberService: MemberService, private router: Router) { }
|
constructor(private memberService: MemberService, private router: Router) { }
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
|
// BUG: TODO: This causes an infinite reload loop on the UI when the API on backend doesn't exist
|
||||||
// We make a call to backend on refresh so that if it's up, we can redirect to /home
|
// We make a call to backend on refresh so that if it's up, we can redirect to /home
|
||||||
this.memberService.adminExists().subscribe((exists) => {
|
this.memberService.adminExists().subscribe((exists) => {
|
||||||
const pageResume = localStorage.getItem('kavita--no-connection-url');
|
const pageResume = localStorage.getItem('kavita--no-connection-url');
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<app-bulk-operations [actionCallback]="bulkActionCallback"></app-bulk-operations>
|
<app-bulk-operations [actionCallback]="bulkActionCallback"></app-bulk-operations>
|
||||||
<app-card-detail-layout header="In Progress"
|
<app-card-detail-layout header="On Deck"
|
||||||
[isLoading]="isLoading"
|
[isLoading]="isLoading"
|
||||||
[items]="series"
|
[items]="series"
|
||||||
[filters]="filters"
|
[filters]="filters"
|
@ -13,11 +13,11 @@ import { ActionService } from '../_services/action.service';
|
|||||||
import { SeriesService } from '../_services/series.service';
|
import { SeriesService } from '../_services/series.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-in-progress',
|
selector: 'app-on-deck',
|
||||||
templateUrl: './in-progress.component.html',
|
templateUrl: './on-deck.component.html',
|
||||||
styleUrls: ['./in-progress.component.scss']
|
styleUrls: ['./on-deck.component.scss']
|
||||||
})
|
})
|
||||||
export class InProgressComponent implements OnInit {
|
export class OnDeckComponent implements OnInit {
|
||||||
|
|
||||||
isLoading: boolean = true;
|
isLoading: boolean = true;
|
||||||
series: Series[] = [];
|
series: Series[] = [];
|
||||||
@ -31,7 +31,7 @@ export class InProgressComponent implements OnInit {
|
|||||||
constructor(private router: Router, private route: ActivatedRoute, private seriesService: SeriesService, private titleService: Title,
|
constructor(private router: Router, private route: ActivatedRoute, private seriesService: SeriesService, private titleService: Title,
|
||||||
private actionService: ActionService, public bulkSelectionService: BulkSelectionService) {
|
private actionService: ActionService, public bulkSelectionService: BulkSelectionService) {
|
||||||
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
|
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
|
||||||
this.titleService.setTitle('Kavita - In Progress');
|
this.titleService.setTitle('Kavita - On Deck');
|
||||||
if (this.pagination === undefined || this.pagination === null) {
|
if (this.pagination === undefined || this.pagination === null) {
|
||||||
this.pagination = {currentPage: 0, itemsPerPage: 30, totalItems: 0, totalPages: 1};
|
this.pagination = {currentPage: 0, itemsPerPage: 30, totalItems: 0, totalPages: 1};
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ export class InProgressComponent implements OnInit {
|
|||||||
this.pagination.currentPage = parseInt(page, 10);
|
this.pagination.currentPage = parseInt(page, 10);
|
||||||
}
|
}
|
||||||
this.isLoading = true;
|
this.isLoading = true;
|
||||||
this.seriesService.getInProgress(this.libraryId, this.pagination?.currentPage, this.pagination?.itemsPerPage, this.filter).pipe(take(1)).subscribe(series => {
|
this.seriesService.getOnDeck(this.libraryId, this.pagination?.currentPage, this.pagination?.itemsPerPage, this.filter).pipe(take(1)).subscribe(series => {
|
||||||
this.series = series.result;
|
this.series = series.result;
|
||||||
this.pagination = series.pagination;
|
this.pagination = series.pagination;
|
||||||
this.isLoading = false;
|
this.isLoading = false;
|
@ -10,13 +10,13 @@ import { SeriesAddedEvent } from '../_models/events/series-added-event';
|
|||||||
import { Pagination } from '../_models/pagination';
|
import { Pagination } from '../_models/pagination';
|
||||||
import { Series } from '../_models/series';
|
import { Series } from '../_models/series';
|
||||||
import { FilterItem, mangaFormatFilters, SeriesFilter } from '../_models/series-filter';
|
import { FilterItem, mangaFormatFilters, SeriesFilter } from '../_models/series-filter';
|
||||||
import { Action, ActionFactoryService } from '../_services/action-factory.service';
|
import { Action } from '../_services/action-factory.service';
|
||||||
import { ActionService } from '../_services/action.service';
|
import { ActionService } from '../_services/action.service';
|
||||||
import { MessageHubService } from '../_services/message-hub.service';
|
import { MessageHubService } from '../_services/message-hub.service';
|
||||||
import { SeriesService } from '../_services/series.service';
|
import { SeriesService } from '../_services/series.service';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This component is used as a standard layout for any card detail. ie) series, in-progress, collections, etc.
|
* This component is used as a standard layout for any card detail. ie) series, on-deck, collections, etc.
|
||||||
*/
|
*/
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-recently-added',
|
selector: 'app-recently-added',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user