From d26c802265be6c80a00cc95b986b30f808d6c0fe Mon Sep 17 00:00:00 2001 From: GUSTAVO PIZATTO Date: Tue, 5 Aug 2025 08:07:08 -0300 Subject: [PATCH] Update index.jsx Comentado --- .../pages/mapcon/noticiasrastreadas/index.jsx | 112 +++++++++--------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/mapcon/pages/mapcon/noticiasrastreadas/index.jsx b/mapcon/pages/mapcon/noticiasrastreadas/index.jsx index 861c019..a908da7 100644 --- a/mapcon/pages/mapcon/noticiasrastreadas/index.jsx +++ b/mapcon/pages/mapcon/noticiasrastreadas/index.jsx @@ -1,44 +1,49 @@ +// Importa os hooks e componentes necessários do React e bibliotecas auxiliares import React, { useEffect, useRef, useState } from 'react'; -import TableCrud from '../../../lib/front/cruddatatable/datatable'; -import { Column } from 'primereact/column'; -import { useRouter } from 'next/router'; -import axios from 'axios'; -import ToolbarMapCon from '../../../components/toolbar_mapcon'; -import Loading from '../../../components/loading/loading'; -import { getSession } from 'next-auth/react'; -import { Dialog } from 'primereact/dialog'; -import { RadioButton } from 'primereact/radiobutton'; -import { useForm, Controller } from 'react-hook-form'; -import { Button } from 'primereact/button'; -import { InputText } from 'primereact/inputtext'; -import { ConfirmDialog } from 'primereact/confirmdialog'; -import { InputSwitch } from 'primereact/inputswitch'; -import moment from 'moment'; -import { Chip } from 'primereact/chip'; +import TableCrud from '../../../lib/front/cruddatatable/datatable'; // Componente de datatable customizado +import { Column } from 'primereact/column'; // Coluna da tabela PrimeReact +import { useRouter } from 'next/router'; // Hook de navegação +import axios from 'axios'; // Cliente HTTP +import ToolbarMapCon from '../../../components/toolbar_mapcon'; // Componente de toolbar +import Loading from '../../../components/loading/loading'; // Componente de loading +import { getSession } from 'next-auth/react'; // Função para obter sessão do next-auth +import { Dialog } from 'primereact/dialog'; // Modal +import { RadioButton } from 'primereact/radiobutton'; // Botões de opção +import { useForm, Controller } from 'react-hook-form'; // Biblioteca de formulários +import { Button } from 'primereact/button'; // Botão estilizado +import { InputText } from 'primereact/inputtext'; // Campo de texto +import { ConfirmDialog } from 'primereact/confirmdialog'; // Diálogo de confirmação +import { InputSwitch } from 'primereact/inputswitch'; // Interruptor +import moment from 'moment'; // Biblioteca de datas +import { Chip } from 'primereact/chip'; // Chip para tags +// Componente principal da página export default function NoticiasRastreadasPage(props) { const router = useRouter(); + // Estado que controla visibilidade do formulário de migração const [showForm, setShowForm] = useState({ visible: false }); const [loading, setLoading] = useState(true); const [defaultDate, setDefaultDate] = useState(new Date()); - // Para conseguir atualizar datatable + // Referência ao componente filho (datatable) para forçar atualização const childRef = useRef(); + // Executado ao carregar a página useEffect(() => { setDefaultDate(new Date()); const login = async () => { const session = await getSession(); if (!session) { - router.push("/login"); + router.push("/login"); // Redireciona se não estiver logado } else { - setLoading(false); + setLoading(false); // Remove tela de loading } }; login(); }, []); + // Fecha o formulário e atualiza a tabela se necessário function closeFormDialog(update) { setShowForm(false); if (update) { @@ -46,18 +51,24 @@ export default function NoticiasRastreadasPage(props) { } } + // Função chamada ao clicar em "Editar" uma notícia async function processNews(data) { const formated_date = moment(data.data).format("YYYY-MM-DD"); const session = await getSession(); + + // Consulta protestos próximos para possível vinculação const close_protests = await ( - await axios.get(`/api/mapcon/get_protestos_proximos?data=${formated_date}`, { params: { - user: { - id: session.user.id, - perfil: session.user.perfil - } - }}) + await axios.get(`/api/mapcon/get_protestos_proximos?data=${formated_date}`, { + params: { + user: { + id: session.user.id, + perfil: session.user.perfil + } + } + }) ).data; + // Abre formulário com os dados da notícia e protestos próximos setShowForm({ information: data, close_protests, @@ -65,13 +76,14 @@ export default function NoticiasRastreadasPage(props) { }); } - // Filtros + // Filtros disponíveis na tabela const filters = [ { label: "Título", value: "titulo", types: ["contain", "equal"] }, { label: "URL", value: "url", types: ["contain", "equal"] }, { label: "Data", value: "data", types: ["a partir de", "antes de"] }, ]; + // Formata a data exibida na tabela const dataBodyTemplate = (rowData) => { return (
@@ -81,6 +93,7 @@ export default function NoticiasRastreadasPage(props) { ); }; + // Botão de ação "Editar" na tabela function actionBodyTemplate(rowData) { return ( @@ -93,7 +106,8 @@ export default function NoticiasRastreadasPage(props) { ); } - + + // Botão de link para abrir URL da notícia function openURLBodyTemplate(rowData) { return ( @@ -111,6 +125,7 @@ export default function NoticiasRastreadasPage(props) { ); } + // Exibe tela de loading enquanto carrega ou componente com datatable return loading ? ( ) : ( @@ -124,31 +139,28 @@ export default function NoticiasRastreadasPage(props) { {...props} title="Notícias Rastreadas" filters={filters} - // onAddButtonClicked={addButtonClicked} - // onEditButtonClicked={editButtonClicked} - // onDeleteButtonClicked={deleteButtonClicked} url="/api/mapcon/crawling_news" > - {/* */} + {/* Coluna de data formatada */} - {/* */} + {/* Coluna de título */} - {/* */} + {/* Coluna de botão/link para URL */} - {/* */} + {/* Coluna com botão de ação */}
+ {/* Exibe formulário apenas se ativado */} {showForm.visible ? ( { setSending(true); dados.url = url; dados.data = moment(dados.data).format("yyyy-MM-DD"); + const session = await getSession(); + + // Se for protesto, migra para endpoint de protestos if (dados.is_protesto) { await axios .post(`/api/mapcon/migra`, { @@ -204,6 +221,7 @@ function MigraNoticiaForm({ showForm, closeForm }) { .then(() => setSending(false)) .catch(() => setSending(false)); } else { + // Se não for protesto, atualiza como notícia comum await axios.put("/api/mapcon/crawling_news", { url: url, tipo: false, @@ -254,6 +272,7 @@ function MigraNoticiaForm({ showForm, closeForm }) { } + {/* Campo "É um protesto?" */}

@@ -268,13 +287,13 @@ function MigraNoticiaForm({ showForm, closeForm }) { )} />
+ {/* Se for protesto, mostra lista para vincular a existente ou novo */} {isProtesto ? (

-
))} -
) : null} - {/* {isProtesto && isExistenteSet === "novo" ? ( -
- - ( - onChange(e.value)} - dateFormat="dd/mm/yy" - mask="99/99/9999" - showIcon - /> - )} - /> -
- ) : null} */} + {/* Se for novo protesto, permite editar o título (tema) */} {isProtesto && isExistenteSet === "novo" ? (