diff --git a/src/screens/anime/AnimeExtensions.tsx b/src/screens/anime/AnimeExtensions.tsx index 0dac81c2..91249caa 100644 --- a/src/screens/anime/AnimeExtensions.tsx +++ b/src/screens/anime/AnimeExtensions.tsx @@ -11,7 +11,7 @@ import NavbarContext from 'context/NavbarContext'; import client from 'util/client'; import useLocalStorage from 'util/useLocalStorage'; import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; +import { extensionDefaultLangs, langCodeToName, langSortCmp } from 'util/language'; const allLangs: string[] = []; @@ -42,10 +42,6 @@ function groupExtensions(extensions: IExtension[]) { return result; } -function extensionDefaultLangs() { - return [...defualtLangs(), 'all']; -} - export default function AnimeExtensions() { const { setTitle, setAction } = useContext(NavbarContext); const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs()); diff --git a/src/screens/anime/AnimeSources.tsx b/src/screens/anime/AnimeSources.tsx index 21d2590f..12319b77 100644 --- a/src/screens/anime/AnimeSources.tsx +++ b/src/screens/anime/AnimeSources.tsx @@ -10,7 +10,7 @@ import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; import SourceCard from 'components/anime/SourceCard'; import NavbarContext from 'context/NavbarContext'; import client from 'util/client'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; +import { sourceDefualtLangs, langCodeToName, langSortCmp } from 'util/language'; import useLocalStorage from 'util/useLocalStorage'; function sourceToLangList(sources: ISource[]) { @@ -37,7 +37,7 @@ function groupByLang(sources: ISource[]) { export default function AnimeSources() { const { setTitle, setAction } = useContext(NavbarContext); - const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', defualtLangs()); + const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', sourceDefualtLangs()); const [sources, setSources] = useState([]); const [fetched, setFetched] = useState(false); diff --git a/src/screens/manga/MangaExtensions.tsx b/src/screens/manga/MangaExtensions.tsx index afe051cd..c8fc7cad 100644 --- a/src/screens/manga/MangaExtensions.tsx +++ b/src/screens/manga/MangaExtensions.tsx @@ -14,7 +14,7 @@ import NavbarContext from 'context/NavbarContext'; import client from 'util/client'; import useLocalStorage from 'util/useLocalStorage'; import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; +import { extensionDefaultLangs, langCodeToName, langSortCmp } from 'util/language'; import { makeToaster } from 'components/Toast'; const allLangs: string[] = []; @@ -46,10 +46,6 @@ function groupExtensions(extensions: IExtension[]) { return result; } -function extensionDefaultLangs() { - return [...defualtLangs(), 'all']; -} - export default function MangaExtensions() { const { setTitle, setAction } = useContext(NavbarContext); const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs()); diff --git a/src/screens/manga/MangaSources.tsx b/src/screens/manga/MangaSources.tsx index 0dc48678..1db560c8 100644 --- a/src/screens/manga/MangaSources.tsx +++ b/src/screens/manga/MangaSources.tsx @@ -10,7 +10,9 @@ import ExtensionLangSelect from 'components/manga/ExtensionLangSelect'; import SourceCard from 'components/manga/SourceCard'; import NavbarContext from 'context/NavbarContext'; import client from 'util/client'; -import { defualtLangs, langCodeToName, langSortCmp } from 'util/language'; +import { + sourceDefualtLangs, sourceForcedDefaultLangs, langCodeToName, langSortCmp, +} from 'util/language'; import useLocalStorage from 'util/useLocalStorage'; function sourceToLangList(sources: ISource[]) { @@ -37,12 +39,28 @@ function groupByLang(sources: ISource[]) { export default function MangaSources() { const { setTitle, setAction } = useContext(NavbarContext); - const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', defualtLangs()); + const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', sourceDefualtLangs()); const [showNsfw] = useLocalStorage('showNsfw', true); const [sources, setSources] = useState([]); const [fetched, setFetched] = useState(false); + useEffect(() => { + // make sure all of forcedDefaultLangs() exists in shownLangs + sourceForcedDefaultLangs().forEach((forcedLang) => { + let hasLang = false; + shownLangs.forEach((lang) => { + if (lang === forcedLang) hasLang = true; + }); + if (!hasLang) { + setShownLangs((shownLangsCopy) => { + shownLangsCopy.push(forcedLang); + return shownLangsCopy; + }); + } + }); + }, [shownLangs]); + useEffect(() => { setTitle('Sources'); setAction( diff --git a/src/util/language.tsx b/src/util/language.tsx index 328b0f61..fc85784c 100644 --- a/src/util/language.tsx +++ b/src/util/language.tsx @@ -93,11 +93,27 @@ export function langCodeToName(code: string): string { return result; } -export function defualtLangs() { +function defaultNativeLang() { + return 'en'; // TODO: infer from the browser +} + +export function extensionDefaultLangs() { return [ - // todo: infer this from the browser - 'en', - 'localSourceLang', + defaultNativeLang(), + 'all', + ]; +} + +export function sourceDefualtLangs() { + return [ + defaultNativeLang(), + 'localsourcelang', + ]; +} + +export function sourceForcedDefaultLangs(): string[] { + return [ + 'localsourcelang', ]; }