Fix source language filter
In case the saved "selected languages" contained languages that did not have any installed source, they caused TypeErrors when trying to access them in e.g. "sourcesByLanguage".
This commit is contained in:
@@ -68,37 +68,38 @@ export const SourceLanguageSelect = ({
|
|||||||
const languagesSortedBySelectState = useMemo(
|
const languagesSortedBySelectState = useMemo(
|
||||||
() =>
|
() =>
|
||||||
toUniqueLanguageCodes([
|
toUniqueLanguageCodes([
|
||||||
...tmpSelectedLanguages.toSorted(languageSortComparator),
|
...tmpSelectedLanguages
|
||||||
|
.filter((language) => languages.includes(language))
|
||||||
|
.toSorted(languageSortComparator),
|
||||||
...languages.toSorted(languageSortComparator),
|
...languages.toSorted(languageSortComparator),
|
||||||
]),
|
]),
|
||||||
[languages, tmpSelectedLanguages],
|
[languages, tmpSelectedLanguages],
|
||||||
);
|
);
|
||||||
|
|
||||||
const flattenedSourcesByLanguages = useMemo(
|
const flattenedSourcesByLanguages = useMemo(
|
||||||
() => Object.values(languagesSortedBySelectState.map((language) => sourcesByLanguage[language])).flat(),
|
() => languagesSortedBySelectState.map((language) => sourcesByLanguage[language] ?? []).flat(),
|
||||||
[languagesSortedBySelectState, sourcesByLanguage],
|
[languagesSortedBySelectState, sourcesByLanguage],
|
||||||
);
|
);
|
||||||
|
|
||||||
const groupCounts = useMemo(
|
const groupCounts = useMemo(
|
||||||
() =>
|
() =>
|
||||||
languagesSortedBySelectState.map((language) => {
|
languagesSortedBySelectState.map((language) => {
|
||||||
const isEnabled = tmpSelectedLanguages.includes(language);
|
const isEnabled = tmpSelectedLanguages
|
||||||
|
.filter((selectedLanguage) => languages.includes(selectedLanguage))
|
||||||
|
.includes(language);
|
||||||
if (!isEnabled) {
|
if (!isEnabled) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sourcesByLanguage[language]?.length ?? 0;
|
return sourcesByLanguage[language].length;
|
||||||
}),
|
}),
|
||||||
[sourcesByLanguage, languagesSortedBySelectState],
|
[sourcesByLanguage, languagesSortedBySelectState, languages],
|
||||||
);
|
);
|
||||||
|
|
||||||
const computeItemKey = VirtuosoUtil.useCreateGroupedComputeItemKey(
|
const computeItemKey = VirtuosoUtil.useCreateGroupedComputeItemKey(
|
||||||
groupCounts,
|
groupCounts,
|
||||||
useCallback((index) => languagesSortedBySelectState[index], [languagesSortedBySelectState]),
|
useCallback((index) => languagesSortedBySelectState[index], [languagesSortedBySelectState]),
|
||||||
useCallback(
|
useCallback((index) => flattenedSourcesByLanguages[index].id, [flattenedSourcesByLanguages]),
|
||||||
(index) => flattenedSourcesByLanguages[index].id,
|
|
||||||
[sourcesByLanguage, languagesSortedBySelectState],
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user