For a single manga the "mangaId" should be passed while "mangaIds" is empty, however, the "mangaIds" were passed as an empty array which caused an empty array of manga ids to be passed with the mutation
* Refetch categories after updating a manga
After adding/removing a manga to/from the library, the categories did not update.
* Include manga categories int the manga update mutation response
* page loading works and looks good now to make double page work with it
* Update double page spinner styling
* Render pages everytime the component gets rendered
- remove refs because they do not trigger a rerender
- remove initial render interval
- remove page rendering via portal
During the initial render nothing got rendered (pages or placeholder) because for that to happen, the images had to be loaded.
Thus, the loading placeholder never got shown.
* Enable skipping forward while pages are loading
---------
Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>
Translated using Weblate (Spanish)
Spanish: currently translated at 100.0% (354 of 354 strings)
Translations update from Hosted Weblate
Translated using Weblate (Spanish)
Spanish: currently translated at 96.3% (339 of 352 strings)
Translations update from Hosted Weblate
Translated using Weblate (Vietnamese)
Vietnamese: currently translated at 56.5% (191 of 338 strings)
Translations update from Hosted Weblate
Translated using Weblate (Chinese (Simplified))
Chinese (Simplified): currently translated at 100.0% (338 of 338 strings)
Translations update from Hosted Weblate
Translated using Weblate (German)
German: currently translated at 31.6% (107 of 338 strings)
Translations update from Hosted Weblate
Translated using Weblate (Chinese (Simplified))
Chinese (Simplified): currently translated at 93.3% (308 of 330 strings)
Translations update from Hosted Weblate
Translated using Weblate (Spanish)
Spanish: currently translated at 100.0% (330 of 330 strings)
Translations update from Hosted Weblate
Translated using Weblate (Spanish)
Spanish: currently translated at 100.0% (328 of 328 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: 志明 <chen5418@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/suwayomi/tachidesk-webui/de/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/tachidesk-webui/es/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/tachidesk-webui/vi/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/tachidesk-webui/zh_Hans/
Translation: Suwayomi/Tachidesk-WebUI
* Move "TextSetting" to new folder
* Extract dialog of "TextSetting"
* Immediately show dialog when adding a list item
* Reuse "TextSettingProps" for "MutableListSetting"
* Add "placeholder" prop to "MutableListSetting"
* Prevent duplicates by default
* Clear dialog values on save
* Validate repo url
One item was always hidden from the list.
Noticed during searching for a specific extension, which caused the list to only have one item, which was not shown
Was incorrectly changed with db65b9df44
* Merge "source" and "extension" screen for desktop
* Move "tab" related components into new folder
* Reuse "tab" components for "browse" screen
* Prevent extension list from being taller than 100% of the parents height
- remove margin - virtuoso has issues calculating the height otherwise
- change group title styling, fontSize caused issues
* Align "source" list group header with "extension"
* Remove bottom padding from "ExtensionCard"
* Move "GroupedVirtuoso" related components into folder
* Use "GroupedVirtuoso" for "extensions"
There was an issue with the height calculation of the virtuoso list, which apparently was caused by the conditional rendering of the group title and item as list items.
Due to this, while scrolling down, the virtuoso list caused an overflow, which rendered the scrollbar, which in turn caused the list items to shrink in width.
The end result of this was, that the list items "jumped" slightly on the initial render of the items, due to the scrollbar appearing and disappearing
* Create permanent subscriptions
The subscriptions have to be permanently open, otherwise, the cache gets outdated.
E.g. in case a view is open, which does not subscribe to the download updates, finished downloads are never received and thus, data of existing chapters/mangas in the cache get outdated
* [Codegen][Tool] Get latest data from cache for automatic chapter deletion after reading
The manga chapters query is on "standby" to prevent the reader from rerender in case the underlying query data updates, which would cause the reader to jump back to the beginning of the last read page.
Thus, when checking if the chapter should be automatically deleted, the data from the query can't be used, since it is outdated.
* Move menu components into new dir
* Move chapter components into new dir
* Extract menu helper functions
* Move "SelectionFAB" to "collection" dir
* Move debounce hook to global utils dir
* Rename manga "hooks" to "useRefreshManga"
* Extract chapter actions into "Chapters"
* Extract chapter action menu into component
* Rename "SelectionFABActionItem" to "MenuItem"
* Decouple "MenuItem" from "SelectionFAB"
* Use "MenuItem" in "ActionMenus"
* Merge chapter action menus
* Simplify chapter "mark as read" action
* Validate backup before starting restore process
In case sources were missing, the user was never informed and thus, did not know which sources were required for all manga to work
* Reset file input after restoring
Otherwise, the same backup file can't be restored until the page gets refreshed/re-opened
* Use app routing to open reader
Otherwise, the app loses the navigation history and won't open the last page (library) when closing the reader
* Prevent setting 0 as grid width
After the change of 4ebe6494f6c97c0d064c617f70b36682e6aedcb2, closing the reader and coming back to the library resulted in a single manga per row, due to the grids width being 0.
It's currently not possible to filter out non library mangas from the mangas field of categories, thus, the totalCount of mangas in a category might be greater than what is actually displayed in the library.
* Move "SearchSettings" into "LibrarySettings"
* Change property "setOpen" to "onClose" for "CategorySelect"
* Optionally show category selection when adding manga to library
* Update "ignore filters" translation
* Move "ignore_filters" setting to "metadataServerSettings"
After a manga got added to the library, the category selection dialog did not show the categories the manga got automatically added to.
The selection only got updated after the dialog got closed and opened again
Regression was introduced with 446deeae06
* Extend "IMangaGridProps" from "DefaultGridProps"
* Move library manga filtering into hook
* Add logic to select mangas
* Add manga actions
* Remove cache only policy for category mangas
Unclear why this was added
* Prevent SelectionFAB from being hidden by the mobile footer
On e.g. the library page, the footer is visible and thus, the fab was not completely visible
* Update categories of manga only after clicking "OK"
Previously, selecting a category resulted in an immediate mutation.
To be able to reuse the "CategorySelect" component to change the categories of multiple mangas at once, this behaviour is not suited.
* Add action to change categories of multiple mangas
* Cancel selection mode after removal from library
The mangas would still be selected and other action could get performed. However, this should only be possible for mangas that are in the library
* Remove unintentionally added console log
Accidentally added with 980da657d9
E.g. in case a manga was already loaded through the category mangas query, the query for that specific manga should not run against the server if it hasn't been executed before
* Introduce "selectable collection" hook
* Extract "select all" button into component
* Make "SelectionFABActionItem" reusable
Was to tightly coupled to chapters
* Make "SelectionFAB" reusable
Was to tightly coupled to chapters
The fix of e4beafb11f only worked in dev env and not in prod.
This prevents the navigation state update from getting triggered in case the path has changed in the meantime