Files
suwayomi-material-you-webui/src/screens/util/Extensions.ts

56 lines
2.0 KiB
TypeScript
Raw Normal View History

2023-05-01 23:31:41 +02:00
/*
* Copyright (C) Contributors to the Suwayomi project
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
2023-05-01 23:31:41 +02:00
import { t } from 'i18next';
2023-10-15 16:03:08 +02:00
import { PartialExtension, TranslationKey } from '@/typings';
import { DefaultLanguage, langCodeToName } from '@/util/language';
export enum ExtensionState {
INSTALLED = 'INSTALLED',
UPDATE_PENDING = 'UPDATE_PENDING',
2023-06-22 22:13:10 +02:00
OBSOLETE = 'OBSOLETE',
}
2023-10-15 16:03:08 +02:00
export type GroupedExtensionsResult<KEY extends string = string> = [KEY, PartialExtension[]][];
export type GroupedByExtensionState = {
2023-10-15 16:03:08 +02:00
[state in ExtensionState]: PartialExtension[];
};
export type GroupedByLanguage = {
2023-10-15 16:03:08 +02:00
[language in DefaultLanguage]: PartialExtension[];
} & {
2023-10-15 16:03:08 +02:00
[language: string]: PartialExtension[];
};
export type GroupedExtensions = GroupedByExtensionState & GroupedByLanguage;
export const extensionLanguageToTranslationKey: { [state in ExtensionState | DefaultLanguage]: TranslationKey } = {
[ExtensionState.INSTALLED]: 'extension.state.label.installed',
[ExtensionState.UPDATE_PENDING]: 'extension.state.label.update_pending',
2023-06-22 22:13:10 +02:00
[ExtensionState.OBSOLETE]: 'extension.state.label.obsolete',
[DefaultLanguage.ALL]: 'extension.language.all',
[DefaultLanguage.OTHER]: 'extension.language.other',
[DefaultLanguage.LOCAL_SOURCE]: 'source.local_source.title',
};
export const isExtensionStateOrLanguage = (languageCode: string): boolean =>
[
ExtensionState.INSTALLED,
ExtensionState.UPDATE_PENDING,
2023-06-22 22:13:10 +02:00
ExtensionState.OBSOLETE,
DefaultLanguage.ALL,
DefaultLanguage.OTHER,
DefaultLanguage.LOCAL_SOURCE,
].includes(languageCode as ExtensionState | DefaultLanguage);
export const translateExtensionLanguage = (languageCode: string): string =>
isExtensionStateOrLanguage(languageCode)
? t(extensionLanguageToTranslationKey[languageCode as ExtensionState | DefaultLanguage])
: langCodeToName(languageCode);