forked from RiseUP/riseup-squad20
" "
This commit is contained in:
parent
e17e709c01
commit
5030ae38d0
@ -56,7 +56,7 @@ import {
|
||||
import { mockAppointments, mockProfessionals } from "@/lib/mocks/appointment-mocks";
|
||||
import { CalendarRegistrationForm } from "@/components/forms/calendar-registration-form";
|
||||
|
||||
// --- Helper Functions ---
|
||||
|
||||
const formatDate = (date: string | Date) => {
|
||||
if (!date) return "";
|
||||
return new Date(date).toLocaleDateString("pt-BR", {
|
||||
@ -73,14 +73,12 @@ const capitalize = (s: string) => {
|
||||
return s.charAt(0).toUpperCase() + s.slice(1);
|
||||
};
|
||||
|
||||
// --- Main Page Component ---
|
||||
export default function ConsultasPage() {
|
||||
const [appointments, setAppointments] = useState(mockAppointments);
|
||||
const [showForm, setShowForm] = useState(false);
|
||||
const [editingAppointment, setEditingAppointment] = useState<any | null>(null);
|
||||
const [viewingAppointment, setViewingAppointment] = useState<any | null>(null);
|
||||
|
||||
// Converte o objeto da consulta para o formato esperado pelo formulário
|
||||
const mapAppointmentToFormData = (appointment: any) => {
|
||||
const professional = mockProfessionals.find(p => p.id === appointment.professional);
|
||||
const appointmentDate = new Date(appointment.time);
|
||||
@ -89,14 +87,12 @@ export default function ConsultasPage() {
|
||||
id: appointment.id,
|
||||
patientName: appointment.patient,
|
||||
professionalName: professional ? professional.name : '',
|
||||
appointmentDate: appointmentDate.toISOString().split('T')[0], // Formato YYYY-MM-DD
|
||||
startTime: appointmentDate.toTimeString().split(' ')[0].substring(0, 5), // Formato HH:MM
|
||||
appointmentDate: appointmentDate.toISOString().split('T')[0],
|
||||
startTime: appointmentDate.toTimeString().split(' ')[0].substring(0, 5),
|
||||
endTime: new Date(appointmentDate.getTime() + appointment.duration * 60000).toTimeString().split(' ')[0].substring(0, 5),
|
||||
status: appointment.status,
|
||||
appointmentType: appointment.type,
|
||||
notes: appointment.notes,
|
||||
// Adicione outros campos do paciente aqui se necessário (cpf, rg, etc.)
|
||||
// Eles não existem no mock de agendamento, então virão vazios
|
||||
cpf: '',
|
||||
rg: '',
|
||||
birthDate: '',
|
||||
@ -129,24 +125,22 @@ export default function ConsultasPage() {
|
||||
};
|
||||
|
||||
const handleSave = (formData: any) => {
|
||||
// Como o formulário edita campos que não estão na tabela,
|
||||
// precisamos mapear de volta para o formato original do agendamento.
|
||||
// Para a simulação, vamos atualizar apenas os campos que existem no mock.
|
||||
|
||||
const updatedAppointment = {
|
||||
id: formData.id,
|
||||
patient: formData.patientName,
|
||||
time: new Date(`${formData.appointmentDate}T${formData.startTime}`).toISOString(),
|
||||
duration: 30, // Duração não está no form, então mantemos um valor fixo
|
||||
duration: 30,
|
||||
type: formData.appointmentType as any,
|
||||
status: formData.status as any,
|
||||
professional: appointments.find(a => a.id === formData.id)?.professional || '', // Mantém o ID do profissional
|
||||
professional: appointments.find(a => a.id === formData.id)?.professional || '',
|
||||
notes: formData.notes,
|
||||
};
|
||||
|
||||
setAppointments(prev =>
|
||||
prev.map(a => a.id === updatedAppointment.id ? updatedAppointment : a)
|
||||
);
|
||||
handleCancel(); // Fecha o formulário
|
||||
handleCancel();
|
||||
};
|
||||
|
||||
if (showForm && editingAppointment) {
|
||||
|
||||
@ -11,7 +11,7 @@ import { MoreHorizontal, Plus, Search, Edit, Trash2, ArrowLeft, Eye } from "luci
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { DoctorRegistrationForm } from "@/components/forms/doctor-registration-form";
|
||||
|
||||
// >>> IMPORTES DA API <<<
|
||||
|
||||
import { listarMedicos, excluirMedico, Medico } from "@/lib/api";
|
||||
|
||||
export default function DoutoresPage() {
|
||||
@ -22,7 +22,7 @@ export default function DoutoresPage() {
|
||||
const [editingId, setEditingId] = useState<string | null>(null);
|
||||
const [viewingDoctor, setViewingDoctor] = useState<Medico | null>(null);
|
||||
|
||||
// Carrega da API
|
||||
|
||||
async function load() {
|
||||
setLoading(true);
|
||||
try {
|
||||
@ -62,14 +62,14 @@ export default function DoutoresPage() {
|
||||
setViewingDoctor(doctor);
|
||||
}
|
||||
|
||||
// Excluir via API e recarregar
|
||||
|
||||
async function handleDelete(id: string) {
|
||||
if (!confirm("Excluir este médico?")) return;
|
||||
await excluirMedico(id);
|
||||
await load();
|
||||
}
|
||||
|
||||
// Após salvar/criar/editar no form, fecha e recarrega
|
||||
|
||||
async function handleSaved() {
|
||||
setShowForm(false);
|
||||
await load();
|
||||
|
||||
@ -7,15 +7,10 @@ import { Label } from "@/components/ui/label";
|
||||
import { Textarea } from "@/components/ui/textarea";
|
||||
import { Calendar, Search, ChevronDown, Upload, FileDown, Tag } from "lucide-react";
|
||||
|
||||
// Este é um formulário genérico para Criar e Editar um agendamento.
|
||||
// Ele não tem Header ou Footer, apenas o conteúdo do formulário em si.
|
||||
|
||||
export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any) {
|
||||
const [formData, setFormData] = useState(initialData || {});
|
||||
|
||||
useEffect(() => {
|
||||
// Se os dados iniciais mudarem (ex: usuário clica em outro item para editar),
|
||||
// atualizamos o estado do formulário.
|
||||
setFormData(initialData || {});
|
||||
}, [initialData]);
|
||||
|
||||
@ -31,7 +26,6 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any)
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit} className="space-y-8">
|
||||
{/* ==== INFORMAÇÕES DO PACIENTE ==== */}
|
||||
<div className="border rounded-md p-6 space-y-4 bg-white">
|
||||
<h2 className="font-medium">Informações do paciente</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-12 gap-4">
|
||||
@ -40,7 +34,7 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any)
|
||||
<div className="relative">
|
||||
<Search className="pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" />
|
||||
<Input
|
||||
name="patientName" // Nome do campo para o estado
|
||||
name="patientName"
|
||||
placeholder="Digite o nome do paciente"
|
||||
className="h-10 pl-8"
|
||||
value={formData.patientName || ''}
|
||||
@ -82,7 +76,7 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* ==== INFORMAÇÕES DO ATENDIMENTO ==== */}
|
||||
{}
|
||||
<div className="border rounded-md p-6 space-y-4 bg-white">
|
||||
<h2 className="font-medium">Informações do atendimento</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-12 gap-6">
|
||||
@ -137,7 +131,6 @@ export function CalendarRegistrationForm({ initialData, onSave, onCancel }: any)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Botões de Ação */}
|
||||
<div className="flex justify-end gap-2">
|
||||
<Button type="button" variant="outline" onClick={onCancel}>Cancelar</Button>
|
||||
<Button type="submit">Salvar</Button>
|
||||
|
||||
@ -24,9 +24,7 @@ import {
|
||||
MedicoInput,
|
||||
} from "@/lib/api";
|
||||
|
||||
import { buscarCepAPI } from "@/lib/api"; // use o seu já existente
|
||||
|
||||
// Mock data and types since API is not used for now
|
||||
import { buscarCepAPI } from "@/lib/api";
|
||||
|
||||
type FormacaoAcademica = {
|
||||
instituicao: string;
|
||||
@ -179,7 +177,6 @@ export function DoctorRegistrationForm({
|
||||
if (mode === "edit" && doctorId) {
|
||||
const medico = await buscarMedicoPorId(doctorId);
|
||||
if (!alive) return;
|
||||
// mapeia API -> estado do formulário
|
||||
setForm({
|
||||
photo: null,
|
||||
nome: medico.nome ?? "",
|
||||
@ -188,7 +185,7 @@ export function DoctorRegistrationForm({
|
||||
estado_crm: medico.estado_crm ?? "",
|
||||
rqe: medico.rqe ?? "",
|
||||
formacao_academica: medico.formacao_academica ?? [],
|
||||
curriculo: null, // se a API devolver URL, você pode exibir ao lado
|
||||
curriculo: null,
|
||||
especialidade: medico.especialidade ?? "",
|
||||
cpf: medico.cpf ?? "",
|
||||
rg: medico.rg ?? "",
|
||||
@ -213,7 +210,7 @@ export function DoctorRegistrationForm({
|
||||
valor_consulta: medico.valor_consulta ? String(medico.valor_consulta) : "",
|
||||
});
|
||||
|
||||
// (Opcional) listar anexos que já existem no servidor
|
||||
|
||||
try {
|
||||
const list = await listarAnexosMedico(doctorId);
|
||||
setServerAnexos(list ?? []);
|
||||
@ -320,7 +317,6 @@ export function DoctorRegistrationForm({
|
||||
setErrors((e) => ({ ...e, submit: "" }));
|
||||
|
||||
try {
|
||||
// monta o payload esperado pela API
|
||||
const payload: MedicoInput = {
|
||||
nome: form.nome,
|
||||
nome_social: form.nome_social || null,
|
||||
@ -336,7 +332,7 @@ export function DoctorRegistrationForm({
|
||||
estado_crm: form.estado_crm || null,
|
||||
rqe: form.rqe || null,
|
||||
formacao_academica: form.formacao_academica ?? [],
|
||||
curriculo_url: null, // se quiser, suba arquivo do currículo num endpoint próprio e salve a URL aqui
|
||||
curriculo_url: null,
|
||||
especialidade: form.especialidade,
|
||||
observacoes: form.observacoes || null,
|
||||
tipo_vinculo: form.tipo_vinculo || null,
|
||||
@ -345,14 +341,12 @@ export function DoctorRegistrationForm({
|
||||
valor_consulta: form.valor_consulta || null,
|
||||
};
|
||||
|
||||
// cria ou atualiza
|
||||
const saved = mode === "create"
|
||||
? await criarMedico(payload)
|
||||
: await atualizarMedico(doctorId as number, payload);
|
||||
|
||||
const medicoId = saved.id;
|
||||
|
||||
// foto (opcional)
|
||||
if (form.photo) {
|
||||
try {
|
||||
await uploadFotoMedico(medicoId, form.photo);
|
||||
@ -361,7 +355,6 @@ export function DoctorRegistrationForm({
|
||||
}
|
||||
}
|
||||
|
||||
// anexos locais (opcional)
|
||||
if (form.anexos?.length) {
|
||||
for (const f of form.anexos) {
|
||||
try {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user