story-generator/src/hooks/useLanguages.ts
Lucas Santana abe4ce86d4
Some checks failed
Docker Build and Push / build (push) Has been cancelled
feat: integra sistema de idiomas com banco de dados
- Integra completamente com a tabela languages
- Adiciona suporte para ícones de bandeira e instruções
- Remove LANGUAGE_OPTIONS hard coded
- Usa DEFAULT_LANGUAGE do type
- Melhora validações e UX do seletor de idiomas
- Atualiza CHANGELOG.md para versão 1.4.0
2025-02-02 08:20:33 -03:00

44 lines
1.2 KiB
TypeScript

import { useQuery } from '@tanstack/react-query';
import { supabase } from '../lib/supabase';
import type { Language, SupportedLanguageCode, LanguageOption } from '../types/language';
interface UseLanguagesReturn {
languages: Language[];
isLoading: boolean;
error: Error | null;
getLanguageLabel: (code: SupportedLanguageCode) => string;
supportedLanguages: LanguageOption[];
}
export function useLanguages(): UseLanguagesReturn {
const { data: languages = [], isLoading, error } = useQuery<Language[]>({
queryKey: ['languages'],
queryFn: async () => {
const { data, error } = await supabase
.from('languages')
.select('*')
.order('name');
if (error) throw error;
return data;
}
});
const supportedLanguages: LanguageOption[] = languages.map(lang => ({
value: lang.code as SupportedLanguageCode,
label: lang.name
}));
const getLanguageLabel = (code: SupportedLanguageCode): string => {
const language = languages.find(lang => lang.code === code);
return language?.name || code;
};
return {
languages,
isLoading,
error: error as Error | null,
getLanguageLabel,
supportedLanguages
};
}