// Provenance: jardimdesoftware/edutrace (fixed). // repo: jardimdesoftware/edutrace // commit: ee7ba25fb23ea89cc1b67549cb5e32c8ead92739 // parent: c4dc6ddcc5492c77c8a5ad7369c87dea29c001fd // commit_url: https://github.com/jardimdesoftware/edutrace/commit/ee7ba25fb23ea89cc1b67549cb5e32c8ead92739 // cve: // license: Apache-2.0 // function: handleInputChange // relpath: front/src/app/editar-anamnese/page.tsx // provenance: agent // mechanism: prototype_pollution function AnamnesePage() { const searchParams = useSearchParams(); const email = searchParams.get("email"); const nome = searchParams.get("nome"); const { loading } = useAuth(); const router = useRouter(); const [anamnesis, setAnamnesis] = useState(null); const [isLoading, setIsLoading] = useState(true); const [formData, setFormData] = useState(initialAnamnesisState); useEffect(() => { async function fetchData() { setIsLoading(true); try { const token = decodeToken(); if (!token) { router.push('/login'); return; } const isStudent = token.id_level === ESTUDANTE; if (token.id_level === PROFISSIONAL_EDUCACAO || isStudent) { router.push(`/anamnese${email ? `?email=${email}&nome=${nome}` : ''}`); return; } const target = isStudent ? token.email : email; if (target) { const data = await getAnamneseByEmail(target); setAnamnesis(data); setFormData(data); } } catch (error) { console.error("Anamnese não encontrada, iniciando modo de criação.", error); setAnamnesis(null); } finally { setIsLoading(false); } } fetchData(); }, [email, nome, router]); const handleInputChange = (name: string, value: string) => { const keys = name.split('.'); if (keys.some((key) => key === '__proto__' || key === 'constructor' || key === 'prototype')) return; setFormData(prevData => { const newData = JSON.parse(JSON.stringify(prevData)); let current = newData; for (let i = 0; i < keys.length - 1; i++) { current = current[keys[i]]; } current[keys[keys.length - 1]] = value; return newData; }); }; const handleCheckboxClick = (name: string) => { const keys = name.split('.'); if (keys.some((key) => key === '__proto__' || key === 'constructor' || key === 'prototype')) return; setFormData(prevData => { // Criar uma cópia profunda para segurança const newData = JSON.parse(JSON.stringify(prevData)); let currentSection = newData; // Navega até o penúltimo nível do objeto for (let i = 0; i < keys.length - 1; i++) { currentSection = currentSection[keys[i]]; } const finalKey = keys[keys.length - 1]; const currentValue = currentSection[finalKey]; // Inverte o valor booleano atual currentSection[finalKey] = !currentValue; return newData; }); }; const handleEdit = async () => { if (!email) { alert("Email do estudante não encontrado para editar anamnese."); return; } try { const dadosAtualizados = { ...formData }; await patchAnamnesis(dadosAtualizados, email); alert("Anamnese atualizada com sucesso!"); router.push(`/estudantes/visualizar?email=${email}&nome=${nome}`); } catch (error) { console.error("Erro ao atualizar Anamnese: ", error); alert("Falha ao atualizar Anamnese. Verifique o console para mais detalhes."); } }; if (isLoading || loading) { return

Carregando...

; //ADICIONAR COMPONENTE DE LOADING } if (anamnesis === null) { return (

O estudante ainda não possui uma Anamnese cadastrada

) } return (

Editar Anamnese

{/* Identificação */}

Identificação

handleInputChange('identification.nome_unidade_plena', e.target.value)} /> handleInputChange('identification.nome_completo', e.target.value)} /> handleInputChange('identification.data_de_nascimento', e.target.value)} /> handleInputChange('identification.endereco', e.target.value)} /> handleInputChange('identification.bairo', e.target.value)} /> handleInputChange('identification.cep', e.target.value)} /> handleInputChange('identification.municipio', e.target.value)} /> handleInputChange('identification.curso', e.target.value)} /> handleInputChange('identification.serie_de_escolaridade_atual', e.target.value)} /> handleInputChange('identification.turma', e.target.value)} /> handleInputChange('identification.idade_iniciou_estudos', e.target.value)} />
{/* Dados Familiares */}

Dados familiares

handleInputChange('family_data.nome_pai', e.target.value)} /> handleInputChange('family_data.profissao_pai', e.target.value)} /> handleInputChange('family_data.escolaridade_pai', e.target.value)} /> handleInputChange('family_data.idade_pai', e.target.value)} /> handleInputChange('family_data.nome_mae', e.target.value)} /> handleInputChange('family_data.profissao_mae', e.target.value)} /> handleInputChange('family_data.escolaridade_mae', e.target.value)} /> handleInputChange('family_data.idade_mae', e.target.value)} /> handleInputChange('family_data.outros_filhos', e.target.value)} />
handleCheckboxClick('family_data.uniao_pais.casados')} /> handleCheckboxClick('family_data.uniao_pais.separados')} /> handleCheckboxClick('family_data.uniao_pais.separados_como_nova_estrutura_familia')} />
handleCheckboxClick('family_data.pais.biologico')} /> handleCheckboxClick('family_data.pais.adotivo')} />
handleInputChange('family_data.estudante_reside_com_quem', e.target.value)} /> handleInputChange('family_data.reacao_estudante_situacao', e.target.value)} />
{/* Condições familiares do estudante */}

Condições familiares do estudante

Condições de moradia

handleCheckboxClick('family_conditions.moradia.taipa')} /> handleCheckboxClick('family_conditions.moradia.alvenaria')} /> handleCheckboxClick('family_conditions.moradia.palafita')} />

Convívio familiar

handleCheckboxClick('family_conditions.convivio_familiar.excelente')} /> handleCheckboxClick('family_conditions.convivio_familiar.bom')} /> handleCheckboxClick('family_conditions.convivio_familiar.problematico')} /> handleCheckboxClick('family_conditions.convivio_familiar.precario')} />

Qualidade de comunicação

handleCheckboxClick('family_conditions.qualidade_comunicacao_com_estudante.execelente')} /> handleCheckboxClick('family_conditions.qualidade_comunicacao_com_estudante.boa')} /> handleCheckboxClick('family_conditions.qualidade_comunicacao_com_estudante.ruim')} /> handleCheckboxClick('family_conditions.qualidade_comunicacao_com_estudante.pessima')} />
handleInputChange('family_conditions.medidas_disciplinares_com_estudante', e.target.value)} /> handleInputChange('family_conditions.quem_usa_medidas_disciplinares', e.target.value)} /> handleInputChange('family_conditions.reacao_estudante_frente_medidas', e.target.value)} /> handleInputChange('family_conditions.reacao_contrariado', e.target.value)} />

Condições do ambiente familiar para a aprendizagem escolar

handleInputChange('family_conditions.condicao_ambiente_familiar_aprendizagem_escolar', e.target.value)} />
{/* Histórico da Mãe */}

Histórico da Mãe

{/* Gestação */}

Gestação

handleInputChange('mother_background.gestacao.transfusao_sanguinea_gravidez', e.target.value)} /> handleInputChange('mother_background.gestacao.quando_sentiu_movimento_da_crianca', e.target.value)} /> handleInputChange('mother_background.gestacao.levou_tombo_durante_gravidez', e.target.value)} /> handleInputChange('mother_background.gestacao.doenca_na_gestacao', e.target.value)} /> handleInputChange('mother_background.gestacao.condicao_saude_da_mae_na_gravidez', e.target.value)} /> handleInputChange('mother_background.gestacao.episodio_marcante_gravidez', e.target.value)} />
{/* Condições de Nascimento */}

Condições de Nascimento

handleInputChange('mother_background.condicoes_nascimento.nasceu_quantos_meses', e.target.value)} /> handleInputChange('mother_background.condicoes_nascimento.nasceu_quantos_quilos', e.target.value)} /> handleInputChange('mother_background.condicoes_nascimento.nasceu_com_qual_comprimento', e.target.value)} /> handleInputChange('mother_background.condicoes_nascimento.desenvolvimento_parto', e.target.value)} />
{/* Primeiras Reações */}

Primeiras Reações

handleInputChange('mother_background.primeiras_reacoes.chorou', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.ficou_vermelho_demais', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.ficou_vermelho_por_quanto_tempo', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.precisou_de_oxigenio', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.ficou_icterico', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.como_era_quando_bebe', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.qual_idade_afirmou_cabeca', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.qual_idade_sentou_sem_apoio', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.qual_idade_engatinhou', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.qual_idade_ficou_de_pe', e.target.value)} /> handleInputChange('mother_background.primeiras_reacoes.qual_idade_andou', e.target.value)} />
{/* Linguagem Verbal (3 anos) */}

Linguagem Verbal (3 anos)

handleCheckboxClick('verbal_language_three_years.balbuciou')} /> handleCheckboxClick('verbal_language_three_years.trocou_letras')} /> handleCheckboxClick('verbal_language_three_years.gaguejou')} />
handleInputChange('verbal_language_three_years.primeiras_expressoes', e.target.value)} />
{/* Desenvolvimento */}

Desenvolvimento

{/* Saúde */}

Saúde

handleInputChange('development.saude.sofreu_acidente_ou_fez_cirurgia', e.target.value)} /> handleInputChange('development.saude.possui_alergia', e.target.value)} /> handleInputChange('development.saude.possui_bronquite_ou_asma', e.target.value)} /> handleInputChange('development.saude.possui_problema_visao_audicao', e.target.value)} /> handleInputChange('development.saude.ja_desmaiou', e.target.value)} /> handleInputChange('development.saude.quando_desmaiou', e.target.value)} /> handleInputChange('development.saude.teve_ou_tem_convulsoes', e.target.value)} />
{/* Alimentação */}

Alimentação

handleInputChange('development.alimentacao.foi_amamentada', e.target.value)} /> handleInputChange('development.alimentacao.foi_amementada_ate_quando', e.target.value)} /> handleInputChange('development.alimentacao.como_e_sua_alimentacao', e.target.value)} /> handleInputChange('development.alimentacao.foi_forcado_se_alimentar', e.target.value)} /> handleInputChange('development.alimentacao.recebe_ajuda_na_alimentacao', e.target.value)} />
{/* Sono */}

Sono

handleCheckboxClick('development.sono.dorme_bem')} /> handleCheckboxClick('development.sono.dorme_separado_dos_pais')} />
handleInputChange('development.sono.com_quem_dorme', e.target.value)} />

Tipo de sono

handleCheckboxClick('development.sono.sono.agitado')} /> handleCheckboxClick('development.sono.sono.tranquilo')} /> handleCheckboxClick('development.sono.sono.fala_dormindo')} /> handleCheckboxClick('development.sono.sono.sonambulo')} />
{/* Informações Escolares */}

Informações Escolares

handleInputChange('school_information.historico_escolar_comum_antecedentes_relevantes', e.target.value)} /> handleInputChange('school_information.historico_escolar_especial_antecedentes_relevantes', e.target.value)} /> handleInputChange('school_information.deficiencia_apresentada_estudante', e.target.value)} /> handleInputChange('school_information.retido_alguma_vez', e.target.value)} /> handleInputChange('school_information.gosta_de_ir_escola', e.target.value)} /> handleInputChange('school_information.bem_aceito_pelos_amigous', e.target.value)} />
{/* Sexualidade */}

Sexualidade

handleCheckboxClick('sexuality.explanacao_sexual')} /> handleCheckboxClick('sexuality.curiosidade_sexual')} /> handleCheckboxClick('sexuality.conversa_com_pais_sobre_sexualidade')} />
{/* Avaliação do Estudante */}

Avaliação do Estudante

handleInputChange('student_assessment.estudante_apresenta_outro_tipo_deficiencia', e.target.value)} />
handleCheckboxClick('student_assessment.apresenta_da_df_di_pc_tgd')} />
handleInputChange('student_assessment.se_sim_data_e_resultado_diagnostico', e.target.value)} /> handleInputChange('student_assessment.se_não_situacao_quanto_diagnostico_tem_outras_dificuldades', e.target.value)} /> handleInputChange('student_assessment.se_tem_outras_dificuldades', e.target.value)} />
handleCheckboxClick('student_assessment.usa_medicamentos_controlados')} />
handleInputChange('student_assessment.usa_quais_medicamentos', e.target.value)} />
handleCheckboxClick('student_assessment.medicamento_interfere_aprendizagem')} />
handleInputChange('student_assessment.se_intefere_aprendizagem', e.target.value)} />
handleCheckboxClick('student_assessment.existem_recomendacoes_da_saude')} />
handleInputChange('student_assessment.se_possui_recomendacoes_da_saude', e.target.value)} />
{/* Desenvolvimento do Estudante */}

Desenvolvimento do Estudante

{/* Função Cognitiva */}

Função Cognitiva

handleInputChange('student_development.funcao_cognitiva.percepcao', e.target.value)} /> handleInputChange('student_development.funcao_cognitiva.atencao', e.target.value)} /> handleInputChange('student_development.funcao_cognitiva.memoria', e.target.value)} /> handleInputChange('student_development.funcao_cognitiva.linguagem', e.target.value)} /> handleInputChange('student_development.funcao_cognitiva.raciocinio_logico', e.target.value)} />
{/* Função Motora */}

Função Motora

handleInputChange('student_development.funcao_motora.desenvolvimento_e_capacidade_motora', e.target.value)} />
{/* Função Pessoal Social */}

Função Pessoal Social

handleInputChange('student_development.funcao_pressoal_social.area_emocional_afetiva_social', e.target.value)} />
{/* Botões */}
); }