* Update dependency "react-router-dom" to v6.x
Update to v6.11.2
* Update dependency "react-router-dom" to v6.x - Replace "Switch" with "Routes"
* Update dependency "react-router-dom" to v6.x - Relative paths
* Update dependency "react-router-dom" to v6.x - Nested routes
* Update dependency "react-router-dom" to v6.x - Prevent route warnings
- Route without an element causes a warning message.
- Routes with non-matching Route causes a warning message.
* Update dependency "react-router-dom" to v6.x - Replace "useHistory" with "useNavigate"
* Update dependency "react-router-dom" to v6.x - Fix "Link" usage
* Update dependency "react-router-dom" to v6.x - Overwrite "useParams" and "useLocations" typing
For both functions it's the users fault if they are getting used incorrectly.
It's inconvenient to always have to make sure the params exist (useParam) or to cast the return object to a specific type (useLocation)
- "useParams": Make generic type non-optional
- "useLocation": Add generic type
* Update dependency "react-router-dom" to v6.x - Fix use-query-params provider
* Update dependency "mui" to v5.x
Update to v5.13.3
Fixes issue of "SxProps" not being exported by "@mui/material"
* Update dependency "mui" to v5.x - Fix grid item size
Update to v5.13.3
Fixes issue of "SxProps" not being exported by "@mui/material"
* Update dependency "mui" to v5.x - Replace "ListItem" with "ListItemButton"
* Update dependency "mui" to v5.x - Fix tsc issue
* Update dependency "mui" to v5.x - Prevent reader white screen
Due to "initialChapter" being a function returning an object, it causes a re-render everytime due to it (the object) being used as a dependency.
This caused a white screen when skipping to the previous or next chapter
* Remove "getClient" usage from "metadata" util
* Remove "getClient" usage from "useRefreshManga" hook
* Remove "getClient" usage from "isDupChapter" util function
* Use correct endpoint for setting category metadata
"/meta" suffix was missing from url
* Use correct http method for updating manga metadata
* Refactor "SourceMangas"
* Refactor "SourceMangas" - Show loading placeholder on filter reset or submit
Due to the url being the same for all "filter requests" the loading state doesn't get changed by SWR.
Instead, only the "isValidating" state gets updated.
* Refactor "SourceMangas" - Update routing
* Refactor "SourceMangas" - Prevent duplicated mangas in grid
There is a possibility that the "latest" endpoint returns the same manga on different pages
* Always set the toolbar content on the manga page
"setAction" wasn't called on the manga page, thus, in case the previous page didn't unset the action, it never got unset
* Rename source content type "Browse" to "Popular"
* Prevent mutating passed object
Causes the options to not get reset correctly and/or to get set without "submitting" them
* Always use local filter state instead of requested one
The local filter state sometimes got overwritten by the state from the server response.
This resulted in showing an incorrect filter state while still sending the correct one to the server when filtering
* Update text filter faster
The timeout (2.5s) is too long and can cause the filter state to not have been updated by the time the filters are getting submitted.
Thus, causing a request with outdated filters and requiring a "re-submit" for the actual filters to get used.
* Use "RequestManager" for loading updates
* [Cleanup] Fix typing
* Memoize grouped updates
* [TSConfig] Increase target version
Makes it possible to iterate over a "IterableIterator" (e.g. [...<Map>.entries()])
* Use "GroupedVirtuoso" for "Updates" screen
* Optionally use "padding" instead of margin for the loading placeholder
In case the loading placeholder gets used in a "react-virtuoso" list, the margin might cause issues with the calculated height.
* Use "padding" instead of "margin"
"Margin" breaks "react-virtuosos" height calculation
* Add background color to group header
With virtuoso the group headers are sticky, thus, a background color is needed
* Simplify "groupByDate" object structure
It's not necessary to save the items inside the group object
* Introduce "RequestManager"
* Use "RequestManager" - Simple replacements
- Get rid of all "util/client" imports
- replace old requests with new "RequestManager"
- remove "fetcher" from global SWR config
instead of using the SWR hooks by themselves, the "requestManager" is supposed to be used
* Use "RequestManager" - Do requests via SWR hooks
Use SWR hooks at places where it's easily usable
* Prevent trailing slashes in the "baseUrl"
Due to using "useEffect" the grid always rendered once with stale data, causing the error message to be shown.
With "useMemo" the latest data is always getting rendered immediately.
When selecting chapters the FAB button slightly moved further up and to the left.
This happened because "em" was used for the positioning and the "SelectionFAB" being inside a "Box" component while the "Start/ResumeFAB" had "no extra" parent component.
* Update SWR to version 2.1.5
* Improve generic type names
* Use "isLoading" property of "useSWR" response
* Correctly load library without selected tab
With the latest SWR version the library was empty on the first load.
Not sure what exactly is the reason, but due to "isPaused" the request wasn't sent even after "activeTab" wasn't undefined anymore.
Instead of using "isPaused", passing "null" as the key will also prevent SWR from doing the request.
* Pass optional browser tab only title
Makes it possible to have a different title for the "NavBar" and the browser tab
* Show number of items in category and library
---------
Co-authored-by: schroda <github@dasch.simplelogin.com>
* [Cleanup] Add enums and types
* Extract "default languages" from ISOLanguages
The "default languages" will also be translated depending on which language the user selected
* [ChapterCard] Reset last page read to first page when changing chapters read status
The last page read was set to the second page instead of the first one
* [ChapterList] Reset last page read to first page when changing chapters read status
The "ChapterCard" and the "FAB" didn't have the same behaviour when marking a chapter as unread.
The "ChapterCard" also reset the last read page while the FAB only changed the read status.
* Skip duplicate chapters in the Reader
* Debounce "end of page" handling in the reader
* Update keyboard event listener
In case the "go" function changed, the listeners have to be updated
* Fix i18n tsc issue
"t" can return null by default.
This was already disabled in the config, but it had no effect on tsc.
* Fix translation in "DefaultNavBar"
key was missing and since this is a constant the translation wouldn't update in case the language got changed after first load.
* Enable typing for i18n translation keys
* Add translation keys
"useMediaQuery" renders once with default values and only on the second render with the resolved values.
Thus, "lastPageNum" can potentially get initialized with the value for small/medium screens instead for large screens.
In case the "ignoreFilters" flag was set to true and the search string was empty/undefined all mangas of the category were visible, ignoring the set filters.
* Move "dependencies" close to "devDependencies"
Makes it easier to have a quick overview
* Upgrade "react-scripts" to latest version
With new versions of node (> v16) the build scripts fails with the following error "error:0308010C:digital envelope routines::unsupported"
* Upgrade "react-scripts" to v5 - Fix import
* Upgrade "eslint" dependencies
The latest version of "react-scripts" uses eslint v8 causing the following error "... ERROR in Plugin "react" was conflicted between ".eslintrc.js" >> eslint-config-airbnb ..."
* Upgrade "eslint" dependencies - Allow nested components as props
* Upgrade "eslint" dependencies - Fix lint issues
The first unread chapter was retrieved from the filtered and sorted chapter list, which could result in e.g. incorrectly recognizing the latest released chapter as the first unread chapter.
Ideally the server would return the manga with its last read chapter, but this is currently not available.
* Show empty library in case search doesn't match anything
In case the search didn't match anything all mangas where shown instead of an empty library.
* Rename filter manga function parameter and variable
Makes it easier to read
* Rename file
".d.ts" files are files that are automatically generated during compilation (in case option is set) and shouldn't be created manually.
* Export types and interfaces
* Add missing imports
* add pagination to library and fix some prettier issues
* add genre search support like tachiyomi android app
* Search by genre like you do in tachiyomi mobile app
---------
Co-authored-by: akxer <>
* Correctly scroll to page
Using "curPage" as the "initialPage" broke "scrolling up".
The page got reset to the first page in that case
* Support resume and scrolling to page for "DoublePagedPager"
* Support resume and scrolling to page for "PagedPager"
* Prevent "ReaderNavBar" from disappearing in "VerticalPager"
Due to handling the overflow on the "root" div and the "nav bar" being sticky and having a combined with of 100vw with the "vertical pager", once the first page was reached, that was behind the 100vw, the "nav bar" got moved out of the screen.
This made using the "nav bar" unusable for the "vertical pager".
* Add chapter dropdown to reader chapter nav buttons
Makes it possible to select a specific chapter inside the reader without having to leave and open the manga page
* Always show chapter nav buttons
In case they are unusable, they will be disabled
* [Prettier] Increase max line length to 120
100 is quite low, especially on modern monitors.
The length is also reached quite quickly with 4 spaces per tab depending on the indentation depth
* [Prettier] Increase max line length to 120 - Fix formatting
* [Prettier] Add "prettier"
Makes the formatting of the code consistent.
By using the eslint-plugin-prettier formatting issues will be highlighted as a lint error.
These errors will be auto fixed by running "lint --fix" (which can be done automatically on file save)
* [Prettier] Add "prettier" - Fix formatting