🚀 Initial commit: Versão atual do TrackSteel APP

This commit is contained in:
2026-03-18 21:17:53 +00:00
commit bde410c9ad
633 changed files with 108150 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
import { useState, useEffect } from 'react';
import { supabase } from '@/integrations/supabase/client';
import { toast } from 'sonner';
interface Prompt {
id: string;
name: string;
content: string;
created_at: string;
updated_at: string;
created_by: string;
}
export const usePrompts = () => {
const [prompts, setPrompts] = useState<Prompt[]>([]);
const [loading, setLoading] = useState(true);
const fetchPrompts = async () => {
try {
const { data, error } = await supabase
.from('prompts')
.select('*')
.order('created_at', { ascending: false });
if (error) throw error;
setPrompts(data || []);
} catch (error) {
console.error('Erro ao carregar prompts:', error);
toast.error('Erro ao carregar prompts');
}
};
const savePrompt = async (prompt: Partial<Prompt>) => {
try {
const { data: userData } = await supabase.auth.getUser();
if (prompt.id) {
const { error } = await supabase
.from('prompts')
.update({
name: prompt.name,
content: prompt.content
})
.eq('id', prompt.id);
if (error) throw error;
toast.success('Prompt atualizado com sucesso!');
} else {
const { error } = await supabase
.from('prompts')
.insert({
name: prompt.name,
content: prompt.content,
created_by: userData.user?.id
});
if (error) throw error;
toast.success('Prompt criado com sucesso!');
}
await fetchPrompts();
} catch (error) {
console.error('Erro ao salvar prompt:', error);
toast.error('Erro ao salvar prompt');
}
};
const deletePrompt = async (id: string) => {
try {
const { error } = await supabase
.from('prompts')
.delete()
.eq('id', id);
if (error) throw error;
toast.success('Prompt excluído com sucesso!');
await fetchPrompts();
} catch (error) {
console.error('Erro ao excluir prompt:', error);
toast.error('Erro ao excluir prompt');
}
};
const downloadPromptAsJson = (prompt: Prompt, filename?: string) => {
const jsonData = {
name: prompt.name,
content: prompt.content,
created_at: prompt.created_at,
updated_at: prompt.updated_at
};
const dataStr = JSON.stringify(jsonData, null, 2);
const dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(dataStr);
const exportFileDefaultName = filename || `${prompt.name.replace(/\s+/g, '_')}.json`;
const linkElement = document.createElement('a');
linkElement.setAttribute('href', dataUri);
linkElement.setAttribute('download', exportFileDefaultName);
linkElement.click();
};
useEffect(() => {
const loadData = async () => {
setLoading(true);
await fetchPrompts();
setLoading(false);
};
loadData();
}, []);
return {
prompts,
loading,
savePrompt,
deletePrompt,
downloadPromptAsJson,
refreshPrompts: fetchPrompts
};
};