Cleanup "groupExtensionsByLanguage"
This commit is contained in:
@@ -11,7 +11,6 @@ import {
|
|||||||
ExtensionAction,
|
ExtensionAction,
|
||||||
ExtensionGroupState,
|
ExtensionGroupState,
|
||||||
ExtensionState,
|
ExtensionState,
|
||||||
GroupedExtensions,
|
|
||||||
GroupedExtensionsResult,
|
GroupedExtensionsResult,
|
||||||
InstalledState,
|
InstalledState,
|
||||||
TExtension,
|
TExtension,
|
||||||
@@ -52,48 +51,40 @@ export const translateExtensionLanguage = (languageCode: string): string =>
|
|||||||
: langCodeToName(languageCode);
|
: langCodeToName(languageCode);
|
||||||
|
|
||||||
export function groupExtensionsByLanguage(extensions: TExtension[]): GroupedExtensionsResult {
|
export function groupExtensionsByLanguage(extensions: TExtension[]): GroupedExtensionsResult {
|
||||||
const allLangs: string[] = [];
|
const extensionsByLanguage = Object.groupBy<ExtensionGroupState | string, TExtension>(extensions, (extension) => {
|
||||||
const sortedExtensions: GroupedExtensions = {
|
if (!extension.isInstalled) {
|
||||||
[ExtensionGroupState.OBSOLETE]: [],
|
return extension.lang;
|
||||||
[ExtensionGroupState.INSTALLED]: [],
|
|
||||||
[ExtensionGroupState.UPDATE_PENDING]: [],
|
|
||||||
};
|
|
||||||
extensions.forEach((extension) => {
|
|
||||||
if (sortedExtensions[extension.lang] === undefined) {
|
|
||||||
sortedExtensions[extension.lang] = [];
|
|
||||||
allLangs.push(extension.lang);
|
|
||||||
}
|
|
||||||
if (extension.isInstalled) {
|
|
||||||
if (extension.hasUpdate) {
|
|
||||||
sortedExtensions[ExtensionGroupState.UPDATE_PENDING].push(extension);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (extension.isObsolete) {
|
|
||||||
sortedExtensions[ExtensionGroupState.OBSOLETE].push(extension);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sortedExtensions[ExtensionGroupState.INSTALLED].push(extension);
|
if (extension.hasUpdate) {
|
||||||
} else {
|
return ExtensionGroupState.UPDATE_PENDING;
|
||||||
sortedExtensions[extension.lang].push(extension);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (extension.isObsolete) {
|
||||||
|
return ExtensionGroupState.OBSOLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ExtensionGroupState.INSTALLED;
|
||||||
});
|
});
|
||||||
|
|
||||||
allLangs.sort(langSortCmp);
|
// sort groups by language
|
||||||
const result: GroupedExtensionsResult<ExtensionGroupState | DefaultLanguage | string> = [
|
const extensionsBySortedLanguage = Object.entries(extensionsByLanguage).toSorted(([a], [b]) => {
|
||||||
[ExtensionGroupState.OBSOLETE, sortedExtensions[ExtensionGroupState.OBSOLETE]],
|
const extensionGroupStates = Object.values(ExtensionGroupState);
|
||||||
[ExtensionGroupState.UPDATE_PENDING, sortedExtensions[ExtensionGroupState.UPDATE_PENDING]],
|
|
||||||
[ExtensionGroupState.INSTALLED, sortedExtensions[ExtensionGroupState.INSTALLED]],
|
|
||||||
];
|
|
||||||
|
|
||||||
const langExt: GroupedExtensionsResult = allLangs.map((lang) => [lang, sortedExtensions[lang]]);
|
if (extensionGroupStates.includes(a as ExtensionGroupState)) {
|
||||||
const groupedExtensions = result.concat(langExt);
|
return -1;
|
||||||
|
}
|
||||||
|
if (extensionGroupStates.includes(b as ExtensionGroupState)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
groupedExtensions.forEach(([, groupedExtensionList]) =>
|
return langSortCmp(a, b);
|
||||||
groupedExtensionList.sort((a, b) => a.name.localeCompare(b.name)),
|
});
|
||||||
);
|
|
||||||
|
|
||||||
return groupedExtensions;
|
return extensionsBySortedLanguage.map(([language, extensionsOfLanguage]) => [
|
||||||
|
language,
|
||||||
|
(extensionsOfLanguage ?? []).toSorted((a, b) => langSortCmp(a.lang, b.lang)),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getLanguagesFromExtensions = (extensions: TExtension[]): string[] =>
|
export const getLanguagesFromExtensions = (extensions: TExtension[]): string[] =>
|
||||||
|
|||||||
Reference in New Issue
Block a user