Buscar médico pelo nome exceções
This commit is contained in:
parent
626fcc8124
commit
f03fc733c2
@ -1,13 +1,13 @@
|
||||
import React, { useState } from "react";
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { useAuth } from "./utils/AuthProvider";
|
||||
import API_KEY from "./utils/apiKeys";
|
||||
import "./AgendarConsulta/style/formagendamentos.css";
|
||||
import { GetAllDoctors } from './utils/Functions-Endpoints/Doctor';
|
||||
|
||||
|
||||
const ENDPOINT_CRIAR_EXCECAO = "https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctor_exceptions";
|
||||
|
||||
const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
|
||||
const { getAuthorizationHeader, user, getUserInfo } = useAuth();
|
||||
const [dadosAtendimento, setDadosAtendimento] = useState({
|
||||
profissional: doctorID || '',
|
||||
@ -18,6 +18,13 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
motivo: ''
|
||||
});
|
||||
|
||||
const [todosProfissionais, setTodosProfissionais] = useState([]);
|
||||
const [profissionaisFiltrados, setProfissionaisFiltrados] = useState([]);
|
||||
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
|
||||
|
||||
const [doctorSearchName, setDoctorSearchName] = useState('');
|
||||
const [searchingDoctor, setSearchingDoctor] = useState(false);
|
||||
|
||||
const handleAtendimentoChange = (e) => {
|
||||
const { value, name } = e.target;
|
||||
setDadosAtendimento(prev => ({
|
||||
@ -26,6 +33,52 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
}));
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const loadDoctors = async () => {
|
||||
setSearchingDoctor(true);
|
||||
let authHeader = '';
|
||||
try { authHeader = getAuthorizationHeader ? getAuthorizationHeader() : ''; } catch {}
|
||||
try {
|
||||
const Medicos = await GetAllDoctors(authHeader);
|
||||
setTodosProfissionais(Array.isArray(Medicos) ? Medicos : []);
|
||||
} catch (err) {
|
||||
console.error('Erro ao carregar médicos:', err);
|
||||
setTodosProfissionais([]);
|
||||
} finally {
|
||||
setSearchingDoctor(false);
|
||||
}
|
||||
};
|
||||
loadDoctors();
|
||||
}, [getAuthorizationHeader]);
|
||||
|
||||
const handleSearchProfissional = (e) => {
|
||||
const term = e.target.value;
|
||||
setDoctorSearchName(term);
|
||||
if (term.trim() === '') {
|
||||
setProfissionaisFiltrados([]);
|
||||
setIsDropdownOpen(false);
|
||||
return;
|
||||
}
|
||||
const filtered = todosProfissionais.filter(p =>
|
||||
(p.full_name || '').toLowerCase().includes(term.toLowerCase())
|
||||
);
|
||||
setProfissionaisFiltrados(filtered);
|
||||
setIsDropdownOpen(filtered.length > 0);
|
||||
};
|
||||
|
||||
const handleSelectProfissional = (profissional) => {
|
||||
setDadosAtendimento(prev => ({
|
||||
...prev,
|
||||
profissional: profissional.id
|
||||
}));
|
||||
setDoctorSearchName(profissional.full_name || '');
|
||||
setProfissionaisFiltrados([]);
|
||||
setIsDropdownOpen(false);
|
||||
};
|
||||
|
||||
// lista simples de valores permitidos
|
||||
const ALLOWED_KINDS = ['disponibilidade_extra', 'bloqueio'];
|
||||
|
||||
const handleSubmitExcecao = async (e) => {
|
||||
e.preventDefault();
|
||||
console.log("Tentando criar Exceção.");
|
||||
@ -37,6 +90,13 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// usa diretamente o value selecionado (já definido no <select>) e valida
|
||||
const mappedKind = tipoAtendimento;
|
||||
if (!ALLOWED_KINDS.includes(mappedKind)) {
|
||||
alert(`Tipo inválido: "${tipoAtendimento}". Tipos aceitos: ${ALLOWED_KINDS.join(', ')}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const startTime = inicio ? inicio + ":00" : null;
|
||||
const endTime = termino ? termino + ":00" : null;
|
||||
|
||||
@ -70,7 +130,7 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
const raw = JSON.stringify({
|
||||
doctor_id: profissional,
|
||||
date: dataAtendimento,
|
||||
kind: tipoAtendimento,
|
||||
kind: mappedKind,
|
||||
start_time: startTime,
|
||||
end_time: endTime,
|
||||
reason: motivo,
|
||||
@ -119,7 +179,30 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
<h2 className="section-title">Informações da Nova Exceção</h2>
|
||||
|
||||
<div className="campo-informacoes-atendimento">
|
||||
{/* Busca por nome usando filtragem local */}
|
||||
<div className="campo-de-input campo-de-input-container">
|
||||
<label>Nome do médico</label>
|
||||
<input
|
||||
type="text"
|
||||
name="doctorSearchName"
|
||||
placeholder="Digite o nome do médico"
|
||||
value={doctorSearchName}
|
||||
onChange={handleSearchProfissional}
|
||||
autoComplete="off"
|
||||
/>
|
||||
{isDropdownOpen && profissionaisFiltrados.length > 0 && (
|
||||
<div className="dropdown-profissionais">
|
||||
{profissionaisFiltrados.map(p => (
|
||||
<div key={p.id} className="dropdown-item" onClick={() => handleSelectProfissional(p)}>
|
||||
{p.full_name}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
{searchingDoctor && <small>Carregando médicos...</small>}
|
||||
</div>
|
||||
|
||||
{/* ID do profissional (preenchido ao selecionar) */}
|
||||
<div className="campo-de-input">
|
||||
<label>ID do profissional *</label>
|
||||
<input
|
||||
@ -134,12 +217,11 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||
<div className="campo-de-input">
|
||||
<label>Tipo de exceção *</label>
|
||||
<select name="tipoAtendimento" onChange={handleAtendimentoChange} value={dadosAtendimento.tipoAtendimento} required>
|
||||
<option value="">Selecione o tipo de exceção</option>
|
||||
<option value="liberacao" >Liberação (Criar Slot)</option>
|
||||
<option value="bloqueio" >Bloqueio (Remover Slot)</option>
|
||||
<option value="" disabled>Selecione o tipo de exceção</option>
|
||||
<option value="disponibilidade_extra" >Liberação</option>
|
||||
<option value="bloqueio" >Bloqueio</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<section id="informacoes-atendimento-segunda-linha">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user