Jump Bar Testing (#1302)
* Implemented a basic jump bar for the library view. This currently just interacts with existing pagination controls and is not inlined with infinite scroll yet. This is a first pass implementation. * Refactored time estimates into the reading service. * Cleaned up when the jump bar is shown to mimic pagination controls * Cleanup up code in reader service. * Scroll to card when selecting a jump key that is shown on the current page. * Ensure estimated times always has the smaller number on left hand side. * Fixed a bug with a missing vertical rule * Fixed an off by 1 pixel for search overlay
This commit is contained in:
parent
64c0b5a71e
commit
742cfd3293
20 changed files with 319 additions and 120 deletions
|
@ -1,8 +1,10 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using API.DTOs;
|
||||
using API.DTOs.JumpBar;
|
||||
using API.Entities;
|
||||
using API.Entities.Enums;
|
||||
using AutoMapper;
|
||||
|
@ -38,6 +40,7 @@ public interface ILibraryRepository
|
|||
Task<LibraryType> GetLibraryTypeAsync(int libraryId);
|
||||
Task<IEnumerable<Library>> GetLibraryForIdsAsync(IList<int> libraryIds);
|
||||
Task<int> GetTotalFiles();
|
||||
IEnumerable<JumpKeyDto> GetJumpBarAsync(int libraryId);
|
||||
}
|
||||
|
||||
public class LibraryRepository : ILibraryRepository
|
||||
|
@ -123,6 +126,37 @@ public class LibraryRepository : ILibraryRepository
|
|||
return await _context.MangaFile.CountAsync();
|
||||
}
|
||||
|
||||
public IEnumerable<JumpKeyDto> GetJumpBarAsync(int libraryId)
|
||||
{
|
||||
var seriesSortCharacters = _context.Series.Where(s => s.LibraryId == libraryId)
|
||||
.Select(s => s.SortName.ToUpper())
|
||||
.OrderBy(s => s)
|
||||
.AsEnumerable()
|
||||
.Select(s => s[0]);
|
||||
|
||||
// Map the title to the number of entities
|
||||
var firstCharacterMap = new Dictionary<char, int>();
|
||||
foreach (var sortChar in seriesSortCharacters)
|
||||
{
|
||||
var c = sortChar;
|
||||
var isAlpha = char.IsLetter(sortChar);
|
||||
if (!isAlpha) c = '#';
|
||||
if (!firstCharacterMap.ContainsKey(c))
|
||||
{
|
||||
firstCharacterMap[c] = 0;
|
||||
}
|
||||
|
||||
firstCharacterMap[c] += 1;
|
||||
}
|
||||
|
||||
return firstCharacterMap.Keys.Select(k => new JumpKeyDto()
|
||||
{
|
||||
Key = k + string.Empty,
|
||||
Size = firstCharacterMap[k],
|
||||
Title = k + string.Empty
|
||||
});
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<LibraryDto>> GetLibraryDtosAsync()
|
||||
{
|
||||
return await _context.Library
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue