Add "started" library filter

This commit is contained in:
schroda
2024-12-27 03:32:30 +01:00
parent 7c0ce65683
commit 6c175d0b7f
7 changed files with 19 additions and 1 deletions

View File

@@ -38,6 +38,7 @@ export const DEFAULT_CATEGORY_METADATA: ICategoryMetadata = {
hasDownloadedChapters: undefined,
hasBookmarkedChapters: undefined,
hasUnreadChapters: undefined,
hasReadChapters: undefined,
hasDuplicateChapters: undefined,
hasTrackerBinding: {},
hasStatus: {} as LibraryOptions['hasStatus'],

View File

@@ -40,6 +40,7 @@ export interface LibraryOptions {
hasDownloadedChapters: NullAndUndefined<boolean>;
hasBookmarkedChapters: NullAndUndefined<boolean>;
hasUnreadChapters: NullAndUndefined<boolean>;
hasReadChapters: NullAndUndefined<boolean>;
hasDuplicateChapters: NullAndUndefined<boolean>;
hasTrackerBinding: Record<TrackerType['id'], NullAndUndefined<boolean>>;
hasStatus: Record<MangaStatus, NullAndUndefined<boolean>>;

View File

@@ -88,6 +88,11 @@ export const LibraryOptionsPanel = ({
checked={categoryLibraryOptions.hasUnreadChapters}
onChange={(c) => updateCategoryLibraryOptions('hasUnreadChapters', c)}
/>
<ThreeStateCheckboxInput
label={t('global.filter.label.started')}
checked={categoryLibraryOptions.hasReadChapters}
onChange={(c) => updateCategoryLibraryOptions('hasReadChapters', c)}
/>
<ThreeStateCheckboxInput
label={t('global.filter.label.downloaded')}
checked={categoryLibraryOptions.hasDownloadedChapters}

View File

@@ -26,6 +26,7 @@ export const LibraryToolbarMenu = ({
const active =
options.hasDownloadedChapters != null ||
options.hasUnreadChapters != null ||
options.hasReadChapters != null ||
options.hasBookmarkedChapters != null ||
options.hasDuplicateChapters != null ||
Object.values(options.hasStatus).some((hasStatus) => hasStatus != null) ||

View File

@@ -103,6 +103,7 @@ const statusFilter = (statusFilters: LibraryOptions['hasStatus'], manga: TMangaS
type TMangaFilterOptions = Pick<
LibraryOptions,
| 'hasUnreadChapters'
| 'hasReadChapters'
| 'hasDownloadedChapters'
| 'hasBookmarkedChapters'
| 'hasDuplicateChapters'
@@ -111,12 +112,14 @@ type TMangaFilterOptions = Pick<
>;
type TMangaFilter = Pick<MangaType, 'downloadCount' | 'unreadCount' | 'bookmarkCount' | 'hasDuplicateChapters'> &
TMangaTrackerFilter &
TMangaStatusFilter;
TMangaStatusFilter &
MangaChapterCountInfo;
const filterManga = (
manga: TMangaFilter,
{
hasDownloadedChapters,
hasUnreadChapters,
hasReadChapters,
hasBookmarkedChapters,
hasDuplicateChapters,
hasTrackerBinding,
@@ -125,6 +128,7 @@ const filterManga = (
): boolean =>
triStateFilterNumber(hasDownloadedChapters, manga.downloadCount) &&
triStateFilterNumber(hasUnreadChapters, manga.unreadCount) &&
triStateFilterNumber(hasReadChapters, manga.chapters.totalCount - manga.unreadCount) &&
triStateFilterNumber(hasBookmarkedChapters, manga.bookmarkCount) &&
triStateFilterBoolean(hasDuplicateChapters, manga.hasDuplicateChapters) &&
trackerFilter(hasTrackerBinding, manga) &&
@@ -210,6 +214,7 @@ export const useGetVisibleLibraryMangas = <Manga extends MangaIdInfo & TMangasFi
const options = useGetCategoryMetadata(category ?? DEFAULT_CATEGORY);
const {
hasUnreadChapters,
hasReadChapters,
hasDownloadedChapters,
hasBookmarkedChapters,
hasTrackerBinding,
@@ -228,6 +233,7 @@ export const useGetVisibleLibraryMangas = <Manga extends MangaIdInfo & TMangasFi
mangas,
query,
hasUnreadChapters,
hasReadChapters,
hasDownloadedChapters,
hasBookmarkedChapters,
hasTrackerBinding,
@@ -246,6 +252,7 @@ export const useGetVisibleLibraryMangas = <Manga extends MangaIdInfo & TMangasFi
);
const showFilteredOutMessage =
(hasUnreadChapters != null ||
hasReadChapters != null ||
hasDownloadedChapters != null ||
hasBookmarkedChapters != null ||
!!query ||

View File

@@ -43,6 +43,7 @@ const APP_METADATA_OBJECT: Record<AppMetadataKeys, undefined> = {
hasDownloadedChapters: undefined,
hasBookmarkedChapters: undefined,
hasUnreadChapters: undefined,
hasReadChapters: undefined,
hasDuplicateChapters: undefined,
hasTrackerBinding: undefined,
hasStatus: undefined,
@@ -91,6 +92,7 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
'hasDownloadedChapters',
'hasBookmarkedChapters',
'hasUnreadChapters',
'hasReadChapters',
'hasDuplicateChapters',
'hasTrackerBinding',
'hasStatus',