budget-view-finance/src/components/help/ContactForm.tsx
gpt-engineer-app[bot] c8083adb8a Fix: Resolve syntax error in ContactForm.tsx
Corrected a syntax error in ContactForm.tsx that was causing a build error.
2025-06-23 03:09:57 +00:00

153 lines
4.1 KiB
TypeScript

import { useState } from 'react';
import { ArrowLeft } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { useToast } from '@/hooks/use-toast';
import { supabase } from '@/integrations/supabase/client';
import ContactFormFields from './ContactFormFields';
import ContactFormHeader from './ContactFormHeader';
interface ContactFormProps {
onBack: () => void;
}
const ContactForm = ({ onBack }: ContactFormProps) => {
const [formData, setFormData] = useState({
assunto: '',
motivo: '',
mensagem: '',
anexo: null as File | null
});
const [loading, setLoading] = useState(false);
const { toast } = useToast();
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (!formData.assunto || !formData.motivo || !formData.mensagem) {
toast({
title: "Erro",
description: "Por favor, preencha todos os campos obrigatórios.",
variant: "destructive"
});
return;
}
setLoading(true);
try {
let anexoUrl = null;
let userId = null;
let userEmail = null;
// Obter dados do usuário
const { data: { user } } = await supabase.auth.getUser();
if (user) {
userId = user.id;
userEmail = user.email;
}
// Upload do anexo se existe
if (formData.anexo) {
const fileExt = formData.anexo.name.split('.').pop();
const fileName = `${Date.now()}.${fileExt}`;
const { data: uploadData, error: uploadError } = await supabase.storage
.from('anexos-contato')
.upload(fileName, formData.anexo);
if (uploadError) throw uploadError;
const { data: { publicUrl } } = supabase.storage
.from('anexos-contato')
.getPublicUrl(fileName);
anexoUrl = publicUrl;
}
// Salvar contato no banco
const { error } = await supabase
.from('contatos')
.insert({
assunto: formData.assunto,
motivo: formData.motivo,
mensagem: formData.mensagem,
anexo_url: anexoUrl,
user_id: userId,
status: 'pendente'
});
if (error) throw error;
// Enviar dados para o webhook do N8N usando modo no-cors
const webhookData = {
assunto: formData.assunto,
motivo: formData.motivo,
mensagem: formData.mensagem,
anexo_url: anexoUrl,
user_id: userId,
user_email: userEmail,
data_envio: new Date().toISOString()
};
try {
console.log("Enviando dados para webhook N8N:", webhookData);
// Usando modo no-cors para evitar problema de CORS
const webhookResponse = await fetch('https://webhookn8n.innova1001.com.br/webhook/faleconosco', {
method: 'POST',
mode: 'no-cors',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(webhookData),
});
console.log("Dados enviados para webhook N8N com sucesso");
} catch (webhookError) {
console.error("Erro ao enviar para webhook N8N:", webhookError);
// Não interrompe o fluxo se o webhook falhar
}
toast({
title: "Mensagem enviada com sucesso!",
description: "Sua mensagem foi enviada e nossa equipe irá responder em breve. Você receberá uma resposta no seu e-mail cadastrado. Aguarde nosso retorno!",
});
// Reset form
setFormData({
assunto: '',
motivo: '',
mensagem: '',
anexo: null
});
onBack();
} catch (error) {
console.error('Erro ao enviar contato:', error);
toast({
title: "Erro",
description: "Não foi possível enviar sua mensagem. Tente novamente.",
variant: "destructive"
});
} finally {
setLoading(false);
}
};
return (
<div className="space-y-6">
<ContactFormHeader onBack={onBack} />
<ContactFormFields
formData={formData}
setFormData={setFormData}
loading={loading}
onSubmit={handleSubmit}
/>
</div>
);
};
export default ContactForm;