+
+
Disponibilidades dos Médicos
-
- {
- setSearchTerm(e.target.value);
- setSelectedDoctor(null);
- }}
- style={{
- border: "1px solid #ccc",
- borderRadius: "4px",
- padding: "6px",
- width: "300px",
- }}
- />
- {searchTerm && (
-
+
+ {
+ setSearchTerm(e.target.value);
+ setShowSuggestions(true);
}}
- >
- {filteredDoctors.length > 0 ? (
- filteredDoctors.map((doc) => (
- - {
- setSelectedDoctor(doc);
- setSearchTerm(doc.name);
- }}
- style={{
- padding: "6px 8px",
- cursor: "pointer",
- borderBottom: "1px solid #eee",
- }}
- >
- {doc.name}
-
- ))
- ) : (
- -
- Nenhum médico encontrado
-
- )}
-
+ onFocus={() => setShowSuggestions(true)}
+ className="search-input"
+ />
+ {searchTerm && (
+
+ )}
+
+
+ {showSuggestions && searchTerm && filteredDoctors.length > 0 && (
+
+ {filteredDoctors.map((doc) => (
+ handleDoctorSelect(doc)}
+ className="suggestion-item"
+ >
+ {doc.full_name || doc.name}
+
+ ))}
+
)}
-
- {editando ? "Editar Disponibilidade" : "Lista de Disponibilidades"}{" "}
- ({disponibilidades.length})
+
+ {editando ? `Editar Horários` : "Lista de Disponibilidades"}
- {loading ? (
-
Carregando...
- ) : disponibilidades.length === 0 ? (
- Nenhuma disponibilidade encontrada.
+ {doctors.length === 0 ? (
+ Carregando médicos...
) : editando ? (
<>
-
-
+
+ {initialAvailabilityParaEdicao.length > 0 ? (
+
+ ) : (
+ Carregando horários para edição...
+ )}
+
+
+
+
+
+
+
>
) : (
-
-
-
- Médico
- Dia da Semana
- Início
- Término
- Intervalo (min)
- Tipo
- Status
- Ações
-
-
-
- {disponibilidades.map((disp) => {
- const medico = doctors.find((d) => d.id === disp.doctor_id);
- return (
-
- {medico ? medico.name : disp.doctor_id}
- {diasDaSemana[disp.weekday]}
- {disp.start_time}
- {disp.end_time}
- {disp.slot_minutes || 30}
- {disp.appointment_type || "presencial"}
-
-
- {disp.active === false ? "Inativa" : "Ativa"}
+
+ {disponibilidadesAgrupadas.length === 0 ? (
+ Nenhum médico encontrado
+ ) : (
+ disponibilidadesAgrupadas.map((grupo) => (
+
+ toggleExpandDoctor(grupo.doctor_id)}
+ >
+
+ {grupo.doctor_name}
+
+ ({grupo.disponibilidades.filter(d => !d.is_empty).length} horários)
-
-
-
-
+
+
+ ▼
+
+
-
+ {expandedDoctors[grupo.doctor_id] && (
+
+
+
+
+
+
+
+
+
+ Dia da Semana
+ Início
+ Término
+ Intervalo (min)
+ Tipo
+ Status
+ Ações
+
+
+
+ {grupo.disponibilidades.map((disp) => (
+
+
+ {disp.is_empty ? "Nenhum horário cadastrado" : getDiaSemana(disp.weekday)}
+
+
+ {disp.is_empty ? "-" : formatTime(disp.start_time)}
+
+
+ {disp.is_empty ? "-" : formatTime(disp.end_time)}
+
+
+ {disp.is_empty ? "-" : disp.slot_minutes || 30}
+
+
+ {disp.is_empty ? "-" : disp.appointment_type || "presencial"}
+
+
+
+ {getStatusText(disp)}
+
+
+
+ {!disp.is_empty && (
+
+ )}
+
+
+ ))}
+
+
+
-
-
- );
- })}
-
-
+ )}
+
+ ))
+ )}
+
)}
Disponibilidades dos Médicos
--
+
- { - setSelectedDoctor(doc); - setSearchTerm(doc.name); - }} - style={{ - padding: "6px 8px", - cursor: "pointer", - borderBottom: "1px solid #eee", - }} - > - {doc.name} - - )) - ) : ( -
- - Nenhum médico encontrado - - )} - + onFocus={() => setShowSuggestions(true)} + className="search-input" + /> + {searchTerm && ( + + )} +
- {editando ? "Editar Disponibilidade" : "Lista de Disponibilidades"}{" "}
- ({disponibilidades.length})
+
+ {editando ? `Editar Horários` : "Lista de Disponibilidades"}
- {loading ? (
-
Carregando...
- ) : disponibilidades.length === 0 ? ( -Nenhuma disponibilidade encontrada.
+ {doctors.length === 0 ? ( +Carregando médicos...
) : editando ? ( <> -Carregando horários para edição...
+ )} +| Médico | -Dia da Semana | -Início | -Término | -Intervalo (min) | -Tipo | -Status | -Ações | -||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {medico ? medico.name : disp.doctor_id} | -{diasDaSemana[disp.weekday]} | -{disp.start_time} | -{disp.end_time} | -{disp.slot_minutes || 30} | -{disp.appointment_type || "presencial"} | -
-
- {disp.active === false ? "Inativa" : "Ativa"}
+
+ {disponibilidadesAgrupadas.length === 0 ? (
+ Nenhum médico encontrado + ) : ( + disponibilidadesAgrupadas.map((grupo) => ( +
+ toggleExpandDoctor(grupo.doctor_id)}
+ >
+ + {grupo.doctor_name} + + ({grupo.disponibilidades.filter(d => !d.is_empty).length} horários) - |
-
-
-
+
+
+ ▼
+
+
-
+ {expandedDoctors[grupo.doctor_id] && (
+
+
-
+
+
+
+
+
|
-