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 (