diff --git a/src/components/doctors/DoctorForm.css b/src/components/doctors/DoctorForm.css
new file mode 100644
index 0000000..d5f2379
--- /dev/null
+++ b/src/components/doctors/DoctorForm.css
@@ -0,0 +1,201 @@
+.doctor-form-container {
+ padding: 1rem;
+}
+
+.doctor-form-title {
+ margin-bottom: 1.5rem;
+ text-align: center;
+ font-size: 2.5rem;
+}
+
+.form-section {
+ margin-bottom: 2rem;
+ padding: 1.5rem;
+ border: 1px solid #dee2e6;
+ border-radius: 0.375rem;
+ box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+}
+
+.section-header {
+ margin-bottom: 1rem;
+ font-size: 1.8rem;
+ cursor: pointer;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.section-toggle {
+ font-size: 1.25rem;
+}
+
+.form-label {
+ font-size: 1.1rem;
+ margin-bottom: 0.5rem;
+}
+
+.form-control-custom {
+ font-size: 1.1rem;
+ padding: 0.5rem 0.75rem;
+}
+
+.avatar-container {
+ display: flex;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.avatar-image {
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.avatar-placeholder {
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ background-color: #e0e0e0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 3.5rem;
+ color: #9e9e9e;
+}
+
+.file-input-label {
+ font-size: 1rem;
+ padding: 0.5rem 1rem;
+}
+
+.actions-container {
+ margin-top: 1rem;
+ text-align: center;
+}
+
+.btn-submit {
+ font-size: 1.2rem;
+ padding: 0.75rem 1.5rem;
+ margin-right: 1rem;
+}
+
+.btn-cancel {
+ font-size: 1.2rem;
+ padding: 0.75rem 1.5rem;
+}
+
+
+.modal-overlay {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: 9999;
+}
+
+.modal-content {
+ background-color: #fff;
+ border-radius: 10px;
+ width: 400px;
+ max-width: 90%;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
+ overflow: hidden;
+}
+
+.modal-header {
+ background-color: #1e3a8a;
+ padding: 15px 20px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.modal-title {
+ color: #fff;
+ margin: 0;
+ font-size: 1.2rem;
+ font-weight: bold;
+}
+
+.modal-close-btn {
+ background: none;
+ border: none;
+ font-size: 20px;
+ color: #fff;
+ cursor: pointer;
+}
+
+.modal-body {
+ padding: 25px 20px;
+}
+
+.modal-message {
+ color: #111;
+ font-size: 1.1rem;
+ margin: 0 0 15px 0;
+ font-weight: bold;
+}
+
+.modal-list {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ margin-left: 10px;
+}
+
+.modal-list-item {
+ color: #111;
+ font-size: 1.1rem;
+ margin: 0;
+ font-weight: 600;
+}
+
+.modal-footer {
+ display: flex;
+ justify-content: flex-end;
+ padding: 15px 20px;
+ border-top: 1px solid #ddd;
+}
+
+.modal-confirm-btn {
+ background-color: #1e3a8a;
+ color: #fff;
+ border: none;
+ padding: 8px 20px;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 1rem;
+ font-weight: bold;
+}
+
+/* Responsive adjustments */
+@media (max-width: 768px) {
+ .doctor-form-title {
+ font-size: 2rem;
+ }
+
+ .section-header {
+ font-size: 1.5rem;
+ }
+
+ .form-section {
+ padding: 1rem;
+ }
+
+ .avatar-container {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ .btn-submit,
+ .btn-cancel {
+ font-size: 1.1rem;
+ padding: 0.6rem 1.2rem;
+ }
+}
\ No newline at end of file
diff --git a/src/components/doctors/DoctorForm.jsx b/src/components/doctors/DoctorForm.jsx
index 45ec0bf..8f335a7 100644
--- a/src/components/doctors/DoctorForm.jsx
+++ b/src/components/doctors/DoctorForm.jsx
@@ -1,5 +1,6 @@
import React, { useState, useRef } from 'react';
import { Link, useNavigate, useLocation } from 'react-router-dom';
+import './DoctorForm.css';
function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
const navigate = useNavigate();
@@ -22,16 +23,13 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
.replace(/(\d{3})(\d{1,2})$/, '$1-$2');
};
-
const validarCPF = (cpf) => {
const cpfLimpo = cpf.replace(/\D/g, '');
if (cpfLimpo.length !== 11) return false;
-
if (/^(\d)\1+$/.test(cpfLimpo)) return false;
-
let soma = 0;
for (let i = 0; i < 9; i++) {
soma += parseInt(cpfLimpo.charAt(i)) * (10 - i);
@@ -39,7 +37,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
let resto = 11 - (soma % 11);
let digito1 = resto === 10 || resto === 11 ? 0 : resto;
-
soma = 0;
for (let i = 0; i < 10; i++) {
soma += parseInt(cpfLimpo.charAt(i)) * (11 - i);
@@ -47,7 +44,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
resto = 11 - (soma % 11);
let digito2 = resto === 10 || resto === 11 ? 0 : resto;
-
return digito1 === parseInt(cpfLimpo.charAt(9)) && digito2 === parseInt(cpfLimpo.charAt(10));
};
@@ -79,12 +75,10 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
const handleChange = (e) => {
const { name, value, type, checked, files } = e.target;
-
if (value && emptyFields.includes(name)) {
setEmptyFields(prev => prev.filter(field => field !== name));
}
-
if (name === 'cpf' && cpfError) {
setCpfError('');
}
@@ -108,7 +102,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
let cpfFormatado = FormatCPF(value);
setFormData(prev => ({ ...prev, [name]: cpfFormatado }));
-
const cpfLimpo = cpfFormatado.replace(/\D/g, '');
if (cpfLimpo.length === 11) {
if (!validarCPF(cpfFormatado)) {
@@ -150,7 +143,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
}
};
-
const scrollToEmptyField = (fieldName) => {
let fieldRef = null;
@@ -183,7 +175,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
return;
}
-
setTimeout(() => {
if (fieldRef.current) {
fieldRef.current.scrollIntoView({
@@ -192,11 +183,9 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
});
fieldRef.current.focus();
-
fieldRef.current.style.border = '2px solid #dc3545';
fieldRef.current.style.boxShadow = '0 0 0 0.2rem rgba(220, 53, 69, 0.25)';
-
setTimeout(() => {
if (fieldRef.current) {
fieldRef.current.style.border = '';
@@ -208,7 +197,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
};
const handleSubmit = async () => {
-
const missingFields = [];
if (!formData.full_name) missingFields.push('full_name');
if (!formData.cpf) missingFields.push('cpf');
@@ -221,7 +209,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
setEmptyFields(missingFields);
setShowRequiredModal(true);
-
setTimeout(() => {
if (missingFields.length > 0) {
scrollToEmptyField(missingFields[0]);
@@ -230,7 +217,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
return;
}
-
const cpfLimpo = formData.cpf.replace(/\D/g, '');
if (cpfLimpo.length !== 11) {
setShowRequiredModal(true);
@@ -240,7 +226,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
return;
}
-
if (!validarCPF(formData.cpf)) {
setShowRequiredModal(true);
setEmptyFields(['cpf']);
@@ -249,12 +234,9 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
return;
}
-
try {
await onSave({ ...formData });
-
} catch (error) {
-
throw error;
}
};
@@ -265,96 +247,43 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
return (
<>
-
{showRequiredModal && (
-
-
-
-
Atenção
+
+
+
+
Atenção
-
-
+
+
{cpfError ? 'Problema com o CPF:' : 'Por favor, preencha:'}
-
+
{cpfError ? (
-
{cpfError}
+
{cpfError}
) : (
<>
- {!formData.full_name &&
- Nome
}
- {!formData.cpf &&
- CPF
}
- {!formData.email &&
- Email
}
- {!formData.phone_mobile &&
- Telefone
}
- {!formData.crm_uf &&
- Estado do CRM
}
- {!formData.crm &&
- CRM
}
+ {!formData.full_name &&
- Nome
}
+ {!formData.cpf &&
- CPF
}
+ {!formData.email &&
- Email
}
+ {!formData.phone_mobile &&
- Telefone
}
+ {!formData.crm_uf &&
- Estado do CRM
}
+ {!formData.crm &&
- CRM
}
>
)}
-
+
@@ -363,48 +292,35 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) {
)}
-
-
MediConnect
+
+
MediConnect
-
-
handleToggleCollapse('dadosPessoais')}
- style={{ fontSize: '1.8rem' }}>
+ {/* DADOS PESSOAIS */}
+
+
handleToggleCollapse('dadosPessoais')}>
Dados Pessoais
-
+
{collapsedSections.dadosPessoais ? '▲' : '▼'}
-
+
{avatarUrl ? (

) : (
-
-
+
- {formData.foto && {formData.foto.name}}
+ {formData.foto && {formData.foto.name}}
-
+
-
-
+
+
-
+
-
+