- Ver informações do paciente
-
+
+ {/* Tornar o trigger focusable/touchable para mobile: tabIndex + classes responsivas */}
+
+ {/* Tooltip: em telas pequenas com scrollbar horizontal permanente (overflow-x-scroll); desktop sem scroll (hover) */}
+
+
{appointment.title} • {appointment.type}
+
Agendamento para {appointment.title}. Status: {appointment.type === 'Rotina' ? 'requested' : appointment.type}.
+
{appointment.time} • {appointment.date}
+
diff --git a/susconecta/components/features/forms/calendar-registration-form.tsx b/susconecta/components/features/forms/calendar-registration-form.tsx
index 0eacf75..1edba87 100644
--- a/susconecta/components/features/forms/calendar-registration-form.tsx
+++ b/susconecta/components/features/forms/calendar-registration-form.tsx
@@ -936,15 +936,29 @@ export function CalendarRegistrationForm({ formData, onFormChange, createMode =
{
+ try {
+ const [y, m, d] = String(formData.appointmentDate).split('-').map(Number);
+ return new Date(y, m - 1, d);
+ } catch (e) {
+ return undefined;
+ }
+ })() : undefined}
onSelect={(date) => {
if (date) {
- const dateStr = date.toISOString().split('T')[0];
+ const y = date.getFullYear();
+ const m = String(date.getMonth() + 1).padStart(2, '0');
+ const d = String(date.getDate()).padStart(2, '0');
+ const dateStr = `${y}-${m}-${d}`;
onFormChange({ ...formData, appointmentDate: dateStr });
setShowDatePicker(false);
}
}}
- disabled={(date) => date < new Date(new Date().toISOString().split('T')[0] + 'T00:00:00')}
+ disabled={(date) => {
+ const today = new Date();
+ today.setHours(0, 0, 0, 0);
+ return date < today;
+ }}
/>
)}
diff --git a/susconecta/components/features/forms/doctor-registration-form.tsx b/susconecta/components/features/forms/doctor-registration-form.tsx
index 415070c..189f0b3 100644
--- a/susconecta/components/features/forms/doctor-registration-form.tsx
+++ b/susconecta/components/features/forms/doctor-registration-form.tsx
@@ -1,7 +1,7 @@
"use client";
import { useEffect, useMemo, useState } from "react";
-import { parse } from 'date-fns';
+import { parse, parseISO, format } from 'date-fns';
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
@@ -11,9 +11,11 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible";
import { Alert, AlertDescription } from "@/components/ui/alert";
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
-import { AlertCircle, ChevronDown, ChevronUp, FileImage, Loader2, Save, Upload, User, X, XCircle, Trash2 } from "lucide-react";
-import { Checkbox } from "@/components/ui/checkbox";
import { Popover, PopoverTrigger, PopoverContent } from "@/components/ui/popover";
+import { Calendar } from "@/components/ui/calendar";
+import { cn } from "@/lib/utils";
+import { AlertCircle, ChevronDown, ChevronUp, FileImage, Loader2, Save, Upload, User, X, XCircle, Trash2, CalendarIcon } from "lucide-react";
+import { Checkbox } from "@/components/ui/checkbox";
import {
criarMedico,
atualizarMedico,
@@ -76,7 +78,7 @@ type FormData = {
cpf: string;
rg: string;
sexo: string;
- data_nascimento: string;
+ data_nascimento: Date | null;
email: string;
telefone: string;
celular: string;
@@ -109,7 +111,7 @@ const initial: FormData = {
cpf: "",
rg: "",
sexo: "",
- data_nascimento: "",
+ data_nascimento: null,
email: "",
telefone: "",
celular: "", // Aqui, 'celular' pode ser 'phone_mobile'
@@ -150,7 +152,7 @@ export function DoctorRegistrationForm({
}: DoctorRegistrationFormProps) {
const [form, setForm] = useState
(initial);
const [errors, setErrors] = useState>({});
- const [expanded, setExpanded] = useState({ dados: true, contato: false, endereco: false, obs: false, formacao: false, admin: false });
+ const [expanded, setExpanded] = useState({ dados: true, contato: false, endereco: false, obs: false, formacao: false });
const [isSubmitting, setSubmitting] = useState(false);
const [isUploadingPhoto, setUploadingPhoto] = useState(false);
const [isSearchingCEP, setSearchingCEP] = useState(false);
@@ -257,7 +259,7 @@ export function DoctorRegistrationForm({
cpf: String(m.cpf || ""),
rg: String(m.rg || m.document_number || ""),
sexo: normalizeSex(m.sexo || m.sex || m.sexualidade || null) ?? "",
- data_nascimento: String(formatBirth(m.data_nascimento || m.birth_date || m.birthDate || "")),
+ data_nascimento: m.data_nascimento ? parseISO(String(m.data_nascimento)) : m.birth_date ? parseISO(String(m.birth_date)) : null,
email: String(m.email || ""),
telefone: String(m.telefone || m.phone_mobile || m.phone || m.mobile || ""),
celular: String(m.celular || m.phone2 || ""),
@@ -430,36 +432,6 @@ function setField(k: T, v: FormData[T]) {
}
function toPayload(): MedicoInput {
- // Converte data de nascimento para ISO (yyyy-MM-dd) tentando vários formatos
- let isoDate: string | null = null;
- try {
- const raw = String(form.data_nascimento || '').trim();
- if (raw) {
- const formats = ['dd/MM/yyyy', 'dd-MM-yyyy', 'yyyy-MM-dd', 'MM/dd/yyyy'];
- for (const f of formats) {
- try {
- const d = parse(raw, f, new Date());
- if (!isNaN(d.getTime())) {
- isoDate = d.toISOString().slice(0, 10);
- break;
- }
- } catch (e) {
- // ignore and try next
- }
- }
- if (!isoDate) {
- const parts = raw.split(/\D+/).filter(Boolean);
- if (parts.length === 3) {
- const [d, m, y] = parts;
- const date = new Date(Number(y), Number(m) - 1, Number(d));
- if (!isNaN(date.getTime())) isoDate = date.toISOString().slice(0, 10);
- }
- }
- }
- } catch (err) {
- console.debug('[DoctorForm] parse data_nascimento failed:', form.data_nascimento, err);
- }
-
return {
user_id: null,
crm: form.crm || "",
@@ -477,7 +449,7 @@ function toPayload(): MedicoInput {
neighborhood: form.bairro || undefined,
city: form.cidade || "",
state: form.estado || "",
- birth_date: isoDate,
+ birth_date: form.data_nascimento ? form.data_nascimento.toISOString().slice(0, 10) : null,
rg: form.rg || null,
active: true,
created_by: null,
@@ -796,7 +768,7 @@ async function handleSubmit(ev: React.FormEvent) {