Add "started" library filter
This commit is contained in:
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'],
|
||||||
|
|||||||
@@ -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>>;
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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) ||
|
||||||
|
|||||||
@@ -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 ||
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user