Extract extensions language extraction into own function

This commit is contained in:
schroda
2025-04-21 01:23:27 +02:00
parent 214fa7710d
commit 78030b103a
2 changed files with 11 additions and 11 deletions

View File

@@ -51,10 +51,7 @@ export const translateExtensionLanguage = (languageCode: string): string =>
? t(extensionLanguageToTranslationKey[languageCode as ExtensionGroupState | DefaultLanguage]) ? t(extensionLanguageToTranslationKey[languageCode as ExtensionGroupState | DefaultLanguage])
: langCodeToName(languageCode); : langCodeToName(languageCode);
export function getExtensionsInfo(extensions: TExtension[]): { export function groupExtensionsByLanguage(extensions: TExtension[]): GroupedExtensionsResult {
allLangs: string[];
groupedExtensions: GroupedExtensionsResult;
} {
const allLangs: string[] = []; const allLangs: string[] = [];
const sortedExtensions: GroupedExtensions = { const sortedExtensions: GroupedExtensions = {
[ExtensionGroupState.OBSOLETE]: [], [ExtensionGroupState.OBSOLETE]: [],
@@ -96,8 +93,8 @@ export function getExtensionsInfo(extensions: TExtension[]): {
groupedExtensionList.sort((a, b) => a.name.localeCompare(b.name)), groupedExtensionList.sort((a, b) => a.name.localeCompare(b.name)),
); );
return { return groupedExtensions;
allLangs,
groupedExtensions,
};
} }
export const getLanguagesFromExtensions = (extensions: TExtension[]): string[] =>
[...new Set(extensions.map((extension) => extension.lang))].toSorted(langSortCmp);

View File

@@ -32,9 +32,10 @@ import { EmptyViewAbsoluteCentered } from '@/modules/core/components/placeholder
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx';
import { import {
getExtensionsInfo, groupExtensionsByLanguage,
isExtensionState, getLanguagesFromExtensions,
translateExtensionLanguage, translateExtensionLanguage,
isExtensionState,
} from '@/modules/extension/Extensions.utils.ts'; } from '@/modules/extension/Extensions.utils.ts';
import { import {
ExtensionAction, ExtensionAction,
@@ -94,6 +95,8 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
fetchExtensions(); fetchExtensions();
}, [refetchExtensions]); }, [refetchExtensions]);
const allLangs = useMemo(() => getLanguagesFromExtensions(allExtensions ?? []), [allExtensions]);
const filteredExtensions = useMemo( const filteredExtensions = useMemo(
() => () =>
(allExtensions ?? []).filter((ext) => { (allExtensions ?? []).filter((ext) => {
@@ -104,7 +107,7 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
[allExtensions, showNsfw, query], [allExtensions, showNsfw, query],
); );
const { allLangs, groupedExtensions } = useMemo(() => getExtensionsInfo(filteredExtensions), [filteredExtensions]); const groupedExtensions = useMemo(() => groupExtensionsByLanguage(filteredExtensions), [filteredExtensions]);
const filteredGroupedExtensions = useMemo( const filteredGroupedExtensions = useMemo(
() => () =>