Some settings use 0 as the disabled state.
In this case, the previous enabled value was lost.
To prevent this, the last value now gets saved and set again when enabling the setting again
* Require search to be committed with enter
* Extract back navigation logic into hook
* Navigate to previous page when canceling search
This makes the search the next page in the history stack instead of making it the previous one
* Close and open search depending on the location and available query
* Navigate to previous page in case new query is empty
* Show loading indicator for "NumberSetting"
* [i18n] Add lowercase interpolation format
* Add required dependencies for time settings
* Dynamically import dayjs locales for languages
* Add backup settings
* added toggle for doublespreads
* changing pages works as intended
* undid package.json changes
* deleted packege lock json
* curPage changes when changing invertDoublePage
* changed yarn.lock
* it switches better now
* fixed formatting
* changed it to offset first page
* fixed flipping when switching
* offset first page hides when double page is not enabled
* removed uncreachable line
* Use "create-vite"s tsconfig files setup
The previous tsconfig file caused issues with vite throwing "missing identifiers of modules" errors
* Remove unused React imports
Starting with React 17 the nex JSX transform is being used
* Introduce local history stack
To be able to know if the browser back navigation should be used, it is sometimes necessary to know which the previous page was.
E.g. it should not be used in case the current page is the manga page and the previous one is the reader.
* Handle cases where there is no previous page in the history stack
* Always use a button for the navigation back button
* Navigate from base route to library by replacing the current location
The base route should not be included in the history
* Remove "useBackTo"
Not needed
* Use browser back navigation to close the reader
This will cause the previous page (manga or updates) to be opened instead of always opening the manga page
* Use alias "@" for imports
* Use alias "@" for imports - Fix imports
* Use alias "@" for imports - Prevent faulty "import/extensions" linting issue
For some reason the rule throws an error for alias imports
* Use alias "@" for imports - Update "no-relative-imports" eslint rule
* 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
* 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"
* 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.
* [Cleanup] Add enums and types
* Extract "default languages" from ISOLanguages
The "default languages" will also be translated depending on which language the user selected
* 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
* 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
* [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
* Always show month and day of the chapters release date with 2 digits
In case the month or date is one digit a leading 0 will be added
* Show more detailed upload date information for chapter uploads from today or yesterday
In case the upload date is from today or yesterday the shown upload date will be e.g. "Today at 02:50", otherwise, just the date will be shown e.g. "04.01.2023"
* [#215] Handle metadata migration
Makes it possible to change "metadata keys" and the "app metadata key prefix" without losing data
* [#215] Fix checking and handling missing reader settings in metadata
With the new migration logic missing reader settings couldn't be detected anymore in case the metadata included outdated app metadata keys for the reader settings.
* [#215] Fix name of "IReaderSettings" property
* [#214] Move "reader settings" util functions into new file
* [#214] Extract "options" of "ReaderSettings" to new component
* [#214] Add component for changing the default reader settings
* [#214] Add default "ReaderSettings" to "Settings"
* [#214] Use default "ReaderSettings" stored on the server
Wait for both "manga" and "defaultSettings" to be loaded.
Otherwise, by the time the "manga" response was received, the "defaultSettings" might be still loading and thus, the local fallback "default" settings will get used as the "default settings"
* [#214] Save and update "ReaderSettings" options in case they are missing
- Manga gets read the first time => save settings in metadata
- Default settings get opened the first time => save settings in global metadata
* [#213] Add missing "meta" property
- IManga
- IMangaCard (optional)
- IChapter
- ICategory
* [#213] Add util functions for handling metadata
- global server
- manga
- chapter
- category
* [#213] Use "ReaderSettings" from the manga metadata
- get ReaderSettings from manga metadata
- remove unnecessary check "make sure settings has all the keys"
in case the stored settings in the metadata are outdated they will be filled with default values
* [#213] Reload manga only in case "mangaId" changed
In case the chapter is still from the same manga, a reload is unnecessary
* [#213] Only update the changed reader setting
Otherwise the app has to send patch requests to the server for every setting even if it didn't change
* [#213] Hide "openButton" on first render in case "navBar" is shown
The "openButton" was always set to be visible event in case the navBar was shown on the first render
* [#213] Open the "ReaderNavBar" if needed after receiving new settings
Otherwise, the drawer won't open in case the "navBar" was hidden on the first render since the default state in that case was set to false
* [#213] Update "ReaderSettings" after receiving the manga response
Otherwise, the default settings aren't getting removed
* [#213] Hide/Show "OpenButton" when opening/closing the drawer
Otherwise, the button stays hidden until it gets updated due to scrolling
* [#213] Keep "ReaderNavBar" state when opening prev/next chapter
In case the navBar wasn't sticky but opened, it got closed when the prev/next chapter got opened
* [#213] Prevent "ReaderNavBar" from closing when changing "staticNav" setting
* Enable passing backLink through location state. Explicitly handle cases for BACK
* Allow pages to override default backLink. Fix manga page back link
* Cleanup
* Refactor simple queries with useSWR hook
* Fix plus button in Extensions screen
* Add type to categories query
* Add useQuery abstraction which adds loading attribute
* Reload categories even if reorder fails
* Wrap data fetching in library and manga screen with swr for better dev and user experience. Refactor some API calls and data handling. Add manual refresh to manga detail.
* Fix manga card layout
* Fix refresh button position on small screens
* Revert "Fix manga card layout"
This reverts commit d85da3d8385e1ef64feed1789e4cd4591c8bd563.
* Fix manga not setting title
* Move chapters loading to Manga component, join data fetching, add auto online fetch if fetched data is old
* Revert some changes
* Unified the way options are being handled. now everything uses the LibraryOptionsContext, removed the no-longer used useLibraryOptions hook
* removed query from library options. since it doesn't make sense for this to be cached
* fixed a bug in the useLocalStorage implementation
* source genre filter
much the same as the library version
* undo
* base
base + SelectFilter + CheckBoxFilter
haven't done useQueryParam yet
* gui done
left to do:
1.saving the input data (so it don't disappear when closing the drawer)
2.post to update
3.reload list after drawer close
* done ish
* done im tired
* ok, actually done now
worked out the breaking that was happening in the last commit
im probably using useState for more than is nessessary, only really needed to do triggerUpdate and Data
* key error/warning fix
* issues all done
* remove junk
* jank back button fix
i re-used the query querystring
* reove single search
* boi was that a pain to fix
* Update App.tsx
* Added a useLocalStorageReducer funtion
This is mostly a refactor of ChapterOptions to simplify it with a reducer function
Also moved a lot of function used in ChaperList to a utility file
* Added UseCallback where needed
* renamed utility folder to util to follow the convention throughout the app
* Refactor: Moved Resume FAB to seperate file
* Renamed Types and Function for chapter filtering and sorting with the chapterOption prefix
* more renaming