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

@@ -380,6 +380,7 @@
"bookmarked": "Bookmarked", "bookmarked": "Bookmarked",
"downloaded": "Downloaded", "downloaded": "Downloaded",
"duplicate_chapters": "Duplicate chapters", "duplicate_chapters": "Duplicate chapters",
"started": "Started",
"tracked": "Tracked", "tracked": "Tracked",
"unread": "Unread" "unread": "Unread"
} }

View File

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

View File

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

View File

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

View File

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

View File

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