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 { useAuth } from "./utils/AuthProvider";
|
||||||
import API_KEY from "./utils/apiKeys";
|
import API_KEY from "./utils/apiKeys";
|
||||||
import "./AgendarConsulta/style/formagendamentos.css";
|
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 ENDPOINT_CRIAR_EXCECAO = "https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctor_exceptions";
|
||||||
|
|
||||||
const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
||||||
|
|
||||||
const { getAuthorizationHeader, user, getUserInfo } = useAuth();
|
const { getAuthorizationHeader, user, getUserInfo } = useAuth();
|
||||||
const [dadosAtendimento, setDadosAtendimento] = useState({
|
const [dadosAtendimento, setDadosAtendimento] = useState({
|
||||||
profissional: doctorID || '',
|
profissional: doctorID || '',
|
||||||
@ -18,6 +18,13 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
|||||||
motivo: ''
|
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 handleAtendimentoChange = (e) => {
|
||||||
const { value, name } = e.target;
|
const { value, name } = e.target;
|
||||||
setDadosAtendimento(prev => ({
|
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) => {
|
const handleSubmitExcecao = async (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
console.log("Tentando criar Exceção.");
|
console.log("Tentando criar Exceção.");
|
||||||
@ -37,6 +90,13 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
|||||||
return;
|
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 startTime = inicio ? inicio + ":00" : null;
|
||||||
const endTime = termino ? termino + ":00" : null;
|
const endTime = termino ? termino + ":00" : null;
|
||||||
|
|
||||||
@ -70,13 +130,13 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
|||||||
const raw = JSON.stringify({
|
const raw = JSON.stringify({
|
||||||
doctor_id: profissional,
|
doctor_id: profissional,
|
||||||
date: dataAtendimento,
|
date: dataAtendimento,
|
||||||
kind: tipoAtendimento,
|
kind: mappedKind,
|
||||||
start_time: startTime,
|
start_time: startTime,
|
||||||
end_time: endTime,
|
end_time: endTime,
|
||||||
reason: motivo,
|
reason: motivo,
|
||||||
created_by: createdBy
|
created_by: createdBy
|
||||||
});
|
});
|
||||||
|
|
||||||
var myHeaders = new Headers();
|
var myHeaders = new Headers();
|
||||||
if (authHeader) myHeaders.append("Authorization", authHeader);
|
if (authHeader) myHeaders.append("Authorization", authHeader);
|
||||||
myHeaders.append("Content-Type", "application/json");
|
myHeaders.append("Content-Type", "application/json");
|
||||||
@ -119,13 +179,36 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
|||||||
<h2 className="section-title">Informações da Nova Exceção</h2>
|
<h2 className="section-title">Informações da Nova Exceção</h2>
|
||||||
|
|
||||||
<div className="campo-informacoes-atendimento">
|
<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">
|
<div className="campo-de-input">
|
||||||
<label>ID do profissional *</label>
|
<label>ID do profissional *</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
name="profissional"
|
name="profissional"
|
||||||
required
|
required
|
||||||
value={dadosAtendimento.profissional}
|
value={dadosAtendimento.profissional}
|
||||||
onChange={handleAtendimentoChange}
|
onChange={handleAtendimentoChange}
|
||||||
/>
|
/>
|
||||||
@ -134,12 +217,11 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
|
|||||||
<div className="campo-de-input">
|
<div className="campo-de-input">
|
||||||
<label>Tipo de exceção *</label>
|
<label>Tipo de exceção *</label>
|
||||||
<select name="tipoAtendimento" onChange={handleAtendimentoChange} value={dadosAtendimento.tipoAtendimento} required>
|
<select name="tipoAtendimento" onChange={handleAtendimentoChange} value={dadosAtendimento.tipoAtendimento} required>
|
||||||
<option value="">Selecione o tipo de exceção</option>
|
<option value="" disabled>Selecione o tipo de exceção</option>
|
||||||
<option value="liberacao" >Liberação (Criar Slot)</option>
|
<option value="disponibilidade_extra" >Liberação</option>
|
||||||
<option value="bloqueio" >Bloqueio (Remover Slot)</option>
|
<option value="bloqueio" >Bloqueio</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section id="informacoes-atendimento-segunda-linha">
|
<section id="informacoes-atendimento-segunda-linha">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user