Default to english when no lang is slected (#1396)

Fixes https://github.com/calibrain/shelfmark/issues/1384
This commit is contained in:
CaliBrain
2026-09-25 18:38:25 -04:00
committed by GitHub
parent 37a77e9562
commit c7bfb20448
2 changed files with 24 additions and 2 deletions
@@ -5,6 +5,7 @@ import {
LANGUAGE_OPTION_ALL,
LANGUAGE_OPTION_DEFAULT,
buildLanguageNormalizer,
getLanguageFilterValues,
getReleaseSearchLanguageParams,
releaseLanguageMatchesFilter,
resolveDefaultLanguageCodes,
@@ -67,6 +68,25 @@ describe('releaseLanguageMatchesFilter', () => {
expect(visibleLanguages).toHaveLength(48);
});
it('shows every release when the default language list is explicitly empty', () => {
// Issue 1384: an empty BOOK_LANGUAGE with the "Default" filter hid all releases.
const normalizer = buildLanguageNormalizer(supportedLanguages);
const defaults = resolveDefaultLanguageCodes([], supportedLanguages);
const selectedCodes =
getLanguageFilterValues([LANGUAGE_OPTION_DEFAULT], supportedLanguages, defaults) ?? defaults;
expect(releaseLanguageMatchesFilter('en', selectedCodes, normalizer)).toBe(true);
expect(releaseLanguageMatchesFilter('German', selectedCodes, normalizer)).toBe(true);
expect(releaseLanguageMatchesFilter('de, en', selectedCodes, normalizer)).toBe(true);
});
it('still filters by a configured default language', () => {
const normalizer = buildLanguageNormalizer(supportedLanguages);
expect(releaseLanguageMatchesFilter('en', ['en'], normalizer)).toBe(true);
expect(releaseLanguageMatchesFilter('de', ['en'], normalizer)).toBe(false);
});
});
describe('resolveDefaultLanguageCodes', () => {
+4 -2
View File
@@ -123,7 +123,7 @@ export const buildLanguageNormalizer = (languages: Language[]): Map<string, stri
* (e.g., "English, Spanish", "English/Spanish", "English + Spanish", "English & Spanish").
*
* @param releaseLang - Language string from the release (can be code or full name)
* @param selectedCodes - Array of selected ISO language codes
* @param selectedCodes - Array of selected ISO language codes; null or empty means no filter
* @param languageNormalizer - Optional map to normalize language names to codes
*/
export const releaseLanguageMatchesFilter = (
@@ -131,7 +131,9 @@ export const releaseLanguageMatchesFilter = (
selectedCodes: string[] | null,
languageNormalizer?: Map<string, string>,
): boolean => {
if (!releaseLang || !selectedCodes) {
// An empty list is an explicitly empty BOOK_LANGUAGE ("no default filter"), which the
// backend does not filter on either; treating it as "match nothing" hid every release.
if (!releaseLang || !selectedCodes || selectedCodes.length === 0) {
return true;
}
if (selectedCodes.includes(LANGUAGE_OPTION_ALL)) {