Replace hardcoded user with live profile data

This commit is contained in:
EdilbertoC
2026-04-28 12:46:39 -03:00
parent d496494b3e
commit 000abb39ac
15 changed files with 993 additions and 358 deletions

View File

@@ -5,57 +5,95 @@ export const appointmentMapper = {
const patient = apiData.patient || apiData.paciente || apiData.patients || {}
const professional = apiData.doctor || apiData.medico || apiData.professional || apiData.doctors || {}
// Tratamento de data e hora do campo scheduled_at
let dateStr = apiData.date || apiData.data || apiData.appointment_date || apiData.data_agendamento || ''
let timeStr = apiData.time || apiData.hora || apiData.appointment_time || apiData.horario || ''
if (apiData.scheduled_at) {
const d = new Date(apiData.scheduled_at)
if (!isNaN(d)) {
const yyyy = d.getFullYear()
const mm = String(d.getMonth() + 1).padStart(2, '0')
const dd = String(d.getDate()).padStart(2, '0')
dateStr = `${yyyy}-${mm}-${dd}`
const hh = String(d.getHours()).padStart(2, '0')
const mins = String(d.getMinutes()).padStart(2, '0')
timeStr = `${hh}:${mins}`
}
}
// Tradução de status do banco (inglês) para UI (português)
const statusMap = {
requested: 'Aguardando',
confirmed: 'Confirmada',
checked_in: 'Em triagem',
completed: 'Concluída',
cancelled: 'Cancelada',
}
const rawStatus = (apiData.status || '').toLowerCase()
const mappedStatus = statusMap[rawStatus] || apiData.situacao || 'Aguardando'
// Modalidade
let mode = apiData.mode || apiData.modalidade || apiData.formato || 'Presencial'
if (apiData.appointment_type) {
mode = apiData.appointment_type === 'telemedicina' ? 'Teleconsulta' : 'Presencial'
}
return {
id: apiData.id || apiData.agendamento_id,
patientId: apiData.patientId || apiData.patient_id || apiData.paciente_id || patient.id,
professionalId:
apiData.professionalId ||
apiData.doctor_id ||
apiData.medico_id ||
apiData.professional_id ||
professional.id ||
null,
patient: apiData.patientName || apiData.patient_name || patient.full_name || patient.nome || patient.name || 'Paciente',
professional:
apiData.professional ||
apiData.professionalName ||
apiData.doctor_name ||
apiData.medico_nome ||
professional.full_name ||
professional.name ||
professional.nome ||
'Medico(a)',
date: apiData.date || apiData.data || apiData.appointment_date || apiData.data_agendamento || '',
time: apiData.time || apiData.hora || apiData.appointment_time || apiData.horario || '',
date: dateStr,
time: timeStr,
type: apiData.type || apiData.tipo || apiData.tipo_consulta || 'Consulta',
mode: apiData.mode || apiData.modalidade || apiData.formato || 'Presencial',
status: apiData.status || apiData.situacao || 'Aguardando',
room: apiData.room || apiData.sala || apiData.local || 'Consultorio 1',
mode: mode,
status: mappedStatus,
room: apiData.room || apiData.sala || apiData.local || 'Consultório 1',
}
},
toApi(uiData, dialect = 'api') {
if (dialect === 'supabase') {
// Monta o scheduled_at no formato ISO assumindo fuso local
const scheduledAt = new Date(`${uiData.date}T${uiData.time}:00`).toISOString()
return {
patient_id: uiData.patientId,
doctor_id: uiData.professionalId || null,
appointment_date: uiData.date,
appointment_time: uiData.time,
type: uiData.type,
mode: uiData.mode,
status: uiData.status || 'Confirmada',
room: uiData.room,
scheduled_at: scheduledAt,
appointment_type: uiData.mode === 'Teleconsulta' ? 'telemedicina' : 'presencial',
status: uiData.status === 'Confirmada' ? 'confirmed' : 'requested',
duration_minutes: 30, // Padrao
}
}
return {
patient_id: uiData.patientId,
paciente_id: uiData.patientId,
doctor_id: uiData.professionalId || null,
medico_id: uiData.professionalId || null,
appointment_date: uiData.date,
data: uiData.date,
appointment_time: uiData.time,
hora: uiData.time,
type: uiData.type,
tipo: uiData.type,
mode: uiData.mode,
modalidade: uiData.mode,
status: uiData.status || 'Confirmada',
room: uiData.room,
sala: uiData.room,
}
},
}