From 7074c8609db41b54823416703209ed1daaa91e6f Mon Sep 17 00:00:00 2001 From: Luis Felipe Risch <lfr20@inf.ufpr.br> Date: Wed, 23 Jun 2021 10:49:34 -0300 Subject: [PATCH] fixed seragch --- .../CollectionTemplate.js | 2 +- src/Components/SearchPageComponents/Error.js | 30 +++ .../SearchPageComponents/FilterSummary.js | 2 +- .../SearchPageComponents/ResourceTemplate.js | 2 +- .../SearchPageComponents/UserTemplate.js | 2 +- src/Pages/Search.js | 206 ++++++++++++------ 6 files changed, 172 insertions(+), 72 deletions(-) create mode 100644 src/Components/SearchPageComponents/Error.js diff --git a/src/Components/SearchPageComponents/CollectionTemplate.js b/src/Components/SearchPageComponents/CollectionTemplate.js index 4b14e6b0..c3bcb3ee 100644 --- a/src/Components/SearchPageComponents/CollectionTemplate.js +++ b/src/Components/SearchPageComponents/CollectionTemplate.js @@ -10,8 +10,8 @@ import ArrowBackIcon from '@material-ui/icons/ArrowBack'; import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; export default function ResourceTemplate({ isLoading, resources, totalResources, currPage, handlePreviousPage, handleNextPage }) { - const totalPages = Math.ceil(totalResources / 12) - 1; //Dividing by 12 because i want to cath total pages, and results per page is 12 const topRef = React.useRef(); + const totalPages = parseInt(totalResources) === 0 ? 0 : Math.ceil(totalResources / 12) - 1; //Dividing by 12 because i want to cath total pages, and results per page is 12 useEffect(() => { topRef.current.scrollIntoView() diff --git a/src/Components/SearchPageComponents/Error.js b/src/Components/SearchPageComponents/Error.js new file mode 100644 index 00000000..7cb9d98c --- /dev/null +++ b/src/Components/SearchPageComponents/Error.js @@ -0,0 +1,30 @@ +import React from 'react'; +import styled from 'styled-components'; +import Paper from '@material-ui/core/Paper'; + +export default function Error() { + return <ResourcePaper square elevation={4}> + <Title> + Houve um erro durante a obtenção de dados :( + </Title> + </ResourcePaper> +} + +const ResourcePaper = styled(Paper)` + /* height: 150px; */ + text-align: center; + background-color: #fff; + margin-top: 5px; + margin-bottom: 30px; + padding: 0.5em 1em; + color: #666; + width: 100%; +`; + +const Title = styled.h4` + text-transform: uppercase; + font-weight: 500; + text-align: left; + color: #666; + text-align: center; +` \ No newline at end of file diff --git a/src/Components/SearchPageComponents/FilterSummary.js b/src/Components/SearchPageComponents/FilterSummary.js index f11e0a32..9cc1a9ae 100644 --- a/src/Components/SearchPageComponents/FilterSummary.js +++ b/src/Components/SearchPageComponents/FilterSummary.js @@ -10,7 +10,7 @@ export default function FilterSummary return ( <FilterSummaryPaper square elevation={4}> <h3 className="title"> - Resumo dos filtros colocados + Resumo dos filtros selecionados </h3> <Grid container direction='column' spacing={2}> <Grid item> diff --git a/src/Components/SearchPageComponents/ResourceTemplate.js b/src/Components/SearchPageComponents/ResourceTemplate.js index 28651ca0..01f74736 100644 --- a/src/Components/SearchPageComponents/ResourceTemplate.js +++ b/src/Components/SearchPageComponents/ResourceTemplate.js @@ -10,7 +10,7 @@ import ArrowBackIcon from '@material-ui/icons/ArrowBack'; import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; export default function ResourceTemplate({ isLoading, resources, totalResources, currPage, handlePreviousPage, handleNextPage }) { - const totalPages = Math.ceil(totalResources / 12) - 1; //Dividing by 12 because i want to cath total pages, and results per page is 12 + const totalPages = parseInt(totalResources) === 0 ? 0 : Math.ceil(totalResources / 12) - 1; //Dividing by 12 because i want to cath total pages, and results per page is 12 const topRef = React.useRef(); useEffect(() => { diff --git a/src/Components/SearchPageComponents/UserTemplate.js b/src/Components/SearchPageComponents/UserTemplate.js index 45ebb66f..991a31d3 100644 --- a/src/Components/SearchPageComponents/UserTemplate.js +++ b/src/Components/SearchPageComponents/UserTemplate.js @@ -10,7 +10,7 @@ import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; import { apiDomain } from '../../env'; export default function ResourceTemplate({ isLoading, resources, totalResources, currPage, handlePreviousPage, handleNextPage }) { - const totalPages = Math.ceil(totalResources / 12) - 1; //Dividing by 12 because i want to cath total pages, and results per page is 12 + const totalPages = parseInt(totalResources) === 0 ? 0 : Math.ceil(totalResources / 12) - 1; //Dividing by 12 because i want to cath total pages, and results per page is 12 const topRef = React.useRef(); useEffect(() => { diff --git a/src/Pages/Search.js b/src/Pages/Search.js index a2783f65..15628592 100644 --- a/src/Pages/Search.js +++ b/src/Pages/Search.js @@ -17,7 +17,7 @@ // along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -import React, { useEffect, useState, Fragment } from 'react'; +import React, { useEffect, useState, Fragment, useContext } from 'react'; import styled from 'styled-components'; import { Link } from 'react-router-dom'; import Breadcrumbs from '@material-ui/core/Breadcrumbs'; @@ -25,6 +25,7 @@ import HeaderFilters from '../Components/SearchPageComponents/HeaderFilters'; import ResourceTemplate from '../Components/SearchPageComponents/ResourceTemplate'; import CollectionTemplate from '../Components/SearchPageComponents/CollectionTemplate'; import UserTemplate from '../Components/SearchPageComponents/UserTemplate'; +import Error from '../Components/SearchPageComponents/Error'; import { getRequest } from '../Components/HelperFunctions/getAxiosConfig'; import { useHistory } from 'react-router-dom'; import SearchExpansionPanel from '../Components/SearchExpansionPanel/SearchExpansionPanel'; @@ -35,9 +36,17 @@ import { filtersStages, filtersLanguages, } from '../Components/SearchPageComponents/filters'; +import Snackbar from '@material-ui/core/Snackbar'; +import MuiAlert from '@material-ui/lab/Alert'; +import { Store } from '../Store' + +function Alert(props) { + return <MuiAlert elevation={6} variant="filled" {...props} />; +} export default function Search() { const history = useHistory(); + const { state } = useContext(Store) const [currOption, setCurrOption] = useState(''); const [currOrder, serCurrOrder] = useState('review_average'); @@ -49,6 +58,12 @@ export default function Search() { const [currLanguagesValues, setCurrLanguagesValues] = useState(''); const [currTag, setCurrTag] = useState(''); const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(false); + const [snackInfo, setSnackInfo] = useState({ + open: false, + text: "", + severity: "", + }); const [curriculumComponents, setCurriculumComponents] = useState([]); const [typeOfResources, setTypeOfResources] = useState([]); @@ -80,6 +95,19 @@ export default function Search() { { value: 'Ordem Alfabética', name: 'title' }, ]; + function handleSnackInfo(info) { + setSnackInfo({ ...info }) + } + + function handleCloseSnack() { + const snackInfo = { + open: false, + text: "", + severity: "", + } + handleSnackInfo(snackInfo) + } + function onButtonClicked() { const curriculumValues = []; const typeOfResourcesValues = []; @@ -127,7 +155,7 @@ export default function Search() { if (languagesValues.length >= 1) { url = url + `&languages=${languagesValues}` } - if (tag.length >= 1) + if (tag && tag.length >= 1) url = url + `&tags=${tag}` } } @@ -270,6 +298,13 @@ export default function Search() { } function handleFail() { + const snackInfo = { + open: true, + text: "Houve um erro ao carregar os dados!", + severity: "warning", + } + handleSnackInfo(snackInfo) + setError(true); setIsLoading(false); } @@ -354,6 +389,7 @@ export default function Search() { setCurrTeachingStageValues(educationalStages); setCurrTypeOfResValues(objectTypes); setCurrTag(tags); + setTag(tags); handleSubjects(subjects); handleObjectTypes(objectTypes); @@ -388,87 +424,121 @@ export default function Search() { handleFail, ); - }, [window.history.state === null ? true : window.history.state.key]) - - return ( - <MainPage> - <StyledBreadCrumbs> - <Link to='/'>Página Inicial</Link> - <span>Busca</span> - </StyledBreadCrumbs> - <HeaderFilters - options={options} - orders={orders} - currOption={currOption} - currOrder={currOrder} - handleChangeOption={handleChangeOption} - handleChangeOrder={handleChangeOrder} - /> - { - currOption === 'LearningObject' && - <Fragment> - <SearchExpansionPanel - setTag={(tag) => setTag(tag)} - curriculumComponents={curriculumComponents} - setCurriculum={(array) => { setCurriculumComponents(array) }} - typeOfResources={typeOfResources} - setTypeRes={(array) => { setTypeOfResources(array) }} - teachingStage={teachingStage} - setTeachingStage={(array) => { setTeachingStage(array) }} - languages={languages} - setLanguages={(array) => { setLanguages(array) }} - /> - { - <FilterSummary + }, [window.history.state === null ? true : window.history.state.key, state.currentUser.id]) + + if (error) + return ( + <MainPageError> + <Snackbar + open={snackInfo.open} + autoHideDuration={6000} + onClose={handleCloseSnack} + anchorOrigin={{ vertical: 'top', horizontal: 'right' }} + > + <Alert onClose={handleCloseSnack} severity={snackInfo.severity}> + {snackInfo.text} + </Alert> + </Snackbar> + <Error /> + </MainPageError> + ) + else + return ( + <MainPage> + <Snackbar + open={snackInfo.open} + autoHideDuration={6000} + onClose={handleCloseSnack} + anchorOrigin={{ vertical: 'top', horizontal: 'right' }} + > + <Alert onClose={handleCloseSnack} severity={snackInfo.severity}> + {snackInfo.text} + </Alert> + </Snackbar> + <StyledBreadCrumbs> + <Link to='/'>Página Inicial</Link> + <span>Busca</span> + </StyledBreadCrumbs> + <HeaderFilters + options={options} + orders={orders} + currOption={currOption} + currOrder={currOrder} + handleChangeOption={handleChangeOption} + handleChangeOrder={handleChangeOrder} + /> + { + currOption === 'LearningObject' && + <Fragment> + <SearchExpansionPanel + setTag={(tag) => setTag(tag)} curriculumComponents={curriculumComponents} + setCurriculum={(array) => { setCurriculumComponents(array) }} typeOfResources={typeOfResources} - languages={languages} + setTypeRes={(array) => { setTypeOfResources(array) }} teachingStage={teachingStage} - tag={tag} - onButtonClicked={onButtonClicked} + setTeachingStage={(array) => { setTeachingStage(array) }} + languages={languages} + setLanguages={(array) => { setLanguages(array) }} /> - } - <ResourceTemplate + { + <FilterSummary + curriculumComponents={curriculumComponents} + typeOfResources={typeOfResources} + languages={languages} + teachingStage={teachingStage} + tag={tag} + onButtonClicked={onButtonClicked} + /> + } + <ResourceTemplate + handleNextPage={handleNextPage} + handlePreviousPage={handlePreviousPage} + isLoading={isLoading} + currPage={currPage} + resources={resourcesArray} + totalResources={totalResources} + /> + </Fragment> + } + { + currOption === 'Collection' && + <CollectionTemplate handleNextPage={handleNextPage} handlePreviousPage={handlePreviousPage} isLoading={isLoading} currPage={currPage} - resources={resourcesArray} - totalResources={totalResources} + resources={collectionsArray} + totalResources={totalCollections} /> - </Fragment> - } - { - currOption === 'Collection' && - <CollectionTemplate - handleNextPage={handleNextPage} - handlePreviousPage={handlePreviousPage} - isLoading={isLoading} - currPage={currPage} - resources={collectionsArray} - totalResources={totalCollections} - /> - } - { - currOption === 'User' && - <UserTemplate - handleNextPage={handleNextPage} - handlePreviousPage={handlePreviousPage} - isLoading={isLoading} - currPage={currPage} - resources={usersArray} - totalResources={totalUsers} - /> - } - </MainPage> - ) + } + { + currOption === 'User' && + <UserTemplate + handleNextPage={handleNextPage} + handlePreviousPage={handlePreviousPage} + isLoading={isLoading} + currPage={currPage} + resources={usersArray} + totalResources={totalUsers} + /> + } + </MainPage> + ) } const MainPage = styled.div` width: 90%; margin: 1em auto; ` - +const MainPageError = styled.div` + width: 90%; + margin: 1em auto; + display: flex; + justify-content: center; + align-items: center; + padding: 1em; +` const StyledBreadCrumbs = styled(Breadcrumbs)` display: flex; justify-content: flex-start; -- GitLab