1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-26 22:56:23 -04:00
Files
Sonarr/frontend/src/Language/useLanguages.ts
T
2026-02-16 10:48:03 -08:00

66 lines
1.4 KiB
TypeScript

import { useMemo } from 'react';
import useApiQuery from 'Helpers/Hooks/useApiQuery';
import Language from 'Language/Language';
interface LanguageFilter {
[key: string]: boolean | undefined;
includeAny: boolean;
includeOriginal?: boolean;
includeUnknown?: boolean;
}
const PATH = '/language';
export const useLanguages = () => {
return useApiQuery<Language[]>({
path: PATH,
queryOptions: {
gcTime: Infinity,
staleTime: Infinity,
},
});
};
export const useFilteredLanguages = (
excludeLanguages: LanguageFilter = { includeAny: true }
) => {
const { data, isFetching, isFetched, error } = useLanguages();
const filteredItems = useMemo(() => {
if (!data) return [];
return data.filter((lang) => !excludeLanguages[lang.name]);
}, [data, excludeLanguages]);
return {
data: filteredItems,
isFetching,
isFetched,
error,
};
};
export const useLanguageById = (id: number | undefined) => {
const { data } = useLanguages();
return useMemo(() => {
if (id === undefined || !data) {
return undefined;
}
return data.find((language) => language.id === id);
}, [data, id]);
};
export const useLanguageByName = (name: string | undefined) => {
const { data } = useLanguages();
return useMemo(() => {
if (!name || !data) {
return undefined;
}
return data.find((language) => language.name === name);
}, [data, name]);
};