From fd457874a8101dcdf799f3a92950a2bedc099560 Mon Sep 17 00:00:00 2001 From: Karen Date: Tue, 24 Oct 2023 14:57:39 -0300 Subject: [PATCH 01/16] new feature reprocessing --- src/pages/ImportXml/index.tsx | 190 ++++++++++++++++++++++++---------- src/pages/ImportXml/styles.ts | 29 +++++- 2 files changed, 163 insertions(+), 56 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 18e0d29..84b689a 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -2,66 +2,15 @@ import { DataGrid, GridColDef, ptBR } from '@mui/x-data-grid'; import { toast, useNavbar } from '@cincoders/cinnamon'; import { useState, useEffect, useCallback } from 'react'; import { Modal, Grow } from '@mui/material'; -import { XMLDiv, DataDiv, ButtonsDiv, ImportButton, CardType } from './styles'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import { XMLDiv, DataDiv, ButtonsDiv, ImportButton, CardType, AnimatedRefreshButton } from './styles'; import { ImportXmlService } from '../../services/ImportXmlService'; import { renderImportStatus } from '../../components/ImportStatus'; +// import { renderReprocess } from 'ImportXml'; + import ImportCard from '../../components/ImportCard'; import { ImportXmlRows } from '../../types/Xml.d'; -const columns: GridColDef[] = [ - { - field: 'name', - headerName: 'Arquivo', - headerAlign: 'center', - align: 'center', - description: 'Nome do arquivo', - flex: 7, - }, - { - field: 'professor', - headerName: 'Professor', - headerAlign: 'center', - align: 'center', - description: 'Professor cujo XML foi importado', - flex: 11, - type: 'string', - }, - { - field: 'status', - headerName: 'Status', - renderCell: renderImportStatus, - headerAlign: 'center', - align: 'center', - description: 'Status da importação', - flex: 6, - }, - { - field: 'importTime', - headerName: 'Tempo da importação', - headerAlign: 'center', - align: 'center', - description: 'Duração de tempo que o XML foi importado', - flex: 7, - type: 'string', - }, - { - field: 'includedAt', - headerName: 'Data da importação', - headerAlign: 'center', - align: 'center', - description: 'Data que o XML foi importado', - flex: 10, - }, - { - field: 'user', - headerName: 'Usuário', - headerAlign: 'center', - align: 'center', - description: 'Usuário que realizou a importação', - flex: 10, - }, -]; - function ImportXml() { const navbar = useNavbar(); const [loading, setLoading] = useState(true); @@ -73,6 +22,116 @@ function ImportXml() { isLoading: false, pageSize: 25, }); + const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); + const [isRotating, setIsRotating] = useState(false); + + const handleButtonClick = () => { + setIsRotating(true); + + // Add your custom logic or API call here + + // Reset the rotation after a delay (e.g., 2 seconds) + setTimeout(() => { + setIsRotating(false); + }, 2000); + }; + const columns: GridColDef[] = [ + { + field: 'name', + headerName: 'Arquivo', + headerAlign: 'center', + align: 'center', + description: 'Nome do arquivo', + flex: 7, + }, + { + field: 'professor', + headerName: 'Professor', + headerAlign: 'center', + align: 'center', + description: 'Professor cujo XML foi importado', + flex: 11, + type: 'string', + }, + { + field: 'status', + headerName: 'Status', + renderCell: renderImportStatus, + headerAlign: 'center', + align: 'center', + description: 'Status da importação', + flex: 6, + }, + { + field: 'importTime', + headerName: 'Tempo da importação', + headerAlign: 'center', + align: 'center', + description: 'Duração de tempo que o XML foi importado', + flex: 7, + type: 'string', + }, + { + field: 'includedAt', + headerName: 'Data da importação', + headerAlign: 'center', + align: 'center', + description: 'Data que o XML foi importado', + flex: 10, + }, + { + field: 'user', + headerName: 'Usuário', + headerAlign: 'center', + align: 'center', + description: 'Usuário que realizou a importação', + flex: 10, + }, + { + field: 'reload', + headerName: '', + headerAlign: 'center', + align: 'center', + flex: 2, + renderCell: params => { + // Check if the professor from the current row exists in firstRowByProfessor + // console.log(params); + if (params.row && params.row.professor) { + const { professor } = params.row; + // console.log(firstRowByProfessor); + // console.log(professor); + console.log(firstRowByProfessor); + // console.log(professor); + if (firstRowByProfessor[professor] === params.row) { + return ( + : null} + > + + + ); + } + } + return null; + }, + }, + ]; + + // function renderReprocess() { + // return ( + // + // ); + // } + function dateInFull(date: Date) { const fullDate = date.toLocaleString(undefined, { year: 'numeric', @@ -98,6 +157,27 @@ function ImportXml() { importTime: elem.importTime ? `${elem.importTime}s` : '', user: elem.user, })); + + await xmls.forEach(xml => { + const { professor } = xml; + + if (professor && !(professor in firstRowByProfessor)) { + // firstRowByProfessor[professor] = xml; + // Instead of modifying `firstRowByProfessor` directly, update it using `setFirstRowByProfessor`. + setFirstRowByProfessor(prevData => { + const newData = { ...prevData }; + + if (professor) { + if (!(professor in newData)) { + newData[professor] = xml; + } + } + + return newData; + }); + } + }); + console.log(firstRowByProfessor); setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); setRows(xmls); } catch { diff --git a/src/pages/ImportXml/styles.ts b/src/pages/ImportXml/styles.ts index 1c4832b..0be4d0a 100644 --- a/src/pages/ImportXml/styles.ts +++ b/src/pages/ImportXml/styles.ts @@ -1,4 +1,31 @@ -import { Box, Button, Card, styled } from '@mui/material'; +import { Box, Button, Card } from '@mui/material'; +import styled, { keyframes, css } from 'styled-components'; + +interface CustomButtonProps { + isRotating: boolean; // Define your custom prop +} +const spin = keyframes` + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +`; + +export const AnimatedRefreshButton = styled(Button)` + // Pass your custom prop type to Button + background: none; + border: none; + cursor: pointer; + + /* Apply the animation when the 'isRotating' prop is true */ + ${props => + props.isRotating && + css` + animation: ${spin} 2s linear infinite; + `} +`; export const XMLDiv = styled(Box)({ display: 'flex', From 76ac47bda2c71de52a232a8ae2972a0acd81f6f6 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 30 Oct 2023 14:24:32 -0300 Subject: [PATCH 02/16] fix reload buttons display --- src/pages/ImportXml/index.tsx | 64 +++++++++++++++++------------------ src/pages/ImportXml/styles.ts | 4 +-- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 84b689a..5c30286 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -23,17 +23,14 @@ function ImportXml() { pageSize: 25, }); const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); - const [isRotating, setIsRotating] = useState(false); + const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); - const handleButtonClick = () => { - setIsRotating(true); - - // Add your custom logic or API call here - - // Reset the rotation after a delay (e.g., 2 seconds) + const handleButtonClick = (professor: string) => { + // setIsRotating(true); + setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); setTimeout(() => { - setIsRotating(false); - }, 2000); + setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); + }, 4000); }; const columns: GridColDef[] = [ { @@ -94,21 +91,24 @@ function ImportXml() { align: 'center', flex: 2, renderCell: params => { - // Check if the professor from the current row exists in firstRowByProfessor - // console.log(params); - if (params.row && params.row.professor) { + // console.log({ params }); + if (params.row) { const { professor } = params.row; // console.log(firstRowByProfessor); - // console.log(professor); - console.log(firstRowByProfessor); - // console.log(professor); - if (firstRowByProfessor[professor] === params.row) { + // console.log('hey b4'); + // console.log(params.row.importTime); + console.log(firstRowByProfessor[professor]); + console.log(params.row, 'params.row'); + console.log(firstRowByProfessor[professor] === params.row); + if (firstRowByProfessor[professor]?.id === params.row.id) { + // console.log('hey'); return ( handleButtonClick(professor)} variant='text' - startIcon={isRotating ? : null} + style={{ pointerEvents: rotatingButtons[professor] ? 'none' : 'auto' }} + disableRipple > @@ -120,18 +120,6 @@ function ImportXml() { }, ]; - // function renderReprocess() { - // return ( - // - // ); - // } - function dateInFull(date: Date) { const fullDate = date.toLocaleString(undefined, { year: 'numeric', @@ -164,6 +152,7 @@ function ImportXml() { if (professor && !(professor in firstRowByProfessor)) { // firstRowByProfessor[professor] = xml; // Instead of modifying `firstRowByProfessor` directly, update it using `setFirstRowByProfessor`. + setFirstRowByProfessor(prevData => { const newData = { ...prevData }; @@ -177,7 +166,7 @@ function ImportXml() { }); } }); - console.log(firstRowByProfessor); + // console.log(firstRowByProfessor); setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); setRows(xmls); } catch { @@ -196,6 +185,17 @@ function ImportXml() { useEffect(() => { loadPaginatedData(pageState.page, pageState.pageSize); }, [pageState.pageSize, pageState.page, loadPaginatedData]); + // useEffect(() => { + // const newFirstRowByProfessor = rows.reduce((acc, curr) => { + // const { professor } = curr; + // if (professor && !(professor in acc)) { + // acc[professor] = curr; + // } + // return acc; + // }, {} as { [professor: string]: ImportXmlRows }); + + // setFirstRowByProfessor(newFirstRowByProfessor); + // }, [rows]); return ( diff --git a/src/pages/ImportXml/styles.ts b/src/pages/ImportXml/styles.ts index 0be4d0a..20b3eda 100644 --- a/src/pages/ImportXml/styles.ts +++ b/src/pages/ImportXml/styles.ts @@ -14,16 +14,14 @@ const spin = keyframes` `; export const AnimatedRefreshButton = styled(Button)` - // Pass your custom prop type to Button background: none; border: none; cursor: pointer; - /* Apply the animation when the 'isRotating' prop is true */ ${props => props.isRotating && css` - animation: ${spin} 2s linear infinite; + animation: ${spin} 1s linear infinite; `} `; From a84a874e25f694ff103e707cf976b5f5ddc94a67 Mon Sep 17 00:00:00 2001 From: Karen Date: Wed, 1 Nov 2023 15:21:23 -0300 Subject: [PATCH 03/16] add reprocessing updates to xml table --- src/pages/ImportXml/index.tsx | 41 ++++++++++++++++++-------------- src/services/ImportXmlService.ts | 9 +++++++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 5c30286..927a6d1 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -25,13 +25,6 @@ function ImportXml() { const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); - const handleButtonClick = (professor: string) => { - // setIsRotating(true); - setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); - setTimeout(() => { - setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); - }, 4000); - }; const columns: GridColDef[] = [ { field: 'name', @@ -81,7 +74,7 @@ function ImportXml() { headerName: 'Usuário', headerAlign: 'center', align: 'center', - description: 'Usuário que realizou a importação', + description: 'Usuário que realizou a i mportação', flex: 10, }, { @@ -91,17 +84,10 @@ function ImportXml() { align: 'center', flex: 2, renderCell: params => { - // console.log({ params }); if (params.row) { const { professor } = params.row; - // console.log(firstRowByProfessor); - // console.log('hey b4'); - // console.log(params.row.importTime); - console.log(firstRowByProfessor[professor]); - console.log(params.row, 'params.row'); - console.log(firstRowByProfessor[professor] === params.row); + console.log(params.row); if (firstRowByProfessor[professor]?.id === params.row.id) { - // console.log('hey'); return ( ({ ...currentValue, total: data.totalElements })); setRows(xmls); } catch { @@ -196,7 +181,27 @@ function ImportXml() { // setFirstRowByProfessor(newFirstRowByProfessor); // }, [rows]); - + const handleButtonClick = (professor: string) => { + // setIsRotating(true); + console.log(professor); + setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); + // setTimeout(() => { + // setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); + // }, 4000); + try { + const a = ImportXmlService.reprocessXML(professor); + console.log(a); + } catch (error) { + toast.error('Não foi possível reprocessar o XML. Tente novamente mais tarde.', { + containerId: 'page', + }); + } finally { + setTimeout(() => { + setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); + }, 4000); + loadPaginatedData(pageState.page, pageState.pageSize); + } + }; return ( diff --git a/src/services/ImportXmlService.ts b/src/services/ImportXmlService.ts index 3e7e0d3..fd4129d 100644 --- a/src/services/ImportXmlService.ts +++ b/src/services/ImportXmlService.ts @@ -39,4 +39,13 @@ export class ImportXmlService { }); return response; } + + static async reprocessXML(id: string): Promise { + console.log(id); + const response = await apiBack.get(`import-xml/${id}/reprocess`, { + validateStatus: (status: number) => [200].includes(status), + }); + // console.log(response); + return response; + } } From d8ac8f5ad8d337f8292c294f05d70c2f8f9803c2 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 29 Dec 2023 17:43:42 -0300 Subject: [PATCH 04/16] fix bug in reloading table while reprocessing --- src/pages/ImportXml/index.tsx | 167 +++++++++++++++------------------- 1 file changed, 75 insertions(+), 92 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 927a6d1..ef4c5b7 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -1,12 +1,11 @@ import { DataGrid, GridColDef, ptBR } from '@mui/x-data-grid'; import { toast, useNavbar } from '@cincoders/cinnamon'; -import { useState, useEffect, useCallback } from 'react'; +import { useState, useEffect, useCallback, useMemo } from 'react'; import { Modal, Grow } from '@mui/material'; import RefreshIcon from '@mui/icons-material/Refresh'; import { XMLDiv, DataDiv, ButtonsDiv, ImportButton, CardType, AnimatedRefreshButton } from './styles'; import { ImportXmlService } from '../../services/ImportXmlService'; import { renderImportStatus } from '../../components/ImportStatus'; -// import { renderReprocess } from 'ImportXml'; import ImportCard from '../../components/ImportCard'; import { ImportXmlRows } from '../../types/Xml.d'; @@ -25,6 +24,20 @@ function ImportXml() { const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); + const handleButtonClick = async (professor: string) => { + setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); + + try { + await ImportXmlService.reprocessXML(professor); + loadPaginatedData(pageState.page, pageState.pageSize); + } catch (error) { + toast.error('Não foi possível reprocessar o XML. Tente novamente mais tarde.', { + containerId: 'page', + }); + } finally { + setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); + } + }; const columns: GridColDef[] = [ { field: 'name', @@ -84,22 +97,22 @@ function ImportXml() { align: 'center', flex: 2, renderCell: params => { - if (params.row) { - const { professor } = params.row; - console.log(params.row); - if (firstRowByProfessor[professor]?.id === params.row.id) { - return ( - handleButtonClick(professor)} - variant='text' - style={{ pointerEvents: rotatingButtons[professor] ? 'none' : 'auto' }} - disableRipple - > - - - ); - } + const { professor, status, showIcon } = params.row; + + if (showIcon) { + return ( + handleButtonClick(professor)} + variant='text' + style={{ + pointerEvents: rotatingButtons[professor] || status === 'In Progress' ? 'none' : 'auto', + }} + disableRipple + > + + + ); } return null; }, @@ -117,51 +130,52 @@ function ImportXml() { }); return fullDate; } - const loadPaginatedData = useCallback(async (page: number, pageSize: number) => { - setRows([]); - setLoading(true); - try { - const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); - const xmls = data.data.map((elem, i) => ({ - id: i, - professor: elem.professor, - name: elem.name, - status: elem.status, - includedAt: dateInFull(new Date(elem.includedAt)), - importTime: elem.importTime ? `${elem.importTime}s` : '', - user: elem.user, - })); - - await xmls.forEach(xml => { - const { professor } = xml; + const loadPaginatedData = useCallback( + async (page: number, pageSize: number) => { + setRows([]); + setLoading(true); + try { + const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); + const xmls = data.data.map((elem, i) => ({ + id: i, + professor: elem.professor, + name: elem.name, + status: elem.status, + includedAt: dateInFull(new Date(elem.includedAt)), + importTime: elem.importTime ? `${elem.importTime}s` : '', + user: elem.user, + })); - if (professor && !(professor in firstRowByProfessor)) { - // firstRowByProfessor[professor] = xml; - // Instead of modifying `firstRowByProfessor` directly, update it using `setFirstRowByProfessor`. + const reversedXmls = [...xmls].reverse(); - setFirstRowByProfessor(prevData => { - const newData = { ...prevData }; - - if (professor) { - if (!(professor in newData)) { - newData[professor] = xml; - } - } + reversedXmls.forEach(xml => { + const { professor } = xml; + if (professor && !(professor in firstRowByProfessor)) { + setFirstRowByProfessor(prevState => ({ ...prevState, [professor]: xml })); + } + }); - return newData; - }); - } - }); - setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); - setRows(xmls); - } catch { - toast.error('Não foi possível carregar o histórico de importações. Tente novamente mais tarde.', { - containerId: 'page', - }); - } finally { - setLoading(false); - } - }, []); + setRows(xmls); + setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); + } catch { + toast.error('Não foi possível carregar o histórico de importações. Tente novamente mais tarde.', { + containerId: 'page', + }); + } finally { + setLoading(false); + } + }, + [firstRowByProfessor], + ); + const updateRows = useMemo(() => { + const updatedRows = rows.map(xml => ({ + ...xml, + showIcon: + firstRowByProfessor[xml.professor]?.includedAt === xml.includedAt && + firstRowByProfessor[xml.professor].importTime === xml.importTime, + })); + return updatedRows; + }, [rows]); useEffect(() => { navbar?.setTitle('Importação de XML'); @@ -170,44 +184,13 @@ function ImportXml() { useEffect(() => { loadPaginatedData(pageState.page, pageState.pageSize); }, [pageState.pageSize, pageState.page, loadPaginatedData]); - // useEffect(() => { - // const newFirstRowByProfessor = rows.reduce((acc, curr) => { - // const { professor } = curr; - // if (professor && !(professor in acc)) { - // acc[professor] = curr; - // } - // return acc; - // }, {} as { [professor: string]: ImportXmlRows }); - // setFirstRowByProfessor(newFirstRowByProfessor); - // }, [rows]); - const handleButtonClick = (professor: string) => { - // setIsRotating(true); - console.log(professor); - setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); - // setTimeout(() => { - // setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); - // }, 4000); - try { - const a = ImportXmlService.reprocessXML(professor); - console.log(a); - } catch (error) { - toast.error('Não foi possível reprocessar o XML. Tente novamente mais tarde.', { - containerId: 'page', - }); - } finally { - setTimeout(() => { - setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); - }, 4000); - loadPaginatedData(pageState.page, pageState.pageSize); - } - }; return ( Date: Wed, 3 Jan 2024 12:36:07 -0300 Subject: [PATCH 05/16] add new informations to professors list --- src/pages/ProfessorsList/index.tsx | 56 ++++++++++++++++++++++++++++-- src/types/Professor.d.ts | 5 +++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/pages/ProfessorsList/index.tsx b/src/pages/ProfessorsList/index.tsx index 9247880..1344930 100644 --- a/src/pages/ProfessorsList/index.tsx +++ b/src/pages/ProfessorsList/index.tsx @@ -31,20 +31,65 @@ function Table() { headerName: 'NOME', headerAlign: 'center', description: 'Nome do professor', - flex: 30, + flex: 25, renderCell: params => { const link = Links.PROFESSOR_INFO.replace(':id', params.row.professorId as unknown as string); return ; }, renderHeader: renderHeaderTooltip, }, + { + field: 'computerArticles', + headerName: 'ARTIGOS', + headerAlign: 'center', + align: 'center', + description: 'Nº de artigos de computação do professor', + flex: 9, + renderHeader: renderHeaderTooltip, + }, + { + field: 'computerPublications', + headerName: 'PUBLICAÇÕES', + headerAlign: 'center', + align: 'center', + description: 'Nº de publicações de computação do professor', + flex: 8, + renderHeader: renderHeaderTooltip, + }, + { + field: 'books', + headerName: 'LIVROS', + headerAlign: 'center', + align: 'center', + description: 'Nº de livros escritos pelo professor', + flex: 8, + renderHeader: renderHeaderTooltip, + }, + { + field: 'patents', + headerName: 'PATENTES', + headerAlign: 'center', + align: 'center', + description: 'Nº de patentes feitos pelo professor', + flex: 8, + renderHeader: renderHeaderTooltip, + }, + { + field: 'artisticProductions', + headerName: 'PROD. ARTÍSTICAS', + headerAlign: 'center', + align: 'center', + description: 'Nº de produções artísticas feitas pelo professor', + flex: 8, + renderHeader: renderHeaderTooltip, + }, { field: 'idLattes', headerName: 'CÓDIGO LATTES', headerAlign: 'center', align: 'center', description: 'Código lattes do professor', - flex: 10, + flex: 15, renderCell: params => , renderHeader: renderHeaderTooltip, }, @@ -95,7 +140,7 @@ function Table() { headerAlign: 'center', align: 'center', description: 'Excluir Professor', - flex: 5, + flex: 7, minWidth: 10, renderCell: params => { const professor = params.row; @@ -124,6 +169,11 @@ function Table() { professorId: element.professorId, professorName: element.professorName, identifier: element.identifier, + artisticProductions: element.artisticProductions, + books: element.books, + computerArticles: element.computerArticles, + computerPublications: element.computerPublications, + patents: element.patents, })); setRows(newData); } else { diff --git a/src/types/Professor.d.ts b/src/types/Professor.d.ts index 89068bb..d7d6155 100644 --- a/src/types/Professor.d.ts +++ b/src/types/Professor.d.ts @@ -9,4 +9,9 @@ export interface ProfessorDetails { id?: number; professorName: string; identifier: string; + artisticProductions: number; + books: number; + computerArticles: number; + computerPublications: number; + patents: number; } From a3972893e8156aa0a13a186a14e72adc9abfdde3 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 8 Jan 2024 15:55:42 -0300 Subject: [PATCH 06/16] fix reloading icon update after reprocessing --- src/pages/ImportXml/index.tsx | 108 ++++++++++++++++++++++------------ 1 file changed, 69 insertions(+), 39 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index ef4c5b7..4ee2c2c 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -24,12 +24,66 @@ function ImportXml() { const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); + const loadPaginatedData = useCallback( + async (page: number, pageSize: number, reproc = false) => { + setRows([]); + setLoading(true); + try { + const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); + const xmls = data.data.map((elem, i) => ({ + id: i, + professor: elem.professor, + name: elem.name, + status: elem.status, + includedAt: dateInFull(new Date(elem.includedAt)), + importTime: elem.importTime ? `${elem.importTime}s` : '', + user: elem.user, + })); + console.log('xmls', xmls); + const reversedXmls = [...xmls].reverse(); + console.log(firstRowByProfessor); + // const updatedFirstRowByProfessor = { ...firstRowByProfessor }; + setFirstRowByProfessor(prevState => { + const updatedState = { ...prevState }; + + reversedXmls.forEach(xml => { + const { professor } = xml; + + if (professor && !(professor in prevState)) { + updatedState[professor] = xml; + } else if (professor && professor in prevState && reproc) { + updatedState[professor] = xml; + } + }); + + return updatedState; + }); + + console.log('reversedXmls', reversedXmls); + console.log('firstRowByProfessor', firstRowByProfessor); + setRows(xmls); + setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); + } catch { + toast.error('Não foi possível carregar o histórico de importações. Tente novamente mais tarde.', { + containerId: 'page', + }); + } finally { + setLoading(false); + } + }, + [firstRowByProfessor], + ); + const handleButtonClick = async (professor: string) => { setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); - try { await ImportXmlService.reprocessXML(professor); - loadPaginatedData(pageState.page, pageState.pageSize); + // setTimeout(() => { + await loadPaginatedData(pageState.page, pageState.pageSize, true); + // }, 5000); + // await loadPaginatedData(pageState.page, pageState.pageSize); + // console.log(testResult); + // loadPaginatedData(pageState.page, pageState.pageSize); } catch (error) { toast.error('Não foi possível reprocessar o XML. Tente novamente mais tarde.', { containerId: 'page', @@ -38,6 +92,11 @@ function ImportXml() { setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); } }; + + useEffect(() => { + console.log('Updated firstRowByProfessor:', firstRowByProfessor); + }, [firstRowByProfessor]); + const columns: GridColDef[] = [ { field: 'name', @@ -108,6 +167,11 @@ function ImportXml() { style={{ pointerEvents: rotatingButtons[professor] || status === 'In Progress' ? 'none' : 'auto', }} + sx={{ + '&:hover': { + backgroundColor: 'initial', + }, + }} disableRipple > @@ -130,50 +194,16 @@ function ImportXml() { }); return fullDate; } - const loadPaginatedData = useCallback( - async (page: number, pageSize: number) => { - setRows([]); - setLoading(true); - try { - const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); - const xmls = data.data.map((elem, i) => ({ - id: i, - professor: elem.professor, - name: elem.name, - status: elem.status, - includedAt: dateInFull(new Date(elem.includedAt)), - importTime: elem.importTime ? `${elem.importTime}s` : '', - user: elem.user, - })); - - const reversedXmls = [...xmls].reverse(); - - reversedXmls.forEach(xml => { - const { professor } = xml; - if (professor && !(professor in firstRowByProfessor)) { - setFirstRowByProfessor(prevState => ({ ...prevState, [professor]: xml })); - } - }); - setRows(xmls); - setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); - } catch { - toast.error('Não foi possível carregar o histórico de importações. Tente novamente mais tarde.', { - containerId: 'page', - }); - } finally { - setLoading(false); - } - }, - [firstRowByProfessor], - ); const updateRows = useMemo(() => { + console.log('triggered usememo'); const updatedRows = rows.map(xml => ({ ...xml, showIcon: firstRowByProfessor[xml.professor]?.includedAt === xml.includedAt && firstRowByProfessor[xml.professor].importTime === xml.importTime, })); + console.log(updatedRows); return updatedRows; }, [rows]); @@ -183,7 +213,7 @@ function ImportXml() { useEffect(() => { loadPaginatedData(pageState.page, pageState.pageSize); - }, [pageState.pageSize, pageState.page, loadPaginatedData]); + }, [pageState.pageSize, pageState.page]); return ( From e10cefaf980826d4552455a350c7170b63a45a25 Mon Sep 17 00:00:00 2001 From: Karen Date: Tue, 9 Jan 2024 12:03:14 -0300 Subject: [PATCH 07/16] cleaning update --- src/pages/ImportXml/index.tsx | 121 +++++++++++++++------------------- 1 file changed, 53 insertions(+), 68 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 4ee2c2c..55f025a 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -24,66 +24,68 @@ function ImportXml() { const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); - const loadPaginatedData = useCallback( - async (page: number, pageSize: number, reproc = false) => { - setRows([]); - setLoading(true); - try { - const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); - const xmls = data.data.map((elem, i) => ({ - id: i, - professor: elem.professor, - name: elem.name, - status: elem.status, - includedAt: dateInFull(new Date(elem.includedAt)), - importTime: elem.importTime ? `${elem.importTime}s` : '', - user: elem.user, - })); - console.log('xmls', xmls); - const reversedXmls = [...xmls].reverse(); - console.log(firstRowByProfessor); - // const updatedFirstRowByProfessor = { ...firstRowByProfessor }; - setFirstRowByProfessor(prevState => { - const updatedState = { ...prevState }; + function dateInFull(date: Date) { + const fullDate = date.toLocaleString(undefined, { + year: 'numeric', + month: 'long', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + }); + return fullDate; + } - reversedXmls.forEach(xml => { - const { professor } = xml; + const loadPaginatedData = useCallback(async (page: number, pageSize: number, reproc = false) => { + setRows([]); + setLoading(true); - if (professor && !(professor in prevState)) { - updatedState[professor] = xml; - } else if (professor && professor in prevState && reproc) { - updatedState[professor] = xml; - } - }); + try { + const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); + const xmls = data.data.map((elem, i) => ({ + id: i, + professor: elem.professor, + name: elem.name, + status: elem.status, + includedAt: dateInFull(new Date(elem.includedAt)), + importTime: elem.importTime ? `${elem.importTime}s` : '', + user: elem.user, + })); + const reversedXmls = [...xmls].reverse(); + setFirstRowByProfessor(prevState => { + const updatedState = { ...prevState }; - return updatedState; - }); + reversedXmls.forEach(xml => { + const { professor } = xml; - console.log('reversedXmls', reversedXmls); - console.log('firstRowByProfessor', firstRowByProfessor); - setRows(xmls); - setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); - } catch { - toast.error('Não foi possível carregar o histórico de importações. Tente novamente mais tarde.', { - containerId: 'page', + if (professor && !(professor in prevState)) { + updatedState[professor] = xml; + } else if (professor && professor in prevState && reproc) { + setPageState(currentValue => ({ ...currentValue, page })); + + updatedState[professor] = xml; + } }); - } finally { - setLoading(false); - } - }, - [firstRowByProfessor], - ); + + return updatedState; + }); + + setRows(xmls); + setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); + } catch { + toast.error('Não foi possível carregar o histórico de importações. Tente novamente mais tarde.', { + containerId: 'page', + }); + } finally { + setLoading(false); + } + }, []); const handleButtonClick = async (professor: string) => { setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); try { await ImportXmlService.reprocessXML(professor); - // setTimeout(() => { - await loadPaginatedData(pageState.page, pageState.pageSize, true); - // }, 5000); - // await loadPaginatedData(pageState.page, pageState.pageSize); - // console.log(testResult); - // loadPaginatedData(pageState.page, pageState.pageSize); + await loadPaginatedData(1, pageState.pageSize, true); } catch (error) { toast.error('Não foi possível reprocessar o XML. Tente novamente mais tarde.', { containerId: 'page', @@ -93,10 +95,6 @@ function ImportXml() { } }; - useEffect(() => { - console.log('Updated firstRowByProfessor:', firstRowByProfessor); - }, [firstRowByProfessor]); - const columns: GridColDef[] = [ { field: 'name', @@ -183,27 +181,13 @@ function ImportXml() { }, ]; - function dateInFull(date: Date) { - const fullDate = date.toLocaleString(undefined, { - year: 'numeric', - month: 'long', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - }); - return fullDate; - } - const updateRows = useMemo(() => { - console.log('triggered usememo'); const updatedRows = rows.map(xml => ({ ...xml, showIcon: firstRowByProfessor[xml.professor]?.includedAt === xml.includedAt && firstRowByProfessor[xml.professor].importTime === xml.importTime, })); - console.log(updatedRows); return updatedRows; }, [rows]); @@ -245,6 +229,7 @@ function ImportXml() { }, }, }} + key={pageState.page} /> From 88da41202a6669ade7fb5639315c42f86b1ce413 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 22:51:30 +0000 Subject: [PATCH 08/16] Bump follow-redirects from 1.14.9 to 1.15.4 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.9 to 1.15.4. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.9...v1.15.4) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index df56090..10ce87d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7327,14 +7327,15 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.14.9", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, From 3b37b32047e2a72db3f9eb646015c9a0e75bc21f Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 15 Jan 2024 14:04:48 -0300 Subject: [PATCH 09/16] update handlebuttonclick to handleReprocess --- src/pages/ImportXml/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 55f025a..4f95ff5 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -81,7 +81,7 @@ function ImportXml() { } }, []); - const handleButtonClick = async (professor: string) => { + const handleReprocessClick = async (professor: string) => { setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); try { await ImportXmlService.reprocessXML(professor); @@ -160,7 +160,7 @@ function ImportXml() { return ( handleButtonClick(professor)} + onClick={() => handleReprocessClick(professor)} variant='text' style={{ pointerEvents: rotatingButtons[professor] || status === 'In Progress' ? 'none' : 'auto', From 2f819eec06e5f45a829260acfbc84c2ad8f623c5 Mon Sep 17 00:00:00 2001 From: karen Date: Mon, 22 Jan 2024 20:44:27 -0300 Subject: [PATCH 10/16] update to match new importXML format ad changes from backend --- .gitattributes | Bin 0 -> 28 bytes src/pages/ImportXml/index.tsx | 76 ++++++++++++++----------------- src/pages/ImportXml/styles.ts | 7 +-- src/services/ImportXmlService.ts | 6 +-- src/types/Xml.d.ts | 3 +- 5 files changed, 43 insertions(+), 49 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..8a0242db94e0ed11c41115085ec3f10efbc53606 GIT binary patch literal 28 gcmezWPm4i;p@boop#n(SG9)sT0_l7PUIs1(0CJE98UO$Q literal 0 HcmV?d00001 diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 4f95ff5..1441429 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -1,6 +1,6 @@ import { DataGrid, GridColDef, ptBR } from '@mui/x-data-grid'; import { toast, useNavbar } from '@cincoders/cinnamon'; -import { useState, useEffect, useCallback, useMemo } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { Modal, Grow } from '@mui/material'; import RefreshIcon from '@mui/icons-material/Refresh'; import { XMLDiv, DataDiv, ButtonsDiv, ImportButton, CardType, AnimatedRefreshButton } from './styles'; @@ -21,8 +21,8 @@ function ImportXml() { isLoading: false, pageSize: 25, }); - const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); - const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); + // const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); + // const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); function dateInFull(date: Date) { const fullDate = date.toLocaleString(undefined, { @@ -36,39 +36,42 @@ function ImportXml() { return fullDate; } - const loadPaginatedData = useCallback(async (page: number, pageSize: number, reproc = false) => { + const loadPaginatedData = useCallback(async (page: number, pageSize: number) => { setRows([]); setLoading(true); try { const { data } = await ImportXmlService.findAllImportedXmls(pageSize, page - 1); - const xmls = data.data.map((elem, i) => ({ - id: i, + + const xmls = data.data.map(elem => ({ + id: elem.id, professor: elem.professor, name: elem.name, status: elem.status, includedAt: dateInFull(new Date(elem.includedAt)), importTime: elem.importTime ? `${elem.importTime}s` : '', user: elem.user, + reprocessFlag: elem.reprocessFlag, })); - const reversedXmls = [...xmls].reverse(); - setFirstRowByProfessor(prevState => { - const updatedState = { ...prevState }; + console.log(xmls); + // const reversedXmls = [...xmls].reverse(); + // setFirstRowByProfessor(prevState => { + // const updatedState = { ...prevState }; - reversedXmls.forEach(xml => { - const { professor } = xml; + // reversedXmls.forEach(xml => { + // const { professor } = xml; - if (professor && !(professor in prevState)) { - updatedState[professor] = xml; - } else if (professor && professor in prevState && reproc) { - setPageState(currentValue => ({ ...currentValue, page })); + // if (professor && !(professor in prevState)) { + // updatedState[professor] = xml; + // } else if (professor && professor in prevState && reproc) { + // setPageState(currentValue => ({ ...currentValue, page })); - updatedState[professor] = xml; - } - }); + // updatedState[professor] = xml; + // } + // }); - return updatedState; - }); + // return updatedState; + // }); setRows(xmls); setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); @@ -81,17 +84,17 @@ function ImportXml() { } }, []); - const handleReprocessClick = async (professor: string) => { - setRotatingButtons(prevState => ({ ...prevState, [professor]: true })); + const handleReprocessClick = async (xmlId: string) => { + // setRotatingButtons(prevState => ({ ...prevState, [xmlId]: true })); try { - await ImportXmlService.reprocessXML(professor); - await loadPaginatedData(1, pageState.pageSize, true); + await ImportXmlService.reprocessXML(xmlId); + await loadPaginatedData(1, pageState.pageSize); } catch (error) { toast.error('Não foi possível reprocessar o XML. Tente novamente mais tarde.', { containerId: 'page', }); } finally { - setRotatingButtons(prevState => ({ ...prevState, [professor]: false })); + // setRotatingButtons(prevState => ({ ...prevState, [xmlId]: false })); } }; @@ -154,16 +157,15 @@ function ImportXml() { align: 'center', flex: 2, renderCell: params => { - const { professor, status, showIcon } = params.row; - - if (showIcon) { + const { status, reprocessFlag, id } = params.row; + if (reprocessFlag) { return ( handleReprocessClick(professor)} + isrotating={status === 'In Progress' || status === 'Pending'} + onClick={() => handleReprocessClick(id)} variant='text' style={{ - pointerEvents: rotatingButtons[professor] || status === 'In Progress' ? 'none' : 'auto', + pointerEvents: status === 'In Progress' || status === 'Pending' ? 'none' : 'auto', }} sx={{ '&:hover': { @@ -181,16 +183,6 @@ function ImportXml() { }, ]; - const updateRows = useMemo(() => { - const updatedRows = rows.map(xml => ({ - ...xml, - showIcon: - firstRowByProfessor[xml.professor]?.includedAt === xml.includedAt && - firstRowByProfessor[xml.professor].importTime === xml.importTime, - })); - return updatedRows; - }, [rows]); - useEffect(() => { navbar?.setTitle('Importação de XML'); }, [navbar]); @@ -204,7 +196,7 @@ function ImportXml() { ` border: none; cursor: pointer; - ${props => - props.isRotating && + ${(props: CustomButtonProps) => + props.isrotating && css` animation: ${spin} 1s linear infinite; `} diff --git a/src/services/ImportXmlService.ts b/src/services/ImportXmlService.ts index fd4129d..674189b 100644 --- a/src/services/ImportXmlService.ts +++ b/src/services/ImportXmlService.ts @@ -1,6 +1,6 @@ import { AxiosResponse } from 'axios'; import apiBack from './api'; -import { ImportXmlDto, ImportXmlProps, Pagination } from '../types/Xml.d'; +import { ImportXmlProps, ImportXmlRows, Pagination } from '../types/Xml.d'; export class ImportXmlService { static async importXml( @@ -32,8 +32,8 @@ export class ImportXmlService { limit: number, page: number, offset?: number, - ): Promise>> { - const response = await apiBack.get>('import-xml', { + ): Promise>> { + const response = await apiBack.get>('import-xml', { validateStatus: status => [200].includes(status), params: { limit, page, offset }, }); diff --git a/src/types/Xml.d.ts b/src/types/Xml.d.ts index 6dd531b..40949e1 100644 --- a/src/types/Xml.d.ts +++ b/src/types/Xml.d.ts @@ -22,8 +22,9 @@ export interface ImportXmlDto { status: string; includedAt: string; importTime: string | undefined; + reprocessFlag: boolean; } export interface ImportXmlRows extends ImportXmlDto { - id: number; + id: string; } From 0d2ea09231a89e554df42772577c0c7ee514ddd7 Mon Sep 17 00:00:00 2001 From: Karen Date: Tue, 23 Jan 2024 12:55:48 -0300 Subject: [PATCH 11/16] code cleaning --- src/pages/ImportXml/index.tsx | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 1441429..4dd69a1 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -21,8 +21,7 @@ function ImportXml() { isLoading: false, pageSize: 25, }); - // const [firstRowByProfessor, setFirstRowByProfessor] = useState<{ [professor: string]: ImportXmlRows }>({}); - // const [rotatingButtons, setRotatingButtons] = useState<{ [professor: string]: boolean }>({}); + const [rotatingButtons, setRotatingButtons] = useState<{ [xmlId: string]: boolean }>({}); function dateInFull(date: Date) { const fullDate = date.toLocaleString(undefined, { @@ -53,25 +52,6 @@ function ImportXml() { user: elem.user, reprocessFlag: elem.reprocessFlag, })); - console.log(xmls); - // const reversedXmls = [...xmls].reverse(); - // setFirstRowByProfessor(prevState => { - // const updatedState = { ...prevState }; - - // reversedXmls.forEach(xml => { - // const { professor } = xml; - - // if (professor && !(professor in prevState)) { - // updatedState[professor] = xml; - // } else if (professor && professor in prevState && reproc) { - // setPageState(currentValue => ({ ...currentValue, page })); - - // updatedState[professor] = xml; - // } - // }); - - // return updatedState; - // }); setRows(xmls); setPageState(currentValue => ({ ...currentValue, total: data.totalElements })); @@ -85,7 +65,7 @@ function ImportXml() { }, []); const handleReprocessClick = async (xmlId: string) => { - // setRotatingButtons(prevState => ({ ...prevState, [xmlId]: true })); + setRotatingButtons(prevState => ({ ...prevState, [xmlId]: true })); try { await ImportXmlService.reprocessXML(xmlId); await loadPaginatedData(1, pageState.pageSize); @@ -94,7 +74,7 @@ function ImportXml() { containerId: 'page', }); } finally { - // setRotatingButtons(prevState => ({ ...prevState, [xmlId]: false })); + setRotatingButtons(prevState => ({ ...prevState, [xmlId]: false })); } }; @@ -161,11 +141,12 @@ function ImportXml() { if (reprocessFlag) { return ( handleReprocessClick(id)} variant='text' style={{ - pointerEvents: status === 'In Progress' || status === 'Pending' ? 'none' : 'auto', + pointerEvents: + status === 'In Progress' || status === 'Pending' || rotatingButtons[id] ? 'none' : 'auto', }} sx={{ '&:hover': { From 537da86e410c67cb55f99f93a9fcdefe1542bf79 Mon Sep 17 00:00:00 2001 From: Karen Date: Tue, 23 Jan 2024 15:34:31 -0300 Subject: [PATCH 12/16] rename reprocessFlag to storedXml --- src/pages/ImportXml/index.tsx | 6 +++--- src/types/Xml.d.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 4dd69a1..f021386 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -50,7 +50,7 @@ function ImportXml() { includedAt: dateInFull(new Date(elem.includedAt)), importTime: elem.importTime ? `${elem.importTime}s` : '', user: elem.user, - reprocessFlag: elem.reprocessFlag, + storedXml: elem.storedXml, })); setRows(xmls); @@ -137,8 +137,8 @@ function ImportXml() { align: 'center', flex: 2, renderCell: params => { - const { status, reprocessFlag, id } = params.row; - if (reprocessFlag) { + const { status, storedXml, id } = params.row; + if (storedXml) { return ( Date: Tue, 23 Jan 2024 16:56:24 -0300 Subject: [PATCH 13/16] fix code cleaning --- .gitattributes | Bin 28 -> 0 bytes src/services/ImportXmlService.ts | 2 -- 2 files changed, 2 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 8a0242db94e0ed11c41115085ec3f10efbc53606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28 gcmezWPm4i;p@boop#n(SG9)sT0_l7PUIs1(0CJE98UO$Q diff --git a/src/services/ImportXmlService.ts b/src/services/ImportXmlService.ts index 674189b..be1ac73 100644 --- a/src/services/ImportXmlService.ts +++ b/src/services/ImportXmlService.ts @@ -41,11 +41,9 @@ export class ImportXmlService { } static async reprocessXML(id: string): Promise { - console.log(id); const response = await apiBack.get(`import-xml/${id}/reprocess`, { validateStatus: (status: number) => [200].includes(status), }); - // console.log(response); return response; } } From 73180848a8df12a5a3786f783608a5e0dbc04e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Brand=C3=A3o?= Date: Wed, 24 Jan 2024 15:02:33 -0300 Subject: [PATCH 14/16] Remove duplicated unused interface --- src/pages/ImportXml/index.tsx | 4 ++-- src/services/ImportXmlService.ts | 6 +++--- src/types/Xml.d.ts | 5 +---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index f021386..72097b3 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -8,12 +8,12 @@ import { ImportXmlService } from '../../services/ImportXmlService'; import { renderImportStatus } from '../../components/ImportStatus'; import ImportCard from '../../components/ImportCard'; -import { ImportXmlRows } from '../../types/Xml.d'; +import { ImportXmlDto } from '../../types/Xml.d'; function ImportXml() { const navbar = useNavbar(); const [loading, setLoading] = useState(true); - const [rows, setRows] = useState([]); + const [rows, setRows] = useState([]); const [open, setOpen] = useState(false); const [pageState, setPageState] = useState({ page: 1, diff --git a/src/services/ImportXmlService.ts b/src/services/ImportXmlService.ts index be1ac73..c2ce895 100644 --- a/src/services/ImportXmlService.ts +++ b/src/services/ImportXmlService.ts @@ -1,6 +1,6 @@ import { AxiosResponse } from 'axios'; import apiBack from './api'; -import { ImportXmlProps, ImportXmlRows, Pagination } from '../types/Xml.d'; +import { ImportXmlDto, ImportXmlProps, Pagination } from '../types/Xml.d'; export class ImportXmlService { static async importXml( @@ -32,8 +32,8 @@ export class ImportXmlService { limit: number, page: number, offset?: number, - ): Promise>> { - const response = await apiBack.get>('import-xml', { + ): Promise>> { + const response = await apiBack.get>('import-xml', { validateStatus: status => [200].includes(status), params: { limit, page, offset }, }); diff --git a/src/types/Xml.d.ts b/src/types/Xml.d.ts index 71aebd8..a0258f1 100644 --- a/src/types/Xml.d.ts +++ b/src/types/Xml.d.ts @@ -16,6 +16,7 @@ export interface Pagination { } export interface ImportXmlDto { + id: string; name: string; professor: string; user: string; @@ -24,7 +25,3 @@ export interface ImportXmlDto { importTime: string | undefined; storedXml: boolean; } - -export interface ImportXmlRows extends ImportXmlDto { - id: string; -} From 079c672dc73acd9e7e2bdeff10b31bd64d46ebe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Brand=C3=A3o?= Date: Wed, 24 Jan 2024 16:58:55 -0300 Subject: [PATCH 15/16] Fix minor bugs --- package-lock.json | 42 ++++++++++++++++++++++++-------- package.json | 2 +- src/pages/ImportXml/index.tsx | 2 +- src/services/ImportXmlService.ts | 4 ++- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10ce87d..ee6c333 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@mui/icons-material": "^5.4.1", "@mui/material": "^5.5.0", "@mui/x-data-grid": "^5.12.1", - "axios": "^0.24.0", + "axios": "^1.6.5", "keycloak-js": "^18.0.0", "oidc-client-ts": "^2.2.4", "react": "18.1", @@ -4655,10 +4655,26 @@ } }, "node_modules/axios": { - "version": "0.24.0", - "license": "MIT", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dependencies": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/axobject-query": { @@ -5189,7 +5205,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001477", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "funding": [ { "type": "opencollective", @@ -5203,8 +5221,7 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -7327,9 +7344,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "funding": [ { "type": "individual", @@ -11575,6 +11592,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.8.0", "license": "MIT" diff --git a/package.json b/package.json index 7ad6bef..6b8b019 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@mui/icons-material": "^5.4.1", "@mui/material": "^5.5.0", "@mui/x-data-grid": "^5.12.1", - "axios": "^0.24.0", + "axios": "^1.6.5", "keycloak-js": "^18.0.0", "oidc-client-ts": "^2.2.4", "react": "18.1", diff --git a/src/pages/ImportXml/index.tsx b/src/pages/ImportXml/index.tsx index 72097b3..21abe47 100644 --- a/src/pages/ImportXml/index.tsx +++ b/src/pages/ImportXml/index.tsx @@ -170,7 +170,7 @@ function ImportXml() { useEffect(() => { loadPaginatedData(pageState.page, pageState.pageSize); - }, [pageState.pageSize, pageState.page]); + }, [pageState.pageSize, pageState.page, loadPaginatedData]); return ( diff --git a/src/services/ImportXmlService.ts b/src/services/ImportXmlService.ts index c2ce895..c5803f1 100644 --- a/src/services/ImportXmlService.ts +++ b/src/services/ImportXmlService.ts @@ -21,7 +21,9 @@ export class ImportXmlService { }, validateStatus: (status: number) => [201, 500].includes(status), onUploadProgress: progressEvent => { - const progress: number = Math.round((progressEvent.loaded / progressEvent.total) * 100); + const progress: number = progressEvent?.total + ? Math.round((progressEvent.loaded / progressEvent.total) * 100) + : 0; updateProgress(progress); }, }); From 41a50b496cf2b5f910f36caa73c352d5dc57ba34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Brand=C3=A3o?= Date: Thu, 25 Jan 2024 13:49:47 -0300 Subject: [PATCH 16/16] Update Version 1.1.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee6c333..279f2cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "research-front", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "research-front", - "version": "1.0.0", + "version": "1.1.0", "license": "MIT", "dependencies": { "@cincoders/cinnamon": "^1.2.0", diff --git a/package.json b/package.json index 6b8b019..12e70f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "research-front", - "version": "1.0.0", + "version": "1.1.0", "description": "Research Dashboard - System to display information extracted from professors' Lattes curriculum.", "license": "MIT", "author": "CInCoders (https://cincoders.cin.ufpe.br)",