Handle "local source" as source with language "other"

Same as in mihon
This commit is contained in:
schroda
2024-09-30 03:38:49 +02:00
parent da1a9d9e31
commit b2abde638f
3 changed files with 31 additions and 18 deletions

View File

@@ -15,7 +15,7 @@ import { useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { requestManager } from '@/lib/requests/RequestManager.ts';
import { useLocalStorage } from '@/util/useStorage.tsx';
import { sourceDefualtLangs, sourceForcedDefaultLangs, langSortCmp } from '@/util/language';
import { sourceDefualtLangs, sourceForcedDefaultLangs, langSortCmp, DefaultLanguage } from '@/util/language';
import { translateExtensionLanguage } from '@/screens/util/Extensions';
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
import { SourceCard } from '@/components/SourceCard';
@@ -25,26 +25,28 @@ import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCe
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
import { SourceType } from '@/lib/graphql/generated/graphql.ts';
function sourceToLangList(sources: Pick<SourceType, 'lang'>[]) {
const result: string[] = [];
function sourceToLangList(sources: Pick<SourceType, 'id' | 'lang'>[]) {
const result = new Set<string>();
sources.forEach((source) => {
if (result.indexOf(source.lang) === -1) {
result.push(source.lang);
}
const isLocalSource = Number(source.id) === 0;
const lang = isLocalSource ? DefaultLanguage.OTHER : source.lang;
result.add(lang);
});
result.sort(langSortCmp);
return result;
return [...result].sort(langSortCmp);
}
function groupByLang<Source extends Pick<SourceType, 'lang'>>(sources: Source[]): Record<string, Source[]> {
function groupByLang<Source extends Pick<SourceType, 'id' | 'lang'>>(sources: Source[]): Record<string, Source[]> {
const result: Record<string, Source[]> = {};
sources.forEach((source) => {
if (result[source.lang] === undefined) {
result[source.lang] = [];
}
result[source.lang].push(source);
const isLocalSource = Number(source.id) === 0;
const lang = isLocalSource ? DefaultLanguage.OTHER : source.lang;
result[lang] ??= [];
result[lang].push(source);
});
return result;
@@ -136,7 +138,7 @@ export function Sources() {
.sort((a, b) => langSortCmp(a[0], b[0]))
.map(
([lang, list]) =>
shownLangs.indexOf(lang) !== -1 && (
(lang === DefaultLanguage.OTHER || shownLangs.includes(lang)) && (
<Fragment key={lang}>
<Typography
key={lang}
@@ -152,7 +154,20 @@ export function Sources() {
{translateExtensionLanguage(lang)}
</Typography>
{list
.filter((source) => showNsfw || !source.isNsfw)
.filter((source) => {
const isLangOther = lang === DefaultLanguage.OTHER;
if (isLangOther) {
const isLocalSource = Number(source.id) === 0;
const isLangShown = shownLangs.includes(lang);
const isLangOtherSourceShown = isLangShown || isLocalSource;
if (!isLangOtherSourceShown) {
return false;
}
}
return showNsfw || !source.isNsfw;
})
.map((source) => (
<SourceCard
key={source.id}

View File

@@ -52,7 +52,7 @@ export const extensionLanguageToTranslationKey: { [state in ExtensionState | Def
[ExtensionState.OBSOLETE]: 'extension.state.label.obsolete',
[DefaultLanguage.ALL]: 'extension.language.all',
[DefaultLanguage.OTHER]: 'extension.language.other',
[DefaultLanguage.LOCAL_SOURCE]: 'source.local_source.title',
[DefaultLanguage.LOCAL_SOURCE]: 'extension.language.other',
};
export const isExtensionStateOrLanguage = (languageCode: string): boolean =>

View File

@@ -73,8 +73,6 @@ export const langSortCmp = (a: string, b: string) => {
if (a === 'en') return -1;
if (b === 'en') return 1;
if (a === DefaultLanguage.LOCAL_SOURCE) return 1;
if (b === DefaultLanguage.LOCAL_SOURCE) return -1;
return aLang > bLang ? 1 : -1;
};