0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-02-10 21:58:23 -05:00
logto/packages/console/src/hooks/use-ui-languages.ts
Gao Sun 083ef8379e
refactor: ui -> experience (part 2)
Rename `phrases-ui` to `phrases-experience`.
2023-09-15 10:29:41 +08:00

50 lines
1.2 KiB
TypeScript

import type { LanguageTag } from '@logto/language-kit';
import { builtInLanguages as builtInUiLanguages } from '@logto/phrases-experience';
import { deduplicate } from '@silverhand/essentials';
import { useCallback, useMemo } from 'react';
import useSWR from 'swr';
import type { CustomPhraseResponse } from '@/types/custom-phrase';
import type { RequestError } from './use-api';
import useApi from './use-api';
const useUiLanguages = () => {
const {
data: customPhraseList,
error,
mutate,
} = useSWR<CustomPhraseResponse[], RequestError>('api/custom-phrases');
const languages = useMemo(
() =>
deduplicate([
...builtInUiLanguages,
...(customPhraseList?.map(({ languageTag }) => languageTag) ?? []),
])
.slice()
.sort(),
[customPhraseList]
);
const api = useApi();
const addLanguage = useCallback(
async (languageTag: LanguageTag) => {
await api.put(`api/custom-phrases/${languageTag}`, { json: {} });
await mutate();
},
[api, mutate]
);
return {
customPhrases: customPhraseList,
languages,
error,
isLoading: !customPhraseList && !error,
addLanguage,
mutate,
};
};
export default useUiLanguages;