From 2c11708c924752c5af6808bb2c9d42d80c3e7e06 Mon Sep 17 00:00:00 2001 From: Daniel <50052685+schroda@users.noreply.github.com> Date: Wed, 8 Feb 2023 18:19:26 +0100 Subject: [PATCH] increase prettier line length to 120 (#233) * [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 --- .prettierrc | 2 +- src/components/ExtensionCard.tsx | 19 +------ src/components/MangaCard.tsx | 21 ++----- src/components/SourceCard.tsx | 24 ++------ src/components/atoms/SortRadioInput.tsx | 4 +- src/components/library/LibraryMangaGrid.tsx | 9 +-- .../library/LibraryOptionsPanel.tsx | 21 ++----- .../library/LibraryOptionsProvider.tsx | 15 +---- src/components/library/UpdateChecker.tsx | 8 +-- src/components/library/useSubscription.ts | 5 +- src/components/manga/ChapterCard.tsx | 24 ++------ src/components/manga/ChapterList.tsx | 24 ++------ src/components/manga/MangaDetails.tsx | 32 ++--------- src/components/manga/SelectionFAB.tsx | 15 +---- src/components/manga/util.tsx | 28 ++-------- .../molecules/DownloadStateIndicator.tsx | 4 +- src/components/navbar/DefaultNavBar.tsx | 4 +- src/components/navbar/ReaderNavBar.tsx | 20 +------ .../navbar/action/CategorySelect.tsx | 4 +- src/components/navbar/action/LangSelect.tsx | 4 +- .../navbar/navigation/DesktopSideBar.tsx | 33 ++++------- .../navbar/navigation/MobileBottomBar.tsx | 56 ++++++++----------- .../reader/pager/HorizontalPager.tsx | 6 +- src/components/reader/pager/PagedPager.tsx | 8 +-- src/components/reader/pager/VerticalPager.tsx | 4 +- src/components/source/GridLayouts.tsx | 5 +- src/components/source/SourceMangaGrid.tsx | 11 +--- src/components/source/SourceOptions.tsx | 11 +--- .../source/filters/CheckBoxFilter.tsx | 3 +- .../source/filters/SelectFilter.tsx | 13 +---- src/components/source/filters/SortFilter.tsx | 3 +- src/components/source/filters/TextFilter.tsx | 3 +- .../source/filters/TriStateFilter.tsx | 3 +- .../sourceConfiguration/ListPreference.tsx | 7 +-- .../MultiSelectListPreference.tsx | 10 +--- src/components/util/Toast.tsx | 14 ++--- src/screens/DownloadQueue.tsx | 19 ++----- src/screens/Extensions.tsx | 23 ++------ src/screens/Library.tsx | 7 +-- src/screens/Manga.tsx | 12 +--- src/screens/Reader.tsx | 7 +-- src/screens/SearchAll.tsx | 16 +----- src/screens/Settings.tsx | 23 ++------ src/screens/SourceConfigure.tsx | 5 +- src/screens/SourceMangas.tsx | 4 +- src/screens/Sources.tsx | 12 +--- src/screens/Updates.tsx | 15 +---- src/screens/settings/Backup.tsx | 5 +- src/screens/settings/Categories.tsx | 6 +- .../settings/DefaultReaderSettings.tsx | 6 +- src/util/language.tsx | 5 +- src/util/metadata.ts | 35 +++--------- src/util/readerSettings.ts | 10 +--- src/util/useLocalStorage.tsx | 11 +--- 54 files changed, 156 insertions(+), 542 deletions(-) diff --git a/.prettierrc b/.prettierrc index 97d11eb6..29f32234 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,7 +1,7 @@ { "tabWidth": 4, "singleQuote": true, - "printWidth": 100, + "printWidth": 120, "semi": true, "trailingComma": "all" } diff --git a/src/components/ExtensionCard.tsx b/src/components/ExtensionCard.tsx index bfb92bab..b8212ab2 100644 --- a/src/components/ExtensionCard.tsx +++ b/src/components/ExtensionCard.tsx @@ -22,17 +22,7 @@ interface IProps { export default function ExtensionCard(props: IProps) { const { - extension: { - name, - lang, - versionName, - installed, - hasUpdate, - obsolete, - pkgName, - iconUrl, - isNsfw, - }, + extension: { name, lang, versionName, installed, hasUpdate, obsolete, pkgName, iconUrl, isNsfw }, notifyInstall, } = props; const [installedState, setInstalledState] = useState(() => { @@ -123,12 +113,7 @@ export default function ExtensionCard(props: IProps) { {langPress} {versionName} {isNsfw && ( - + {' 18+'} )} diff --git a/src/components/MangaCard.tsx b/src/components/MangaCard.tsx index bd415e06..c78aab9b 100644 --- a/src/components/MangaCard.tsx +++ b/src/components/MangaCard.tsx @@ -100,10 +100,7 @@ const MangaCard = React.forwardRef((props: IProps, ref) const cols = Math.ceil(dimensions / ItemWidth); return ( - + ((props: IProps, ref) }} > {inLibraryIndicator && inLibrary && ( - + In library )} {showUnreadBadge && unread! > 0 && ( - - {unread} - + {unread} )} {showDownloadBadge && downloadCount! > 0 && ( ((props: IProps, ref) {inLibraryIndicator && inLibrary && ( - - In library - + In library )} {showUnreadBadge && unread! > 0 && ( - - {unread} - + {unread} )} {showDownloadBadge && downloadCount! > 0 && ( = (props: IProps) => { {langCodeToName(lang)} {isNsfw && ( - + {' 18+'} )} @@ -113,29 +108,18 @@ const SourceCard: React.FC = (props: IProps) => { <> {supportsLatest && ( - )} {supportsLatest && ( - )} - diff --git a/src/components/atoms/SortRadioInput.tsx b/src/components/atoms/SortRadioInput.tsx index 3ae5ba0d..6445117b 100644 --- a/src/components/atoms/SortRadioInput.tsx +++ b/src/components/atoms/SortRadioInput.tsx @@ -17,9 +17,7 @@ interface IProps extends RadioInputProps { const SortRadioInput: React.FC = ({ sortDescending, ...rest }) => ( : - } + checkedIcon={sortDescending ? : } {...rest} /> ); diff --git a/src/components/library/LibraryMangaGrid.tsx b/src/components/library/LibraryMangaGrid.tsx index 53c98200..9e639a6a 100644 --- a/src/components/library/LibraryMangaGrid.tsx +++ b/src/components/library/LibraryMangaGrid.tsx @@ -24,10 +24,7 @@ const unreadFilter = (unread: NullAndUndefined, { unreadCount }: IManga } }; -const downloadedFilter = ( - downloaded: NullAndUndefined, - { downloadCount }: IMangaCard, -): boolean => { +const downloadedFilter = (downloaded: NullAndUndefined, { downloadCount }: IMangaCard): boolean => { switch (downloaded) { case true: return !!downloadCount && downloadCount >= 1; @@ -117,9 +114,7 @@ const LibraryMangaGrid: React.FC 0; + (unread != null || downloaded != null || query) && filteredManga.length === 0 && mangas.length > 0; return ( = ({ open, onClose }) => { const { options, setOptions } = useLibraryOptionsContext(); - const handleFilterChange = ( - key: T, - value: LibraryOptions[T], - ) => { + const handleFilterChange = (key: T, value: LibraryOptions[T]) => { setOptions((v) => ({ ...v, [key]: value })); }; @@ -85,17 +82,13 @@ const LibraryOptionsPanel: React.FC = ({ open, onClose }) => { <> Display mode - handleFilterChange('gridLayout', Number(e.target.value)) - } + onChange={(e) => handleFilterChange('gridLayout', Number(e.target.value))} value={gridLayout} > = ({ open, onClose }) => { - handleFilterChange('showUnreadBadge', !showUnreadBadge) - } + onChange={() => handleFilterChange('showUnreadBadge', !showUnreadBadge)} /> - handleFilterChange('showDownloadBadge', !showDownloadBadge) - } + onChange={() => handleFilterChange('showDownloadBadge', !showDownloadBadge)} /> ); diff --git a/src/components/library/LibraryOptionsProvider.tsx b/src/components/library/LibraryOptionsProvider.tsx index 8cd00af9..41ce1431 100644 --- a/src/components/library/LibraryOptionsProvider.tsx +++ b/src/components/library/LibraryOptionsProvider.tsx @@ -5,9 +5,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import LibraryOptionsContext, { - DefaultLibraryOptions, -} from 'components/context/LibraryOptionsContext'; +import LibraryOptionsContext, { DefaultLibraryOptions } from 'components/context/LibraryOptionsContext'; import React from 'react'; import useLocalStorage from 'util/useLocalStorage'; @@ -16,16 +14,9 @@ interface IProps { } const LibraryOptionsContextProvider: React.FC = ({ children }) => { - const [options, setOptions] = useLocalStorage( - 'libraryOptions', - DefaultLibraryOptions, - ); + const [options, setOptions] = useLocalStorage('libraryOptions', DefaultLibraryOptions); - return ( - - {children} - - ); + return {children}; }; export default LibraryOptionsContextProvider; diff --git a/src/components/library/UpdateChecker.tsx b/src/components/library/UpdateChecker.tsx index 813a8ed3..135e137e 100644 --- a/src/components/library/UpdateChecker.tsx +++ b/src/components/library/UpdateChecker.tsx @@ -22,10 +22,7 @@ function Progress({ progress }: IProgressProps) { ); } -const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace( - 'http', - 'ws', -); +const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace('http', 'ws'); interface IUpdateCheckerProps { handleFinishedUpdate: (time: number) => void; @@ -58,8 +55,7 @@ function UpdateChecker({ handleFinishedUpdate }: IUpdateCheckerProps) { const { running, statusMap } = JSON.parse(e.data) as IUpdateStatus; const { COMPLETE = [], RUNNING = [], PENDING = [] } = statusMap; - const currentProgress = - 100 * (COMPLETE.length / (COMPLETE.length + RUNNING.length + PENDING.length)); + const currentProgress = 100 * (COMPLETE.length / (COMPLETE.length + RUNNING.length + PENDING.length)); const isUpdateFinished = currentProgress === 100; const ignoreFaultyMessage = !updateStarted && !running && isUpdateFinished; diff --git a/src/components/library/useSubscription.ts b/src/components/library/useSubscription.ts index 46e6e252..87452594 100644 --- a/src/components/library/useSubscription.ts +++ b/src/components/library/useSubscription.ts @@ -1,9 +1,6 @@ import { useEffect, useState } from 'react'; -const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace( - 'http', - 'ws', -); +const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace('http', 'ws'); const useSubscription = (path: string, callback?: (newValue: T) => boolean | void) => { const [state, setState] = useState(); diff --git a/src/components/manga/ChapterCard.tsx b/src/components/manga/ChapterCard.tsx index d0d714c1..72255cd7 100644 --- a/src/components/manga/ChapterCard.tsx +++ b/src/components/manga/ChapterCard.tsx @@ -42,14 +42,7 @@ interface IProps { const ChapterCard: React.FC = (props: IProps) => { const theme = useTheme(); - const { - chapter, - triggerChaptersUpdate, - downloadChapter: dc, - showChapterNumber, - onSelect, - selected, - } = props; + const { chapter, triggerChaptersUpdate, downloadChapter: dc, showChapterNumber, onSelect, selected } = props; const isSelecting = selected !== null; const [anchorEl, setAnchorEl] = React.useState(null); @@ -85,9 +78,7 @@ const ChapterCard: React.FC = (props: IProps) => { }; const deleteChapter = () => { - client - .delete(`/api/v1/manga/${chapter.mangaId}/chapter/${chapter.index}`) - .then(() => triggerChaptersUpdate()); + client.delete(`/api/v1/manga/${chapter.mangaId}/chapter/${chapter.index}`).then(() => triggerChaptersUpdate()); handleClose(); }; @@ -143,9 +134,7 @@ const ChapterCard: React.FC = (props: IProps) => { sx={{ mr: 0.5, position: 'relative', top: '0.15em' }} /> )} - {showChapterNumber - ? `Chapter ${chapter.chapterNumber}` - : chapter.name} + {showChapterNumber ? `Chapter ${chapter.chapterNumber}` : chapter.name} {chapter.scanlator} @@ -165,12 +154,7 @@ const ChapterCard: React.FC = (props: IProps) => { )} - + diff --git a/src/components/manga/ChapterList.tsx b/src/components/manga/ChapterList.tsx index 279a5368..9a2d8287 100644 --- a/src/components/manga/ChapterList.tsx +++ b/src/components/manga/ChapterList.tsx @@ -140,10 +140,7 @@ const ChapterList: React.FC = ({ mangaId }) => { setSelection(null); }; - const handleFabAction: ComponentProps['onAction'] = ( - action, - actionChapters, - ) => { + const handleFabAction: ComponentProps['onAction'] = (action, actionChapters) => { if (actionChapters.length === 0) return; const chapterIds = actionChapters.map(({ chapter }) => chapter.id); @@ -164,16 +161,9 @@ const ChapterList: React.FC = ({ mangaId }) => { } actionPromise - .then(() => - makeToast( - interpolate(chapterIds.length, actionsStrings[action].success), - 'success', - ), - ) + .then(() => makeToast(interpolate(chapterIds.length, actionsStrings[action].success), 'success')) .then(() => mutate()) - .catch(() => - makeToast(interpolate(chapterIds.length, actionsStrings[action].error), 'error'), - ); + .catch(() => makeToast(interpolate(chapterIds.length, actionsStrings[action].error), 'error')); }; if (loading) { @@ -206,9 +196,7 @@ const ChapterList: React.FC = ({ mangaId }) => { }); const selectedChapters = - selection === null - ? null - : chaptersWithMeta.filter(({ chapter }) => selection.includes(chapter.id)); + selection === null ? null : chaptersWithMeta.filter(({ chapter }) => selection.includes(chapter.id)); return ( <> @@ -225,9 +213,7 @@ const ChapterList: React.FC = ({ mangaId }) => { }} > - {`${visibleChapters.length} Chapter${ - visibleChapters.length === 1 ? '' : 's' - }`} + {`${visibleChapters.length} Chapter${visibleChapters.length === 1 ? '' : 's'}`} {selection === null ? ( diff --git a/src/components/manga/MangaDetails.tsx b/src/components/manga/MangaDetails.tsx index dd8ced14..e0f28484 100644 --- a/src/components/manga/MangaDetails.tsx +++ b/src/components/manga/MangaDetails.tsx @@ -134,22 +134,14 @@ const MangaDetails: React.FC = ({ manga }) => { const classes = useStyles(manga.inLibrary)(); const addToLibrary = () => { - mutate( - `/api/v1/manga/${manga.id}/?onlineFetch=false`, - { ...manga, inLibrary: true }, - { revalidate: false }, - ); + mutate(`/api/v1/manga/${manga.id}/?onlineFetch=false`, { ...manga, inLibrary: true }, { revalidate: false }); client .get(`/api/v1/manga/${manga.id}/library/`) .then(() => mutate(`/api/v1/manga/${manga.id}/?onlineFetch=false`)); }; const removeFromLibrary = () => { - mutate( - `/api/v1/manga/${manga.id}/?onlineFetch=false`, - { ...manga, inLibrary: false }, - { revalidate: false }, - ); + mutate(`/api/v1/manga/${manga.id}/?onlineFetch=false`, { ...manga, inLibrary: false }, { revalidate: false }); client .delete(`/api/v1/manga/${manga.id}/library/`) .then(() => mutate(`/api/v1/manga/${manga.id}/?onlineFetch=false`)); @@ -160,10 +152,7 @@ const MangaDetails: React.FC = ({ manga }) => {
- Manga Thumbnail + Manga Thumbnail

{manga.title}

@@ -181,15 +170,8 @@ const MangaDetails: React.FC = ({ manga }) => {
- - {manga.inLibrary ? ( - - ) : ( - - )} + + {manga.inLibrary ? : } {manga.inLibrary ? 'In Library' : 'Add To Library'} @@ -198,9 +180,7 @@ const MangaDetails: React.FC = ({ manga }) => { - - Open Site - + Open Site
diff --git a/src/components/manga/SelectionFAB.tsx b/src/components/manga/SelectionFAB.tsx index a43eafd4..2d7655db 100644 --- a/src/components/manga/SelectionFAB.tsx +++ b/src/components/manga/SelectionFAB.tsx @@ -13,13 +13,7 @@ import React, { useRef, useState } from 'react'; import type { IChapterWithMeta } from 'components/manga/ChapterList'; import SelectionFABActionItem from 'components/manga/SelectionFABActionItem'; -export type SelectionAction = - | 'download' - | 'delete' - | 'bookmark' - | 'unbookmark' - | 'mark_as_read' - | 'mark_as_unread'; +export type SelectionAction = 'download' | 'delete' | 'bookmark' | 'unbookmark' | 'mark_as_read' | 'mark_as_unread'; interface SelectionFABProps { selectedChapters: IChapterWithMeta[]; @@ -49,12 +43,7 @@ const SelectionFAB: React.FC = (props) => { }} ref={anchorEl} > - setOpen(true)} - > + setOpen(true)}> {`${count} ${pluralize(count, 'chapter')}`} diff --git a/src/components/manga/util.tsx b/src/components/manga/util.tsx index 08f9779b..0f2dfdc8 100644 --- a/src/components/manga/util.tsx +++ b/src/components/manga/util.tsx @@ -17,15 +17,11 @@ const defaultChapterOptions: ChapterListOptions = { showChapterNumber: false, }; -function chapterOptionsReducer( - state: ChapterListOptions, - actions: ChapterOptionsReducerAction, -): ChapterListOptions { +function chapterOptionsReducer(state: ChapterListOptions, actions: ChapterOptionsReducerAction): ChapterListOptions { switch (actions.type) { case 'filter': // eslint-disable-next-line no-case-declarations - const active = - state.unread !== false && state.downloaded !== false && state.bookmarked !== false; + const active = state.unread !== false && state.downloaded !== false && state.bookmarked !== false; return { ...state, active, @@ -53,10 +49,7 @@ export function unreadFilter(unread: NullAndUndefined, { read: isChapte } } -function downloadFilter( - downloaded: NullAndUndefined, - { downloaded: chapterDownload }: IChapter, -) { +function downloadFilter(downloaded: NullAndUndefined, { downloaded: chapterDownload }: IChapter) { switch (downloaded) { case true: return chapterDownload; @@ -67,10 +60,7 @@ function downloadFilter( } } -function bookmarkedFilter( - bookmarked: NullAndUndefined, - { bookmarked: chapterBookmarked }: IChapter, -) { +function bookmarkedFilter(bookmarked: NullAndUndefined, { bookmarked: chapterBookmarked }: IChapter) { switch (bookmarked) { case true: return chapterBookmarked; @@ -81,10 +71,7 @@ function bookmarkedFilter( } } -export function filterAndSortChapters( - chapters: IChapter[], - options: ChapterListOptions, -): IChapter[] { +export function filterAndSortChapters(chapters: IChapter[], options: ChapterListOptions): IChapter[] { const filtered = options.active ? chapters.filter( (chp) => @@ -93,10 +80,7 @@ export function filterAndSortChapters( bookmarkedFilter(options.bookmarked, chp), ) : [...chapters]; - const Sorted = - options.sortBy === 'fetchedAt' - ? filtered.sort((a, b) => a.fetchedAt - b.fetchedAt) - : filtered; + const Sorted = options.sortBy === 'fetchedAt' ? filtered.sort((a, b) => a.fetchedAt - b.fetchedAt) : filtered; if (options.reverse) { Sorted.reverse(); } diff --git a/src/components/molecules/DownloadStateIndicator.tsx b/src/components/molecules/DownloadStateIndicator.tsx index a5bb0eb5..6f040b5f 100644 --- a/src/components/molecules/DownloadStateIndicator.tsx +++ b/src/components/molecules/DownloadStateIndicator.tsx @@ -24,9 +24,7 @@ const DownloadStateIndicator: React.FC = ({ downloa justifyContent: 'center', }} > - {download.progress !== 0 && ( - - )} + {download.progress !== 0 && } ; if (isMobileWidth) { if (isMainRoute) { - navbar = ( - it.show !== 'desktop')} /> - ); + navbar = it.show !== 'desktop')} />; } } else { navbar = it.show !== 'mobile')} />; diff --git a/src/components/navbar/ReaderNavBar.tsx b/src/components/navbar/ReaderNavBar.tsx index ed021f33..0f8f30be 100644 --- a/src/components/navbar/ReaderNavBar.tsx +++ b/src/components/navbar/ReaderNavBar.tsx @@ -126,9 +126,7 @@ export default function ReaderNavBar(props: IProps) { const [updateDrawerOnRender, setUpdateDrawerOnRender] = useState(true); const [hideOpenButton, setHideOpenButton] = useState(settings.staticNav || prevDrawerOpen); const [prevScrollPos, setPrevScrollPos] = useState(0); - const [settingsCollapseOpen, setSettingsCollapseOpen] = useState( - prevSettingsCollapseOpen ?? true, - ); + const [settingsCollapseOpen, setSettingsCollapseOpen] = useState(prevSettingsCollapseOpen ?? true); const updateSettingValue = (key: keyof IReaderSettings, value: string | boolean) => { // prevent closing the navBar when updating the "staticNav" setting @@ -181,14 +179,7 @@ export default function ReaderNavBar(props: IProps) { return ( <> - + )} - + {chapter.name} ( - `/api/v1/manga/${mangaId}/category`, - ); + const { data: mangaCategoriesData, mutate } = useQuery(`/api/v1/manga/${mangaId}/category`); const { data: categoriesData } = useQuery('/api/v1/category'); const allCategories = useMemo(() => { diff --git a/src/components/navbar/action/LangSelect.tsx b/src/components/navbar/action/LangSelect.tsx index ea222dcd..fd8dd864 100644 --- a/src/components/navbar/action/LangSelect.tsx +++ b/src/components/navbar/action/LangSelect.tsx @@ -40,9 +40,7 @@ interface IProps { export default function LangSelect(props: IProps) { const { shownLangs, setShownLangs, allLangs, forcedLangs } = props; // hold a copy and only sate state on parent when OK pressed, improves performance - const [mShownLangs, setMShownLangs] = useState( - removeAll(cloneObject(shownLangs), forcedLangs!), - ); + const [mShownLangs, setMShownLangs] = useState(removeAll(cloneObject(shownLangs), forcedLangs!)); const [open, setOpen] = useState(false); const handleCancel = () => { diff --git a/src/components/navbar/navigation/DesktopSideBar.tsx b/src/components/navbar/navigation/DesktopSideBar.tsx index 900c5ad7..db6c218a 100644 --- a/src/components/navbar/navigation/DesktopSideBar.tsx +++ b/src/components/navbar/navigation/DesktopSideBar.tsx @@ -35,10 +35,7 @@ export default function DesktopSideBar({ navBarItems }: IProps) { if (location.pathname === path) return ; return ( - + ); }; @@ -46,23 +43,17 @@ export default function DesktopSideBar({ navBarItems }: IProps) { { // eslint-disable-next-line react/destructuring-assignment - navBarItems.map( - ({ path, title, IconComponent, SelectedIconComponent }: NavbarItem) => ( - - - - - {iconFor(path, IconComponent, SelectedIconComponent)} - - - - - ), - ) + navBarItems.map(({ path, title, IconComponent, SelectedIconComponent }: NavbarItem) => ( + + + + + {iconFor(path, IconComponent, SelectedIconComponent)} + + + + + )) } ); diff --git a/src/components/navbar/navigation/MobileBottomBar.tsx b/src/components/navbar/navigation/MobileBottomBar.tsx index 8ac5cea4..865d34b6 100644 --- a/src/components/navbar/navigation/MobileBottomBar.tsx +++ b/src/components/navbar/navigation/MobileBottomBar.tsx @@ -44,45 +44,35 @@ export default function MobileBottomBar({ navBarItems }: IProps) { if (location.pathname === path) return ; return ( - + ); }; return ( - {navBarItems.map( - ({ path, title, IconComponent, SelectedIconComponent }: NavbarItem) => ( - - - - {iconFor(path, IconComponent, SelectedIconComponent)} - - {title} - + {navBarItems.map(({ path, title, IconComponent, SelectedIconComponent }: NavbarItem) => ( + + + + {iconFor(path, IconComponent, SelectedIconComponent)} + + {title} - - - ), - )} + + + + ))} ); } diff --git a/src/components/reader/pager/HorizontalPager.tsx b/src/components/reader/pager/HorizontalPager.tsx index 2713f340..d46b5499 100644 --- a/src/components/reader/pager/HorizontalPager.tsx +++ b/src/components/reader/pager/HorizontalPager.tsx @@ -164,10 +164,8 @@ export default function HorizontalPager(props: IReaderProps) { ref={selfRef} sx={{ display: 'flex', - flexDirection: - settings.readerType === 'ContinuesHorizontalLTR' ? 'row' : 'row-reverse', - justifyContent: - settings.readerType === 'ContinuesHorizontalLTR' ? 'flex-start' : 'flex-end', + flexDirection: settings.readerType === 'ContinuesHorizontalLTR' ? 'row' : 'row-reverse', + justifyContent: settings.readerType === 'ContinuesHorizontalLTR' ? 'flex-start' : 'flex-end', margin: '0 auto', width: 'auto', height: 'auto', diff --git a/src/components/reader/pager/PagedPager.tsx b/src/components/reader/pager/PagedPager.tsx index 4cea5049..20587c00 100644 --- a/src/components/reader/pager/PagedPager.tsx +++ b/src/components/reader/pager/PagedPager.tsx @@ -98,13 +98,7 @@ export default function PagedReader(props: IReaderProps) { height: '100vh', }} > - {}} - src={pages[curPage].src} - settings={settings} - /> + {}} src={pages[curPage].src} settings={settings} /> ); } diff --git a/src/components/reader/pager/VerticalPager.tsx b/src/components/reader/pager/VerticalPager.tsx index ad54de8f..2be272a9 100644 --- a/src/components/reader/pager/VerticalPager.tsx +++ b/src/components/reader/pager/VerticalPager.tsx @@ -85,9 +85,7 @@ export default function VerticalPager(props: IReaderProps) { } window.scroll({ - top: - window.scrollY + - window.innerHeight * SCROLL_OFFSET * (direction === 'up' ? -1 : 1), + top: window.scrollY + window.innerHeight * SCROLL_OFFSET * (direction === 'up' ? -1 : 1), behavior: SCROLL_BEHAVIOR, }); }, diff --git a/src/components/source/GridLayouts.tsx b/src/components/source/GridLayouts.tsx index 8572bb7e..2107c5cf 100644 --- a/src/components/source/GridLayouts.tsx +++ b/src/components/source/GridLayouts.tsx @@ -58,10 +58,7 @@ export default function SourceGridLayout() { control={ } diff --git a/src/components/source/SourceMangaGrid.tsx b/src/components/source/SourceMangaGrid.tsx index 81d97a6d..c6ecd03f 100644 --- a/src/components/source/SourceMangaGrid.tsx +++ b/src/components/source/SourceMangaGrid.tsx @@ -16,16 +16,7 @@ function filterManga(mangas: IMangaCard[]): IMangaCard[] { } export default function SourceMangaGrid(props: IMangaGridProps) { - const { - mangas, - isLoading, - hasNextPage, - lastPageNum, - setLastPageNum, - message, - messageExtra, - gridLayout, - } = props; + const { mangas, isLoading, hasNextPage, lastPageNum, setLastPageNum, message, messageExtra, gridLayout } = props; const filteredManga = filterManga(mangas); const showFilteredOutMessage = filteredManga.length === 0 && mangas.length > 0; diff --git a/src/components/source/SourceOptions.tsx b/src/components/source/SourceOptions.tsx index 9f76716c..6a68d58e 100644 --- a/src/components/source/SourceOptions.tsx +++ b/src/components/source/SourceOptions.tsx @@ -72,9 +72,7 @@ export function Options({ sourceFilter, group, updateFilterValue, update }: IFil /> ); case 'Header': - return ( - - ); + return ; case 'Select': return ( ); case 'Separator': - return ( - - ); + return ; case 'Sort': return ( = (props: Props) => { const handleChange = (event: { target: { name: any; checked: any } }) => { setval(event.target.checked); const upd = update.filter( - (e: { position: number; group: number | undefined }) => - !(position === e.position && group === e.group), + (e: { position: number; group: number | undefined }) => !(position === e.position && group === e.group), ); updateFilterValue([...upd, { position, state: event.target.checked.toString(), group }]); }; diff --git a/src/components/source/filters/SelectFilter.tsx b/src/components/source/filters/SelectFilter.tsx index 3042c713..89bf5b4c 100644 --- a/src/components/source/filters/SelectFilter.tsx +++ b/src/components/source/filters/SelectFilter.tsx @@ -44,8 +44,7 @@ function hasSelect( const vall = values.map((e) => e.displayname).indexOf(`${event.target.value}`); setval(vall); const upd = update.filter( - (e: { position: number; group: number | undefined }) => - !(position === e.position && group === e.group), + (e: { position: number; group: number | undefined }) => !(position === e.position && group === e.group), ); updateFilterValue([...upd, { position, state: vall.toString(), group }]); }; @@ -58,12 +57,7 @@ function hasSelect( return ( {name} - {rett} @@ -88,8 +82,7 @@ function noSelect( const vall = values.indexOf(`${event.target.value}`); setval(vall); const upd = update.filter( - (e: { position: number; group: number | undefined }) => - !(position === e.position && group === e.group), + (e: { position: number; group: number | undefined }) => !(position === e.position && group === e.group), ); updateFilterValue([...upd, { position, state: vall.toString(), group }]); }; diff --git a/src/components/source/filters/SortFilter.tsx b/src/components/source/filters/SortFilter.tsx index c0847be8..2dee73b7 100644 --- a/src/components/source/filters/SortFilter.tsx +++ b/src/components/source/filters/SortFilter.tsx @@ -42,8 +42,7 @@ const SortFilter: React.FC = (props: Props) => { tmp.index = index; setval(tmp); const upd = update.filter( - (e: { position: number; group: number | undefined }) => - !(position === e.position && group === e.group), + (e: { position: number; group: number | undefined }) => !(position === e.position && group === e.group), ); updateFilterValue([...upd, { position, state: JSON.stringify(tmp), group }]); }; diff --git a/src/components/source/filters/TextFilter.tsx b/src/components/source/filters/TextFilter.tsx index 74207c3f..45861586 100644 --- a/src/components/source/filters/TextFilter.tsx +++ b/src/components/source/filters/TextFilter.tsx @@ -25,8 +25,7 @@ const TextFilter: React.FC = (props) => { function doneTyping(e: React.ChangeEvent) { const upd = update.filter( - (el: { position: number; group: number | undefined }) => - !(position === el.position && group === el.group), + (el: { position: number; group: number | undefined }) => !(position === el.position && group === el.group), ); updateFilterValue([...upd, { position, state: e.target.value, group }]); } diff --git a/src/components/source/filters/TriStateFilter.tsx b/src/components/source/filters/TriStateFilter.tsx index 30dff72e..35b34571 100644 --- a/src/components/source/filters/TriStateFilter.tsx +++ b/src/components/source/filters/TriStateFilter.tsx @@ -26,8 +26,7 @@ const TriStateFilter: React.FC = (props) => { const newState = checked === undefined ? 0 : checked ? 1 : 2; setval(newState); const upd = update.filter( - (e: { position: number; group: number | undefined }) => - !(position === e.position && group === e.group), + (e: { position: number; group: number | undefined }) => !(position === e.position && group === e.group), ); updateFilterValue([ ...upd, diff --git a/src/components/sourceConfiguration/ListPreference.tsx b/src/components/sourceConfiguration/ListPreference.tsx index bd393a36..ee21d774 100644 --- a/src/components/sourceConfiguration/ListPreference.tsx +++ b/src/components/sourceConfiguration/ListPreference.tsx @@ -65,12 +65,7 @@ function ListDialog(props: IListDialogProps) { {options.map((option) => ( - } - label={option} - /> + } label={option} /> ))} diff --git a/src/components/sourceConfiguration/MultiSelectListPreference.tsx b/src/components/sourceConfiguration/MultiSelectListPreference.tsx index cff6b488..846b46f1 100644 --- a/src/components/sourceConfiguration/MultiSelectListPreference.tsx +++ b/src/components/sourceConfiguration/MultiSelectListPreference.tsx @@ -64,11 +64,7 @@ function ListDialog(props: IListDialogProps) { }; return ( - + {title} @@ -76,9 +72,7 @@ function ListDialog(props: IListDialogProps) { value === selectedValue, - )} + checked={selectedValues.some((selectedValue) => value === selectedValue)} onChange={(e) => handleChange(e, value)} color="default" /> diff --git a/src/components/util/Toast.tsx b/src/components/util/Toast.tsx index 7036df2f..795a1eab 100644 --- a/src/components/util/Toast.tsx +++ b/src/components/util/Toast.tsx @@ -61,20 +61,14 @@ export default function makeToast(message: string, severity: Severity) { setTimeout(() => removeToast(container.id), 3500); } -export function makeToaster([toasts, setToasts]: [ +export function makeToaster([toasts, setToasts]: [React.ReactElement[], (arg0: React.ReactElement[]) => void]): [ React.ReactElement[], - (arg0: React.ReactElement[]) => void, -]): [React.ReactElement[], (message: string, severity: Severity) => void] { + (message: string, severity: Severity) => void, +] { return [ toasts, (message: string, severity: Severity) => { - setToasts([ - , - ]); + setToasts([]); }, ]; } diff --git a/src/screens/DownloadQueue.tsx b/src/screens/DownloadQueue.tsx index 21d636e9..e0f27e29 100644 --- a/src/screens/DownloadQueue.tsx +++ b/src/screens/DownloadQueue.tsx @@ -97,9 +97,7 @@ const DownloadQueue: React.FC = () => { > { - - - {item.manga.title} - - + + {item.manga.title} + {item.chapter.name} diff --git a/src/screens/Extensions.tsx b/src/screens/Extensions.tsx index 6ebcb05b..52d2147f 100644 --- a/src/screens/Extensions.tsx +++ b/src/screens/Extensions.tsx @@ -67,10 +67,7 @@ function groupExtensions(extensions: IExtension[]) { export default function MangaExtensions() { const inputRef = useRef(null); const { setTitle, setAction } = useContext(NavbarContext); - const [shownLangs, setShownLangs] = useLocalStorage( - 'shownExtensionLangs', - extensionDefaultLangs(), - ); + const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs()); const [showNsfw] = useLocalStorage('showNsfw', true); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); @@ -84,20 +81,12 @@ export default function MangaExtensions() { inputRef.current?.click()} size="large"> - + , ); }, [shownLangs]); - const { - data: allExtensions, - mutate, - loading, - } = useQuery('/api/v1/extension/list'); + const { data: allExtensions, mutate, loading } = useQuery('/api/v1/extension/list'); const filteredExtensions = useMemo( () => @@ -113,11 +102,7 @@ export default function MangaExtensions() { () => groupExtensions(filteredExtensions) .filter((group) => group[EXTENSIONS].length > 0) - .filter((group) => - ['installed', 'updates pending', 'all', ...shownLangs].includes( - group[LANGUAGE], - ), - ), + .filter((group) => ['installed', 'updates pending', 'all', ...shownLangs].includes(group[LANGUAGE])), [shownLangs, filteredExtensions], ); diff --git a/src/screens/Library.tsx b/src/screens/Library.tsx index 545573cc..b8e10aed 100644 --- a/src/screens/Library.tsx +++ b/src/screens/Library.tsx @@ -60,12 +60,7 @@ export default function Library() { }; if (tabsError != null) { - return ( - - ); + return ; } if (loading) { diff --git a/src/screens/Manga.tsx b/src/screens/Manga.tsx index a7613d68..21b7dd42 100644 --- a/src/screens/Manga.tsx +++ b/src/screens/Manga.tsx @@ -38,9 +38,7 @@ const Manga: React.FC = () => { const [refresh, { loading: refreshing }] = useRefreshManga(id); useSetDefaultBackTo( - manga?.inLibrary === false && manga.sourceId != null - ? `/sources/${manga.sourceId}/popular` - : '/library', + manga?.inLibrary === false && manga.sourceId != null ? `/sources/${manga.sourceId}/popular` : '/library', ); useEffect(() => { @@ -89,13 +87,7 @@ const Manga: React.FC = () => { )} - {manga && ( - - )} + {manga && } diff --git a/src/screens/Reader.tsx b/src/screens/Reader.tsx index 3a41e0cc..a12fad53 100644 --- a/src/screens/Reader.tsx +++ b/src/screens/Reader.tsx @@ -75,8 +75,7 @@ export default function Reader() { const [curPage, setCurPage] = useState(0); const { setOverride, setTitle } = useContext(NavbarContext); - const { settings: defaultSettings, loading: areDefaultSettingsLoading } = - useDefaultReaderSettings(); + const { settings: defaultSettings, loading: areDefaultSettingsLoading } = useDefaultReaderSettings(); const [settings, setSettings] = useState(getReaderSettingsFor(manga, defaultSettings)); const [isMangaLoading, setIsMangaLoading] = useState(true); @@ -97,9 +96,7 @@ export default function Reader() { useEffect(() => { if (!areDefaultSettingsLoading && !isMangaLoading) { - checkAndHandleMissingStoredReaderSettings(manga, 'manga', defaultSettings).catch( - () => {}, - ); + checkAndHandleMissingStoredReaderSettings(manga, 'manga', defaultSettings).catch(() => {}); setSettings(getReaderSettingsFor(manga, defaultSettings)); } }, [areDefaultSettingsLoading, isMangaLoading]); diff --git a/src/screens/SearchAll.tsx b/src/screens/SearchAll.tsx index 4e79e089..de292575 100644 --- a/src/screens/SearchAll.tsx +++ b/src/screens/SearchAll.tsx @@ -16,12 +16,7 @@ import React, { useContext, useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { StringParam, useQueryParam } from 'use-query-params'; import client from 'util/client'; -import { - langCodeToName, - langSortCmp, - sourceDefualtLangs, - sourceForcedDefaultLangs, -} from 'util/language'; +import { langCodeToName, langSortCmp, sourceDefualtLangs, sourceForcedDefaultLangs } from 'util/language'; import useLocalStorage from 'util/useLocalStorage'; function sourceToLangList(sources: ISource[]) { @@ -43,10 +38,7 @@ const SearchAll: React.FC = () => { const [triggerUpdate, setTriggerUpdate] = useState(2); const [mangas, setMangas] = useState({}); - const [shownLangs, setShownLangs] = useLocalStorage( - 'shownSourceLangs', - sourceDefualtLangs(), - ); + const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', sourceDefualtLangs()); const [showNsfw] = useLocalStorage('showNsfw', true); const [sources, setSources] = useState([]); @@ -210,9 +202,7 @@ const SearchAll: React.FC = () => { sx={{ p: 3 }} > {displayName} - - {langCodeToName(lang)} - + {langCodeToName(lang)} - setDarkTheme(!darkTheme)} - /> + setDarkTheme(!darkTheme)} /> @@ -141,16 +137,9 @@ export default function Settings() { - + - setShowNsfw(!showNsfw)} - /> + setShowNsfw(!showNsfw)} /> @@ -163,11 +152,7 @@ export default function Settings() { but uses it much more internet traffic in turn" /> - setUseCache(!useCache)} - /> + setUseCache(!useCache)} /> diff --git a/src/screens/SourceConfigure.tsx b/src/screens/SourceConfigure.tsx index 372f0ee5..287a8621 100644 --- a/src/screens/SourceConfigure.tsx +++ b/src/screens/SourceConfigure.tsx @@ -9,10 +9,7 @@ import React, { useContext, useEffect } from 'react'; import NavbarContext from 'components/context/NavbarContext'; import { useParams } from 'react-router-dom'; import client, { useQuery } from 'util/client'; -import { - SwitchPreferenceCompat, - CheckBoxPreference, -} from 'components/sourceConfiguration/TwoStatePreference'; +import { SwitchPreferenceCompat, CheckBoxPreference } from 'components/sourceConfiguration/TwoStatePreference'; import ListPreference from 'components/sourceConfiguration/ListPreference'; import EditTextPreference from 'components/sourceConfiguration/EditTextPreference'; import MultiSelectListPreference from 'components/sourceConfiguration/MultiSelectListPreference'; diff --git a/src/screens/SourceMangas.tsx b/src/screens/SourceMangas.tsx index 00d6bf19..2e96e87e 100644 --- a/src/screens/SourceMangas.tsx +++ b/src/screens/SourceMangas.tsx @@ -221,9 +221,7 @@ export default function SourceMangas(props: { popular: boolean }) { messageExtra = ( <> Check out - - Local source guide - + Local source guide ); } diff --git a/src/screens/Sources.tsx b/src/screens/Sources.tsx index fd66c982..c114ea71 100644 --- a/src/screens/Sources.tsx +++ b/src/screens/Sources.tsx @@ -9,12 +9,7 @@ import React, { useContext, useEffect } from 'react'; import LangSelect from 'components/navbar/action/LangSelect'; import SourceCard from 'components/SourceCard'; import NavbarContext from 'components/context/NavbarContext'; -import { - sourceDefualtLangs, - sourceForcedDefaultLangs, - langCodeToName, - langSortCmp, -} from 'util/language'; +import { sourceDefualtLangs, sourceForcedDefaultLangs, langCodeToName, langSortCmp } from 'util/language'; import useLocalStorage from 'util/useLocalStorage'; import LoadingPlaceholder from 'components/util/LoadingPlaceholder'; import { IconButton } from '@mui/material'; @@ -50,10 +45,7 @@ function groupByLang(sources: ISource[]) { export default function Sources() { const { setTitle, setAction } = useContext(NavbarContext); - const [shownLangs, setShownLangs] = useLocalStorage( - 'shownSourceLangs', - sourceDefualtLangs(), - ); + const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', sourceDefualtLangs()); const [showNsfw] = useLocalStorage('showNsfw', true); const { data: sources, loading } = useQuery('/api/v1/source/list'); diff --git a/src/screens/Updates.tsx b/src/screens/Updates.tsx index ff1583fd..add299d4 100644 --- a/src/screens/Updates.tsx +++ b/src/screens/Updates.tsx @@ -46,9 +46,7 @@ function getDateString(date: Date) { return date.toLocaleDateString(); } -function groupByDate( - updates: IMangaChapter[], -): [string, { item: IMangaChapter; globalIdx: number }[]][] { +function groupByDate(updates: IMangaChapter[]): [string, { item: IMangaChapter; globalIdx: number }[]][] { if (updates.length === 0) return []; const groups = {}; @@ -64,10 +62,7 @@ function groupByDate( return Object.keys(groups).map((key) => [key, groups[key]]); } -const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace( - 'http', - 'ws', -); +const baseWebsocketUrl = JSON.parse(window.localStorage.getItem('serverBaseURL')!).replace('http', 'ws'); const initialQueue = { status: 'Stopped', queue: [], @@ -205,11 +200,7 @@ const Updates: React.FC = () => { {manga.title} - + {chapter.name} diff --git a/src/screens/settings/Backup.tsx b/src/screens/settings/Backup.tsx index d8213e4c..65f62969 100644 --- a/src/screens/settings/Backup.tsx +++ b/src/screens/settings/Backup.tsx @@ -74,10 +74,7 @@ export default function Backup() { <> - + document.getElementById('backup-file')?.click()}> ( {categories.map((item, index) => ( - + {(provided, snapshot) => ( {}); + checkAndHandleMissingStoredReaderSettings({ meta: metadata }, 'server', getDefaultSettings()).catch(() => {}); return ( - `${appPrefix}${key}`; +const getMetadataKey = (key: string, appPrefix: string = APP_METADATA_KEY_PREFIX) => `${appPrefix}${key}`; -const doesMetadataKeyExistIn = ( - meta: IMetadata | undefined, - key: string, - appPrefix?: string, -): boolean => Object.prototype.hasOwnProperty.call(meta ?? {}, getMetadataKey(key, appPrefix)); +const doesMetadataKeyExistIn = (meta: IMetadata | undefined, key: string, appPrefix?: string): boolean => + Object.prototype.hasOwnProperty.call(meta ?? {}, getMetadataKey(key, appPrefix)); const convertValueFromMetadata = ( value: string, @@ -44,10 +40,7 @@ const convertValueFromMetadata = { +const getAppMetadataFrom = (meta: IMetadata, appPrefix: string = APP_METADATA_KEY_PREFIX): IMetadata => { const appMetadata: IMetadata = {}; Object.entries(meta).forEach(([key, value]) => { @@ -71,9 +64,7 @@ const applyAppKeyPrefixMigration = (meta: IMetadata, migration: IMetadataMigrati const oldAppMetadata = getAppMetadataFrom(meta, oldPrefix); const newAppMetadata = getAppMetadataFrom(meta, newPrefix); - const missingMetadataKeys = Object.keys(oldAppMetadata).filter( - (key) => !Object.keys(newAppMetadata).includes(key), - ); + const missingMetadataKeys = Object.keys(oldAppMetadata).filter((key) => !Object.keys(newAppMetadata).includes(key)); const isMissingOldMetadata = missingMetadataKeys.length; if (isMissingOldMetadata) { @@ -134,9 +125,7 @@ const applyMetadataMigrations = (meta?: IMetadata): IMetadata | undefined => { return migrationToMetadata.pop()![1]; }; -export const getMetadataValueFrom = < - T extends AllowedMetadataValueTypes = AllowedMetadataValueTypes, ->( +export const getMetadataValueFrom = ( { meta }: IMetadataHolder, key: AppMetadataKeys, defaultValue?: T, @@ -220,22 +209,14 @@ export const requestUpdateMetadata = async ( ): Promise => Promise.all( keysToValues.map(([key, value]) => - requestUpdateMetadataValue( - endpoint, - metadataHolder, - key, - value, - endpointToMutate, - wrapWithMetaKey, - ), + requestUpdateMetadataValue(endpoint, metadataHolder, key, value, endpointToMutate, wrapWithMetaKey), ), ); export const requestUpdateServerMetadata = async ( serverMetadata: IMetadata, keysToValues: MetadataKeyValuePair[], -): Promise => - requestUpdateMetadata('', { meta: serverMetadata }, keysToValues, '/meta', false); +): Promise => requestUpdateMetadata('', { meta: serverMetadata }, keysToValues, '/meta', false); export const requestUpdateMangaMetadata = async ( manga: IMangaCard | IManga, diff --git a/src/util/readerSettings.ts b/src/util/readerSettings.ts index 9803731f..ac288d2c 100644 --- a/src/util/readerSettings.ts +++ b/src/util/readerSettings.ts @@ -6,11 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { - getMetadataFrom, - requestUpdateMangaMetadata, - requestUpdateServerMetadata, -} from 'util/metadata'; +import { getMetadataFrom, requestUpdateMangaMetadata, requestUpdateServerMetadata } from 'util/metadata'; import { useQuery } from 'util/client'; export const getDefaultSettings = (forceUndefined: boolean = false) => @@ -75,9 +71,7 @@ export const checkAndHandleMissingStoredReaderSettings = async ( const settingsToCheck = getReaderSettingsFor({ meta }, getDefaultSettings(true), false); const newSettings = getReaderSettingsFor({ meta }, defaultSettings); - const undefinedSettings = Object.entries(settingsToCheck).filter( - (setting) => setting[1] === undefined, - ); + const undefinedSettings = Object.entries(settingsToCheck).filter((setting) => setting[1] === undefined); const settingsToUpdate: MetadataKeyValuePair[] = []; undefinedSettings.forEach((setting) => { diff --git a/src/util/useLocalStorage.tsx b/src/util/useLocalStorage.tsx index 0d5659c5..1f8e55b9 100644 --- a/src/util/useLocalStorage.tsx +++ b/src/util/useLocalStorage.tsx @@ -9,10 +9,7 @@ import React, { useState, Dispatch, SetStateAction, useReducer, Reducer, useCall import storage from 'util/localStorage'; // eslint-disable-next-line max-len -export default function useLocalStorage( - key: string, - defaultValue: T | (() => T), -): [T, Dispatch>] { +export default function useLocalStorage(key: string, defaultValue: T | (() => T)): [T, Dispatch>] { const initialState = defaultValue instanceof Function ? defaultValue() : defaultValue; const [storedValue, setStoredValue] = useState(storage.getItem(key, initialState)); @@ -31,11 +28,7 @@ export default function useLocalStorage( return [storedValue, setValue]; } -export function useReducerLocalStorage( - reducer: Reducer, - key: string, - defaultState: S | (() => S), -) { +export function useReducerLocalStorage(reducer: Reducer, key: string, defaultState: S | (() => S)) { const [storedValue, setValue] = useLocalStorage(key, defaultState); return useReducer((state: S, action: A): S => { const newState = reducer(state, action);