diff --git a/src/features/browse/sources/Sources.tsx b/src/features/browse/sources/Sources.tsx index 63c14fb5..c466ef05 100644 --- a/src/features/browse/sources/Sources.tsx +++ b/src/features/browse/sources/Sources.tsx @@ -56,6 +56,14 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { }), [sources, shownLangs], ); + const sourcesForLanguageFilter = useMemo( + () => + SourceService.filter(sources ?? [], { + showNsfw, + keepLocalSource: false, + }), + [sources], + ); const sourcesByLanguage = useMemo(() => { const lastUsedSource = SourceService.getLastUsedSource(lastUsedSourceId, filteredSources); const groupedByLanguageTuple = Object.entries( @@ -72,7 +80,10 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { return groupedByLanguageTuple; }, [filteredSources]); - const sourceLanguages = useMemo(() => SourceService.getLanguages(sources ?? []), [sources]); + const sourceLanguages = useMemo( + () => SourceService.getLanguages(sourcesForLanguageFilter, { excludeLocalSource: true }), + [sources], + ); const areSourcesFromDifferentRepos = useMemo( () => SourceService.areFromMultipleRepos(filteredSources), [filteredSources], @@ -108,10 +119,10 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { selectedLanguages={shownLangs} setSelectedLanguages={setShownLangs} languages={sourceLanguages} - sources={sources ?? []} + sources={sourcesForLanguageFilter} /> , - [t, shownLangs, sourceLanguages, sources], + [t, shownLangs, sourceLanguages, sourcesForLanguageFilter], ); if (isLoading) return ; diff --git a/src/features/source/components/SourceLanguageSelect.tsx b/src/features/source/components/SourceLanguageSelect.tsx index 48578190..1e767a02 100644 --- a/src/features/source/components/SourceLanguageSelect.tsx +++ b/src/features/source/components/SourceLanguageSelect.tsx @@ -21,6 +21,7 @@ import { GroupedVirtuoso } from 'react-virtuoso'; import ListItemAvatar from '@mui/material/ListItemAvatar'; import { useLingui } from '@lingui/react/macro'; import Checkbox from '@mui/material/Checkbox'; +import Box from '@mui/material/Box'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { translateExtensionLanguage } from '@/features/extension/Extensions.utils.ts'; import { languageSortComparator, toUniqueLanguageCodes } from '@/base/utils/Languages.ts'; @@ -139,6 +140,7 @@ export const SourceLanguageSelect = ({ {t`Allowed Languages`} + {!languages.length && {t`No sources installed`}} !Sources.isLocalSource(source)) + : sources; + + return [...new Set(filteredSources.map(Sources.getLanguage))]; } static groupByLanguage( diff --git a/src/i18n/locales/en.po b/src/i18n/locales/en.po index eb99e500..3227605d 100644 --- a/src/i18n/locales/en.po +++ b/src/i18n/locales/en.po @@ -2300,6 +2300,10 @@ msgstr "No pages found" msgid "No sources found. Install Some extensions first." msgstr "No sources found. Install Some extensions first." +#: src/features/source/components/SourceLanguageSelect.tsx +msgid "No sources installed" +msgstr "No sources installed" + #: src/features/backup/Backup.utils.ts #: src/features/category/components/CategoriesInclusionSetting.tsx #: src/features/downloads/screens/DownloadSettings.tsx