diff --git a/src/components/library/LibraryOptionsPanel.tsx b/src/components/library/LibraryOptionsPanel.tsx index d89f2145..44bcc771 100644 --- a/src/components/library/LibraryOptionsPanel.tsx +++ b/src/components/library/LibraryOptionsPanel.tsx @@ -28,6 +28,8 @@ const SORT_OPTIONS: [LibrarySortMode, TranslationKey][] = [ ['sortAlph', 'library.option.sort.label.alphabetically'], ['sortDateAdded', 'library.option.sort.label.by_date_added'], ['sortLastRead', 'library.option.sort.label.by_last_read'], + ['sortLatestFetchedChapter', 'library.option.sort.label.by_latest_fetched_chapter'], + ['sortLatestUploadedChapter', 'library.option.sort.label.by_latest_uploaded_chapter'], ]; interface IProps { diff --git a/src/components/library/useGetVisibleLibraryMangas.ts b/src/components/library/useGetVisibleLibraryMangas.ts index 1a86fdbd..922438ca 100644 --- a/src/components/library/useGetVisibleLibraryMangas.ts +++ b/src/components/library/useGetVisibleLibraryMangas.ts @@ -70,6 +70,12 @@ const sortByDateAdded = (a: TManga, b: TManga): number => Number(a.inLibraryAt) const sortByLastRead = (a: TManga, b: TManga): number => Number(b.lastReadChapter?.lastReadAt ?? 0) - Number(a.lastReadChapter?.lastReadAt ?? 0); +const sortByLatestUploadedChapter = (a: TManga, b: TManga): number => + (a.latestUploadedChapter?.fetchedAt ?? 0) - (b.latestUploadedChapter?.fetchedAt ?? 0); + +const sortByLatestFetchedChapter = (a: TManga, b: TManga): number => + (a.latestFetchedChapter?.fetchedAt ?? 0) - (b.latestFetchedChapter?.fetchedAt ?? 0); + const sortManga = ( manga: TManga[], sort: NullAndUndefined, @@ -90,6 +96,12 @@ const sortManga = ( case 'sortLastRead': result.sort(sortByLastRead); break; + case 'sortLatestUploadedChapter': + result.sort(sortByLatestUploadedChapter); + break; + case 'sortLatestFetchedChapter': + result.sort(sortByLatestFetchedChapter); + break; default: break; } diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 09153795..8295a689 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -428,6 +428,8 @@ "alphabetically": "A-Z", "by_date_added": "Recently added", "by_last_read": "Recently read", + "by_latest_fetched_chapter": "Latest fetched chapter", + "by_latest_uploaded_chapter": "Latest uploaded chapter", "by_unread_chapters": "Unread chapters" } } diff --git a/src/typings.ts b/src/typings.ts index 0c00ae13..66890e25 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -338,7 +338,13 @@ export type ChapterOptionsReducerAction = | { type: 'sortReverse' } | { type: 'showChapterNumber' }; -export type LibrarySortMode = 'sortToRead' | 'sortAlph' | 'sortDateAdded' | 'sortLastRead'; +export type LibrarySortMode = + | 'sortToRead' + | 'sortAlph' + | 'sortDateAdded' + | 'sortLastRead' + | 'sortLatestFetchedChapter' + | 'sortLatestUploadedChapter'; enum GridLayout { Compact = 0,