From 1b9b214570beab508c3c496e40d03698bcd2f3ae Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 25 Jan 2021 12:33:51 -0300
Subject: [PATCH 01/83] switched manual axios call to centralized axios request
 handler

---
 package-lock.json                             |  15 +-
 package.json                                  |   2 +-
 src/Components/AboutResource.js               | 264 ------------------
 src/Components/AcessibilityBar.js             |  60 ----
 src/Components/AreasSubPages.js               |  13 +-
 src/Components/Button.js                      |  75 -----
 src/Components/Card.js                        | 105 -------
 src/Components/ColCardPublicOptions.js        |  16 +-
 src/Components/CollectionCardFunction.js      |  42 +--
 src/Components/CollectionCommentSection.js    |  12 +-
 src/Components/Coment.js                      |  27 --
 src/Components/Header.js                      |   5 +
 .../HelperFunctions/getAxiosConfig.js         |  73 +++++
 src/Components/Notifications.js               |  37 +--
 14 files changed, 129 insertions(+), 617 deletions(-)
 delete mode 100644 src/Components/AboutResource.js
 delete mode 100644 src/Components/AcessibilityBar.js
 delete mode 100644 src/Components/Button.js
 delete mode 100644 src/Components/Card.js
 delete mode 100644 src/Components/Coment.js

diff --git a/package-lock.json b/package-lock.json
index a8fb0106..cb6f2099 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2538,11 +2538,18 @@
       "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
     },
     "axios": {
-      "version": "0.19.2",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
-      "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
+      "version": "0.21.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
+      "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
       "requires": {
-        "follow-redirects": "1.5.10"
+        "follow-redirects": "^1.10.0"
+      },
+      "dependencies": {
+        "follow-redirects": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz",
+          "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg=="
+        }
       }
     },
     "axobject-query": {
diff --git a/package.json b/package.json
index 95bdc57a..22c837b4 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,7 @@
     "@material-ui/lab": "^4.0.0-alpha.57",
     "@material-ui/styles": "^4.11.2",
     "@syncfusion/ej2-react-inputs": "^18.3.52",
-    "axios": "^0.19.2",
+    "axios": "^0.21.1",
     "base64-img": "^1.0.4",
     "binary-extensions": "^2.1.0",
     "build": "^0.1.4",
diff --git a/src/Components/AboutResource.js b/src/Components/AboutResource.js
deleted file mode 100644
index 87a0949e..00000000
--- a/src/Components/AboutResource.js
+++ /dev/null
@@ -1,264 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React from 'react';
-import axios from 'axios';
-import {apiUrl} from '../env';
-import {Col,Row} from 'react-grid-system';
-import Paper from '@material-ui/core/Paper';
-import Typography from '@material-ui/core/Typography';
-import CardContent from '@material-ui/core/CardContent';
-import Collapse from '@material-ui/core/Collapse';
-import CardMedia from '@material-ui/core/CardMedia';
-import CardActions from '@material-ui/core/CardActions';
-import Coment from './Coment';
-import Rating from '@material-ui/lab/Rating';
-import Tag from './Tags';
-import { Hidden } from '@material-ui/core';
-import Button from '@material-ui/core/Button';
-import IconButton from '@material-ui/core/IconButton';
-import Menu from '@material-ui/core/Menu';
-import ListItemIcon from '@material-ui/core/ListItemIcon';
-import MenuItem from '@material-ui/core/MenuItem';
-import MoreVertIcon from '@material-ui/icons/MoreVert';
-/*imagens e icones*/
-import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
-import ShareIcon from '@material-ui/icons/Share';
-import ReportIcon from '@material-ui/icons/Error';
-import AddIcon from '@material-ui/icons/CreateNewFolder';
-import FavoriteIcon from '@material-ui/icons/Favorite';
-import GetAppIcon from '@material-ui/icons/GetApp';
-import StarBorderIcon from '@material-ui/icons/StarBorder';
-import RateReviewIcon from '@material-ui/icons/RateReview';
-import VisibilityIcon from '@material-ui/icons/Visibility';
-import SdCardIcon from '@material-ui/icons/SdCard';
-import TranslateIcon from '@material-ui/icons/Translate';
-import InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';
-import DateRangeIcon from '@material-ui/icons/DateRange';
-import UpdateIcon from '@material-ui/icons/Update';
-import AssignmentOutlinedIcon from '@material-ui/icons/AssignmentOutlined';
-import OpenIcon from '@material-ui/icons/CallMade';
-import { TextField, FormControl } from '@material-ui/core';
-
-import noAvatar from "../img/default_profile.png";
-import styled from 'styled-components'
-
-
-
-const TypographyStyled = styled(Typography)`
-  padding: 5px;
-`
-
-const CardActionsStyled = styled(CardActions)`
-  padding:0px 0px 10px 0px;
-  align-items: center;
-`
-
-const PaperStyled = styled(Paper)`
-  margin: 2em 0em 2em 0em;
-  padding: 2em 2em 0em 2em;
-  @media only screen and (min-width :500px ) {
-    margin: 2em 10% 2em 10%;
-  }
-`
-const elevateStyle = 3;
-
-const Overlay = styled.div`
-  display: inline;
-  background: linear-gradient(transparent,transparent,#fff),transparent;
-  bottom: 0;
-  cursor: pointer;
-  left: 0;
-  opacity: .8;
-  filter: alpha(opacity=80);
-  position: absolute;
-  right: 0;
-  top: 0;
-  height: inherit;
-
-`
-async function getResource(id){
-  let res = await axios.get(`${apiUrl}/learning_objects/${id}`);
-  let data = res.data;
-  return(data);
-}
-
-export default function AboutResource() {
-
-  var display = getResource(19133);
-  console.log(display);
-  const [anchorEl, setAnchorEl] = React.useState(null);
-
-  function handleClick(event) {
-    setAnchorEl(event.currentTarget);
-  }
-
-  function handleClose() {
-    setAnchorEl(null);
-  }
-  return (
-    <div style={{backgroundColor: "#f4f4f4", padding: "2em 0em 2em 0em"}}>
-      <PaperStyled elevation={elevateStyle}>
-        <CardMedia image={noAvatar}/>
-        <CardContent style={{padding: "0em"}}>
-          <Typography variant="h5" color="textSecondary" component="h3">
-          {display.name}
-          </Typography>
-          <CardActionsStyled >
-            <IconButton style={{padding: "0px"}}aria-label="Favoritar">
-              <FavoriteIcon />
-            </IconButton>
-            <Rating
-              name="customized-empty"
-              value={2}
-              precision={0.5}
-              emptyIcon={<StarBorderIcon fontSize="inherit" />}
-            />
-            <Hidden smDown>
-              <IconButton aria-label="Relatar">
-                <RateReviewIcon/>
-              </IconButton>
-              RELATAR
-            </Hidden>
-            </CardActionsStyled>
-            <CardContent style={{padding: "0em"}}>
-              <TypographyStyled component="p" color="textSecondary">
-              Tipo de Recurso:
-              </TypographyStyled>
-              <TypographyStyled component="p" color="textSecondary">
-              Componentes Curriculares:
-              </TypographyStyled>
-              <TypographyStyled component="p" color="textSecondary">
-              Outras Temáticas:
-              </TypographyStyled>
-              <TypographyStyled component="p" color="textSecondary">
-              Etapas de Ensino:
-              </TypographyStyled>
-            </CardContent>
-          <Row >
-            <Col md={4} sm={12}><VisibilityIcon style={{verticalAlign: "middle"}}/>Visualizações:</Col>
-            <Col md={5} sm={12}><GetAppIcon style={{verticalAlign: "middle"}}/>Baixados/Acessados:</Col>
-          </Row>
-          <CardActions disableSpacing style={{fontSize: "0.7rem", borderRadius: "2px", justifyContent: "space-between", paddingTop: "2em"}}>
-            <Hidden smDown>
-              <Button  aria-label="Reportar" size="small">
-              <ReportIcon />     REPORTAR ABUSO OU ERRO        </Button>
-              <Button aria-label="Compartilhar">
-              <ShareIcon />   COMPARTILHAR          </Button>
-            </Hidden>
-            <Button aria-label="Guardar">
-            <AddIcon />   GUARDAR          </Button>
-            <Button variant="contained" color="secondary">
-            <OpenIcon/> Abrir Recurso </Button>
-            <Hidden mdUp>
-            <Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}>
-              <MoreVertIcon/>
-            </Button>
-            <Menu
-              id="simple-menu"
-              anchorEl={anchorEl}
-              keepMounted
-              open={Boolean(anchorEl)}
-              onClose={handleClose}
-            >
-              <MenuItem onClick={handleClose}>
-              <ListItemIcon>
-                <ShareIcon />
-              </ListItemIcon>
-              Compartilhar</MenuItem>
-              <MenuItem onClick={handleClose}>
-              <ListItemIcon>
-                <ReportIcon />
-              </ListItemIcon>
-              Reportar</MenuItem>
-            </Menu>
-            </Hidden>
-          </CardActions>
-    </CardContent>
-      </PaperStyled>
-      <PaperStyled elevation={elevateStyle}>
-        <Row style={{padding: "15px"}}>
-          <Col md={8} sm={12}>
-            <Typography variant="h5" color="textSecondary" component="h3">
-            Sobre o Recurso
-            </Typography>
-            <Typography component="p" color="textSecondary">
-            Paper can be used to build surface or other elements for your application.
-            </Typography>
-            <div style={{paddingTop: "4em"}}>
-            <Typography variant="h5" color="textSecondary" component="h3">
-            Informações Adicionais</Typography>
-            <Tag name="teste"/>
-            <Typography component="p" color="textSecondary">
-            <SdCardIcon/>Tamanho:
-            </Typography>
-            <Typography component="p" color="textSecondary">
-            <TranslateIcon/>Idioma:
-            </Typography>
-            <Typography component="p" color="textSecondary">
-            <InsertDriveFileIcon/>Formato:
-            </Typography>
-            <Typography component="p" color="textSecondary">
-            <DateRangeIcon/>Data de Envio:
-            </Typography>
-            <Typography component="p" color="textSecondary">
-            <UpdateIcon/>Modificado em:
-            </Typography>
-            <Typography component="p" color="textSecondary">
-            <AssignmentOutlinedIcon/>Tipo de Licença:
-            </Typography>
-            </div>
-          </Col>
-          <Col md={4}  sm={12}>
-            <div style={{borderLeft:"1px solid #e5e5e5"}}>
-              <Typography>
-                Enviado por:
-              </Typography><br/>
-              <img style={{padding: "2em" }} alt="Avatar" src={noAvatar} height="100em"/>
-            </div>
-          </Col>
-      </Row>
-
-
-      </PaperStyled>
-      <PaperStyled elevation={elevateStyle}>
-        <CardContent>
-            Conte sua experiência com o Recurso
-            <Rating
-              name="customized-color"
-              value={0}
-              precision={0.5}
-            />
-            <Row>
-              <Col md={10} sm={12}>
-                <TextField fullWidth="true" multiline="true" required="true" placeholder="Escreva aqui sua experiência com o recurso *"/>
-              </Col>
-              <Col>
-                <Button variant="contained" color="primary">submit </Button>
-              </Col>
-            </Row>
-
-        </CardContent>
-        <CardContent>
-          <Typography variant="h5" component="p" color="textSecondary">Relatos sobre o uso do Recurso</Typography>
-          <Coment author="jorginho" coment="muito bom gostei mto bom msm"/>
-        </CardContent>
-      </PaperStyled>
-    </div>
-  );
-}
diff --git a/src/Components/AcessibilityBar.js b/src/Components/AcessibilityBar.js
deleted file mode 100644
index 7546ea2f..00000000
--- a/src/Components/AcessibilityBar.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React, {Component} from 'react';
-import {Row, Col, Container} from 'react-grid-system';
-import Bt from './Button.js'
-
-const acessibilityBar ={
-  width: '100%',
-  color: 'gray',
-  fontFamily: '"Roboto", Sans-Serif',
-  whiteSpace: 'nowrap',
-  fontSize: '0.7vw',
-  textAlign: 'right'
-
-}
-
-class AcessibilityBar extends Component{
-  renderBt(name, link=undefined){
-    return <Bt name={name} link={link}/>
-  }
-  render(){
-    return(
-    <Container fluid={true}>
-      <Row style={acessibilityBar}>
-        <Col md={6} xs={6} lg={6} style={{textAlign: 'left'}}>
-          {this.renderBt("Ir para conteúdo 1", "texto1")}
-          {this.renderBt("Ir para menu 2", "texto2")}
-          {this.renderBt("Ir para menu 3", "texto3")}
-          {this.renderBt("Ir para rodapé 4", "texto4")}
-        </Col>
-        <Col md={6} xs={6} lg={6} style={{textAlign: 'right'}}>
-          Tamanho do Texto: {this.renderBt("A+")}
-          {this.renderBt("A-")}
-          {this.renderBt("A")}
-          {this.renderBt("Contraste")}
-          {this.renderBt("Acessibilidade")}
-          {this.renderBt("Mapa do Site")}
-        </Col>
-      </Row>
-    </Container>
-  );
-  }
-}
-export default AcessibilityBar;
diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index f6b59bb2..fb21567d 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -30,6 +30,7 @@ import colecoes from "../img/ilustra_colecoes.png";
 import Grid from "@material-ui/core/Grid";
 import ResourceCardFunction from "./ResourceCardFunction.js";
 import CollectionCardFunction from "./CollectionCardFunction.js";
+import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
 
 const areaStyle = {
   paddingTop: "5px",
@@ -49,14 +50,10 @@ class ReqResources extends Component {
       resources: [],
     };
   }
-  componentDidMount() {
-    axios
-      .get(`${apiUrl}/learning_objects?limit=12&sort=["published_at", "desc"]`)
-      .then((res) => {
-        this.setState({ resources: res.data });
-        console.log(res.data);
-      });
-  }
+
+componentDidMount() {
+    makeAxiosGetRequest(`/learning_objects?limit=12&sort=["published_at", "desc"]`, (data) => {this.setState({ resources: data })}, () => {console.log('error AreasSubPages')})
+}
   render() {
     var row1 = this.state.resources.slice(0, 4);
     var row2 = this.state.resources.slice(4, 8);
diff --git a/src/Components/Button.js b/src/Components/Button.js
deleted file mode 100644
index afe4acad..00000000
--- a/src/Components/Button.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React, {Component} from 'react';
-
-class Bt extends Component{
-  constructor(props){
-    super(props);
-
-    this.state ={
-      color: "white",
-      hover: "#F0F0F0",
-      iddle: "white"
-    };
-  }
-  componentWillMount(){
-    if (this.props.backhover){
-      this.setState({hover: this.props.backhover})
-    }
-    if (this.props.iddle){
-      this.setState({color:this.props.background,
-                      iddle: this.props.background})
-    }
-  }
-  onHover(){
-    this.setState({color: this.state.hover})
-  }
-  onIddle(){
-    this.setState({color: this.state.iddle})
-  }
-  onClick(){
-    if(this.props.link === undefined){
-    }
-    if(this.props.method !== undefined ){
-      console.log(this.props.parameter)
-       this.props.method(this.props.parameter)
-    }
-    else {
-      alert(`goto ${this.props.link}`)
-    }
-  }
-
-  render(){
-    const acessibilityBt = {
-      borderStyle: 'none',
-      padding: '10px',
-      textAlign: 'center',
-      display: 'inline-block',
-      backgroundColor: this.state.color,
-      color: "#ababab"
-    };
-    return(
-      <span id={this.props.name +"-Button"} style={acessibilityBt} onMouseEnter={this.onHover.bind(this)} onMouseOut={this.onIddle.bind(this)} onClick={this.onClick.bind(this)}>
-        {this.props.name}
-      </span>
-    );
-  }
-}
-
-export default Bt;
diff --git a/src/Components/Card.js b/src/Components/Card.js
deleted file mode 100644
index e721b550..00000000
--- a/src/Components/Card.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React, {Component} from 'react';
-import {Container} from 'react-grid-system';
-import Card from '@material-ui/core/Card';
-import CardContent from '@material-ui/core/CardContent';
-import CardActions from '@material-ui/core/CardActions';
-import IconButton from '@material-ui/core/IconButton';
-import Typography from '@material-ui/core/Typography';
-import FavoriteIcon from '@material-ui/icons/Favorite';
-import StarRatings from 'react-star-ratings';
-import animacao from "../img/laranja/ANIMACAO_SIMULACAO.jpg";
-import apresentacao from "../img/laranja/APRESENTACAO.jpg";
-import aplicativo from "../img/laranja/APP.jpg";
-import audio from "../img/laranja/AUDIO.jpg";
-import vazio from "../img/laranja/EMPTY.jpg";
-import imagem from "../img/laranja/IMAGEM.jpg";
-import grafico from "../img/laranja/INFOGRAFICO.jpg";
-import jogo from "../img/laranja/JOGO.jpg";
-import livro from "../img/laranja/LIVRO_DIGITAL.jpg";
-import mapa from "../img/laranja/MAPA.jpg";
-import outros from "../img/laranja/OUTROS.jpg";
-import software from "../img/laranja/SOFTWARE.jpg";
-import texto from "../img/laranja/TEXTO.jpg";
-import video from "../img/laranja/VIDEO.jpg";
-
-import AddIcon from '@material-ui/icons/CreateNewFolder';
-import Options from './CardOptions'
-import Video from '@material-ui/icons/OndemandVideo';
-
-var types = [{label: "Animação", thumb: animacao}, {label: "Apresentação", thumb: apresentacao},
-{label: "Aplicativo" , thumb: aplicativo}, {label: "Áudio", thumb: audio}, {label: "Vazio", thumb: vazio}, {label: "Imagem", thumb: imagem}, {label: "Gráfico", thumb: grafico}, {label: "Jogo", thumb: jogo}, {label: "Livro", thumb: livro}, {label: "Mapa", thumb: mapa}, {label: "Outros", thumb: outros}, {label: "Software", thumb:software}, {label: "Texto", thumb:texto}, {label: "Vídeo", thumb:video}]
-class ResourceCard extends Component{
-  constructor(props){
-    super(props);
-    this.state = {
-      hover: false,
-      thumbnail: null,
-      isVideo: false,
-    };
- };
- decide(){
-   var aux = this.props.thumbnail;
-   if (!aux) {
-     aux = types.find(function(element){ return element.label === (this.props.type)});
-   }
-   this.setState({thumbnail: aux.thumb});
-   console.log(this.state.thumbnail);
-   (this.props.type === "Vídeo")? this.setState({isvideo:true}) : this.setState({isvideo:false});
-};
- render(){
-   {this.decide()}
-  return (
-    <Card>
-      <img src={this.state.thumbnail} alt="thumbnail do recurso"/>
-      <CardContent style={{height: "60%", textAlign: "left", paddingBottom: "0px"}}>
-        <Typography variant="body2" color="textSecondary" component="p" style={{height:"45px", overflow: "hidden", fontSize: "0.8em"}}>
-          {this.props.name}
-        </Typography>
-      </CardContent>
-      <Container style={{textAlign: "left"}}>
-        <StarRatings
-        rating={this.props.rating*100}
-        starRatedColor="ff7f00"
-        starDimension="20px"
-        starSpacing="2px"
-        starHoverColor="red"
-        />
-      </Container>
-      <CardActions style={{justifyContent: "space-between"}}>
-      { this.state.isVideo
-        ? <Video style={{color:"#ff7f00"}} />
-      : <br/>}
-        <IconButton  aria-label="Favoritar" size="small">
-          <FavoriteIcon />
-        </IconButton>
-      </CardActions>
-      <CardActions style={{borderTop:"1px solid #e5e5e5", justifyContent: "space-between"}}>
-
-      <IconButton aria-label="Guardar" size="small">
-        <AddIcon />
-      </IconButton>
-      <Options/>
-      </CardActions>
-    </Card>
-  );}
-}
-
-export default ResourceCard;
diff --git a/src/Components/ColCardPublicOptions.js b/src/Components/ColCardPublicOptions.js
index 53c8e8a3..9538aa24 100644
--- a/src/Components/ColCardPublicOptions.js
+++ b/src/Components/ColCardPublicOptions.js
@@ -27,9 +27,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import styled from 'styled-components'
 import ErrorIcon from '@material-ui/icons/Error';
 import ReportModal from './ReportModal.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosDeleteRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function ColCardPublicOptions (props) {
   const [anchorEl, setAnchorEl] = React.useState(null);
@@ -46,16 +44,8 @@ export default function ColCardPublicOptions (props) {
   const handleReportModal = (value) => {toggleReportModal(value)}
 
   const handleUnfollow = () => {
-      let config = getAxiosConfig()
-      let payload = {}
-
-      axios.put( (`${apiUrl}/collections/` + props.id + '/follow'),payload, config).then(
-          (response) => {
-              console.log(response.data)
-              if ( response.headers['access-token'] ) {
-                  sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-              }
-          }, (error) => {console.log(error)})
+
+      makeAxiosDeleteRequest(`/collections/${props.id}/follow`, (data) => {console.log(data)}, (error) => {console.log(error)})
   }
 
   return (
diff --git a/src/Components/CollectionCardFunction.js b/src/Components/CollectionCardFunction.js
index 5b015705..a0b1107e 100644
--- a/src/Components/CollectionCardFunction.js
+++ b/src/Components/CollectionCardFunction.js
@@ -18,7 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useState, useContext} from 'react';
 import {Store} from '../Store.js'
-import {apiDomain, apiUrl} from '../env';
+import {apiDomain} from '../env';
 import noAvatar from "../img/default_profile.png";
 import Button from '@material-ui/core/Button';
 import styled from 'styled-components'
@@ -35,8 +35,7 @@ import LockIcon from '@material-ui/icons/Lock';
 import ColCardOwnerOptions from './ColCardOwnerOptions.js'
 import ColCardPublicOptions from './ColCardPublicOptions'
 import {Link} from 'react-router-dom';
-import axios from 'axios'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function CollectionCardFunction (props) {
     const {state} = useContext(Store)
@@ -48,21 +47,13 @@ export default function CollectionCardFunction (props) {
 
     const [likesCount, setLikesCount] = useState(props.likeCount)
     const [liked, toggleLiked] = useState(props.liked)
+
+    function handleSuccessLike (data) {
+        toggleLiked(!liked)
+        setLikesCount(data.count)
+    }
     const handleLike = () => {
-        let payload = {}
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/collections/` + props.id + '/like'),payload, config
-        ).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleLiked(!liked)
-                setLikesCount(response.data.count)
-            },
-            (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(`/collections/${props.id}/like`, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const [followingHover, handleFollowingHover] = useState(false)
@@ -71,20 +62,11 @@ export default function CollectionCardFunction (props) {
     const [slideIn, setSlide] = useState(false)
     const controlSlide = () => {setSlide(!slideIn)}
 
+    function handleSuccessFollow (data) {
+        handleToggleUserFollowingCol()
+    }
     const handleFollow = () => {
-        let config = getAxiosConfig()
-        let payload = {}
-
-        axios.put( (`${apiUrl}/collections/` + props.id + '/follow'),payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data)
-                handleToggleUserFollowingCol()
-            },
-            (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(`/collections/${props.id}/follow`, {}, handleSuccessFollow, (error) => {console.log(error)})
     }
 
     const RenderFollowButton = () => {
diff --git a/src/Components/CollectionCommentSection.js b/src/Components/CollectionCommentSection.js
index 9351596e..95ea693a 100644
--- a/src/Components/CollectionCommentSection.js
+++ b/src/Components/CollectionCommentSection.js
@@ -22,13 +22,12 @@ import Card from '@material-ui/core/Card';
 import Button from '@material-ui/core/Button';
 import EditIcon from '@material-ui/icons/Edit';
 import styled from 'styled-components';
-import axios from 'axios';
-import { apiUrl } from '../env';
 import CommentForm from './ResourcePageComponents/CommentForm.js';
 import Comment from './Comment.js';
 import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 import Comentario from '../img/comentarios.png';
+import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function CollectionCommentSection(props) {
 	const [post_snack_open, setPostSnackOpen] = useState(false);
@@ -36,9 +35,9 @@ export default function CollectionCommentSection(props) {
 	const [render_state, setRenderState] = useState(false);
 	const [reviews, setReviews] = useState([]);
 	const comment_ref = useRef(null);
-	
+
 	const forceUpdate = () => { setRenderState(!render_state); }
-	
+
 	const handlePostSnackbar = () => {
 		setPostSnackOpen(!post_snack_open);
 	}
@@ -114,10 +113,7 @@ export default function CollectionCommentSection(props) {
 	}
 
 	useEffect(() => {
-		axios.get(apiUrl+'/collections/'+props.id+'/reviews')
-			.then(res => {
-				setReviews(res.data);
-			});
+        makeAxiosGetRequest(`/collections/${props.id}/reviews`, (data) => {setReviews(data)}, (error) => {console.log(error)})
 	}, [render_state]);
 
 	return (
diff --git a/src/Components/Coment.js b/src/Components/Coment.js
deleted file mode 100644
index f76cbf7f..00000000
--- a/src/Components/Coment.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React, {Component} from 'react';
-import CardContent from '@material-ui/core/CardContent';
-import Typography from '@material-ui/core/Typography';
-import StarRatings from 'react-star-ratings';
-
-
-class Coment extends Component {
-  constructor(props) {
-    super(props);
-
-  }
-render(){
-  return(
-    <CardContent>
-    <StarRatings
-         rating={2}
-         starRatedColor="ff7f00"
-         starDimension="20px"
-         starSpacing="2px"
-         />
-      <Typography component="p" varitant="srOnly" style={{color: "orange"}}> {this.props.author}:{this.props.coment}</Typography>
-    </CardContent>
-  );
-}
-
-}
-export default Coment;
diff --git a/src/Components/Header.js b/src/Components/Header.js
index 14025e28..25edfdee 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -83,7 +83,12 @@ export default function Header(props){
   useEffect( () => {
       if (sessionStorage.getItem('@portalmec/auth_headers')) {
           let config = { headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))}
+          console.log(config)
+          console.log(sessionStorage.getItem('@portalmec/accessToken'))
 
+          if (config.headers['access-token'] !== sessionStorage.getItem('@portalmec/accessToken')){
+              console.log('erro tokens diferentes')
+          }
           validateToken(config)
       }
   }, [])
diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 63a4ff6e..7ef9c62d 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -1,3 +1,5 @@
+import {apiUrl} from '../../env.js'
+import axios from 'axios'
 
 export const getAxiosConfig = () => {
     let config = {
@@ -12,3 +14,74 @@ export const getAxiosConfig = () => {
 
     return config
 }
+
+function getAxiosConfigFromJSON () {
+    let config = {
+        headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+    }
+    return config
+}
+
+function updateHeaders (newAccessToken) {
+    sessionStorage.setItem('@portalmec/accessToken', newAccessToken)
+
+    let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+    auth_headers['access-token'] = newAccessToken
+
+    sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
+}
+
+export const makeAxiosGetRequest = (url, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.get( (`${apiUrl}${url}`), config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] ) {
+                updateHeaders(response.headers['access-token'])
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.delete( (`${apiUrl}${url}`), config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] ) {
+                updateHeaders(response.headers['access-token'])
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+
+export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.put( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] ) {
+                updateHeaders(response.headers['access-token'])
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
diff --git a/src/Components/Notifications.js b/src/Components/Notifications.js
index d8df9e70..298e706a 100644
--- a/src/Components/Notifications.js
+++ b/src/Components/Notifications.js
@@ -21,10 +21,9 @@ import { Button } from '@material-ui/core';
 import Badge from '@material-ui/core/Badge';
 import styled from 'styled-components'
 import Menu from '@material-ui/core/Menu';
-import {apiDomain, apiUrl} from '../env.js'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig.js'
+import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
 import { withStyles } from '@material-ui/core/styles';
 import {Link} from 'react-router-dom'
 
@@ -77,27 +76,21 @@ export default function Notification (props) {
     const [notifications, setNotifications] = useState([]);
     // eslint-disable-next-line
     const [notificatonsLength, setLength] = useState(0);
-    useEffect(() => {
-
-        setTimeout(() => {
-            let config = getAxiosConfig()
-            axios.get(`${apiUrl}/feed?offset=0&limit=30`, config)
-            .then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
 
-                console.log('atividades response: ', response)
-                setNotifications(response.data)
-                setLength(response.data.length)
+    function handleAxiosSuccess (data) {
+        setNotifications(data)
+        setLength(data.length)
+    }
+
+    function handleAxiosError (error) {
+        console.log('error getNotifications')
+        console.log(error)
+    }
+
+    {/*setTimeout(() => {
+        makeAxiosGetRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
+    }, 60000)*/}
 
-                },
-                (error) => {
-                    console.log('error while running getNotifications')
-                }
-            )
-        }, 1000);
-    }, [sessionStorage.getItem('@portalmec/uid')])
     function handleClick(event) {
         console.log('event.currentTarget: ', event.currentTarget)
         setAnchorEl(event.currentTarget);
-- 
GitLab


From 22491150bf5a6a535655f84df552562d3d917a05 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Tue, 26 Jan 2021 08:31:00 -0300
Subject: [PATCH 02/83] Fix some bugs in console

---
 src/Components/AreasSubPages.js               |  1 -
 src/Components/Dropdown.js                    |  2 +-
 src/Components/ExpansionPanels.js             |  2 +-
 src/Components/Header.js                      |  4 +--
 src/Components/LoginModal.js                  |  1 +
 src/Components/ResourceCardFunction.js        |  2 +-
 .../SearchExpansionPanel.js                   | 10 +++---
 src/Pages/Search.js                           | 32 +++----------------
 8 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index f6b59bb2..fb6fde62 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -54,7 +54,6 @@ class ReqResources extends Component {
       .get(`${apiUrl}/learning_objects?limit=12&sort=["published_at", "desc"]`)
       .then((res) => {
         this.setState({ resources: res.data });
-        console.log(res.data);
       });
   }
   render() {
diff --git a/src/Components/Dropdown.js b/src/Components/Dropdown.js
index a379b826..31d7047d 100644
--- a/src/Components/Dropdown.js
+++ b/src/Components/Dropdown.js
@@ -95,7 +95,7 @@ function Dropdown(props) {
                 <MenuList>
                   {
                     props.items.map((item)=>
-                      <Link key={item.name} to={item.href} ><MenuItem>{item.name}</MenuItem></Link>
+                      <Link key={`${item.name}_${new Date().toString()}` } to={item.href} ><MenuItem>{item.name}</MenuItem></Link>
                     )
                   }
                 </MenuList>
diff --git a/src/Components/ExpansionPanels.js b/src/Components/ExpansionPanels.js
index a16fa904..9a242d21 100644
--- a/src/Components/ExpansionPanels.js
+++ b/src/Components/ExpansionPanels.js
@@ -454,7 +454,7 @@ export default function SimpleExpansionPanel() {
           <Grid item xs={12} md={4}>
             <div style={{color:"#00BCD4",fontSize:"18px"}}>
               <p>BASICAMENTE,</p>
-              <p>O usuário poderá reportar,
utilizando a funcionalidade “Reportar” ou pelo formulário de “Contato”, qualquer tipo de conteúdo publicado na Plataforma MEC RED que viole os direitos dos usuários, de terceiros ou a legislação aplicável.</p>
+              <p>O usuário poderá reportar,utilizando a funcionalidade “Reportar” ou pelo formulário de “Contato”, qualquer tipo de conteúdo publicado na Plataforma MEC RED que viole os direitos dos usuários, de terceiros ou a legislação aplicável.</p>
             </div>
           </Grid>
         </Grid>
diff --git a/src/Components/Header.js b/src/Components/Header.js
index 14025e28..b607b201 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -105,7 +105,6 @@ export default function Header(props){
   useEffect(() => {
       let query = new URLSearchParams(loc.search)
 
-      console.log(query.getAll("auth_token"))
       if(query.get("auth_token")) {
   	       let config = {
   		           headers : {
@@ -115,10 +114,11 @@ export default function Header(props){
   			                  "expiry" : query.get("expiry"),
   			                  "token-type" : 'Bearer'
   		           }
-  	            }
+                  }
   	       validateToken(config)
            redirect()
       }
+      
   }, [loc])
 
   const toggleSnackbar = (event, reason) => {
diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js
index 18b5e7e6..0cba39ec 100644
--- a/src/Components/LoginModal.js
+++ b/src/Components/LoginModal.js
@@ -123,6 +123,7 @@ export default function LoginModal (props){
                 />
             </Zoom>
         </StyledLogin>
+
         </>
     )
 }
diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index 8113aa67..ede74c3f 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -116,7 +116,7 @@ export default function ResourceCardFunction (props) {
                     </EnviadoPor>
                 </div>
                 <TagContainer>
-                    <Grid container spacing={1} justify='safe' style={{height : "inherit"}}>
+                    <Grid container spacing={0} justify='flex-start' style={{height : "inherit"}}>
                     {
                         props.tags.map( (tag) =>
                             <Grid item key={tag.id}>
diff --git a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
index 31ce7434..92a2d39a 100644
--- a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
+++ b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
@@ -1,8 +1,8 @@
 import React, { useState } from "react";
 import { withStyles } from "@material-ui/core/styles";
-import MuiExpansionPanel from "@material-ui/core/ExpansionPanel";
-import MuiExpansionPanelSummary from "@material-ui/core/ExpansionPanelSummary";
-import MuiExpansionPanelDetails from "@material-ui/core/ExpansionPanelDetails";
+import MuiExpansionPanel from "@material-ui/core/Accordion";
+import MuiExpansionPanelSummary from "@material-ui/core/AccordionSummary";
+import MuiExpansionPanelDetails from "@material-ui/core/AccordionActions";
 import Typography from "@material-ui/core/Typography";
 import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
 import SearchEPCompCurriculum from "./SearchEPCompCurriculum";
@@ -126,9 +126,9 @@ export default function SearchExpansionPanel(props) {
           <TesteTypography>Componentes Curriculares</TesteTypography>
         </ExpansionPanelSummary>
         <ExpansionPanelDetails>
-          <Typography>
+          <div>
             <SearchEPCompCurriculum onChange={props.onChange} />
-          </Typography>
+          </div>
         </ExpansionPanelDetails>
       </ExpansionPanel>
 
diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index d7c3fcd2..05795475 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -75,10 +75,14 @@ export default function Search(props) {
   const [optionResult, setOptionResult] = useState(option);
 
   const collectStuff = (tipoBusca, filtro) => {
+    // Concertar o bug que não salva o filtro setado
     currFilter = filtro;
     if (filtro)
       setIsFiltering(true);
+     
+    console.log(currFilter)
 
+    console.log(`${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`)
     axios
       .get(
         `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`
@@ -136,34 +140,6 @@ export default function Search(props) {
 
   return (
     <div style={{ backgroundColor: "#f4f4f4" }}>
-      {/* <React.Fragment>
-        <h1>
-          Search for {state.search.query !== "*" ? state.search.query : "all"}{" "}
-          in {state.search.class}
-        </h1>
-        {state.search.class === "LearningObject" && (
-          <ul>
-            {results.map((res) => (
-              <li key={res.id}> {res.name} </li>
-            ))}
-          </ul>
-        )}
-        {state.search.class === "Collection" && (
-          <ul>
-            {results.map((res) => (
-              <li key={res.id}> {res.name} </li>
-            ))}
-          </ul>
-        )}
-        {state.search.class === "User" && (
-          <ul>
-            {results.map((res) => (
-              <li key={res.id}> {res.name} </li>
-            ))}
-          </ul>
-        )}
-      </React.Fragment> */}
-
       <Principal>
         <BreadCrumbsDiv>
           <StyledBreadCrumbs>
-- 
GitLab


From dbce4fd98a82b6979c9d6a67c67bd4308f602a71 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 26 Jan 2021 09:33:26 -0300
Subject: [PATCH 03/83] Fixed the bug of resetting the filter when loading more
 data

---
 src/Pages/Search.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index 05795475..8a5da348 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -75,8 +75,8 @@ export default function Search(props) {
   const [optionResult, setOptionResult] = useState(option);
 
   const collectStuff = (tipoBusca, filtro) => {
-    // Concertar o bug que não salva o filtro setado
-    currFilter = filtro;
+    if(!loadingMoreData) // this line prevents resetting filter when loading more data
+      currFilter = filtro;
     if (filtro)
       setIsFiltering(true);
      
-- 
GitLab


From 134e3ffbb3c966db0f8f21779b60fb16afc931f3 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Tue, 26 Jan 2021 11:50:44 -0300
Subject: [PATCH 04/83] Improve Carrousel

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/AreasSubPages.js | 114 ++++++++++++++------------------
 1 file changed, 48 insertions(+), 66 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index fb6fde62..7283ffe8 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -56,76 +56,58 @@ class ReqResources extends Component {
         this.setState({ resources: res.data });
       });
   }
+  
+  resourcesPerPage(){
+    var pageWidth = window.innerWidth
+    if (pageWidth >= 1200){
+      return 3
+    }
+    else{
+      if (pageWidth > 752) {
+        return 2
+      }
+      else{
+        return 1
+      }
+    }
+  }
+  
+
+
   render() {
-    var row1 = this.state.resources.slice(0, 4);
-    var row2 = this.state.resources.slice(4, 8);
-    var row3 = this.state.resources.slice(8, 13);
+    var rows = []
+    var resources_per_page = this.resourcesPerPage()
+    for(let i = 0; i < 12/resources_per_page; i++){
+      rows.push(this.state.resources.slice(i*resources_per_page, resources_per_page*(i+1)))
+    }
     return (
+
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
-        <Row style={{ paddingBottom: "5px" }}>
-          {row1.map((card) => (
-            <Col md={3} sm={6} key={card.id}>
-              <ResourceCardFunction
-                avatar={card.publisher.avatar}
-                id={card.id}
-                thumbnail={card.thumbnail}
-                type={card.object_type ? card.object_type : "Outros"}
-                title={card.name}
-                published={card.state === "published" ? true : false}
-                likeCount={card.likes_count}
-                liked={card.liked}
-                rating={card.review_average}
-                // author={card.author}
-                author={card.publisher.name}
-                tags={card.educational_stages}
-                href={"/recurso/" + card.id}
-                downloadableLink={card.default_attachment_location}
-              />
-            </Col>
+        {
+          rows.map((row) => (
+            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%"}}>
+              {row.map((card) => (
+                <div style={{marginLeft:10, display: 'flex' }}>
+                  <ResourceCardFunction
+                    avatar={card.publisher.avatar}
+                    id={card.id}
+                    thumbnail={card.thumbnail}
+                    type={card.object_type ? card.object_type : "Outros"}
+                    title={card.name}
+                    published={card.state === "published" ? true : false}
+                    likeCount={card.likes_count}
+                    liked={card.liked}
+                    rating={card.review_average}
+                    // author={card.author}
+                    author={card.publisher.name}
+                    tags={card.educational_stages}
+                    href={"/recurso/" + card.id}
+                    downloadableLink={card.default_attachment_location}
+                  />
+                </div>
+              ))}
+            </Row>
           ))}
-        </Row>
-        <Row>
-          {row2.map((card) => (
-            <Col md={3} sm={6} key={card.id}>
-              <ResourceCardFunction
-                avatar={card.publisher.avatar}
-                id={card.id}
-                thumbnail={card.thumbnail}
-                type={card.object_type ? card.object_type : "Outros"}
-                title={card.name}
-                published={card.state === "published" ? true : false}
-                likeCount={card.likes_count}
-                liked={card.liked}
-                rating={card.review_average}
-                author={card.publisher.name}
-                tags={card.educational_stages}
-                href={"/recurso/" + card.id}
-                downloadableLink={card.default_attachment_location}
-              />
-            </Col>
-          ))}
-        </Row>
-        <Row>
-          {row3.map((card) => (
-            <Col md={3} sm={6} key={card.id}>
-              <ResourceCardFunction
-                avatar={card.publisher.avatar}
-                id={card.id}
-                thumbnail={card.thumbnail}
-                type={card.object_type ? card.object_type : "Outros"}
-                title={card.name}
-                published={card.state === "published" ? true : false}
-                likeCount={card.likes_count}
-                liked={card.liked}
-                rating={card.review_average}
-                author={card.publisher.name}
-                tags={card.educational_stages}
-                href={"/recurso/" + card.id}
-                downloadableLink={card.default_attachment_location}
-              />
-            </Col>
-          ))}
-        </Row>
       </Carousel>
     );
   }
-- 
GitLab


From c8971f4fdf1af18d8467cfbce66ff10dc536f2ff Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 27 Jan 2021 09:20:02 -0300
Subject: [PATCH 05/83] Improve home responsivity

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/AreasSubPages.js | 188 +++++++++++++-------------------
 1 file changed, 73 insertions(+), 115 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 7283ffe8..0b7cc763 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -27,21 +27,9 @@ import { Carousel } from "react-responsive-carousel";
 import recursos from "../img/ilustra_recursos_digitais.png";
 import materiais from "../img/ilustra_materiais.png";
 import colecoes from "../img/ilustra_colecoes.png";
-import Grid from "@material-ui/core/Grid";
 import ResourceCardFunction from "./ResourceCardFunction.js";
 import CollectionCardFunction from "./CollectionCardFunction.js";
 
-const areaStyle = {
-  paddingTop: "5px",
-  fontSize: "16px",
-  textAlign: "left",
-  backgroundColor: "inherit",
-  width: "1000px",
-  margin: "auto",
-  padding: "20px",
-  minHeight: "190px",
-};
-
 class ReqResources extends Component {
   constructor(props) {
     super(props);
@@ -63,7 +51,7 @@ class ReqResources extends Component {
       return 3
     }
     else{
-      if (pageWidth > 752) {
+      if (pageWidth > 766) {
         return 2
       }
       else{
@@ -84,10 +72,10 @@ class ReqResources extends Component {
 
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
         {
-          rows.map((row) => (
-            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%"}}>
+          rows.map((row, index) => (
+            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%"}} key={(index+1)}>
               {row.map((card) => (
-                <div style={{marginLeft:10, display: 'flex' }}>
+                <div style={{marginLeft:10, display: 'flex' }} key={card.id*(index+1)}>
                   <ResourceCardFunction
                     avatar={card.publisher.avatar}
                     id={card.id}
@@ -128,60 +116,48 @@ class ReqCollections extends Component {
         console.log(res.data);
       });
   }
+  collectionsPerPage(){
+    var pageWidth = window.innerWidth
+    if (pageWidth >= 1200){
+      return 3
+    }
+    else{
+      if (pageWidth > 766) {
+        return 2
+      }
+      else{
+        return 1
+      }
+    }
+  }
+
   render() {
-    var row1 = this.state.collections.slice(0, 4);
-    var row2 = this.state.collections.slice(4, 8);
-    var row3 = this.state.collections.slice(8, 13);
+    var rows = []
+    var collections_per_page = this.collectionsPerPage()
+    for(let i = 0; i < 12/collections_per_page; i++){
+      rows.push(this.state.collections.slice(i*collections_per_page, collections_per_page*(i+1)))
+    }
     return (
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
-        <Row style={{ paddingBottom: "5px" }}>
-          {row1.map((card) => (
-            <Col md={3} sm={6} key={card.id}>
-              <CollectionCardFunction
-                name={card.name}
-                rating={card.score}
-                id={card.id}
-                author={card.owner.name}
-                description={card.description}
-                thumbnails={card.items_thumbnails}
-                avatar={card.owner.avatar}
-                likeCount={card.likes_count}
-              />
-            </Col>
-          ))}
-        </Row>
-        <Row>
-          {row2.map((card) => (
-            <Col md={3} sm={6} key={card.id}>
-              <CollectionCardFunction
-                name={card.name}
-                id={card.id}
-                rating={card.score}
-                author={card.owner.name}
-                description={card.description}
-                thumbnails={card.items_thumbnails}
-                avatar={card.owner.avatar}
-                likeCount={card.likes_count}
-              />
-            </Col>
-          ))}
-        </Row>
-        <Row>
-          {row3.map((card) => (
-            <Col md={3} sm={6} key={card.id}>
-              <CollectionCardFunction
-                name={card.name}
-                id={card.id}
-                rating={card.score}
-                author={card.owner.name}
-                description={card.description}
-                thumbnails={card.items_thumbnails}
-                avatar={card.owner.avatar}
-                likeCount={card.likes_count}
-              />
-            </Col>
-          ))}
-        </Row>
+        {
+          rows.map((row, index) => (
+            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%" }} key={(index+1)}>
+              {row.map((card) => (
+                <div style={{marginLeft:10, display: 'flex' }} key={card.id*(index+1)}>
+                  <CollectionCardFunction
+                    name={card.name}
+                    rating={card.score}
+                    id={card.id}
+                    author={card.owner.name}
+                    description={card.description}
+                    thumbnails={card.items_thumbnails}
+                    avatar={card.owner.avatar}
+                    likeCount={card.likes_count}
+                  />
+                </div>
+              ))}
+            </Row>
+        ))}
       </Carousel>
     );
   }
@@ -193,28 +169,22 @@ class SubPages extends Component {
       case "Recursos":
         return (
           <React.Fragment>
-            <div style={{ backgroundColor: "#ff7f00" }}>
-              <Container style={areaStyle}>
-                <Grid container style={{ display: "flex" }} spacing={5}>
-                  <Grid item xs={3}>
-                    <img
-                      src={recursos}
-                      alt="aba recursos"
-                      height="155"
-                      style={{ float: "right" }}
-                    />
-                  </Grid>
-                  <Grid item xs={9}>
-                    <p style={{ textAlign: "justify", color: "#fff" }}>
+            <div style={{ backgroundColor: "#ff7f00", position:"relative" }}>
+              <div style={{ textAlign: "justify", color: "#fff", minHeight:195, paddingLeft:10, paddingRight:10, paddingTop:20, paddingBottom:20 }}>
+                <img
+                  src={recursos}
+                  alt="aba recursos"
+                  height="155"
+                  style={{ float: "left", marginRight:20, marginBottom:20, marginLeft: window.innerWidth >= 825? "25%" : "0px" }}
+                />
+                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825? "25%" : "0px"}}>
                       Nesta área, você tem acesso a Recursos Educacionais
                       Digitais, isto é, a vídeos, animações e a outros recursos
                       destinados à educação. São Recursos de portais parceiros
                       do MEC e de professores que, como você, atuam na Educação
                       Básica!
                     </p>
-                  </Grid>
-                </Grid>
-              </Container>
+              </div>
             </div>
             <Container style={{ padding: "20px" }}>
               <p
@@ -238,28 +208,22 @@ class SubPages extends Component {
       case "Materiais":
         return (
           <React.Fragment>
-            <div style={{ backgroundColor: "#e81f4f" }}>
-              <Container style={areaStyle}>
-                <Grid container spacing={5}>
-                  <Grid item xs={3}>
-                    <img
-                      src={materiais}
-                      alt="aba materiais"
-                      height="165"
-                      style={{ float: "right" }}
-                    />
-                  </Grid>
-                  <Grid item xs={9}>
-                    <p style={{ textAlign: "justify", color: "#fff" }}>
+            <div style={{ backgroundColor: "#e81f4f", position:"relative" }}>
+              <div style={{ textAlign: "justify", color: "#fff", minHeight:195, paddingLeft:10, paddingRight:10, paddingTop:20, paddingBottom:20 }}>
+                <img
+                  src={materiais}
+                  alt="aba recursos"
+                  height="155"
+                  style={{ float: "left", marginRight:20, marginBottom:20, marginLeft: window.innerWidth >= 825? "25%" : "0px" }}
+                />
+                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825? "25%" : "0px"}}>
                       Nesta área, você acessa livremente materiais completos de
                       formação, como cursos já oferecidos pelo MEC e seus
                       parceiros. São conteúdos elaborados por equipes
                       multidisciplinares e de autoria de pesquisadores e
                       educadores renomados nas áreas.
                     </p>
-                  </Grid>
-                </Grid>
-              </Container>
+              </div>
             </div>
             <Container style={{ padding: "20px" }}>
               <p
@@ -299,27 +263,21 @@ class SubPages extends Component {
       case "Colecoes":
         return (
           <React.Fragment>
-            <div style={{ backgroundColor: "#673ab7" }}>
-              <Container style={areaStyle}>
-                <Grid container spacing={5}>
-                  <Grid item xs={3}>
-                    <img
-                      src={colecoes}
-                      alt="aba coleções"
-                      width="180"
-                      style={{ float: "right" }}
-                    />
-                  </Grid>
-                  <Grid item xs={9}>
-                    <p style={{ textAlign: "justify", color: "#fff" }}>
+            <div style={{ backgroundColor: "#673ab7", position:"relative" }}>
+              <div style={{ textAlign: "justify", color: "#fff", minHeight:195, paddingLeft:10, paddingRight:10, paddingTop:20, paddingBottom:20 }}>
+                <img
+                  src={colecoes}
+                  alt="aba recursos"
+                  height="155"
+                  style={{ float: "left", marginRight:20, marginBottom:20, marginLeft: window.innerWidth >= 825? "25%" : "0px" }}
+                />
+                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825? "25%" : "0px"}}>
                       Nesta área, você tem acesso às coleções criadas e
                       organizadas pelos usuários da plataforma. É mais uma
                       possibilidade de buscar recursos educacionais para sua
                       aula!
                     </p>
-                  </Grid>
-                </Grid>
-              </Container>
+              </div>
             </div>
             <Container style={{ padding: "20px" }}>
               <p
-- 
GitLab


From 6b5ee202dc857d2d7fe9c491b5d38c39397429ae Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 27 Jan 2021 10:06:20 -0300
Subject: [PATCH 06/83] Fix statistics bar and iframe in AboutPage

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/StatsBar.js | 23 ++++++++++++++++++++---
 src/Pages/AboutPage.js     |  2 +-
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/Components/StatsBar.js b/src/Components/StatsBar.js
index 0572d3f8..0cdde494 100644
--- a/src/Components/StatsBar.js
+++ b/src/Components/StatsBar.js
@@ -18,6 +18,8 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {Component} from 'react';
 import {Col,Row, Container} from 'react-grid-system';
+import { apiUrl } from "../env";
+import  axios from "axios";
 import mapaBrasil from '../img/mapa-brasil-line-icon.svg';
 const brasilStyle={
   backgroundColor: "#00bcd4",
@@ -41,6 +43,21 @@ const statistcStyle={
 
 };
 class StatsBar extends Component{
+  constructor(props){
+    super(props)
+    this.state ={
+      available_resources: 0,
+      month_publications:0,
+      month_downloads:0
+    }
+  }
+  componentDidMount(){
+    // https://api.portalmec.c3sl.ufpr.br/v1/statistics
+    axios.get(`${apiUrl}/statistics`).then((res) => {
+      this.setState({available_resources:res.data.count, month_publications:res.data.month_publications, month_downloads:res.data.month_downloads})
+    })
+  }
+     
   render(){
     return(
       <div style={brasilStyle}>
@@ -50,7 +67,7 @@ class StatsBar extends Component{
           <img src={mapaBrasil} height="83px" alt="mapa do brasil"/>
           <span  style={statistcStyle}>
             <span style={numberStyle}>
-              31061
+              {this.state.available_resources}
             </span>
             <span>
               Recursos disponíveis
@@ -62,13 +79,13 @@ class StatsBar extends Component{
             ESSE MÊS:
             <span style={statistcStyle}>
             <span style={numberStyle}>
-            10
+              {this.state.month_downloads}
             </span>
             Baixados
             </span>
             <span style={statistcStyle}>
             <span style={numberStyle}>
-            1
+              {this.state.month_publications}
             </span>
             Publicados
           </span>
diff --git a/src/Pages/AboutPage.js b/src/Pages/AboutPage.js
index e8c57d2e..a69e23ff 100644
--- a/src/Pages/AboutPage.js
+++ b/src/Pages/AboutPage.js
@@ -579,7 +579,7 @@ export default function AboutPage(props) {
     <link href="https://fonts.googleapis.com/css?family=Pompiere|Roboto:300,400&display=swap" rel="stylesheet"/>
 
       <Secao1>
-        <iframe title="Vídeo página sobre" src="https://player.vimeo.com/video/231609051" width="100%" height="100%" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
+        <iframe title="Vídeo página sobre" src="https://player.vimeo.com/video/231609051" width="100%" height="100%" frameborder="0" allow="autoplay; fullscreen" allowFullScreen></iframe>
 
       </Secao1>
 
-- 
GitLab


From 8acb7f06a7f17f897d419fccd38ef05959118e2d Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 27 Jan 2021 12:01:23 -0300
Subject: [PATCH 07/83] Started to fix AboutPage reposivity

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/AboutCarousel.css        |   6 +
 src/Components/AboutCarousel.js         |  93 ++++++++--------
 src/Components/AboutCarouselPartner.css |   6 +
 src/Components/AboutCarouselPartner.js  | 142 ++++++++++++++++++++++++
 src/Pages/AboutPage.js                  | 133 +++-------------------
 5 files changed, 219 insertions(+), 161 deletions(-)
 create mode 100644 src/Components/AboutCarousel.css
 create mode 100644 src/Components/AboutCarouselPartner.css
 create mode 100644 src/Components/AboutCarouselPartner.js

diff --git a/src/Components/AboutCarousel.css b/src/Components/AboutCarousel.css
new file mode 100644
index 00000000..92e69e00
--- /dev/null
+++ b/src/Components/AboutCarousel.css
@@ -0,0 +1,6 @@
+#You-Can-Caroussel > .carousel-root > .carousel-slider > button{
+  display:none;
+}
+.dot{
+  border: 1px solid black;
+}
\ No newline at end of file
diff --git a/src/Components/AboutCarousel.js b/src/Components/AboutCarousel.js
index 35e68f3a..fc365152 100644
--- a/src/Components/AboutCarousel.js
+++ b/src/Components/AboutCarousel.js
@@ -21,7 +21,7 @@ import React from 'react';
 import "react-responsive-carousel/lib/styles/carousel.min.css";
 import { Carousel } from 'react-responsive-carousel';
 import styled from 'styled-components';
-
+import "./AboutCarousel.css"
 
 import Img1 from '../img/carousel/Icone_Grande (1).png'
 import Img2 from '../img/carousel/Icone_Grande (2).png'
@@ -70,7 +70,7 @@ const CarouselAbout = styled(Carousel)`
       text-align: center;
       display: block;
       margin: auto;
-      padding-inline: 235px
+      // padding-inline: 235px
     }
   }
 `
@@ -80,50 +80,51 @@ const CarouselAbout = styled(Carousel)`
 function AboutCarousel(props) {
 
   return (
-    <CarouselAbout showThumbs= {true}
-              showStatus= {false}
-              showIndicators = {false}
-              interval={8000}
-              transitionTime={1000}
-              autoPlay
-              infiniteLoop
-
-    >
-      <div>
-        <img src={Img1} alt="Slide 1"/>
-        <span>Buscar e Baixar Recursos</span>
-        <p>São mais de 20 mil recursos educacionais à sua disposição. São recursos de portais parceiros do MEC e de professores que, como você, atuam na Educação Básica!</p>
-      </div>
-      <div>
-        <img src={Img2} alt="Slide 2"/>
-        <span>Guardar Recursos em Coleções</span>
-        <p>Guarde e organize em coleções aqueles recursos que você considera ser interessantes para elaborar a sua aula. Aproveite e indique aos colegas pelas redes sociais ou e-mail.</p>
-      </div>
-      <div>
-      <img src={Img3} alt="Slide 3"/>
-
-      <span>Compartilhar suas Experiências</span>
-      <p>Você pode relatar suas experiências sobre o uso de recursos no seu cotidiano escolar. Aproveite esse espaço para sugerir e conhecer novos usos para um mesmo recurso.</p>
-
-      </div>
-      <div>
-        <img src={Img4} alt="Slide 4"/>
-
-        <span>Publicar o seu Recurso</span>
-        <p>Colabore e ajude a fortalecer a plataforma publicando um recurso educacional desenvolvido por você ou pelo coletivo da escola do qual faz parte. Compartilhe seu conhecimento e dê visibilidade ao seu recurso, torne-o público enriquecendo o conhecimento partilhado!</p>
-
-
-      </div>
-      <div>
-        <img src={Img5} alt="Slide 5"/>
-
-        <span>Encontrar Materiais de Formação</span>
-        <p>A plataforma disponibiliza um conjunto de materiais de formação desenvolvidos pelo Ministério da Educação com diversidade de temas e recursos educacionais.</p>
-
-
-      </div>
-    </CarouselAbout>
-
+    <div id={"You-Can-Caroussel"}>
+      <CarouselAbout showThumbs= {true}
+                showStatus= {false}
+                showIndicators = {false}
+                interval={8000}
+                transitionTime={1000}
+                autoPlay
+                infiniteLoop
+
+      >
+        <div>
+          <img src={Img1} alt="Slide 1"/>
+          <span>Buscar e Baixar Recursos</span>
+          <p>São mais de 20 mil recursos educacionais à sua disposição. São recursos de portais parceiros do MEC e de professores que, como você, atuam na Educação Básica!</p>
+        </div>
+        <div>
+          <img src={Img2} alt="Slide 2"/>
+          <span>Guardar Recursos em Coleções</span>
+          <p>Guarde e organize em coleções aqueles recursos que você considera ser interessantes para elaborar a sua aula. Aproveite e indique aos colegas pelas redes sociais ou e-mail.</p>
+        </div>
+        <div>
+        <img src={Img3} alt="Slide 3"/>
+
+        <span>Compartilhar suas Experiências</span>
+        <p>Você pode relatar suas experiências sobre o uso de recursos no seu cotidiano escolar. Aproveite esse espaço para sugerir e conhecer novos usos para um mesmo recurso.</p>
+
+        </div>
+        <div>
+          <img src={Img4} alt="Slide 4"/>
+
+          <span>Publicar o seu Recurso</span>
+          <p>Colabore e ajude a fortalecer a plataforma publicando um recurso educacional desenvolvido por você ou pelo coletivo da escola do qual faz parte. Compartilhe seu conhecimento e dê visibilidade ao seu recurso, torne-o público enriquecendo o conhecimento partilhado!</p>
+
+
+        </div>
+        <div>
+          <img src={Img5} alt="Slide 5"/>
+
+          <span>Encontrar Materiais de Formação</span>
+          <p>A plataforma disponibiliza um conjunto de materiais de formação desenvolvidos pelo Ministério da Educação com diversidade de temas e recursos educacionais.</p>
+
+
+        </div>
+      </CarouselAbout>
+    </div>
   );
 }
 
diff --git a/src/Components/AboutCarouselPartner.css b/src/Components/AboutCarouselPartner.css
new file mode 100644
index 00000000..4ccfbadb
--- /dev/null
+++ b/src/Components/AboutCarouselPartner.css
@@ -0,0 +1,6 @@
+#Partner-Caroussel > .carousel-root > .carousel-slider > button{
+  display:none;
+}
+.dot{
+  border: 1px solid black;
+}
\ No newline at end of file
diff --git a/src/Components/AboutCarouselPartner.js b/src/Components/AboutCarouselPartner.js
new file mode 100644
index 00000000..eb9c9c29
--- /dev/null
+++ b/src/Components/AboutCarouselPartner.js
@@ -0,0 +1,142 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+
+import React from 'react';
+import "react-responsive-carousel/lib/styles/carousel.min.css";
+import { Carousel } from 'react-responsive-carousel';
+import './AboutCarouselPartner.css'
+
+
+import LogoPortalDoProfessor from "../img/logo_parceiros/logo_portaldoprofessor.png";
+import LogoBioe from "../img/logo_parceiros/logo_bioe.png";
+import LogoDominioPublico from "../img/logo_parceiros/logo_dominiopublico.png";
+import LogoTvEscola from "../img/logo_parceiros/logo_tvescola.png";
+import Safer from "../img/logo_parceiros/safer.png";
+import FundacaoLemann from "../img/logo_parceiros/fundacao-lemann.png";
+import InstitutoCrescer from "../img/logo_parceiros/instituto-crescer.png";
+import RedeEscola from "../img/logo_parceiros/redeescola.png";
+import Educagital from "../img/logo_parceiros/educagital.png";
+import EnefAef from "../img/logo_parceiros/ENEF_AEF.png";
+import Impa from "../img/logo_parceiros/impa.png";
+import Futura from "../img/logo_parceiros/futura.png";
+import Impulsiona from "../img/logo_parceiros/impulsiona.png";
+import InstPeninsula from "../img/logo_parceiros/inst-peninsula.png";
+import Telefonica from "../img/logo_parceiros/telefonica.png";
+
+function AboutCarouselPartner(props) {
+
+
+  const itens = [
+    <a href="http://portaldoprofessor.mec.gov.br/index.html" rel="noreferrer" target="_blank">
+      <img src={LogoPortalDoProfessor} alt="LogoPortalDoProfessor"/>
+    </a>,
+    <a href="http://objetoseducacionais2.mec.gov.br/" rel="noreferrer" target="_blank">
+      <img src={LogoBioe} alt="LogoBioe" />
+    </a>,
+    <a href="http://www.dominiopublico.gov.br/pesquisa/PesquisaObraForm.jsp" rel="noreferrer" target="_blank">
+      <img src={LogoDominioPublico} alt="LogoDominioPublico" />
+    </a>,
+    <a href="https://tvescola.org.br/" rel="noreferrer" target="_blank">
+      <img src={LogoTvEscola} alt="LogoTvEscola" />
+    </a>,
+    <a href="http://www.fundacaolemann.org.br/"  rel="noreferrer" target="_blank">
+      <img style={{align: "middle"}} src={FundacaoLemann} alt="FundacaoLemann" />
+    </a>,
+    <a href="http://new.safernet.org.br/" rel="noreferrer" target="_blank">
+      <img src={Safer} alt="Safer" />
+    </a>,
+    <a href="http://institutocrescer.org.br/" rel="noreferrer" target="_blank">
+      <img src={InstitutoCrescer} alt="InstitutoCrescer" />
+    </a>,
+    <a href="http://escoladigital.org.br/" rel="noreferrer" target="_blank">
+      <img src={RedeEscola} alt="RedeEscola" />
+    </a>,
+    <a href="http://educadigital.org.br" rel="noreferrer" target="_blank">
+      <img src={Educagital} alt="Educagital" />
+    </a>,
+    <a href="http://www.aefbrasil.org.br" rel="noreferrer" target="_blank">
+      <img style={{filter: "grayscale(1)"}} src={EnefAef} alt="EnefAef" />
+    </a>,
+    <a href="https://impa.br/" rel="noreferrer" target="_blank">
+      <img src={Impa} alt="Impa" />
+    </a>,
+    <a href="http://futura.org.br/" rel="noreferrer" target="_blank">
+      <img src={Futura} alt="Futura" />
+    </a>,
+    <a href="http://impulsiona.org.br/" rel="noreferrer" target="_blank">
+      <img src={Impulsiona} alt="Impulsiona" />
+    </a>,
+    <a href="http://www.institutopeninsula.org.br/" rel="noreferrer" target="_blank">
+      <img src={InstPeninsula} alt="InstPeninsula" />
+    </a>,
+    <a href="http://fundacaotelefonica.org.br/" rel="noreferrer" target="_blank">
+      <img src={Telefonica} alt="Telefonica" />
+    </a>
+  ]
+  const partnerPerPage = (()=> {
+    var pageWidth = window.innerWidth
+    if (pageWidth >= 1200){
+      return 3
+    }
+    else{
+      return 1
+    }
+  })
+  var rows = []
+  var partner_per_page = partnerPerPage()
+  for(let i = 0; i < 15/partner_per_page; i++){
+    rows.push(itens.slice(i*partner_per_page, partner_per_page*(i+1)))
+  }
+
+  return (
+    <div id="Partner-Caroussel">
+    <Carousel showThumbs= {false}
+              showStatus= {false}
+              showIndicators = {true}
+              interval={4500}
+              transitionTime={1000}
+              autoPlay
+              infiniteLoop
+
+    >
+    {
+      rows.map((row, index) => (
+        <div key={(index+1)} style={{display:'inline-flex', paddingTop:100}}>
+          {
+            row.map((partner, index2) => (
+             <div 
+              key={index + (index2*10)}
+              style={{marginLeft:10, display: 'flex', maxWidth:300}}
+            >
+                {
+                  partner
+                }
+              </div>
+            ))
+          }
+        </div>
+      ))
+    }
+    </Carousel>
+    </div>
+
+  );
+}
+
+export default AboutCarouselPartner;
diff --git a/src/Pages/AboutPage.js b/src/Pages/AboutPage.js
index a69e23ff..a3a45761 100644
--- a/src/Pages/AboutPage.js
+++ b/src/Pages/AboutPage.js
@@ -21,6 +21,8 @@ import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components';
 import Modal from '../Components/ModalAbout';
 import AboutCarousel from "../Components/AboutCarousel";
+import AboutCarouselPartner from '../Components/AboutCarouselPartner';
+
 
 /*Importação de imagens para o componente*/
 import Agpl from "../img/sobre/agpl.svg";
@@ -31,21 +33,6 @@ import Alunos from "../img/sobre/Alunos.png";
 import Gestores from "../img/sobre/Gestores.png";
 import Comunidade from "../img/sobre/comunidade.png";
 
-import LogoPortalDoProfessor from "../img/logo_parceiros/logo_portaldoprofessor.png";
-import LogoBioe from "../img/logo_parceiros/logo_bioe.png";
-import LogoDominioPublico from "../img/logo_parceiros/logo_dominiopublico.png";
-import LogoTvEscola from "../img/logo_parceiros/logo_tvescola.png";
-import Safer from "../img/logo_parceiros/safer.png";
-import FundacaoLemann from "../img/logo_parceiros/fundacao-lemann.png";
-import InstitutoCrescer from "../img/logo_parceiros/instituto-crescer.png";
-import RedeEscola from "../img/logo_parceiros/redeescola.png";
-import Educagital from "../img/logo_parceiros/educagital.png";
-import EnefAef from "../img/logo_parceiros/ENEF_AEF.png";
-import Impa from "../img/logo_parceiros/impa.png";
-import Futura from "../img/logo_parceiros/futura.png";
-import Impulsiona from "../img/logo_parceiros/impulsiona.png";
-import InstPeninsula from "../img/logo_parceiros/inst-peninsula.png";
-import Telefonica from "../img/logo_parceiros/telefonica.png";
 
 const Secao1 = styled.div`
   height: 600px;
@@ -63,7 +50,6 @@ const Secao2 = styled.div`
   .container {
 
     height: 100%;
-    width: 1140px;
     padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
@@ -116,7 +102,6 @@ const Secao3 = styled.div`
   .container {
 
     height: 100%;
-    width: 1140px;
     padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
@@ -184,7 +169,6 @@ const Secao4 = styled.div`
   .container {
 
     height: 100%;
-    width: 1140px;
     padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
@@ -298,7 +282,6 @@ const Secao5 = styled.div`
   .container {
 
     height: 100%;
-    width: 1140px;
     padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
@@ -341,8 +324,7 @@ const Secao6 = styled.div`
 
   .container {
 
-    height: 450px;
-    width: 1140px;
+    height: 100%;
     padding-top:50px
     padding-right: 15px;
     padding-left: 15px;
@@ -359,7 +341,7 @@ const Secao6 = styled.div`
       .conteudo-secao {
 
         height: 100%;
-        width: 970px;
+        width: 100%;
 
         h2 {
           text-align: center;
@@ -392,13 +374,12 @@ const Secao6 = styled.div`
 `
 
 const Secao7 = styled.div`
-  height: 592px;
+  height: 100%;
   background-color: #f4f4f4;
 
   .container {
 
     height: 100%;
-    width: 1170px;
     margin-right: auto;
     margin-left: auto;
 
@@ -408,6 +389,7 @@ const Secao7 = styled.div`
       flex-direction: column;
       justify-content: center;
       color: #666;
+      padding: 50px
 
 
       .conteudo-secao {
@@ -436,11 +418,11 @@ const Secao7 = styled.div`
 
         .card {
 
-          height: 270px;
+          height: 80%;
 
           background-color: #fff;
           box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
-          padding: 50px 20px;
+          padding: 40px 20px;
           text-align: center;
 
           h3 {
@@ -478,7 +460,6 @@ const Secao8 = styled.div`
   .container {
 
     height: 100%;
-    width: 1140px;
     padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
@@ -579,7 +560,7 @@ export default function AboutPage(props) {
     <link href="https://fonts.googleapis.com/css?family=Pompiere|Roboto:300,400&display=swap" rel="stylesheet"/>
 
       <Secao1>
-        <iframe title="Vídeo página sobre" src="https://player.vimeo.com/video/231609051" width="100%" height="100%" frameborder="0" allow="autoplay; fullscreen" allowFullScreen></iframe>
+        <iframe title="Vídeo página sobre" src="https://player.vimeo.com/video/231609051" width="100%" height="100%" frameBorder="0" allow="autoplay; fullscreen" allowFullScreen></iframe>
 
       </Secao1>
 
@@ -656,6 +637,8 @@ export default function AboutPage(props) {
         </div>
       </Secao3>
 
+      
+      
       <Secao4>
         <div   className="container">
           <div className="container-secao" id="portaisparceiros">
@@ -664,89 +647,9 @@ export default function AboutPage(props) {
                 <h2>Portais Parceiros</h2>
                 <p>Aqui na Plataforma você encontra os Recursos Digitais dos principais portais do MEC e de vários outros parceiros.</p>
               </div>
-              <div className="portais">
-                <ul className="itens">
-                  <li>
-                    <a href="http://portaldoprofessor.mec.gov.br/index.html" rel="noreferrer" target="_blank">
-                      <img src={LogoPortalDoProfessor} alt="LogoPortalDoProfessor" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://objetoseducacionais2.mec.gov.br/" rel="noreferrer" target="_blank">
-                      <img src={LogoBioe} alt="LogoBioe" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://www.dominiopublico.gov.br/pesquisa/PesquisaObraForm.jsp" rel="noreferrer" target="_blank">
-                      <img src={LogoDominioPublico} alt="LogoDominioPublico" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="https://tvescola.org.br/" rel="noreferrer" target="_blank">
-                      <img src={LogoTvEscola} alt="LogoTvEscola" />
-                    </a>
-                  </li>
-                </ul>
-                <ul className="itens">
-                  <li>
-                    <a href="http://www.fundacaolemann.org.br/"  rel="noreferrer" target="_blank">
-                      <img style={{align: "middle"}} src={FundacaoLemann} alt="FundacaoLemann" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://new.safernet.org.br/" rel="noreferrer" target="_blank">
-                      <img src={Safer} alt="Safer" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://institutocrescer.org.br/" rel="noreferrer" target="_blank">
-                      <img src={InstitutoCrescer} alt="InstitutoCrescer" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://escoladigital.org.br/" rel="noreferrer" target="_blank">
-                      <img src={RedeEscola} alt="RedeEscola" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://educadigital.org.br" rel="noreferrer" target="_blank">
-                      <img src={Educagital} alt="Educagital" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://www.aefbrasil.org.br" rel="noreferrer" target="_blank">
-                      <img style={{height:"130px",filter: "grayscale(1)"}} src={EnefAef} alt="EnefAef" />
-                    </a>
-                  </li>
-                </ul>
-                <ul className="itens">
-                  <li>
-                    <a href="https://impa.br/" rel="noreferrer" target="_blank">
-                      <img src={Impa} alt="Impa" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://futura.org.br/" rel="noreferrer" target="_blank">
-                      <img src={Futura} alt="Futura" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://impulsiona.org.br/" rel="noreferrer" target="_blank">
-                      <img src={Impulsiona} alt="Impulsiona" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://www.institutopeninsula.org.br/" rel="noreferrer" target="_blank">
-                      <img src={InstPeninsula} alt="InstPeninsula" />
-                    </a>
-                  </li>
-                  <li>
-                    <a href="http://fundacaotelefonica.org.br/" rel="noreferrer" target="_blank">
-                      <img src={Telefonica} alt="Telefonica" />
-                    </a>
-                  </li>
-                </ul>
-              </div>
+
+              <AboutCarouselPartner/>           
+              
               <div>
                 <h3>Você busca Recursos Educacionais Digitais em outros sites?</h3>
                 <p>
@@ -807,7 +710,7 @@ export default function AboutPage(props) {
               </div>
               <div>
                 <Grid container spacing={3}>
-                  <Grid item xs={3}>
+                  <Grid item xs>
                     <div className="card">
                       <img src={Professores} alt="" />
                       <h3>Professores</h3>
@@ -818,7 +721,7 @@ export default function AboutPage(props) {
                       </p>
                     </div>
                   </Grid>
-                  <Grid item xs={3}>
+                  <Grid item xs>
                     <div className="card">
                       <img src={Alunos} alt="" />
                       <h3>Alunos</h3>
@@ -829,7 +732,7 @@ export default function AboutPage(props) {
                       </p>
                     </div>
                   </Grid>
-                  <Grid item xs={3}>
+                  <Grid item xs>
                     <div className="card">
                       <img src={Gestores} alt="" />
                       <h3>Gestores</h3>
@@ -839,7 +742,7 @@ export default function AboutPage(props) {
                       </p>
                     </div>
                   </Grid>
-                  <Grid item xs={3}>
+                  <Grid item xs>
                     <div className="card">
                       <img src={Comunidade} alt="" />
                       <h3>Comunidade Escolar</h3>
-- 
GitLab


From ee5f5f185931271b13369e1887c4478d21b3f542 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 27 Jan 2021 12:35:27 -0300
Subject: [PATCH 08/83] Added this file to display the content of the expanded
 material

---
 src/Components/ExpandedMaterials.js | 84 +++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)
 create mode 100644 src/Components/ExpandedMaterials.js

diff --git a/src/Components/ExpandedMaterials.js b/src/Components/ExpandedMaterials.js
new file mode 100644
index 00000000..96308a6f
--- /dev/null
+++ b/src/Components/ExpandedMaterials.js
@@ -0,0 +1,84 @@
+import React from 'react';
+import { Typography } from "@material-ui/core";
+import { makeStyles } from '@material-ui/core/styles';
+import styled from 'styled-components';
+import Chip from '@material-ui/core/Chip';
+import Grid from '@material-ui/core/Grid';
+import { Container } from "react-grid-system";
+
+const useStyles = makeStyles((theme) => ({
+    root: {
+        display: 'flex',
+        flexWrap: 'wrap',
+        '& > *': {
+            margin: theme.spacing(0.5),
+        },
+    },
+}));
+
+const ExpandedMaterial = (props) => {
+    const material = { ...props.material };
+    const classes = useStyles();
+
+    return (
+        <Container style={{ backgroundColor: "#444444", padding : "20px" }}>
+            <Grid container direction="row">
+                <Grid item direction="column" xs={4}>
+                    <Grid item>
+                        <Title variant="body2">
+                            {
+                                material.name
+                            }
+                        </Title>
+                    </Grid>
+                    <Grid item>
+                        <ChipsDiv className={classes.root}>
+                            {
+                                material.tags.map((tag, index) => {
+                                    return (
+                                        <Chip color="default" label={tag.name} key={index} style={{padding : "0.5px"}} />
+                                    )
+                                })
+                            }
+                        </ChipsDiv>
+                    </Grid>
+                    <div>
+                        <DevelopedTypo>
+                            Desenvolvido por: 
+                        </DevelopedTypo>
+                        <DevelopedSpan>
+                            {
+                                material.developed
+                            }
+                        </DevelopedSpan>
+                    </div>
+                </Grid>
+            </Grid>
+        </Container>
+    );
+}
+
+const Title = styled.h3`
+    color: White;
+    font-weight: 500;
+    padding : 0; 
+    margin  : 0; 
+`
+
+const ChipsDiv = styled.div`
+    margin-left : -5px;
+`
+
+const DevelopedSpan = styled.span`
+    color : white;
+    opacity : 0.9;    
+
+`
+
+const DevelopedTypo = styled(Typography)`
+    color : white;
+    font-weight: bold;
+`
+
+
+export default ExpandedMaterial;
\ No newline at end of file
-- 
GitLab


From 6f23caa634a4c27e4ab08e34aff5c049c29f1d70 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 27 Jan 2021 12:36:12 -0300
Subject: [PATCH 09/83] its not static informations anymore

---
 src/Components/AreasSubPages.js | 68 ++++++++++++++++++++++++++-------
 1 file changed, 54 insertions(+), 14 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index fb6fde62..9af843fa 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, { Component } from "react";
+import React, { Component, useState } from "react";
 import axios from "axios";
 import { apiUrl } from "../env";
 import "./carousel.css";
@@ -30,6 +30,10 @@ import colecoes from "../img/ilustra_colecoes.png";
 import Grid from "@material-ui/core/Grid";
 import ResourceCardFunction from "./ResourceCardFunction.js";
 import CollectionCardFunction from "./CollectionCardFunction.js";
+import colecoes_obj from './FormationMaterialsResources/formationMaterials';
+import ExpandedMaterial from './ExpandedMaterials';
+
+const materials = colecoes_obj();
 
 const areaStyle = {
   paddingTop: "5px",
@@ -60,6 +64,7 @@ class ReqResources extends Component {
     var row1 = this.state.resources.slice(0, 4);
     var row2 = this.state.resources.slice(4, 8);
     var row3 = this.state.resources.slice(8, 13);
+
     return (
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
         <Row style={{ paddingBottom: "5px" }}>
@@ -206,6 +211,16 @@ class ReqCollections extends Component {
 }
 
 class SubPages extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      currMaterial: {
+        open: false,
+        material: {}
+      },
+    };
+  }
+
   areaRender() {
     switch (this.props.banner) {
       case "Recursos":
@@ -254,6 +269,19 @@ class SubPages extends Component {
           </React.Fragment>
         );
       case "Materiais":
+
+        const HandleExpandMaterial = (id) => {
+          console.log(id);
+          this.setState({
+            currMaterial: {
+              open: !this.state.currMaterial.open,
+              material: { ...materials[id] }
+            }
+          })
+          console.log(this.state.currMaterial)
+        }
+
+
         return (
           <React.Fragment>
             <div style={{ backgroundColor: "#e81f4f" }}>
@@ -297,22 +325,32 @@ class SubPages extends Component {
                 showStatus={false}
               >
                 <Row>
-                  <Col md={3}>
-                    <MaterialCard name="oioi" />
-                  </Col>
-                  <Col md={3}>
-                    <MaterialCard name="oioi" />
-                  </Col>
-                  <Col md={3}>
-                    <MaterialCard name="oioi" />
-                  </Col>
-                  <Col md={3}>
-                    <MaterialCard name="oioi" />
-                  </Col>
+                  {
+                    materials.map((material, index) => {
+                      return (
+                        <Col md={3} key={index}>
+                          <MaterialCard
+                            name={material.name}
+                            thumb={material.img}
+                            score={material.score}
+                            modules={material.topics}
+                            handleExpand={HandleExpandMaterial}
+                            id={index}
+                          />
+                        </Col>
+                      )
+                    })
+                  }
                 </Row>
               </Carousel>
+              {
+                this.state.currMaterial.open ?
+                  <ExpandedMaterial material={this.state.currMaterial.material}/>
+                  :
+                  null
+              }
             </Container>
-          </React.Fragment>
+          </React.Fragment >
         );
       case "Colecoes":
         return (
@@ -362,4 +400,6 @@ class SubPages extends Component {
     return <div>{this.areaRender()}</div>;
   }
 }
+
+
 export default SubPages;
-- 
GitLab


From a473554a4c99aa4474b8a4ce28414b2da0fb255a Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 27 Jan 2021 12:37:09 -0300
Subject: [PATCH 10/83] finish to build the material card

---
 src/Components/MaterialCard.js | 98 +++++++++++++++++++++++-----------
 1 file changed, 68 insertions(+), 30 deletions(-)

diff --git a/src/Components/MaterialCard.js b/src/Components/MaterialCard.js
index c5353a91..3d06862b 100644
--- a/src/Components/MaterialCard.js
+++ b/src/Components/MaterialCard.js
@@ -16,40 +16,78 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {Component} from 'react';
+import React, {useState} from 'react';
 import Card from '@material-ui/core/Card';
 import CardContent from '@material-ui/core/CardContent';
 import CardActions from '@material-ui/core/CardActions';
 import Typography from '@material-ui/core/Typography';
-import livro from "../img/laranja/LIVRO_DIGITAL.jpg";
 import Library from '@material-ui/icons/LibraryBooks';
+import Rating from '@material-ui/lab/Rating';
+import StarBorderIcon from '@material-ui/icons/StarBorder';
+import Grid from '@material-ui/core/Grid';
+import styled from 'styled-components';
+import Button from '@material-ui/core/Button';
+import ExpandMoreRoundedIcon from '@material-ui/icons/ExpandMoreRounded';
+import ExpandLessRoundedIcon from '@material-ui/icons/ExpandLessRounded';
 
+export default function MaterialCard(props) {
 
-class MaterialCard extends Component {
-  constructor(props) {
-    super(props);
-    this.state={
-      thumbnail: livro,
-    };
-  }
-  render(){
-   return (
-     <Card>
-       <img src={this.state.thumbnail} alt="thumbnail do recurso"/>
-       <CardContent style={{height: "60%", textAlign: "left", paddingBottom: "0px"}}>
-         <Typography variant="body2" color="textSecondary" component="p" style={{overflow: "hidden", fontSize: "0.8em"}}>
-           {this.props.name}
-         </Typography>
-       </CardContent>
-       <CardActions style={{justifyContent: "space-between"}}>
-        <Library style={{color:"#e81f4f"}} />
-       </CardActions>
-       <CardActions style={{borderTop:"1px solid #e5e5e5", justifyContent: "space-between"}}>
-       <Typography>Expandir??</Typography>
-       </CardActions>
-     </Card>
-   );}
- }
-
-
-export default MaterialCard;
+    const [expanded, setExpanded] = useState(false);
+
+    const thumb = require(`../../public/${props.thumb}`)
+
+    return (
+        <Card>
+            <img src={thumb} alt="thumbnail do recurso" />
+            <CardContent style={{ height: "60px", textAlign: "left", paddingBottom: "0px", width: "100%" }}>
+                <Title>
+                    {props.name}
+                </Title>
+            </CardContent>
+            <CardActions>
+                <Grid container direction="column" justify="flex-start" alignItems="flex-start" style={{ marginLeft: "5px" }}>
+                    <Grid item>
+                        <Rating
+                            name="customized-empty"
+                            value={props.score}
+                            precision={0.5}
+                            style={{ color: "#666" }}
+                            emptyIcon={<StarBorderIcon fontSize="inherit" />}
+                            readOnly
+                        />
+                    </Grid>
+                    <Grid container direction="row" alignItems="center">
+                        <Library style={{ color: "#e81f4f" }} />
+                        <SizedBox />
+                        <Typography variant="body2" color="textSecondary" component="p" style={{ overflow: "hidden", fontSize: "0.8em" }}>
+                            {props.modules.length} módulos
+            </Typography>
+                    </Grid>
+                </Grid>
+            </CardActions>
+            <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
+                <Button 
+                    color="secondary" 
+                    endIcon={expanded ? <ExpandLessRoundedIcon/> : <ExpandMoreRoundedIcon/>}
+                    onClick={() => props.handleExpand(props.id)}
+                >
+                    
+                Expandir
+                </Button>
+            </CardActions>
+        </Card >
+    )
+}
+
+const SizedBox = styled.div`
+  width : 5px;
+`
+const Title = styled(Typography)`
+    text-overflow: ellipsis;
+    overflow: hidden;
+    margin-bottom: 10px;
+    font-size: 1.2em;
+    line-height: 1.1;
+    max-height: 46px;
+    color: #666;
+`
\ No newline at end of file
-- 
GitLab


From b128333f022e67a68d25651b8afd66d2e8cd7009 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 28 Jan 2021 08:24:37 -0300
Subject: [PATCH 11/83] Center content in carousel at homepage

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/AreasSubPages.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 0b7cc763..7765fcec 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -73,7 +73,7 @@ class ReqResources extends Component {
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
         {
           rows.map((row, index) => (
-            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%"}} key={(index+1)}>
+            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%",  justifyContent: "center"}} key={(index+1)}>
               {row.map((card) => (
                 <div style={{marginLeft:10, display: 'flex' }} key={card.id*(index+1)}>
                   <ResourceCardFunction
@@ -141,7 +141,7 @@ class ReqCollections extends Component {
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
         {
           rows.map((row, index) => (
-            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%" }} key={(index+1)}>
+            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%", justifyContent: "center" }} key={(index+1)}>
               {row.map((card) => (
                 <div style={{marginLeft:10, display: 'flex' }} key={card.id*(index+1)}>
                   <CollectionCardFunction
-- 
GitLab


From 7f3fb4c93c755ae6d95c27086715239b7e716b93 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 28 Jan 2021 09:55:13 -0300
Subject: [PATCH 12/83] Improve resposivity of AboutPage

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/AboutPage.js | 48 +++++++++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 17 deletions(-)

diff --git a/src/Pages/AboutPage.js b/src/Pages/AboutPage.js
index a3a45761..56b84041 100644
--- a/src/Pages/AboutPage.js
+++ b/src/Pages/AboutPage.js
@@ -41,7 +41,6 @@ const Secao1 = styled.div`
 
 
 const Secao2 = styled.div`
-  height: 600px;
   color: #666;
   text-align: center;
   font-size: 14px;
@@ -54,6 +53,7 @@ const Secao2 = styled.div`
     padding-left: 15px;
     margin-right: auto;
     margin-left: auto;
+    padding: 20px 0px;
 
     .container-secao {
       height: 100%;
@@ -62,8 +62,8 @@ const Secao2 = styled.div`
       justify-content: center;
 
 
-      .conteudo-secao {
 
+      .conteudo-secao {
         h2 {
           text-align: center;
           font-family: Roboto, sans-serif;
@@ -94,22 +94,19 @@ const Secao2 = styled.div`
 `
 
 const Secao3 = styled.div`
-  height: auto;
   padding: 30px 0;
   background-color: #1ab9de;
   color: #fff;
 
   .container {
 
-    height: 100%;
     padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
     margin-left: auto;
+    padding-left: 20px;
 
     .container-secao {
-      height: 100%;
-      width: 1110px;
       padding-right: 15px;
       padding-left: 15px;
       display: flex;
@@ -553,7 +550,23 @@ const Secao8 = styled.div`
 
 
 export default function AboutPage(props) {
-
+  var pageWidth = window.innerWidth
+  const calculateMargin = ((pageWidth)=>{
+    if (pageWidth > 700 && pageWidth <= 850){
+      return "40%"
+    }
+    if (pageWidth > 850 && pageWidth <= 900){
+      return "25%"
+    }
+    if (pageWidth > 900 && pageWidth < 1100){
+      return "13%"
+    }
+    else{
+      return "0%"
+    }
+  })
+  var marginSet = calculateMargin(pageWidth)
+  const styleIMGSec3 = {float:"right", width:"80%", maxWidth:475, marginRight:30, marginTop: marginSet}
   return (
     <>
 
@@ -569,9 +582,7 @@ export default function AboutPage(props) {
           <div className="container-secao">
             <div className="conteudo-secao">
               <h2>Um Pouco da História</h2>
-              <br/>
-              <br/>
-              <p>
+              <p style={{marginLeft:20, marginRight:20, marginBottom:40}}>
                 A partir de uma iniciativa do Ministério da Educação, surge
                 em outubro de 2015 a proposta de reunir e disponibilizar, em um
                 único lugar, os Recursos Educacionais Digitais dos principais
@@ -584,9 +595,6 @@ export default function AboutPage(props) {
                 entre professoras(es)!<br/><br/>Faça parte deste espaço de
                 colaborativo você também!
               </p>
-              <br/>
-              <br/>
-              <br/>
               <img src={Agpl} alt="agpl" />
               <p>
                 Este programa é software livre, sob os termos da
@@ -605,7 +613,7 @@ export default function AboutPage(props) {
           <div className="container-secao">
             <div className="conteudo-secao">
               <Grid container spacing={0}>
-                <Grid item xs={6}>
+                <Grid item xs style={{paddingRight:20}}>
                   <h2>O que nos faz diferentes?</h2>
                   <h3>Espaço construído por e para professores</h3>
                   <p>
@@ -626,9 +634,15 @@ export default function AboutPage(props) {
                   os Recursos Educacionais Digitais dos principais portais abertos.
                   </p>
                 </Grid>
-                <Grid item xs={6}>
-                  <img src={Notebook} alt="Imagem Notebook"/>
-                </Grid>
+                {
+                  pageWidth >= 751?  
+                  <Grid item xs={6} style={{position:"relative"}}>
+                    <img src={Notebook} alt="Imagem Notebook" style={styleIMGSec3}/>
+                  </Grid>
+                  :
+                  <div/>
+                }
+                
 
               </Grid>
 
-- 
GitLab


From b721d329a9aa38cc962ab8c50d3929a000fc0390 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 28 Jan 2021 10:06:32 -0300
Subject: [PATCH 13/83] Remove horizontal bar from homepage

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/SearchSection.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Components/SearchSection.js b/src/Components/SearchSection.js
index fac1acb0..228d72b4 100644
--- a/src/Components/SearchSection.js
+++ b/src/Components/SearchSection.js
@@ -84,7 +84,7 @@ class SearchSection extends Component{
             <FaRegPlayCircle size="20px" style={{verticalAlign: "middle", paddingRight : "5px"}}/>VÍDEO DE APRESENTAÇÃO
             </span>
           </div>
-      <Row justify="center">
+      <Row justify="center" style={{marginLeft:0, marginRight:0}}>
       <button style={{...buttonStyle, ...{backgroundColor: "#ff7f00",fontSize:"1.14em", outline:"none"}}} onClick={()=> {this.props.function("Recursos")}}>Recursos Educacionais Digitais</button>
       <button style={{...buttonStyle, ...{backgroundColor: "#e81f4f",fontSize:"1.14em", outline:"none"}}} onClick={()=> {this.props.function("Materiais")}}>Materiais de Formação</button>
       <button style={{...buttonStyle, ...{backgroundColor: "#673ab7",fontSize:"1.14em", outline:"none"}}} onClick={()=> {this.props.function("Colecoes")}}>Coleções dos Usuários</button>
-- 
GitLab


From 7f2dd111dc4811478e6a83aa5a0d5ab35771e2cb Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 10:13:22 -0300
Subject: [PATCH 14/83] Build a file to show infos about the modules

---
 src/Components/ExpandedMaterialCard.js | 67 ++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 src/Components/ExpandedMaterialCard.js

diff --git a/src/Components/ExpandedMaterialCard.js b/src/Components/ExpandedMaterialCard.js
new file mode 100644
index 00000000..120cdfa3
--- /dev/null
+++ b/src/Components/ExpandedMaterialCard.js
@@ -0,0 +1,67 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState } from 'react';
+import Card from '@material-ui/core/Card';
+import CardContent from '@material-ui/core/CardContent';
+import CardActions from '@material-ui/core/CardActions';
+import Typography from '@material-ui/core/Typography';
+import styled from 'styled-components';
+import Button from '@material-ui/core/Button';
+import ExpandMoreRoundedIcon from '@material-ui/icons/ExpandMoreRounded';
+import ExpandLessRoundedIcon from '@material-ui/icons/ExpandLessRounded';
+
+export default function MaterialCard(props) {
+
+    const [expanded, setExpanded] = useState(false);
+
+    const thumb = require(`../../public/${props.thumb}`)
+
+    return (
+        <Card>
+            <img style={{maxHeight : "100%", maxWidth:"100%"}} src={thumb} alt="thumbnail do recurso" />
+            <CardContent style={{ height: "50px"}}>
+                <Title>
+                    {props.name}
+                </Title>
+            </CardContent>
+            <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
+                <Button
+                    color="secondary"
+                    endIcon={expanded ? <ExpandLessRoundedIcon /> : <ExpandMoreRoundedIcon />}
+                >
+
+                    Ver módulos
+                </Button>
+            </CardActions>
+        </Card >
+    )
+}
+
+const SizedBox = styled.div`
+  width : 5px;
+`
+const Title = styled(Typography)`
+    text-overflow: ellipsis;
+    overflow: hidden;
+    margin-bottom: 10px;
+    font-size: 1.2em;
+    line-height: 1.1;
+    max-height: 46px;
+    color: #666;
+`
\ No newline at end of file
-- 
GitLab


From 3dda9266626bcbc6df6a8e5c117ddc1313ca046e Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 10:14:51 -0300
Subject: [PATCH 15/83] Nothing changed

---
 src/Components/AreasSubPages.js | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 9af843fa..62c00389 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, { Component, useState } from "react";
+import React, { Component } from "react";
 import axios from "axios";
 import { apiUrl } from "../env";
 import "./carousel.css";
@@ -32,6 +32,8 @@ import ResourceCardFunction from "./ResourceCardFunction.js";
 import CollectionCardFunction from "./CollectionCardFunction.js";
 import colecoes_obj from './FormationMaterialsResources/formationMaterials';
 import ExpandedMaterial from './ExpandedMaterials';
+import Zoom from '@material-ui/core/Zoom';
+
 
 const materials = colecoes_obj();
 
@@ -271,14 +273,20 @@ class SubPages extends Component {
       case "Materiais":
 
         const HandleExpandMaterial = (id) => {
-          console.log(id);
-          this.setState({
-            currMaterial: {
-              open: !this.state.currMaterial.open,
-              material: { ...materials[id] }
-            }
-          })
-          console.log(this.state.currMaterial)
+          if (id !== this.state.currMaterial.material.id)
+            this.setState({
+              currMaterial: {
+                open: true,
+                material: { ...materials[id] }
+              }
+            })
+          else
+            this.setState({
+              currMaterial: {
+                open: false,
+                material: {}
+              }
+            })
         }
 
 
@@ -345,7 +353,7 @@ class SubPages extends Component {
               </Carousel>
               {
                 this.state.currMaterial.open ?
-                  <ExpandedMaterial material={this.state.currMaterial.material}/>
+                  <ExpandedMaterial material={this.state.currMaterial.material} />
                   :
                   null
               }
-- 
GitLab


From ca866d21c6ecf607dd31593b1c65a8596ad0c21e Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 10:15:36 -0300
Subject: [PATCH 16/83] Add Paper component

---
 src/Components/ExpandedMaterials.js | 85 +++++++++++++++++++++--------
 1 file changed, 61 insertions(+), 24 deletions(-)

diff --git a/src/Components/ExpandedMaterials.js b/src/Components/ExpandedMaterials.js
index 96308a6f..3cf9b525 100644
--- a/src/Components/ExpandedMaterials.js
+++ b/src/Components/ExpandedMaterials.js
@@ -1,10 +1,12 @@
 import React from 'react';
-import { Typography } from "@material-ui/core";
 import { makeStyles } from '@material-ui/core/styles';
 import styled from 'styled-components';
 import Chip from '@material-ui/core/Chip';
 import Grid from '@material-ui/core/Grid';
-import { Container } from "react-grid-system";
+import Button from '@material-ui/core/Button';
+import ExpandedMaterialCard from './ExpandedMaterialCard';
+import Paper from '@material-ui/core/Paper';
+import Library from '@material-ui/icons/LibraryBooks';
 
 const useStyles = makeStyles((theme) => ({
     root: {
@@ -21,8 +23,8 @@ const ExpandedMaterial = (props) => {
     const classes = useStyles();
 
     return (
-        <Container style={{ backgroundColor: "#444444", padding : "20px" }}>
-            <Grid container direction="row">
+        <Paper elevation={3} style={{ backgroundColor: "#444444", padding: "20px" }}>
+            <Grid container direction="row" spacing={2}>
                 <Grid item direction="column" xs={4}>
                     <Grid item>
                         <Title variant="body2">
@@ -31,30 +33,63 @@ const ExpandedMaterial = (props) => {
                             }
                         </Title>
                     </Grid>
+                    <SizedHeightBox />
                     <Grid item>
                         <ChipsDiv className={classes.root}>
                             {
                                 material.tags.map((tag, index) => {
                                     return (
-                                        <Chip color="default" label={tag.name} key={index} style={{padding : "0.5px"}} />
+                                        <Chip color="default" label={tag.name} key={index} style={{ padding: "0.5px" }} />
                                     )
                                 })
                             }
                         </ChipsDiv>
                     </Grid>
-                    <div>
-                        <DevelopedTypo>
-                            Desenvolvido por: 
-                        </DevelopedTypo>
-                        <DevelopedSpan>
+                    <SizedHeightBox2 />
+                    <Grid item direction="column" style={{ color: '#E5E7E9', fontWeight: "500" }}>
+                        <DevelopedByDiv>
                             {
-                                material.developed
+                                `Desenvolvido por: ${material.developed}`
                             }
-                        </DevelopedSpan>
-                    </div>
+                        </DevelopedByDiv>
+                        <SizedHeightBox3 />
+                        <Button variant="contained" color="secondary">
+                            Ver todos
+                        </Button>
+                    </Grid>
+                </Grid>
+                <Grid item direction="column" xs={8}>
+                    <Grid container direction="row" alignItems="center">
+                        <Library style={{ color: "White" }} />
+                        <SizedWidthBox />
+                        <Title>
+                            {material.topics.length} módulos
+                        </Title>
+                    </Grid>
+                    <SizedHeightBox />
+                    <Grid container direction="row" spacing={3}>
+                        {/* <Grid item md={3}>
+                            <ExpandedMaterialCard
+                                name={material.topics[1].pre_title + material.topics[1].title}
+                                thumb={material.topics[1].img}
+                            />
+                        </Grid> */}
+                        {
+                            material.topics.map((material, index) => {
+                                return (
+                                    <Grid item key={index} md={4}>
+                                        <ExpandedMaterialCard
+                                            name={material.pre_title + material.title}
+                                            thumb={material.img}
+                                        />
+                                    </Grid>
+                                )
+                            })
+                        }
+                    </Grid>
                 </Grid>
             </Grid>
-        </Container>
+        </Paper>
     );
 }
 
@@ -64,21 +99,23 @@ const Title = styled.h3`
     padding : 0; 
     margin  : 0; 
 `
+const DevelopedByDiv = styled.div`
+`
 
 const ChipsDiv = styled.div`
     margin-left : -5px;
 `
-
-const DevelopedSpan = styled.span`
-    color : white;
-    opacity : 0.9;    
-
+const SizedHeightBox = styled.div`    
+    height : 3em;
 `
-
-const DevelopedTypo = styled(Typography)`
-    color : white;
-    font-weight: bold;
+const SizedHeightBox2 = styled.div`    
+    height : 2em;
+`
+const SizedHeightBox3 = styled.div`    
+    height : 0.5em;
+`
+const SizedWidthBox = styled.div`
+  width : 5px;
 `
-
 
 export default ExpandedMaterial;
\ No newline at end of file
-- 
GitLab


From e16031844d889974df81bd6036f4872a08aba39d Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 10:16:19 -0300
Subject: [PATCH 17/83] Changed the button text

---
 src/Components/MaterialCard.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/Components/MaterialCard.js b/src/Components/MaterialCard.js
index 3d06862b..ae90a16f 100644
--- a/src/Components/MaterialCard.js
+++ b/src/Components/MaterialCard.js
@@ -61,7 +61,7 @@ export default function MaterialCard(props) {
                         <SizedBox />
                         <Typography variant="body2" color="textSecondary" component="p" style={{ overflow: "hidden", fontSize: "0.8em" }}>
                             {props.modules.length} módulos
-            </Typography>
+                        </Typography>
                     </Grid>
                 </Grid>
             </CardActions>
@@ -72,7 +72,7 @@ export default function MaterialCard(props) {
                     onClick={() => props.handleExpand(props.id)}
                 >
                     
-                Expandir
+                Ver módulos
                 </Button>
             </CardActions>
         </Card >
-- 
GitLab


From 8553981d35d6973dda44382b7ff2a30b3d26cd88 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 28 Jan 2021 11:28:16 -0300
Subject: [PATCH 18/83] Fix Presenting video format

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/ModalVideoApresentacao.js | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/Components/ModalVideoApresentacao.js b/src/Components/ModalVideoApresentacao.js
index 3b83f173..286cdf69 100644
--- a/src/Components/ModalVideoApresentacao.js
+++ b/src/Components/ModalVideoApresentacao.js
@@ -52,9 +52,8 @@ export default function ModalVideoApresentacao (props) {
 
 const VideoContainer = styled.div`
     position : relative;
-    width : 100%;
-    height : 0;
-    padding-bottom : 56.25%;
+    width : 70%;
+    height : 70%;
 
     .video {
         width : 100%;
-- 
GitLab


From fd72800e1b7fea35320dffd66cdbc475b227e9c2 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 15:41:30 -0300
Subject: [PATCH 19/83] Removed unecessary icons

---
 src/Components/ExpandedMaterialCard.js | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/Components/ExpandedMaterialCard.js b/src/Components/ExpandedMaterialCard.js
index 120cdfa3..f958a17e 100644
--- a/src/Components/ExpandedMaterialCard.js
+++ b/src/Components/ExpandedMaterialCard.js
@@ -23,8 +23,6 @@ import CardActions from '@material-ui/core/CardActions';
 import Typography from '@material-ui/core/Typography';
 import styled from 'styled-components';
 import Button from '@material-ui/core/Button';
-import ExpandMoreRoundedIcon from '@material-ui/icons/ExpandMoreRounded';
-import ExpandLessRoundedIcon from '@material-ui/icons/ExpandLessRounded';
 
 export default function MaterialCard(props) {
 
@@ -43,9 +41,7 @@ export default function MaterialCard(props) {
             <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
                 <Button
                     color="secondary"
-                    endIcon={expanded ? <ExpandLessRoundedIcon /> : <ExpandMoreRoundedIcon />}
                 >
-
                     Ver módulos
                 </Button>
             </CardActions>
-- 
GitLab


From fbac86d9c8228fdee74ef3330b81595f8a1965fe Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 15:42:25 -0300
Subject: [PATCH 20/83] Removed the map function

---
 src/Components/ExpandedMaterials.js | 42 +++++++++++++++++------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/src/Components/ExpandedMaterials.js b/src/Components/ExpandedMaterials.js
index 3cf9b525..25f7f49a 100644
--- a/src/Components/ExpandedMaterials.js
+++ b/src/Components/ExpandedMaterials.js
@@ -7,6 +7,7 @@ import Button from '@material-ui/core/Button';
 import ExpandedMaterialCard from './ExpandedMaterialCard';
 import Paper from '@material-ui/core/Paper';
 import Library from '@material-ui/icons/LibraryBooks';
+import {Link} from 'react-router-dom';
 
 const useStyles = makeStyles((theme) => ({
     root: {
@@ -53,9 +54,11 @@ const ExpandedMaterial = (props) => {
                             }
                         </DevelopedByDiv>
                         <SizedHeightBox3 />
-                        <Button variant="contained" color="secondary">
-                            Ver todos
-                        </Button>
+                        <StyledLink to={`/colecao?colecao=${material.id}`}>
+                            <Button variant="contained" color="secondary">
+                                Ver todos
+                            </Button>
+                        </StyledLink>
                     </Grid>
                 </Grid>
                 <Grid item direction="column" xs={8}>
@@ -68,24 +71,24 @@ const ExpandedMaterial = (props) => {
                     </Grid>
                     <SizedHeightBox />
                     <Grid container direction="row" spacing={3}>
-                        {/* <Grid item md={3}>
+                        <Grid item md={4}>
+                            <ExpandedMaterialCard
+                                name={material.topics[0].pre_title + material.topics[0].title}
+                                thumb={material.topics[0].img}
+                            />
+                        </Grid>
+                        <Grid item md={4}>
                             <ExpandedMaterialCard
                                 name={material.topics[1].pre_title + material.topics[1].title}
                                 thumb={material.topics[1].img}
                             />
-                        </Grid> */}
-                        {
-                            material.topics.map((material, index) => {
-                                return (
-                                    <Grid item key={index} md={4}>
-                                        <ExpandedMaterialCard
-                                            name={material.pre_title + material.title}
-                                            thumb={material.img}
-                                        />
-                                    </Grid>
-                                )
-                            })
-                        }
+                        </Grid>
+                        <Grid item md={4}>
+                            <ExpandedMaterialCard
+                                name={material.topics[2].pre_title + material.topics[2].title}
+                                thumb={material.topics[2].img}
+                            />
+                        </Grid>
                     </Grid>
                 </Grid>
             </Grid>
@@ -117,5 +120,10 @@ const SizedHeightBox3 = styled.div`
 const SizedWidthBox = styled.div`
   width : 5px;
 `
+const StyledLink = styled(Link)`
+	text-decoration: none !important;
+	color: inherit !important;
+`
+
 
 export default ExpandedMaterial;
\ No newline at end of file
-- 
GitLab


From 79160cb1fd40ec971e5f9340a7f257047c4dced8 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 15:43:35 -0300
Subject: [PATCH 21/83] Removed unecessary functionss

---
 src/Components/MaterialCard.js | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/Components/MaterialCard.js b/src/Components/MaterialCard.js
index ae90a16f..18c37b4d 100644
--- a/src/Components/MaterialCard.js
+++ b/src/Components/MaterialCard.js
@@ -28,14 +28,15 @@ import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components';
 import Button from '@material-ui/core/Button';
 import ExpandMoreRoundedIcon from '@material-ui/icons/ExpandMoreRounded';
-import ExpandLessRoundedIcon from '@material-ui/icons/ExpandLessRounded';
 
 export default function MaterialCard(props) {
 
-    const [expanded, setExpanded] = useState(false);
-
     const thumb = require(`../../public/${props.thumb}`)
 
+    const HandleButtonPressed = () => {
+        props.handleExpand(props.id); 
+    }
+
     return (
         <Card>
             <img src={thumb} alt="thumbnail do recurso" />
@@ -68,11 +69,11 @@ export default function MaterialCard(props) {
             <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
                 <Button 
                     color="secondary" 
-                    endIcon={expanded ? <ExpandLessRoundedIcon/> : <ExpandMoreRoundedIcon/>}
-                    onClick={() => props.handleExpand(props.id)}
+                    endIcon={<ExpandMoreRoundedIcon/>}
+                    onClick={HandleButtonPressed}
                 >
                     
-                Ver módulos
+                    Ver módulos
                 </Button>
             </CardActions>
         </Card >
-- 
GitLab


From b9e394e6d970c0c455fce24f2b7f0c4faf2c0eef Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 15:44:36 -0300
Subject: [PATCH 22/83] Trying to make this component responsive

---
 src/Components/TopicList.js | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/Components/TopicList.js b/src/Components/TopicList.js
index 77b8e468..71c232cd 100644
--- a/src/Components/TopicList.js
+++ b/src/Components/TopicList.js
@@ -13,23 +13,23 @@ export default function TopicList(props) {
 		setExpanded(!expanded);
 	}
 
-  return (
+	return (
 		<Wrapper>
 			<Title>Módulos</Title>
 			<Grid
 				container
-				direction="row"
-				justify="space-evenly"
-				alignItems="center"
+				spacing={3}
 			>
-				{ props.topicos.slice(0, (expanded ? -1 : 5)).map(t => {
-						return (
-							<TopicCard topico_obj={t} colecao_id={props.colecao_id}/>
-						);
-					})
+				{props.topicos.slice(0, (expanded ? -1 : 5)).map((t, index) => {
+					return (
+						<Grid item key={index} md={3}>
+							<TopicCard topico_obj={t} colecao_id={props.colecao_id} />
+						</Grid>
+					);
+				})
 				}
 			</Grid>
-			{ props.topicos.length > 5 ? 
+			{props.topicos.length > 5 ?
 				<Grid container
 					direction="column"
 					justify="flex-start"
@@ -37,32 +37,32 @@ export default function TopicList(props) {
 				>
 					<Grid item>
 						<Fab size="medium" color="secondary" aria-label="edit" onClick={handleFabClick}>
-							{expanded ? <ExpandLessIcon /> : <ExpandMoreIcon /> }
+							{expanded ? <ExpandLessIcon /> : <ExpandMoreIcon />}
 						</Fab>
 					</Grid>
 					<Grid item>
 						<FabText>
-							{ expanded ? "VER MENOS" : "VER TODOS OS MÓDULOS" }
+							{expanded ? "VER MENOS" : "VER TODOS OS MÓDULOS"}
 						</FabText>
 					</Grid>
 				</Grid>
-			: <div></div>
+				: <div></div>
 			}
 		</Wrapper>
-  );
+	);
 }
 
-const FabText=styled.span`
+const FabText = styled.span`
 	color: #666;
 	font-weight: 900;
 	line-height: 2em;
 `
-const Title=styled.h1`
+const Title = styled.h1`
 	font-weight: 100;
 	margin-left: 30px;
 	color: rgb(102, 102, 102);
 `
-const Wrapper=styled.div`
+const Wrapper = styled.div`
 		margin-right : auto;
 		margin-left : auto;
 		margin-bottom: 30px;
-- 
GitLab


From 96fd39d5642dccc1e75c721624ed133bdc1a780b Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 28 Jan 2021 15:44:57 -0300
Subject: [PATCH 23/83] just add the 'require' before the image url, because
 its local images

---
 src/Components/FormationMaterialDescription.js | 4 ++--
 src/Components/FormationMaterialHeader.js      | 2 +-
 src/Components/TopicCard.js                    | 5 ++---
 src/Components/TopicFooter.js                  | 2 +-
 4 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/Components/FormationMaterialDescription.js b/src/Components/FormationMaterialDescription.js
index ab8b6b4a..1ff56731 100644
--- a/src/Components/FormationMaterialDescription.js
+++ b/src/Components/FormationMaterialDescription.js
@@ -99,9 +99,9 @@ export default function FormationMaterialDescription(props) {
 							<br/>
 							<StyledAnchor href={colecao_obj.developedurl}>
 								{
-									colecao_obj.id === 3 ?	<LongUserIcon src="img/logo_parceiros/ic_peninsula.png" />
+									colecao_obj.id === 3 ?	<LongUserIcon src={require("../img/logo_parceiros/ic_peninsula.png")} />
 									: <div>
-											<UserIcon src="img/logo_parceiros/ic_nute.png"/>
+											<UserIcon src={require("../img/logo_parceiros/ic_nute.png")}/>
 											<Red>
 												{colecao_obj.developed}
 											</Red>
diff --git a/src/Components/FormationMaterialHeader.js b/src/Components/FormationMaterialHeader.js
index 03a81692..bf051eb5 100644
--- a/src/Components/FormationMaterialHeader.js
+++ b/src/Components/FormationMaterialHeader.js
@@ -30,7 +30,7 @@ export default function FormationMaterialHeader(props) {
 					alignItems="stretch"
 				>
 					<Grid item xs={5}>
-						<Img src={colecao_obj.img}/>
+						<Img src={require(`../../public/${colecao_obj.img}`)}/>
 					</Grid>
 					<Grid item container xs={7}
 						direction="column"
diff --git a/src/Components/TopicCard.js b/src/Components/TopicCard.js
index c0f25eac..6058cacf 100644
--- a/src/Components/TopicCard.js
+++ b/src/Components/TopicCard.js
@@ -8,7 +8,7 @@ export default function TopicCard(props) {
   return (	
 		<CardModel>
 			<StyledLink to={"topico?colecao="+props.colecao_id+"&topico="+props.topico_obj.id}>
-				<CardImage src={props.topico_obj.img}/>
+				<CardImage src={require(`../../public/${props.topico_obj.img}`)}/>
 				<Title>
 					<BoldTitle>
 						{ props.topico_obj.pre_title }
@@ -39,10 +39,9 @@ const Title=styled.h1`
 `
 const CardModel=styled(Card)`
 	position: relative;
-	width: 18%;
 	margin-bottom: 30px;
 	padding: 0;
-	height: 225px;
+	height: 270px;
 `
 const CardImage=styled.img`
 	width: 100%;
diff --git a/src/Components/TopicFooter.js b/src/Components/TopicFooter.js
index 2e04b8b1..153ee88b 100644
--- a/src/Components/TopicFooter.js
+++ b/src/Components/TopicFooter.js
@@ -13,7 +13,7 @@ export default function TopicFooter(props) {
 					alignItems="center"
 				>
 					<Grid item>
-						<FormationMaterialImage src={props.src}/>
+						<FormationMaterialImage src={require(`../../public/${props.src}`)}/>
 					</Grid>
 					<Grid item>
 						<Text>
-- 
GitLab


From 2e19a36952c91efaf695ce8753b9ef55a0e10792 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Fri, 29 Jan 2021 11:04:06 -0300
Subject: [PATCH 24/83] Start to fix responsivity of Search page

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/Search.js | 350 +++++++++++++++++++-------------------------
 1 file changed, 152 insertions(+), 198 deletions(-)

diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index 8a5da348..ae2c068e 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -53,7 +53,7 @@ export default function Search(props) {
   const [isloading, setIsLoading] = useState(false);
   const [loadingMoreData, setLoadingMoreData] = useState(false);
   const [isFiltering, setIsFiltering] = useState(false);
-  const [resultsPerPage, setResultsPerPage] = useState(6);
+  const [resultsPerPage, setResultsPerPage] = useState(12);
   const [totalResults, setTotalResults] = useState(0);
   const [options] = React.useState([
     { label: "Recursos", value: "LearningObject" },
@@ -147,195 +147,84 @@ export default function Search(props) {
             <span>Busca</span>
           </StyledBreadCrumbs>
         </BreadCrumbsDiv>
-        <HeaderFilters elevation={4} square>
-          <Grid container spacing={0} style={{ height: "100%" }}>
-            <Grid
-              item
-              xs={4}
-              style={{
-                display: "flex",
-                flexDirection: "column",
-                justifyContent: "center",
-                paddingLeft: 20,
-              }}
-            >
-              <div style={{ display: "flex", flexDirection: "row" }}>
-                <span style={{ alignSelf: "center", marginRight: 10 }}>
-                  MOSTRAR:
-                </span>
-                <Dropdown
-                  options={options}
-                  value={optionResult}
-                  onChange={(e) => {
-                    setIsLoading(true);
-                    setOption(e.value);
-                    collectStuff(e.value, "");
-                  }}
-                  placeholder="Select an type"
-                />
-              </div>
-            </Grid>
-            <Grid
-              item
-              xs={4}
-              style={{
-                display: "flex",
-                flexDirection: "column",
-                justifyContent: "center",
-              }}
-            >
-              <div>
-                Resultados encontrados: {totalResults}
-              </div>
-            </Grid>
-            {
-              optionResult === "User" ? null :
-                <Grid
-                  item
-                  xs={4}
-                  style={{
-                    display: "flex",
-                    flexDirection: "column",
-                    justifyContent: "center",
-                    paddingRight: 20,
-                  }}
-                >
-                  <div
-                    style={{
-                      display: "flex",
-                      flexDirection: "row",
-                      justifyContent: "end",
-                    }}
-                  >
-                    <span
-                      style={{
-                        textAlign: "right",
-                        alignSelf: "center",
-                        marginRight: 10,
-                      }}
-                    >
-                      ORDENAR POR:
-                </span>
-                    <Dropdown
-                      options={ordenar}
-                      value={currOrder}
-                      onChange={(e) => {
-                        order = e.value;
-                        setCurrOrder(e.label)
-                        collectStuff(optionResult, currFilter);
-                      }}
-                      placeholder="Select an order "
-                    />
-                  </div>
-                </Grid>
-            }
-          </Grid>
-        </HeaderFilters>
 
-        {
-          isloading ? <LoadingSpinner text="Carregando..." /> :
-            optionResult === "Collection" ? (
-              <GridBuscaCollection container spacing={2}>
-                <Grid item md={12} xs={12}>
-                  <Grid container spacing={2}>
-                    {resultsCollection.map((card) => (
-                      <Grid item md={4} xs={6} key={card.id}>
-                        <CollectionCardFunction
-                          name={card.name}
-                          rating={card.score}
-                          id={card.id}
-                          author={card.owner.name}
-                          description={card.description}
-                          thumbnails={card.items_thumbnails}
-                          avatar={card.owner.avatar}
-                        />
-                      </Grid>
-                    ))}
-                  </Grid>
-                  <div
-                    style={{
-                      display: "flex",
-                      flexDirection: "row",
-                      justifyContent: "center",
-                    }}
-                  >
-                    <button
-                      style={{
-                        height: 36,
-                        backgroundColor: "#ff7f00",
-                        marginBottom: 50,
-                        marginTop: 50,
-                        fontSize: 14,
-                        color: "white",
-                        borderRadius: 4,
-                        border: "none",
-                      }}
-                      onClick={() => {
-                        setLoadingMoreData(true);
-                        setResultsPerPage(resultsPerPage + 12)
-                        // collectStuff("Collection", "");
-                      }}
-                    >
-                      {
-                        loadingMoreData ? <CircularProgress size={24} color="inherit" /> : "Carregar mais 12"
-                      }
-                    </button>
+        <div style={{margin:"15px 2%", }}>
+          <HeaderFilters elevation={4} square>
+            <Grid container spacing={0} style={{ height: "100%" }}>
+              <Grid item xs style={{display:"flex", flexDirection:"column", justifyContent:"center", paddingLeft:20}}>
+                <div style={{ marginRight:5 }}>
+                  <div className="textInfo">
+                    <span  style={{ fontWeight:"bold" }}>
+                      MOSTRAR
+                    </span>
                   </div>
-                </Grid>
-              </GridBuscaCollection>
-            ) :
+                  <Dropdown options={options} value={optionResult} onChange={(e) => {
+                      setIsLoading(true);
+                      setOption(e.value);
+                      collectStuff(e.value, "");
+                    }}
+                    placeholder="Selecione um tipo"
+                  />
+                </div>
+              </Grid>
 
-              optionResult === "LearningObject" ? (
-                <GridBuscaResource container spacing={2}>
-                  <Grid item md={3} xs={12}>
-                    <Paper elevation={4} square>
-                      <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
-                    </Paper>
+              {
+                optionResult === "User" ? null :
+                  <Grid item xs style={{display: "flex", flexDirection: "column", justifyContent: "center", paddingRight: 20,}}>
+                    <div style={{marginLeft:5}}>
+                      <div className="textInfo">
+                        <span style={{ fontWeight:"bold" }}>
+                          ORDENAR POR
+                        </span>
+                      </div>
+                      <Dropdown options={ordenar} value={currOrder} onChange={(e) => {
+                          order = e.value;
+                          setCurrOrder(e.label)
+                          collectStuff(optionResult, currFilter);
+                        }}
+                        placeholder="Selecione uma opção"
+                      />
+                    </div>
                   </Grid>
-                  <Grid item md={9} xs={12}>
+              }
+            </Grid>
+          </HeaderFilters>
+
+          <div style={{display: "flex", flexDirection: "column", justifyContent: "center" }}>
+            <div style={{textAlign: "center", paddingTop: 10, paddingBottom:30, fontWeight:"bolder"}}>
+              Exibindo {totalResults === 0 ? 0 : resultsPerPage} resultados de {totalResults} encontrados
+            </div>
+          </div>
+        
+          {
+            isloading ? <LoadingSpinner text="Carregando..." /> :
+              optionResult === "Collection" ? (
+                <GridBuscaCollection container spacing={2}>
+                  <Grid item xs>
                     <Grid container spacing={2}>
-                      {resultsResource.map((card) => (
-                        <Grid item md={4} xs={6} key={card.id}>
-                          <ResourceCardFunction
-                            avatar={card.publisher.avatar}
+                      {resultsCollection.map((card) => (
+                        <Grid item xs key={card.id}>
+                          <CollectionCardFunction
+                            name={card.name}
+                            rating={card.score}
                             id={card.id}
-                            thumbnail={card.thumbnail}
-                            type={card.object_type ? card.object_type : "Outros"}
-                            title={card.name}
-                            published={card.state === "published" ? true : false}
-                            likeCount={card.likes_count}
-                            liked={card.liked}
-                            rating={card.review_average}
-                            author={card.author}
-                            tags={card.educational_stages}
-                            href={"/recurso/" + card.id}
-                            downloadableLink={card.default_attachment_location}
+                            author={card.owner.name}
+                            description={card.description}
+                            thumbnails={card.items_thumbnails}
+                            avatar={card.owner.avatar}
                           />
                         </Grid>
                       ))}
                     </Grid>
-                    <div
-                      style={{
-                        display: "flex",
-                        flexDirection: "row",
-                        justifyContent: "center",
-                      }}
-                    >
+                    <div style={{ display: "flex", flexDirection: "row", justifyContent: "center", }}>
                       <button
-                        style={{
-                          height: 36,
-                          backgroundColor: "#ff7f00",
-                          marginBottom: 50,
-                          marginTop: 50,
-                          fontSize: 14,
-                          color: "white",
-                          borderRadius: 4,
-                          border: "none",
+                        style={{ height: 36, backgroundColor: "#ff7f00", marginBottom: 50, marginTop: 50, fontSize: 14,
+                          color: "white", borderRadius: 4,border: "none", 
                         }}
                         onClick={() => {
                           setLoadingMoreData(true);
                           setResultsPerPage(resultsPerPage + 12)
-                          // collectStuff("LearningObject", "");
+                          // collectStuff("Collection", "");
                         }}
                       >
                         {
@@ -344,24 +233,34 @@ export default function Search(props) {
                       </button>
                     </div>
                   </Grid>
-                </GridBuscaResource>
+                </GridBuscaCollection>
               ) :
-                optionResult === "User" && (
-                  <GridBuscaUser container spacing={2}>
-                    <Grid item md={12} xs={12}>
+
+                optionResult === "LearningObject" ? (
+                  <GridBuscaResource container spacing={2}>
+                    <Grid item xs={12} md={3}>
+                      <Paper elevation={4} square>
+                          <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
+                      </Paper>
+                    </Grid>
+                    <Grid item xs>
                       <Grid container spacing={2}>
-                        {resultsUser.map((card) => (
-                          <Grid item md={4} xs={6} key={card.id}>
-                            <ContactCard
-                              name={card.name}
-                              avatar={card.avatar ? apiDomain + card.avatar : null}
-                              cover={card.cover ? apiDomain + card.cover : null}
-                              numCollections={card.collections_count}
-                              numLearningObjects={card.learning_objects_count}
-                              follow_count={card.follows_count}
-                              followed={card.followed || null}
-                              followerID={card.id}
-                              href={'/usuario-publico/' + card.id}
+                        {resultsResource.map((card) => (
+                          <Grid item  xs key={card.id}>
+                            <ResourceCardFunction
+                              avatar={card.publisher.avatar}
+                              id={card.id}
+                              thumbnail={card.thumbnail}
+                              type={card.object_type ? card.object_type : "Outros"}
+                              title={card.name}
+                              published={card.state === "published" ? true : false}
+                              likeCount={card.likes_count}
+                              liked={card.liked}
+                              rating={card.review_average}
+                              author={card.author}
+                              tags={card.educational_stages}
+                              href={"/recurso/" + card.id}
+                              downloadableLink={card.default_attachment_location}
                             />
                           </Grid>
                         ))}
@@ -387,18 +286,71 @@ export default function Search(props) {
                           onClick={() => {
                             setLoadingMoreData(true);
                             setResultsPerPage(resultsPerPage + 12)
-                            // collectStuff("User", "");
+                            // collectStuff("LearningObject", "");
                           }}
                         >
                           {
-                            loadingMoreData ? <CircularProgress color="inherit" size={24} /> : "Carregar mais 12"
+                            loadingMoreData ? <CircularProgress size={24} color="inherit" /> : "Carregar mais 12"
                           }
                         </button>
                       </div>
                     </Grid>
-                  </GridBuscaUser>
-                )
-        }
+                  </GridBuscaResource>
+                ) :
+                  optionResult === "User" && (
+                    <GridBuscaUser container spacing={2}>
+                      <Grid item xs >
+                        <Grid container spacing={2}>
+                          {resultsUser.map((card) => (
+                            <Grid item xs key={card.id}>
+                              <ContactCard
+                                name={card.name}
+                                avatar={card.avatar ? apiDomain + card.avatar : null}
+                                cover={card.cover ? apiDomain + card.cover : null}
+                                numCollections={card.collections_count}
+                                numLearningObjects={card.learning_objects_count}
+                                follow_count={card.follows_count}
+                                followed={card.followed || null}
+                                followerID={card.id}
+                                href={'/usuario-publico/' + card.id}
+                              />
+                            </Grid>
+                          ))}
+                        </Grid>
+                        <div
+                          style={{
+                            display: "flex",
+                            flexDirection: "row",
+                            justifyContent: "center",
+                          }}
+                        >
+                          <button
+                            style={{
+                              height: 36,
+                              backgroundColor: "#ff7f00",
+                              marginBottom: 50,
+                              marginTop: 50,
+                              fontSize: 14,
+                              color: "white",
+                              borderRadius: 4,
+                              border: "none",
+                            }}
+                            onClick={() => {
+                              setLoadingMoreData(true);
+                              setResultsPerPage(resultsPerPage + 12)
+                              // collectStuff("User", "");
+                            }}
+                          >
+                            {
+                              loadingMoreData ? <CircularProgress color="inherit" size={24} /> : "Carregar mais 12"
+                            }
+                          </button>
+                        </div>
+                      </Grid>
+                    </GridBuscaUser>
+                  )
+          }
+        </div>
       </Principal>
     </div>
   );
@@ -439,11 +391,14 @@ const GridBuscaUser = styled(Grid)`
 `;
 
 const HeaderFilters = styled(Paper)`
-  height: 60px;
+  height: 110px;
   text-align: center;
   background-color: #fff;
   margin-bottom: 30px;
   color: #666;
+  .textInfo{
+    text-align: start;
+  }
 `;
 
 const StyledBreadCrumbs = styled(Breadcrumbs)`
@@ -465,6 +420,5 @@ const BreadCrumbsDiv = styled.div`
 `;
 
 const Principal = styled.div`
-  width: 1170px;
   margin-inline: auto;
 `;
-- 
GitLab


From fcbb13b3890a0fd88156383566a16964bdd369e1 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Fri, 29 Jan 2021 11:06:48 -0300
Subject: [PATCH 25/83] centralized all axios calls and deleted all useless
 files

---
 src/Components/AreasSubPages.js               |  14 +-
 src/Components/Comment.js                     |  52 ++-----
 src/Components/ContactButtons/FollowButton.js |  52 ++-----
 .../ContactButtons/FollowingButton.js         |  29 +---
 src/Components/ContactCardOptions.js          |  28 +---
 src/Components/ContactForm.js                 |  31 +---
 src/Components/CriarColecaoForm.js            |  26 +---
 src/Components/EditarColecaoForm.js           |  36 ++---
 src/Components/Firulas.js                     |  20 +--
 src/Components/FollowCollectionButton.js      | 119 ++++----------
 src/Components/GuardarModal.js                |  56 +++----
 src/Components/Header.js                      |  90 ++++-------
 .../FormValidationFunction.js                 |   0
 .../HelperFunctions/getAxiosConfig.js         | 116 ++++++++++++--
 src/Components/IframeOverlay/DrawerContent.js |  17 +-
 src/Components/IllegalContentModal.js         |  14 +-
 src/Components/LoginContainerFunction.js      |   2 +-
 src/Components/LoginModal.js                  |  54 +++----
 src/Components/MenuList.js                    |  40 ++---
 src/Components/MobileDrawerMenu.js            |  41 ++---
 .../ComponentAlterarAvatar.js                 |  49 ++----
 .../ComponentAlterarCover.js                  |  48 ++----
 src/Components/ModalConfirmarCuradoria.js     |  20 +--
 src/Components/ModalExcluirColecao.js         |  22 +--
 src/Components/NotificationsInner.js          |  26 ++--
 .../PageProfessorComponents/PartOne.js        |   1 -
 .../PublicationPermissionsContent.js          |  19 +--
 src/Components/ReportModal.js                 |  20 +--
 src/Components/ResourceCardFunction.js        |  31 ++--
 .../ResourcePageComponents/CommentForm.js     |  33 ++--
 .../ResourcePageComponents/CommentsArea.js    |  21 ++-
 .../ResourcePageComponents/TextoObjeto.js     |  24 +--
 src/Components/SignUpContainerFunction.js     |   2 +-
 src/Components/SignUpModal.js                 |  76 ++++-----
 src/Components/TabPanels/Breadcrumbs.js       |  23 ++-
 .../PanelComponents/TemplateColecao.js        |   6 +-
 .../PublicUserPageTabs/LastCollections.js     |  18 +++
 .../PublicUserPageTabs/LastLearnObj.js        |  18 +++
 .../PublicUserPageTabs/TabColecoes.js         |  18 +++
 .../TabPanels/PublicUserPageTabs/TabInicio.js |  18 +++
 .../PublicUserPageTabs/TabRecursos.js         |  18 +++
 .../TabPanels/PublicUserPageTabs/TabRede.js   |  63 ++++----
 .../PublicUserPageTabs/UserDescription.js     |  18 +++
 .../TabPanels/TabPanelStatusEConquistas.js    |  21 ++-
 .../UserPageTabs/ModalExcluirConta.js         |  26 ++--
 .../TabPanels/UserPageTabs/PanelAtividades.js |  33 ++--
 .../TabPanels/UserPageTabs/PanelColecoes.js   |  36 ++---
 .../TabPanels/UserPageTabs/PanelCuradoria.js  |  21 +--
 .../UserPageTabs/PanelEditarPerfil.js         |   8 +-
 .../TabPanels/UserPageTabs/PanelFavoritos.js  |  39 ++---
 .../UserPageTabs/PanelGerenciarConta.js       |   2 +-
 .../UserPageTabs/PanelMeusRecursos.js         |  50 +++---
 .../TabPanels/UserPageTabs/PanelRede.js       |  43 ++----
 .../PanelSolicitarContaProfessor.js           |   8 -
 .../UploadPageComponents/ButtonsDiv.js        |   1 +
 .../UploadPageComponents/FileToUpload.ts      |  18 +++
 .../UploadPageComponents/FileUploadStage.js   |  19 +--
 .../UploadPageComponents/ModalCancelar.js     |  34 ++--
 .../UploadPageComponents/PartOne.js           |  37 +----
 .../UploadPageComponents/PartThree.js         |  35 ++---
 .../UploadPageComponents/PartTwo.js           |  44 ++----
 .../CustomCircularProgress.js                 |  18 +++
 .../PartTwoComponents/DisplayThumbnail.js     |  18 +++
 .../PartTwoComponents/EditThumbnail.js        |  18 +++
 .../UploadPageComponents/ReactFileToUpload.js |   8 +-
 .../UploadPageComponents/SendInfo.js          |  41 ++---
 .../UploadPageComponents/Stepper.js           |  18 +++
 .../UploadPageComponents/UploadFileWrapper.js |  34 ++--
 src/Components/UserCard.js                    |  18 ---
 src/Components/UserPageComponents/Avatar.js   |   4 +-
 src/Components/UserPageComponents/Cover.js    |   6 +-
 src/Pages/EditLearningObjectPage.js           | 146 ++++++------------
 src/Pages/EditProfilePage.js                  |  82 ++++------
 src/Pages/PageProfessor.js                    |  31 ++--
 src/Pages/PasswordRecoveryPage.js             |  21 +--
 src/Pages/ProfilePage.js                      |  30 ----
 src/Pages/PublicUserPage.js                   |  43 ++----
 src/Pages/ResourcePage.js                     |  45 ++----
 src/Pages/UploadPage.js                       |  55 +++----
 src/Pages/UserPage.js                         |  74 +++------
 src/Store.js                                  |  23 ++-
 81 files changed, 1092 insertions(+), 1545 deletions(-)
 rename src/Components/{ => HelperFunctions}/FormValidationFunction.js (100%)
 delete mode 100644 src/Components/UserCard.js
 delete mode 100644 src/Pages/ProfilePage.js

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index fb21567d..b61d0937 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -17,8 +17,6 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, { Component } from "react";
-import axios from "axios";
-import { apiUrl } from "../env";
 import "./carousel.css";
 import { Col, Row, Container, Hidden, Visible } from "react-grid-system";
 import MaterialCard from "./MaterialCard";
@@ -52,7 +50,8 @@ class ReqResources extends Component {
   }
 
 componentDidMount() {
-    makeAxiosGetRequest(`/learning_objects?limit=12&sort=["published_at", "desc"]`, (data) => {this.setState({ resources: data })}, () => {console.log('error AreasSubPages')})
+    const url = `/learning_objects?limit=12&sort=["published_at", "desc"]`
+    makeAxiosGetRequest(url, (data) => {this.setState({ resources: data })}, (error) => {console.log(error)})
 }
   render() {
     var row1 = this.state.resources.slice(0, 4);
@@ -137,12 +136,9 @@ class ReqCollections extends Component {
     };
   }
   componentDidMount() {
-    axios
-      .get(`${apiUrl}/collections?limit=12&sort=["updated_at", "desc"]`)
-      .then((res) => {
-        this.setState({ collections: res.data });
-        console.log(res.data);
-      });
+      const url = `/collections?limit=12&sort=["updated_at", "desc"]`
+
+      makeAxiosGetRequest(url, (data) => {this.setState({ collections: data })}, (error) => {console.log(error)})
   }
   render() {
     var row1 = this.state.collections.slice(0, 4);
diff --git a/src/Components/Comment.js b/src/Components/Comment.js
index 51850497..374ec115 100644
--- a/src/Components/Comment.js
+++ b/src/Components/Comment.js
@@ -28,11 +28,10 @@ import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import EditIcon from '@material-ui/icons/Edit';
 import TextField from "@material-ui/core/TextField";
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
 import ModalExcluir from './ModalExcluirComentario.js'
+import {makeAxiosPutRequest, makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Comment (props) {
 
@@ -75,18 +74,16 @@ export default function Comment (props) {
         setComment({...comment, error : flag, value : userInput})
     }
 
+    function handleOnSuccessfulComment (data) {
+        setDisplayedComment(comment.value)
+        setEditando(false)
+        props.handleSnackbar(2)
+    }
+
     const updateComment = () => {
         const finalComment = comment
         if (!finalComment.error) {
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid'),
-                }
-            }
+
             let payload = {
                 "review" : {
                     "name":null,
@@ -96,35 +93,19 @@ export default function Comment (props) {
                     "review_ratings_attributes" : props.reviewRatings
                 }
             }
+            makeAxiosPutRequest(`/learning_objects/${props.objectID}/reviews/`, payload, handleOnSuccessfulComment, (error) => {console.log(error)})
 
-            axios.put( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID),payload, config
-            ).then((response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                setDisplayedComment(finalComment.value)
-                setEditando(false)
-                props.handleSnackbar(2)
-            }, (error) => {console.log(error)})
         }
     }
 
+    function handleSuccessDeleteComment (data) {
+        props.rerenderCallback()
+        props.handleSnackbar(3)
+    }
+
     const deleteComment = () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                'Uid': sessionStorage.getItem('@portalmec/uid'),
-            }
-        }
-        axios.delete( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID), config).then((response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            props.rerenderCallback(); props.handleSnackbar(3)}, (error) => {console.log(error)})
+
+        makeAxiosDeleteRequest(`/learning_objects/${props.objectID}/reviews/${props.reviewID}`, handleSuccessDeleteComment, (error) => {console.log(error)})
 
         toggleModal(false)
 
@@ -327,4 +308,3 @@ const AvatarDiv = styled.div`
         vertical-align : middle;
     }
 `
-
diff --git a/src/Components/ContactButtons/FollowButton.js b/src/Components/ContactButtons/FollowButton.js
index 4faddda7..bb3f2ac2 100644
--- a/src/Components/ContactButtons/FollowButton.js
+++ b/src/Components/ContactButtons/FollowButton.js
@@ -20,32 +20,19 @@ import React from 'react'
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
 import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
-import axios from 'axios'
-import {apiUrl} from '../../env';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowButton (props) {
 
-    const handleFollow = (followerID) => {
-        const id = followerID
-        console.log('id: ', id)
-
-        let payload = {}
-        const header = getAxiosConfig()
-
-        axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                props.toggleFollowed()
-            },
-            (error) => {
-                  console.log(error)
-            }
-        )
+    function handleSuccess (data) {
+        props.toggleFollowed()
+    }
 
+    const handleFollow = (followerID) => {
+        if (followerID !== undefined) {
+            const url = `/users/${followerID}/follow/`
+            makeAxiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
+        }
     }
 
     return (
@@ -62,24 +49,9 @@ export default function FollowButton (props) {
 export function NoIcon (props) {
 
     const handleFollow = (followerID) => {
-        const id = followerID
-        console.log('id: ', id)
-
-        if (id !== undefined) {
-            let payload = {}
-            const header = getAxiosConfig()
-
-            axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-                (response) => {
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                    console.log(response)
-                },
-                (error) => {
-                      console.log(error)
-                }
-            )
+        if (followerID !== undefined) {
+            const url = `/users/${followerID}/follow/`
+            makeAxiosPutRequest(url, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Components/ContactButtons/FollowingButton.js b/src/Components/ContactButtons/FollowingButton.js
index 6fa7464a..b76f6291 100644
--- a/src/Components/ContactButtons/FollowingButton.js
+++ b/src/Components/ContactButtons/FollowingButton.js
@@ -21,9 +21,7 @@ import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
 import FollowingIcon from '../../img/how_to_reg-24px.png'
 import ModalConfirmarUnfollow from '../ModalConfirmarUnfollow.js'
-import axios from 'axios'
-import {apiUrl} from '../../env';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowingButton (props) {
 
@@ -38,26 +36,15 @@ export default function FollowingButton (props) {
         toggleModal(true)
     }
 
-    const handleUnfollowPartTwo = () => {
-        const id = unfollowID
-        console.log('id: ', id)
 
-        let payload = {}
-        const header = getAxiosConfig()
+    function handleSuccess (data) {
+        props.toggleFollowed()
+        toggleModal(false)
+    }
+    const handleUnfollowPartTwo = () => {
+        const url = `/users/${unfollowID}/follow/`
 
-        axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                props.toggleFollowed()
-                toggleModal(false)
-            },
-            (error) => {
-                  console.log(error)
-            }
-        )
+        makeAxiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ContactCardOptions.js b/src/Components/ContactCardOptions.js
index 99de8ca9..0f122c0d 100644
--- a/src/Components/ContactCardOptions.js
+++ b/src/Components/ContactCardOptions.js
@@ -26,9 +26,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import OpenIcon from '@material-ui/icons/OpenInNew';
 import ReportIcon from '@material-ui/icons/Error';
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
-import axios from 'axios'
-import {apiUrl} from '../env';
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
+import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 import ReportModal from './ReportModal.js'
 import {Link} from 'react-router-dom'
 
@@ -44,33 +42,13 @@ export default function SimpleMenu(props) {
         setAnchorEl(null);
     }
     const handleFollow = (followerID) => {
-        const id = followerID
-        console.log('id: ', id)
-
-        let payload = {}
-        const header = getAxiosConfig()
-        axios.put((`${apiUrl}/users/` + id + '/follow'), payload, header).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+
+        makeAxiosPutRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
     }
 
     const [reportModal, toggleReportModal] = useState(false)
     const handleModal = (value) => {
         toggleReportModal(value)
-        // {/*if (state.currentUser.id) {
-        //     toggleReportModal(!reportModal)
-        // }
-        // else {
-        //     toggleLoginModal(true)
-        // }*/}
     }
 
   return (
diff --git a/src/Components/ContactForm.js b/src/Components/ContactForm.js
index b00d2f32..7231f6d3 100644
--- a/src/Components/ContactForm.js
+++ b/src/Components/ContactForm.js
@@ -19,11 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, { useState } from 'react';
 import styled from 'styled-components';
 import FormInput from "../Components/FormInput.js"
-import axios from 'axios'
-import {apiUrl} from '../env';
-
-
-
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 const Button = styled.button`
 
@@ -187,27 +183,16 @@ const Button = styled.button`
       console.log(!(nome.dict.key && email.dict.key && mensagem.dict.key ))
       // Se não houver erro em nunhum dos campos E nenhum dos campos for vazio: a página faz o contato com o backend e os campos ficam em branco no formulário
       if (!(nome.dict.key || email.dict.key || mensagem.dict.key )) {
-
-        axios.post(`${apiUrl}/contacts`,
-            {
+          let payload = {
               contact : {
-                name: nome.dict.value,
-                email: email.dict.value,
-                message: mensagem.dict.value
+                  name: nome.dict.value,
+                  email: email.dict.value,
+                  message: mensagem.dict.value
               }
-
-        }
-        ).then()
-
-
-
-        limpaTudo();
-
-      }
-
-
-
+            }
+            makeAxiosPostRequest(`/contacts`, payload, (data) => {limpaTudo()}, (error) => {console.log(error)})
   }
+}
 
 
 
diff --git a/src/Components/CriarColecaoForm.js b/src/Components/CriarColecaoForm.js
index 9eada322..86eb3f78 100644
--- a/src/Components/CriarColecaoForm.js
+++ b/src/Components/CriarColecaoForm.js
@@ -25,8 +25,7 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function CriarColecaoForm (props) {
     const {state} = useContext(Store)
@@ -59,6 +58,9 @@ export default function CriarColecaoForm (props) {
         })
     }
 
+    function handleSuccess (data) {
+        props.finalize(data.id)
+    }
     const formSubmit = (e) => {
         e.preventDefault()
 
@@ -66,7 +68,6 @@ export default function CriarColecaoForm (props) {
         const finalRadioValue = value === 'pública' ? 'public' : 'private'
         const finalColName = colName
 
-        console.log(finalRadioValue, finalColName.value)
         if(!(finalColName.key)) {
             let payload = {
                 "collection" : {
@@ -76,25 +77,8 @@ export default function CriarColecaoForm (props) {
                     "privacy" : finalRadioValue
                 }
             }
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid')
-                }
-            }
+            makeAxiosPostRequest( `/collections/`, payload, handleSuccess, (error) =>{console.log(error)})
 
-            axios.post( (`${apiUrl}/collections/`), payload, config
-            ).then(
-                (response) => {
-                    console.log(response)
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                    props.finalize(response.data.id)
-                }, (error) =>{console.log(error)})
         }
     }
 
diff --git a/src/Components/EditarColecaoForm.js b/src/Components/EditarColecaoForm.js
index a078b1af..0f1a5d43 100644
--- a/src/Components/EditarColecaoForm.js
+++ b/src/Components/EditarColecaoForm.js
@@ -25,22 +25,19 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import axios from 'axios'
-import {apiUrl} from '../env';
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
+import {makeAxiosGetRequest, makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function EditarColecaoForm (props) {
     const {state} = useContext(Store)
 
+    function handleSuccessfulGet (data) {
+        setColName({key : false, value : data.name})
+        setValue( data.privacy === 'public' ? 'pública' : 'privada')
+        handleColDescription(data.description)
+    }
+
     useEffect(() => {
-        axios.get(`${apiUrl}/collections/${props.id}`).then(
-        (res) => {
-            setColName({key : false, value : res.data.name})
-            setValue( res.data.privacy === 'public' ? 'pública' : 'privada')
-            handleColDescription(res.data.description)
-        },
-        (err) => {console.log(err)}
-        )
+        makeAxiosGetRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
     }, [])
 
     const [value, setValue] = useState(-1);
@@ -71,6 +68,9 @@ export default function EditarColecaoForm (props) {
         })
     }
 
+    function handleSuccessfulSubmit (data) {
+        props.finalize(data.id)
+    }
     const formSubmit = (e) => {
         e.preventDefault()
 
@@ -78,7 +78,6 @@ export default function EditarColecaoForm (props) {
         const finalRadioValue = value === 'pública' ? 'public' : 'private'
         const finalColName = colName
 
-        console.log(finalRadioValue, finalColName.value)
         if(!(finalColName.key)) {
             let payload = {
                 "collection" : {
@@ -88,17 +87,8 @@ export default function EditarColecaoForm (props) {
                     "privacy" : finalRadioValue
                 }
             }
-            let config = getAxiosConfig()
-
-            axios.put( (`${apiUrl}/collections/${props.id}`), payload, config
-            ).then(
-                (response) => {
-                    console.log(response)
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                    props.finalize(response.data.id)
-                }, (error) =>{console.log(error)})
+
+            makeAxiosPutRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
         }
     }
 
diff --git a/src/Components/Firulas.js b/src/Components/Firulas.js
index 526ff7ab..0c65a12c 100644
--- a/src/Components/Firulas.js
+++ b/src/Components/Firulas.js
@@ -1,29 +1,19 @@
 import React, {useState} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import styled from 'styled-components'
 import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import {LikeCounter, ButtonNoWidth} from '../Components/ResourceCardFunction.js'
 import FavoriteIcon from '@material-ui/icons/Favorite';
+import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Firulas (props) {
     const [liked, setLiked] = useState(props.liked)
 
+    function handleSuccess (data) {
+        setLiked(!liked)
+    }
     const handleLike = () => {
-        let payload = {}
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                'Uid': sessionStorage.getItem('@portalmec/uid'),
-            }
-        }
-
-        axios.put( (`${apiUrl}/learning_objects/` + props.recursoId + '/like'),payload, config
-    ).then( (response) => {setLiked(!liked)}, (error) => {console.log(error)})
+        makeAxiosPutRequest(`/learning_objects/${props.recursoId}/like/`, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/FollowCollectionButton.js b/src/Components/FollowCollectionButton.js
index cf7d7323..25aad567 100644
--- a/src/Components/FollowCollectionButton.js
+++ b/src/Components/FollowCollectionButton.js
@@ -22,8 +22,7 @@ import CheckIcon from '@material-ui/icons/Check';
 import AddIcon from '@material-ui/icons/Add';
 import styled from 'styled-components';
 import SignUpModal from './SignUpModal.js';
-import axios from 'axios';
-import { apiUrl } from '../env';
+import {makeAxiosGetRequest, makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function FollowCollectionButton(props) {
 	const [icon, setIcon] = useState(<AddIcon fontSize="large" />);
@@ -32,34 +31,21 @@ export default function FollowCollectionButton(props) {
 	const [sign_up_open, setSignUpOpen] = useState(false);
 	const [following, setFollowing] = useState(false); //user following collection
 
+    function handleSuccessGet (data) {
+        if(data)
+            data.map((e) => {
+                if (e["followable"]["id"] === Number(props.collection_id)){
+                    setVariant("contained");
+                    setButtonText("Seguindo");
+                    setIcon(<CheckIcon fontSize="large" />)
+                    setFollowing(true);
+                }
+                return undefined
+            })
+    }
 	useEffect(() => {
-		const url = apiUrl + '/users/' + props.user_id + '/following/Collection';
-		console.log("props: ", props);
-		axios({
-			method: 'get',
-			url: url,
-			headers: {
-				'Accept': 'application/json',
-				'Content-Type': 'application/json; charset=utf-8',
-				'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-				'client': sessionStorage.getItem('@portalmec/clientToken'),
-				'uid': sessionStorage.getItem('@portalmec/uid'),
-				'If-None-Match': null
-			},
-		}).then(response => {
-			const data = [...response.data];
-			if(data)
-				data.map((e) => {
-					if (e["followable"]["id"] === Number(props.collection_id)){
-						setVariant("contained");
-						setButtonText("Seguindo");
-						setIcon(<CheckIcon fontSize="large" />)
-						setFollowing(true);
-					}
-					return undefined						
-				})
-			SaveNewHeaders(response)
-		})
+		const url = `/users/${props.user_id}/following/Collection`
+        makeAxiosGetRequest(url, handleSuccessGet, (error) => console.log(error))
 	}, []);
 
 	//handleMouse{Enter, Leave} only do anything when user follows given collection:
@@ -79,70 +65,27 @@ export default function FollowCollectionButton(props) {
 		}
 	}
 
-	const SaveNewHeaders = (response) => {
-		if (
-			(response.headers['access-token'] === undefined || response.headers['access-token'] === null) &&
-			(response.headers.client === undefined || response.headers.client === null)
-		) {
-
-		} else {
-			sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-			sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
-			console.log('saved')
-		}
-	}
-
+    function handleSuccessfulFollow (data) {
+        setVariant("contained");
+        setButtonText("Seguindo");
+        setIcon(<CheckIcon fontSize="large" />)
+        setFollowing(true);
+    }
+    function handleSuccessfulUnfollow (data) {
+        setVariant("outlined");
+        setButtonText("Seguir Coleção");
+        setIcon(<AddIcon fontSize="large" />);
+        setFollowing(false);
+    }
 	const handleClick = () => {
+        const url = `/collections/${props.collection_id}/follow`
+
 		if (!props.user_id)
 			setSignUpOpen(true);
 		else if (!following) {
-			const url = apiUrl + '/collections/' + props.collection_id + '/follow';
-			setVariant("contained");
-			setButtonText("Seguindo");
-			setIcon(<CheckIcon fontSize="large" />)
-			setFollowing(true);
-			axios({
-				method: 'put',
-				url: url,
-				headers: {
-					'Accept': 'application/json',
-					'Content-Type': 'application/json; charset=utf-8',
-					'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-					'client': sessionStorage.getItem('@portalmec/clientToken'),
-					'uid': sessionStorage.getItem('@portalmec/uid'),
-					'If-None-Match': null
-				},
-			}).then(response => {
-				if (response.status === 201)
-					setFollowing(true);
-				else if (response.status === 200)
-					setFollowing(false);
-				SaveNewHeaders(response)
-			})
+            makeAxiosPutRequest(url, {}, handleSuccessfulFollow, (error) => {console.log(error)})
 		} else {
-			const url = apiUrl + '/collections/' + props.collection_id + '/follow';
-			setVariant("outlined");
-			setButtonText("Seguir Coleção");
-			setIcon(<AddIcon fontSize="large" />);
-			setFollowing(false);
-			axios({
-				method: 'put',
-				url: url,
-				headers: {
-					'Accept': 'application/json',
-					'Content-Type': 'application/json; charset=utf-8',
-					'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-					'client': sessionStorage.getItem('@portalmec/clientToken'),
-					'uid': sessionStorage.getItem('@portalmec/uid'),
-					'If-None-Match': null
-				},
-			}).then(response => {
-				if (response.status === 201)
-					setFollowing(true);
-				else if (response.status === 200)
-					setFollowing(false);
-				SaveNewHeaders(response)
-			})
+            makeAxiosPutRequest(url, {}, handleSuccessfulUnfollow, (error) => {console.log(error)})
 		}
 	};
 
diff --git a/src/Components/GuardarModal.js b/src/Components/GuardarModal.js
index 8d4fc7ff..2f66ee51 100644
--- a/src/Components/GuardarModal.js
+++ b/src/Components/GuardarModal.js
@@ -23,14 +23,14 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../env';
+import {apiDomain} from '../env';
 import CloseIcon from '@material-ui/icons/Close';
 import PublicIcon from '@material-ui/icons/Public';
 import LockIcon from '@material-ui/icons/Lock';
 import LoadingSpinner from './LoadingSpinner.js'
 import CriarColecaoForm from './CriarColecaoForm.js'
 import SnackbarComponent from './SnackbarComponent'
+import {makeAxiosGetRequest, makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -40,60 +40,42 @@ function CloseModalButton (props) {
     )
 }
 
-function getConfig () {
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid')
-        }
-    }
-    return config
-}
-
 export default function ReportModal (props) {
     const {state} = useContext(Store)
     const [collsArr, setcolls] = useState([])
     const [loading, toggleLoading] = useState(true)
     const [creatingCol, setCreating] = useState(false)
 
+
+    function handleSuccessGetCols (data) {
+        setcolls(data)
+        toggleLoading(false)
+    }
     const getCols = () => {
         if (collsArr.length === 0) {
             const id = state.currentUser.id
-            const config = getConfig()
-
-            axios.get( (`${apiUrl}/users/` + id + '/collections'), config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response)
-                setcolls(response.data)
-                toggleLoading(false)
-            }, (error) => {console.log('error')})
+
+            const url = `/users/${id}/collections/`
+
+            makeAxiosGetRequest(url, handleSuccessGetCols, (error) => {console.log('error')})
         }
     }
 
+
+    function handleSuccessPostToCol (data) {
+        toggleSnackbar(true)
+        setCreating(false)
+        props.handleClose()
+    }
     const postToCol = (colId) => {
-        const config = getConfig()
+        const url = `/collections/${colId}/items`
         const payload = {
             "collection" : {
                 "items" : [ {"id":props.recursoId, "type":"LearningObject"} ]
             }
         }
+        makeAxiosPostRequest( url, payload, handleSuccessPostToCol, (error) => {console.log(error)})
 
-        axios.post( (`${apiUrl}/collections/` + colId + '/items'), payload, config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            toggleSnackbar(true)
-            setCreating(false)
-            props.handleClose()
-        }, (error) => {console.log(error)})
     }
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
diff --git a/src/Components/Header.js b/src/Components/Header.js
index 25edfdee..cbbf66e0 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -17,8 +17,6 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, { useContext, useState, useEffect } from 'react'
-import axios from 'axios'
-import {apiUrl} from '../env'
 import MenuBar from './MenuBar'
 import SearchBar from './SearchBar'
 import SignUpModal from './SignUpModal'
@@ -29,6 +27,7 @@ import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 import {useLocation} from 'react-router-dom'
 import MenuBarMobile from './MenuBarMobile.js'
+import {validateGoogleLoginToken} from './HelperFunctions/getAxiosConfig'
 
 //const StyledButton = styled(Button)`
 //    background : #ffa54c !important;
@@ -46,52 +45,41 @@ export default function Header(props){
   const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
   const [modalColaborar, setModalColaborar] = useState(false)
 
-  const validateToken = (config) => {
-      axios.get(`${apiUrl}/auth/validate_token/`, config).then(
-           (response) => {
-              console.log(response.data)
-              if ( response.headers['access-token'] ) {
-                  sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-              }
-              dispatch ({
-                  type: "USER_LOGGED_IN",
-                  userLoggedIn: !state.userIsLoggedIn,
-                  login: response.data.data
-                  }
-              )
-
-              sessionStorage.setItem('@portalmec/id', response.data.data.id)
-              sessionStorage.setItem('@portalmec/username', response.data.data.name)
-              sessionStorage.setItem('@portalmec/uid', response.data.data.uid)
-
-
-              let headers = {
-                  client:response.headers.client,
-                  "access-token":response.headers['access-token'],
-                  "token-type": "Bearer",
-                  expiry:response.headers.expiry,
-                  uid:response.data.data.uid
-              }
-              sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-          },
-          (err) => {
-              console.log(err)
+  function handleSuccessValidateToken (data) {
+      dispatch ({
+          type: "USER_LOGGED_IN",
+          userLoggedIn: !state.userIsLoggedIn,
+          login: data.data
           }
-       )
+      )
   }
 
-  useEffect( () => {
+/*  useEffect( () => {
       if (sessionStorage.getItem('@portalmec/auth_headers')) {
           let config = { headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))}
-          console.log(config)
-          console.log(sessionStorage.getItem('@portalmec/accessToken'))
 
-          if (config.headers['access-token'] !== sessionStorage.getItem('@portalmec/accessToken')){
-              console.log('erro tokens diferentes')
-          }
-          validateToken(config)
+          validateToken(config, handleSuccessValidateToken, (error) => {console.log(error)})
       }
-  }, [])
+  }, [])*/
+
+  let loc = useLocation()
+  useEffect(() => {
+      let query = new URLSearchParams(loc.search)
+
+      if(query.get("auth_token")) {
+             let config = {
+                     headers : {
+                                "access-token" : query.get("auth_token"),
+                                "client" : query.get("client_id"),
+                                "uid" : query.get("uid"),
+                                "expiry" : query.get("expiry"),
+                                "token-type" : 'Bearer'
+                     }
+                  }
+           validateGoogleLoginToken(config, handleSuccessValidateToken, (error) => {console.log(error)})
+           redirect()
+      }
+  }, [loc])
 
   useEffect ( () => {
       if (state.currentUser.askTeacherQuestion === true) {
@@ -106,26 +94,6 @@ export default function Header(props){
       props.history.push('/')
   }
 
-  let loc = useLocation()
-  useEffect(() => {
-      let query = new URLSearchParams(loc.search)
-
-      console.log(query.getAll("auth_token"))
-      if(query.get("auth_token")) {
-  	       let config = {
-  		           headers : {
-  			                  "access-token" : query.get("auth_token"),
-  			                  "client" : query.get("client_id"),
-  			                  "uid" : query.get("uid"),
-  			                  "expiry" : query.get("expiry"),
-  			                  "token-type" : 'Bearer'
-  		           }
-  	            }
-  	       validateToken(config)
-           redirect()
-      }
-  }, [loc])
-
   const toggleSnackbar = (event, reason) => {
       if (reason === 'clickaway') {
           return;
diff --git a/src/Components/FormValidationFunction.js b/src/Components/HelperFunctions/FormValidationFunction.js
similarity index 100%
rename from src/Components/FormValidationFunction.js
rename to src/Components/HelperFunctions/FormValidationFunction.js
diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 7ef9c62d..0286868f 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -15,18 +15,30 @@ export const getAxiosConfig = () => {
     return config
 }
 
-function getAxiosConfigFromJSON () {
+export function getAxiosConfigFromJSON () {
     let config = {
         headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
     }
     return config
 }
 
-function updateHeaders (newAccessToken) {
-    sessionStorage.setItem('@portalmec/accessToken', newAccessToken)
+export function updateHeaders (newHeaders) {
+    sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token'])
 
     let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
-    auth_headers['access-token'] = newAccessToken
+
+    if (auth_headers) {
+        auth_headers['access-token'] = newHeaders['access-token']
+    }
+    else {
+        auth_headers = {
+            client: newHeaders.client,
+            "access-token": newHeaders['access-token'],
+            uid: newHeaders.uid,
+            expiry: newHeaders.expiry,
+            "token-type": "Bearer"
+        }
+    }
 
     sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
 }
@@ -37,8 +49,8 @@ export const makeAxiosGetRequest = (url, onSuccess, onError) => {
     axios.get( (`${apiUrl}${url}`), config ).then(
         (response) => {
 
-            if ( response.headers['access-token'] ) {
-                updateHeaders(response.headers['access-token'])
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
             }
 
             onSuccess(response.data)
@@ -55,8 +67,8 @@ export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
     axios.delete( (`${apiUrl}${url}`), config ).then(
         (response) => {
 
-            if ( response.headers['access-token'] ) {
-                updateHeaders(response.headers['access-token'])
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
             }
 
             onSuccess(response.data)
@@ -67,15 +79,75 @@ export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
     )
 }
 
-
 export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
     let config = getAxiosConfigFromJSON()
 
     axios.put( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+export const makeAxiosPostRequest = (url, payload, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.post( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            if ( response.headers['access-token'] && response.status !== 304) {
+                updateHeaders(response.headers)
+            }
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+function filterFunction (value) {
+    if (value.headers['access-token'] && value.status !== 304) {
+        return true
+    }
+    else {
+        return false
+    }
+}
+
+export const axiosAllRequest = (urls, onSuccess, onError) => {
+    axios.all(
+        urls.map( url => axios.get(`${apiUrl}${url}`, getAxiosConfigFromJSON()) )
+    ).then(
+        (responseArray) => {
+            var aux = responseArray.filter(filterFunction)
+            if (aux[0]) {
+                updateHeaders(aux[0].headers)
+            }
+
+            onSuccess(responseArray)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
+
+export const validateGoogleLoginToken = (config, onSuccess, onError) => {
+    axios.get( (`${apiUrl}/auth/validate_token/`), config ).then(
         (response) => {
 
             if ( response.headers['access-token'] ) {
-                updateHeaders(response.headers['access-token'])
+                updateHeaders(response.headers)
             }
 
             onSuccess(response.data)
@@ -85,3 +157,27 @@ export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
         }
     )
 }
+
+export const authentication = (url, payload, onSuccess, onError) => {
+    let config = getAxiosConfigFromJSON()
+
+    axios.post( (`${apiUrl}${url}`), payload, config ).then(
+        (response) => {
+
+            const auth_headers = {
+                client: response.headers.client,
+                "access-token": response.headers['access-token'],
+                uid: response.headers.uid,
+                expiry: response.headers.expiry,
+                "token-type": "Bearer"
+            }
+
+            sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
+
+            onSuccess(response.data)
+        },
+        (error) => {
+            onError(error)
+        }
+    )
+}
diff --git a/src/Components/IframeOverlay/DrawerContent.js b/src/Components/IframeOverlay/DrawerContent.js
index 8bd7e483..461cca83 100644
--- a/src/Components/IframeOverlay/DrawerContent.js
+++ b/src/Components/IframeOverlay/DrawerContent.js
@@ -1,21 +1,22 @@
 import React, { useState, useEffect } from 'react';
 import styled from 'styled-components';
-import axios from 'axios';
 import Grid from '@material-ui/core/Grid';
 import SearchInput from './SearchInput.js';
 import ResourceCard from './ResourceCard.js';
-import { apiUrl } from '../../env';
 import SmallFooter from './SmallFooter.js';
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function DrawerContent(props) {
 	const [resources, setResources] = useState([]);
 
+    function handleSuccess(data) {
+        setResources(data)
+    }
 	const search = (query) => {
-		axios.get(`${apiUrl}/search?
-			page=0&results_per_page=5&query=${query}&search_class=LearningObject`)
-			.then(res => {
-				setResources(res.data);
-			});
+        const url = `/search?
+			page=0&results_per_page=5&query=${query}&search_class=LearningObject`
+
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 	}
 
 	useEffect(() => {
@@ -34,7 +35,7 @@ export default function DrawerContent(props) {
 		>
 			<Grid item xs={11}>
 				<SearchInput stdin={props.tag} search={search}/>
-			</Grid> 
+			</Grid>
 			<Grid item xs={11}>
 				<Description>
 					Recursos Relacionados na Plataforma MEC:
diff --git a/src/Components/IllegalContentModal.js b/src/Components/IllegalContentModal.js
index 135270c2..976bb5d8 100644
--- a/src/Components/IllegalContentModal.js
+++ b/src/Components/IllegalContentModal.js
@@ -81,24 +81,12 @@ const StyledDivContainer = styled.div`
 export default function IllegalContentModal (props) {
     const {state} = useContext(Store)
 
-    // const func = () => {
-    //     let name = ''
-    //     axios.get(`${apiUrl}/users/:id`,{
-    //
-    //     }
-    //     ).then ( (response) => {
-    //         name = response.name
-    //     }, (error) => {
-    //         console.log(':(')
-    //     })
-    // }
-
     return (
         <StyledModal
         aria-labelledby="transition-modal-title"
         aria-describedby="transition-modal-description"
         open={props.open}
-         
+
         centered="true"
         onClose={props.handleClose}
         closeAfterTransition
diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js
index 33b7ff15..8534da0a 100644
--- a/src/Components/LoginContainerFunction.js
+++ b/src/Components/LoginContainerFunction.js
@@ -25,7 +25,7 @@ import {device} from './device.js'
 import LabeledCheckbox from './Checkbox.js'
 import FormInput from "./FormInput.js"
 import GoogleLogo from "../img/logo_google.svg"
-import ValidateUserInput from '../Components/FormValidationFunction.js'
+import ValidateUserInput from './HelperFunctions/FormValidationFunction.js'
 import {Link} from 'react-router-dom'
 import {apiUrl} from '../env.js'
 
diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js
index 18b5e7e6..814457ea 100644
--- a/src/Components/LoginModal.js
+++ b/src/Components/LoginModal.js
@@ -23,10 +23,10 @@ import Zoom from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import LoginContainer from './LoginContainerFunction.js'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
+import {authentication} from './HelperFunctions/getAxiosConfig'
+
 const StyledLogin = styled(Modal)`
     margin : 0 !important;
     margin-left : 0 !important;
@@ -55,45 +55,27 @@ export default function LoginModal (props){
         handleSnackbar(false);
     }
 
+    function handleSuccess (data) {
+        dispatch ({
+            type: "USER_LOGGED_IN",
+            userLoggedIn: !state.userIsLoggedIn,
+            login: data.data
+            }
+        )
+        props.handleClose();
+        props.openSnackbar();
+    }
+    function handleError (error) {
+        handleSnackbar(true)
+    }
     const handleLoginInfo = (login) => {
-        axios.post(`${apiUrl}/auth/sign_in`,
-            {
+        const url = `/auth/sign_in`
+        const payload = {
             email : login.email,
             password : login.senha
         }
-        ).then( (response) => {
-            console.log(response)
-            dispatch ({
-                type: "USER_LOGGED_IN",
-                userLoggedIn: !state.userIsLoggedIn,
-                login: response.data.data
-                }
-            )
-            sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
-            sessionStorage.setItem('@portalmec/id', response.data.data.id)
-            sessionStorage.setItem('@portalmec/username', response.data.data.name)
-            sessionStorage.setItem('@portalmec/uid', response.data.data.uid)
 
-            let headers = {
-                client:response.headers.client,
-                "access-token":response.headers['access-token'],
-                "token-type": "Bearer",
-                expiry:response.headers.expiry,
-                uid:response.data.data.uid
-            }
-            sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-
-            if (login.checkboxChecked) {
-                localStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-            }
-
-            props.handleClose();
-            props.openSnackbar();
-            }, (error) => {
-                handleSnackbar(true)
-            }
-        )
+        authentication(url, payload, handleSuccess, handleError)
     }
 
 
diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js
index 6ec3f5c9..3db6d12c 100644
--- a/src/Components/MenuList.js
+++ b/src/Components/MenuList.js
@@ -26,9 +26,8 @@ import ExitToAppIcon from '@material-ui/icons/ExitToApp';
 import { Store } from '../Store';
 import Profile from '../img/default_profile0.png'
 import styled from 'styled-components'
-import {apiDomain, apiUrl} from '../env.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
+import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 
 const OverrideButton = styled(Button)`
@@ -47,30 +46,15 @@ export default function MenuList(props) {
     setAnchorEl(null);
   };
 
+  function handleSuccessSignOut (data) {
+      dispatch( {
+          type: 'USER_LOGGED_OUT',
+          userLoggedOut: !state.userIsLoggedIn,
+      })
+  }
   const handleLogout = () => {
-      let config = getAxiosConfig()
-      axios.delete(`${apiUrl}/auth/sign_out`, config).then(
-          () => {
-
-          localStorage.removeItem('@portalmec/username');
-          sessionStorage.removeItem('@portalmec/uid');
-          sessionStorage.removeItem('@portalmec/senha');
-          dispatch( {
-              type: 'USER_LOGGED_OUT',
-              userLoggedOut: !state.userIsLoggedIn,
-              login: {
-                  username : '',
-                  email : '',
-                  accessToken : '',
-                  client : ''
-              }
-          })
-      },
-      (err) => {
-          console.log(err)
-      }
-      )
-
+      const url = `/auth/sign_out`
+      makeAxiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
   }
 
   return (
@@ -84,13 +68,13 @@ export default function MenuList(props) {
       >
         <div style={{borderRadius: "50%", border: "2px solid #fff", background: "#fff", overflow: "hidden", maxWidth : "50px", maxHeight : "50px"}}>
             {
-                state.currentUser.avatar_file_name === '' || state.currentUser.avatar_file_name === null ?
+                state.currentUser.avatar === '' || state.currentUser.avatar === null ?
                 (
 
                     <img src={Profile} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
                 ):
                 (
-                    <img src={apiDomain + state.currentUser.avatar_file_name} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
+                    <img src={apiDomain + state.currentUser.avatar} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
                 )
             }
         </div>
diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js
index 2b159882..b904e550 100644
--- a/src/Components/MobileDrawerMenu.js
+++ b/src/Components/MobileDrawerMenu.js
@@ -36,9 +36,8 @@ import HistoryIcon from '@material-ui/icons/History';
 import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
 import FolderOpenIcon from '@material-ui/icons/FolderOpen';
 import SettingsIcon from '@material-ui/icons/Settings';
-import {apiDomain, apiUrl} from '../env.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
+import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function MobileDrawerMenu (props) {
     const {state, dispatch} = useContext(Store)
@@ -58,11 +57,11 @@ export default function MobileDrawerMenu (props) {
     };
 
     const getUserAvatar = ()  => {
-        if (state.currentUser.avatar_file_name === '' || state.currentUser.avatar_file_name == null) {
+        if (state.currentUser.avatar === '' || state.currentUser.avatar == null) {
             return DefaultAvatar
         }
         else {
-            return apiDomain + state.currentUser.avatar_file_name
+            return apiDomain + state.currentUser.avatar
         }
     }
 
@@ -75,30 +74,16 @@ export default function MobileDrawerMenu (props) {
         { name: "Coleções", href: "/perfil", icon : <FolderOpenIcon/>, value : '3'},
     ]
 
-    // {/*dispatches log out actions to Store.js*/}
-    const handleLogout = () => {
-        let config = getAxiosConfig()
-        axios.delete(`${apiUrl}/auth/sign_out`, config).then(
-            (res) => {
 
-            localStorage.removeItem('@portalmec/username');
-            sessionStorage.removeItem('@portalmec/uid');
-            sessionStorage.removeItem('@portalmec/senha');
-            dispatch( {
-                type: 'USER_LOGGED_OUT',
-                userLoggedOut: !state.userIsLoggedIn,
-                login: {
-                    username : '',
-                    email : '',
-                    accessToken : '',
-                    client : ''
-                }
-            })
-        },
-        (err) => {
-            console.log(err)
-        }
-        )
+    function handleSuccessSignOut (data) {
+        dispatch( {
+            type: 'USER_LOGGED_OUT',
+            userLoggedOut: !state.userIsLoggedIn,
+        })
+    }
+    const handleLogout = () => {
+        const url = `/auth/sign_out`
+        makeAxiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
index 4895cf29..8a31f4a0 100644
--- a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
+++ b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
@@ -20,12 +20,11 @@ import React, {useContext, useState} from 'react';
 import { Button } from '@material-ui/core';
 import styled from 'styled-components'
 import {Store} from '../../Store.js'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../../env';
+import {apiDomain} from '../../env';
 import CloseIcon from '@material-ui/icons/Close';
 import Profile from '../../img/default_profile0.png'
 import Cropper from '../Cropper.js'
-
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 function ChooseImage (props) {
     return (
@@ -65,21 +64,6 @@ function ChooseImage (props) {
     )
 }
 
-const GetHeaderConfig = () => {
-
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid'),
-        }
-    }
-    // {/*'Host': 'api.portalmec.c3sl.ufpr.br',
-    // 'Cookie': ''*/}
-    return config
-}
 
 export default function ComponentAlterarAvatar (props) {
     const {state, dispatch} = useContext(Store)
@@ -103,28 +87,23 @@ export default function ComponentAlterarAvatar (props) {
         aspect: 1
     });
 
+    function handleSuccess(data) {
+        const target = state.currentUser
+        const source = {userAvatar : data.avatar}
+        dispatch({
+            type : 'USER_CHANGED_COVER',
+            currUser : Object.assign(target, source)
+        })
+    }
+
     const completeSelection = () => {
-        console.log(newAvatar)
+        const url = `/users/${props.id}`
+
         //newAvatar is a base64 encoded image file
         let fdAvatar = new FormData()
         fdAvatar.set('user[avatar]', newAvatar)
 
-        axios.put( (`${apiUrl}/users/` + props.id ),
-            fdAvatar,
-            GetHeaderConfig()
-        ).then( (response) => {
-            console.log(response)
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            const target = state.currentUser
-            const source = {userAvatar : response.data.avatar}
-            dispatch({
-                type : 'USER_CHANGED_COVER',
-                currUser : Object.assign(target, source)
-            })
-        }, (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(url, fdAvatar, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarCover/ComponentAlterarCover.js b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
index caf408d4..68da2c71 100644
--- a/src/Components/ModalAlterarCover/ComponentAlterarCover.js
+++ b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
@@ -20,27 +20,9 @@ import React, {useContext, useState} from 'react';
 import { Button } from '@material-ui/core';
 import styled from 'styled-components'
 import {Store} from '../../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import CloseIcon from '@material-ui/icons/Close';
 import Cropper from '../Cropper.js'
-
-
-const GetHeaderConfig = () => {
-
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid'),
-        }
-    }
-    // {/*'Host': 'api.portalmec.c3sl.ufpr.br',
-    // 'Cookie': ''*/}
-    return config
-}
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function ComponentAlterarCover (props) {
     const {state, dispatch} = useContext(Store)
@@ -55,27 +37,23 @@ export default function ComponentAlterarCover (props) {
         aspect: 16 / 9
     });
 
+    function handleSuccess (data) {
+        const target = state.currentUser
+        const source = {userCover : data.cover}
+        dispatch({
+            type : 'USER_CHANGED_COVER',
+            currUser : Object.assign(target, source)
+        })
+    }
+
     const completeSelection = () => {
-        console.log(newCover)
+        const url = `/users/${props.id}`
+
         //newCover is a base64 encoded image file.
         let fdCover = new FormData()
         fdCover.set('user[cover]', newCover)
 
-        axios.put( (`${apiUrl}/users/` + props.id ),
-            fdCover,
-            GetHeaderConfig()
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            const target = state.currentUser
-            const source = {userCover : response.data.cover}
-            dispatch({
-                type : 'USER_CHANGED_COVER',
-                currUser : Object.assign(target, source)
-            })
-        }, (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(url, fdCover, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalConfirmarCuradoria.js b/src/Components/ModalConfirmarCuradoria.js
index b654338c..1156810d 100644
--- a/src/Components/ModalConfirmarCuradoria.js
+++ b/src/Components/ModalConfirmarCuradoria.js
@@ -22,10 +22,8 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import CloseModalButton from './CloseModalButton'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalConfirmarCuradoriaOpen (props) {
 
@@ -42,8 +40,11 @@ export default function ModalConfirmarCuradoriaOpen (props) {
         return newArr
     }
 
+    function handleSuccess (data) {
+        props.finalizeCuratorshipFlow()
+    }
     const handleConfirmation = () => {
-        let config = getAxiosConfig()
+        const url = `/submissions/${props.recursoId}/answer`
 
         let payload = {
             "submission" : {
@@ -51,16 +52,7 @@ export default function ModalConfirmarCuradoriaOpen (props) {
                 "answers" : transformReportCriteria(props.reportCriteria)
             }
         }
-
-        axios.post( (`${apiUrl}/submissions/` + props.recursoId + '/answer'), payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data)
-                props.finalizeCuratorshipFlow()
-            }, (error) => {console.log(error)}
-        )
+        makeAxiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalExcluirColecao.js b/src/Components/ModalExcluirColecao.js
index 914aa74f..13b6de08 100644
--- a/src/Components/ModalExcluirColecao.js
+++ b/src/Components/ModalExcluirColecao.js
@@ -21,28 +21,22 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import GreyButton from './GreyButton.js'
 import PurpleButton from './PurpleButton.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
 import SnackbarComponent from './SnackbarComponent'
+import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalExcluirColecao (props) {
     const [snackbarOpen, toggleSnackbar] = useState(false)
 
+    function handleDeleteSuccess (data) {
+        toggleSnackbar(true)
+        props.handleClose()
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig()
-
-        axios.delete( (`${apiUrl}/collections/` + props.id), config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            toggleSnackbar(true)
-            props.handleClose()
-        }, (error) => {console.log(error);})
+        const url = `/collections/${props.id}`
+
+        makeAxiosDeleteRequest(url, handleDeleteSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/NotificationsInner.js b/src/Components/NotificationsInner.js
index 5b80924a..ffb5ef4f 100644
--- a/src/Components/NotificationsInner.js
+++ b/src/Components/NotificationsInner.js
@@ -1,30 +1,22 @@
 import React, {useState, useContext, useEffect} from 'react'
 import styled from 'styled-components'
-import {apiDomain, apiUrl} from '../env.js'
-import axios from 'axios'
+import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig.js'
+import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function NotificationInner (props) {
     const [notifications, setNotifications] = useState([]);
     const [notificatonsLength, setLength] = useState(0);
+
+    function handleSuccess (data) {
+        setNotifications(data)
+        setLength(data.length)
+    }
     useEffect(() => {
         let config = getAxiosConfig()
-        axios.get(`${apiUrl}/feed?offset=0&limit=30`, config)
-        .then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
+        const url = `/feed?offset=0&limit=30`
 
-                console.log('atividades response: ', response)
-                setNotifications(response.data)
-                setLength(response.data.length)
-
-            },
-            (error) => {
-                console.log('error while running getNotifications')
-            }
-        )
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
     }, [])
 
     return (
diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js
index 6fe3e70c..ad8fcf9a 100644
--- a/src/Components/PageProfessorComponents/PartOne.js
+++ b/src/Components/PageProfessorComponents/PartOne.js
@@ -88,7 +88,6 @@ export default function PartOne (props) {
     }
 
     const handleSubmit = () => {
-        console.log('handle submit : ', uf.abbreviation, uf.name, municipio.name, codigoINEP.value)
         props.handleBuscar(uf.abbreviation, uf.name, municipio.name, codigoINEP.value)
     }
 
diff --git a/src/Components/PublicationPermissionsContent.js b/src/Components/PublicationPermissionsContent.js
index 533993c1..bdc34f32 100644
--- a/src/Components/PublicationPermissionsContent.js
+++ b/src/Components/PublicationPermissionsContent.js
@@ -8,8 +8,7 @@ import Radio from '@material-ui/core/Radio';
 import FormControl from '@material-ui/core/FormControl';
 import Grid from '@material-ui/core/Grid';
 import { withStyles } from '@material-ui/core/styles';
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig'
 
 const StyledFormControl = styled(FormControl)`
     display: "block ruby";
@@ -31,16 +30,14 @@ export default function PublicationPermissionsContent (props) {
     const [questionsArr, setQuestionsArr] = useState([])
     const handleSetQuestionsArr = (newArr) => {setQuestionsArr(newArr)}
 
+    function handleSuccess (data) {
+        handleSetQuestionsArr(data)
+    }
+
     useEffect(() => {
-        axios.get(`${apiUrl}/questions/`).then(
-            (response) => {
-                console.log(response)
-                handleSetQuestionsArr(response.data)
-            },
-            (error) => {
-                console.log('falhou em get questions')
-            }
-        )
+        const url = `/questions/`
+
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/ReportModal.js b/src/Components/ReportModal.js
index be2248df..b12218a8 100644
--- a/src/Components/ReportModal.js
+++ b/src/Components/ReportModal.js
@@ -23,12 +23,11 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import CloseIcon from '@material-ui/icons/Close';
 import ReportUserForm from './ReportUserForm.js'
 import ReportRecursoForm from './ReportRecursoForm.js'
 import ReportColecaoForm from './ReportColecaoForm.js'
+import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -42,9 +41,7 @@ export default function ReportModal (props) {
     const {state} = useContext(Store)
 
     const handleSubmit  = (complaint_reason_id, description) => {
-        console.log('complaint_reason_id: ', complaint_reason_id)
-        console.log('description: ', description)
-
+        const url = `/complaints/`
         const payload = {
             "complaint" : {
                 "user_id" : state.currentUser.id,
@@ -54,18 +51,9 @@ export default function ReportModal (props) {
                 "complaint_reason_id" : complaint_reason_id
             }
         }
-        console.log(payload)
 
-        axios.post(`${apiUrl}/complaints`,
-        {
-            "complaint" : {
-                "user_id" : state.currentUser.id,
-                "description" : description,
-                "complainable_id" : props.complainableId,
-                "complainable_type" : props.complainableType,
-                "complaint_reason_id" : complaint_reason_id
-            }
-        }).then( (response) => {console.log(response)}, (error) => {console.log(error)})
+        makeAxiosPostRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
+
     }
 
     const renderForm = (formType) => {
diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index 8113aa67..9b069378 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -18,8 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useState, useEffect} from 'react';
 import Card from '@material-ui/core/Card';
-import axios from 'axios'
-import {apiDomain, apiUrl} from '../env';
+import {apiDomain} from '../env';
 import ResourceCardOptions from './ResourceCardOptions'
 import noAvatar from "../img/default_profile.png";
 // import { makeStyles } from '@material-ui/core/styles';
@@ -51,12 +50,8 @@ import Grid from '@material-ui/core/Grid';
 import {Link} from 'react-router-dom';
 import {getDefaultThumbnail} from './HelperFunctions/getDefaultThumbnail'
 import GetIconByName from './UploadPageComponents/GetIconByName'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-
 import "./ResourceCard.css";
-
-// const types = [{label: "Animação", thumb: animacao}, {label: "Apresentação", thumb: apresentacao},
-// {label: "Aplicativo" , thumb: aplicativo}, {label: "Áudio", thumb: audio}, {label: "Vazio", thumb: vazio}, {label: "Imagem", thumb: imagem}, {label: "Gráfico", thumb: grafico}, {label: "Jogo", thumb: jogo}, {label: "Livro", thumb: livro}, {label:"Livro digital", thumb: livro}, {label: "Mapa", thumb: mapa}, {label: "Outros", thumb: outros}, {label: "Software Educacional", thumb:software}, {label: "Software", thumb:software}, {label: "Texto", thumb:texto}, {label: "Vídeo", thumb:video}]
+import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ResourceCardFunction (props) {
     const [thumbnail, setThumbnail] = useState(null)
@@ -83,23 +78,15 @@ export default function ResourceCardFunction (props) {
 
     }, [])
 
+    function handleSuccessLike (data) {
+        toggleLiked(!liked)
+        setLikesCount(data.count)
+    }
+
     const handleLike = () => {
-        let payload = {}
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/learning_objects/` + props.id + '/like'),payload, config
-        ).then(
-            (response) => {
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleLiked(!liked)
-                setLikesCount(response.data.count)
+        const url = `/learning_objects/${props.id}/like/`
 
-            },
-            (error) => {console.log(error)}
-        )
+        makeAxiosPutRequest(url, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const SlideAnimationContent = () => {
diff --git a/src/Components/ResourcePageComponents/CommentForm.js b/src/Components/ResourcePageComponents/CommentForm.js
index 1859e116..d549bf01 100644
--- a/src/Components/ResourcePageComponents/CommentForm.js
+++ b/src/Components/ResourcePageComponents/CommentForm.js
@@ -4,10 +4,9 @@ import Rating from '@material-ui/lab/Rating';
 import StarIcon from '@material-ui/icons/Star';
 import TextField from "@material-ui/core/TextField";
 import { Button } from '@material-ui/core';
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import EditIcon from '@material-ui/icons/Edit';
 import Grid from '@material-ui/core/Grid';
+import {makeAxiosPostRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentForm (props) {
     const [rating, setRating] = useState({
@@ -27,22 +26,19 @@ export default function CommentForm (props) {
 
     const [attemptedSubmit, setAttempt] = useState(false)
 
+    function handleSuccess (data) {
+        props.handleSnackbar(1)
+        props.rerenderCallback()
+    }
     const handleSubmit = (e) => {
         e.preventDefault()
         const finalRating = rating
         const finalComment = comment
 
-
         if (!(finalRating.error || finalComment.error)) {
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid'),
-                }
-            }
+            let type = props.recurso ? 'learning_objects' : 'collections'
+            const url = `/${type}/${props.recursoId}/reviews`
+
             let payload = {
                 "review" : {
                     "description" : finalComment.value,
@@ -54,17 +50,8 @@ export default function CommentForm (props) {
                     ]
                 }
             }
-            let type = props.recurso ? 'learning_objects/' : 'collections/'
-            console.log(payload)
-            axios.post( (`${apiUrl}/` + type + props.recursoId + '/reviews'), payload, config
-        ).then((response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response.data);
-             props.handleSnackbar(1);
-              props.rerenderCallback()},
-        (error) => {console.log(error)})
+
+            makeAxiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
         }
         else {
             setAttempt(true)
diff --git a/src/Components/ResourcePageComponents/CommentsArea.js b/src/Components/ResourcePageComponents/CommentsArea.js
index fdabf836..2ed0ba13 100644
--- a/src/Components/ResourcePageComponents/CommentsArea.js
+++ b/src/Components/ResourcePageComponents/CommentsArea.js
@@ -23,10 +23,10 @@ import Grid from '@material-ui/core/Grid';
 import { Button } from '@material-ui/core';
 import ExitToAppIcon from '@material-ui/icons/ExitToApp';
 import Comentarios from '../../img/comentarios.png'
-import {apiUrl, apiDomain} from '../../env';
+import {apiDomain} from '../../env';
 import CommentForm from './CommentForm.js'
-import axios from 'axios'
 import Comment from '../Comment.js'
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentsArea (props) {
     const {state} = useContext(Store)
@@ -34,15 +34,14 @@ export default function CommentsArea (props) {
     const [gambiarra, setState] = useState(0)
     const forceUpdate = () => {setState(gambiarra + 1)}
 
+    function handleSuccess (data) {
+        setComentarios(data.sort((a, b) => a.updated_at > b.updated_at ? -1 : 1))
+    }
+
     useEffect( () => {
-        axios.get( (`${apiUrl}/learning_objects/` + props.recursoId + '/reviews')
-    ).then( (response) => {
-        if ( response.headers['access-token'] ) {
-            sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-        }
-        console.log(response)
-        setComentarios(response.data.sort((a, b) => a.updated_at > b.updated_at ? -1 : 1))
-    }, (error) => {console.log(error)})
+        const url = `/learning_objects/${props.recursoId}/reviews`
+
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [gambiarra])
 
     return (
@@ -55,7 +54,7 @@ export default function CommentsArea (props) {
                                 <h3>Conte sua experiência com o Recurso</h3>
                                 <Grid container style={{paddingTop : "20px"}}>
                                     <Grid item xs={2} style={{paddingLeft : "15px", paddingRight : "15px"}}>
-                                        <img src={apiDomain + state.currentUser.avatar_file_name} className="minha-imagem" alt="user avatar"/>
+                                        <img src={apiDomain + state.currentUser.avatar} className="minha-imagem" alt="user avatar"/>
                                     </Grid>
                                     <Grid item xs={10}>
                                         <CommentForm
diff --git a/src/Components/ResourcePageComponents/TextoObjeto.js b/src/Components/ResourcePageComponents/TextoObjeto.js
index 5b5bc3cd..3fba2d8d 100644
--- a/src/Components/ResourcePageComponents/TextoObjeto.js
+++ b/src/Components/ResourcePageComponents/TextoObjeto.js
@@ -29,9 +29,7 @@ import Button from '@material-ui/core/Button';
 import {Link, Redirect} from 'react-router-dom'
 import Alert from '../Alert.js';
 import Snackbar from '@material-ui/core/Snackbar';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
-import axios from 'axios'
-import {apiUrl} from '../../env';
+import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function TextoObjeto (props) {
     const {state} = useContext(Store)
@@ -81,21 +79,13 @@ export default function TextoObjeto (props) {
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
     const [publisherDeletedObject, toggleDeleted] = useState(false)
+    function handleSuccess (data) {
+        toggleSnackbar(true)
+        toggleDeleted(true)
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig()
-        axios.delete((`${apiUrl}/learning_objects/` + props.recursoId), config).then(
-            (response) => {
-                toggleSnackbar(true)
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleDeleted(true)
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+        const url = `/learning_objects/${props.recursoId}`
+        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     const checkAccessLevel = (levelToCheck) => {
diff --git a/src/Components/SignUpContainerFunction.js b/src/Components/SignUpContainerFunction.js
index 19ec2036..d336d341 100644
--- a/src/Components/SignUpContainerFunction.js
+++ b/src/Components/SignUpContainerFunction.js
@@ -26,7 +26,7 @@ import FormInput from "./FormInput.js"
 import {StyledCloseModalButton, DialogContentDiv, DialogHeaderStyled, SocialConnectDiv, H3Div} from './LoginContainerFunction.js'
 import {apiUrl} from '../env.js'
 import {GoogleLoginButton} from './LoginContainerFunction'
-import ValidateUserInput from '../Components/FormValidationFunction.js'
+import ValidateUserInput from './HelperFunctions/FormValidationFunction.js'
 import GoogleLogo from "../img/logo_google.svg"
 
 async function handleGoogleAttempt () {
diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js
index d5d26a54..d3ed47c7 100644
--- a/src/Components/SignUpModal.js
+++ b/src/Components/SignUpModal.js
@@ -22,32 +22,22 @@ import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import SignUpContainer from './SignUpContainerFunction.js'
 import {Store} from '../Store.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
-
-const StyledModalSignUp = styled(Modal)`
-    .djXaxP{
-        margin : 0 !important;
-    }
-
-    display : flex;
-    align-items: center;
-    justify-content : center;
-    text-align : center;
-    padding : 10px !important;
-    border-radius : 4px;
-
-`
-
-
+import {authentication} from './HelperFunctions/getAxiosConfig'
 
 export default function SignUpModal (props) {
     const { state, dispatch } = useContext(Store)
 
+    function handleSuccess (data) {
+        dispatch ({
+            type: 'USER_SIGNED_UP',
+            userLoggedIn: !state.userIsLoggedIn,
+            user: data.data
+        })
+        props.handleClose()
+    }
     const handleLoginInfo = (newLogin) => {
-        // {/*console.log(state.currentUser)*/}
-        axios.post(`${apiUrl}/auth`,
-            {
+        const url = `/auth`
+        const payload = {
             name : newLogin.name,
             email: newLogin.email,
             password : newLogin.password,
@@ -55,37 +45,9 @@ export default function SignUpModal (props) {
             terms_of_service:true,
             avatar: ""
         }
-        ).then( (response) => {
-            dispatch ( {
-                type: 'USER_SIGNED_UP',
-                userLoggedIn: !state.userIsLoggedIn,
-                user: response.data.data
-                }
-            )
-            localStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            localStorage.setItem('@portalmec/clientToken', response.headers.client,)
-            localStorage.setItem('@portalmec/id', response.data.data.id)
-            localStorage.setItem('@portalmec/username', response.data.data.name)
-            localStorage.setItem('@portalmec/uid', response.data.data.uid)
-
-            let headers = {
-                client:response.headers.client,
-                "access-token":response.headers['access-token'],
-                "token-type": "Bearer",
-                expiry:response.headers.expiry,
-                uid:response.data.data.uid
-            }
-            sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-
-            props.handleClose()
-            }, (error) => {
-                console.log(':(')
-            }
-        )
+        authentication(url, payload, handleSuccess, (error) => {console.log(error)})
     }
 
-    //useEffect(()=>{console.log(state.currentUser)},[state.currentUser])
-
     return (
         <StyledModalSignUp
             aria-labelledby="transition-modal-title"
@@ -110,3 +72,17 @@ export default function SignUpModal (props) {
         </StyledModalSignUp>
     )
 }
+
+const StyledModalSignUp = styled(Modal)`
+    .djXaxP{
+        margin : 0 !important;
+    }
+
+    display : flex;
+    align-items: center;
+    justify-content : center;
+    text-align : center;
+    padding : 10px !important;
+    border-radius : 4px;
+
+`
diff --git a/src/Components/TabPanels/Breadcrumbs.js b/src/Components/TabPanels/Breadcrumbs.js
index 00d54782..1d208986 100644
--- a/src/Components/TabPanels/Breadcrumbs.js
+++ b/src/Components/TabPanels/Breadcrumbs.js
@@ -1,3 +1,22 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+
 import React from 'react'
 import styled from 'styled-components'
 import Breadcrumbs from '@material-ui/core/Breadcrumbs';
@@ -12,8 +31,8 @@ export default function CustomizedBreadcrumbs (props) {
                     Página Inicial
                 </Link>
                 {
-                    props.values.map( (value) =>
-                        <span>
+                    props.values.map( (value, i) =>
+                        <span key={i}>
                             {value}
                         </span>
                     )
diff --git a/src/Components/TabPanels/PanelComponents/TemplateColecao.js b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
index dfb193fc..b15f74ff 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateColecao.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
@@ -78,13 +78,10 @@ export default function PanelTemplateColecao (props) {
             {
                 props.length === 0 ?
                 (
-                    [
-                        <NoContent text={props.noContentText}/>
-                    ]
+                    <NoContent text={props.noContentText}/>
                 )
                 :
                 (
-                    [
                         <React.Fragment>
 
                             <StyledGrid container spacing={1} style={{paddingLeft : "30px", paddingRight : "15px"}}>
@@ -104,7 +101,6 @@ export default function PanelTemplateColecao (props) {
                                 showAll={() => props.showAll()}
                             />
                         </React.Fragment>
-                    ]
                 )
             }
 
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
index 3aab2492..e0a93832 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react'
 import Grid from '@material-ui/core/Grid';
 import {HeaderGrid, StyledGrid} from '../StyledComponents.js'
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js b/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
index 044ebc5b..a0eba2f9 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react'
 import Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
index 3622356c..f1a51e88 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React, {useState, useEffect} from 'react'
 import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js b/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js
index 9e3cd80b..0663a44c 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabInicio.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react'
 import styled from 'styled-components'
 import UserDescription from './UserDescription.js'
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
index 6f2a08ba..6b0be8a7 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React, {useState, useEffect} from 'react'
 import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
index b3dea17e..125d7a2f 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
@@ -1,20 +1,24 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import PanelTemplateRede from '../PanelComponents/TemplateRede.js'
-
-const getConfig = () => {
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type':'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid')
-        }
-    }
-    return config
-}
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabRede (props) {
     const [followers, setFollowers] = useState([])
@@ -34,26 +38,19 @@ export default function TabRede (props) {
     }
     const showAllFollowing = () => {setFollowingSlice(following)}
 
+    function handleSuccess (responseArr) {
+        setFollowers(responseArr[0].data)
+        setFollowersSlice(responseArr[0].data.slice(0,4))
+
+        setFollowing(responseArr[1].data)
+        setFollowingSlice(responseArr[1].data.slice(0,4))
+    }
+
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/followers'), getConfig()),
-            axios.get((`${apiUrl}/users/` + props.id + '/following/User'), getConfig())
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Rede: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-                setFollowers(responseArr[0].data)
-                setFollowersSlice(responseArr[0].data.slice(0,4))
 
-                setFollowing(responseArr[1].data)
-                setFollowingSlice(responseArr[1].data.slice(0,4))
-            },
-            (error) => {
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [`/users/${props.id}/followers`, `/users/${props.id}/following/User`]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js b/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js
index 495e60e3..4fcc273f 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/UserDescription.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react'
 import styled from 'styled-components'
 
diff --git a/src/Components/TabPanels/TabPanelStatusEConquistas.js b/src/Components/TabPanels/TabPanelStatusEConquistas.js
index 2617f8a7..d9e0c207 100644
--- a/src/Components/TabPanels/TabPanelStatusEConquistas.js
+++ b/src/Components/TabPanels/TabPanelStatusEConquistas.js
@@ -1,3 +1,22 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+
 import React, {useContext, useState, useEffect} from 'react'
 import { Store } from '../../Store.js'
 import styled from 'styled-components'
@@ -68,7 +87,7 @@ export default function TabPanelStatusEConquistas (props) {
 									src={a.imgsrc}
 									requirements={a.requirements}
                                     />
-									
+
 							</Grid>
 						)}
 				)}
diff --git a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
index 05c08553..a49bfd52 100644
--- a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
+++ b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
@@ -23,15 +23,13 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../../../env.js'
 import CloseIcon from '@material-ui/icons/Close';
 import ExcluirAvatar from '../../../img/Excluir.png'
 import GreyButton from '../../GreyButton'
 import FormInput from '../../FormInput'
 import {Link} from 'react-router-dom'
 import SnackbarComponent from '../../SnackbarComponent.js'
-import {getAxiosConfig} from '../../HelperFunctions/getAxiosConfig'
+import {makeAxiosDeleteRequest} from '../../HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -64,20 +62,16 @@ export default function ModalExcluirConta (props) {
 
     const deletedAccountText = `A conta ${state.currentUser.email} foi deletada com sucesso`
 
+    function handleSuccess (data) {
+        toggleSnackbar(true)
+        dispatch({
+          type: "USER_DELETED_ACCOUNT",
+        });
+        props.handleClose()
+    }
     const deleteAccount = () => {
-        let config = getAxiosConfig()
-
-        axios.delete( (`${apiUrl}/auth/`), config
-        ).then( (response) => {
-            console.log(response)
-            toggleSnackbar(true)
-
-            dispatch({
-              type: "USER_DELETED_ACCOUNT",
-            });
-
-            props.handleClose()
-        }, (error) => {console.log(error);})
+        const url = `/auth`
+        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
index 0c9d8da9..770b03b5 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
@@ -20,13 +20,12 @@ import React, {useState, useEffect} from 'react'
 import styled from 'styled-components'
 import Paper from '@material-ui/core/Paper';
 import Button from '@material-ui/core/Button';
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../../../env';
+import {apiDomain} from '../../../env';
 import Bolo from '../../../img/Bolo.png'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ActivityListItem from '../../ActivityListItem.js'
 import List from '@material-ui/core/List';
-import {getAxiosConfig} from '../../HelperFunctions/getAxiosConfig.js'
+import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig.js'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -40,25 +39,17 @@ export default function TabPanelAtividades (props) {
         setNotificationsSlice(notifications.slice(0, sliceLength + offset))
     }
 
-    useEffect( () => {
-        let config = getAxiosConfig()
-
-        axios.get(`${apiUrl}/feed?offset=0&limit=30`, config)
-        .then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
+    function handleSuccess (data) {
+        setNotifications(data)
+        setNotificationsSlice(data.slice(0,30))
+        setLength(data.length)
 
-                setNotifications(response.data)
-                setNotificationsSlice(response.data.slice(0,30))
-                setLength(response.data.length)
+        handleLoading(false)
+    }
+    useEffect( () => {
+        const url = `/feed?offset=0&limit=30`
 
-                handleLoading(false)
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
@@ -224,4 +215,4 @@ const DivTitulo = styled.div`
     line-height: 1.2em;
     margin : 0;
     border-bottom: 1px solid #eee;
-`
\ No newline at end of file
+`
diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
index f7883396..c9ea1c8d 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
@@ -20,11 +20,8 @@ import React, {useState, useEffect} from 'react'
 import styled from 'styled-components'
 import Grid from '@material-ui/core/Grid';
 import LoadingSpinner from '../../LoadingSpinner.js'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import PanelTemplateColecao from '../PanelComponents/TemplateColecao.js'
 import PaginaVaziaColecao from '../../../img/Pagina_vazia_colecao.png'
-
 import NoContent from '../PanelComponents/NoContent.js'
 import {WhiteContainer, StyledGrid} from '../StyledComponents.js'
 import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';
@@ -32,6 +29,7 @@ import Title from '../PanelComponents/PanelTitle.js'
 import CollectionCardFunction from '../../CollectionCardFunction.js'
 import {ButtonsAreaColecao} from '../PanelComponents/ButtonsArea'
 import CriarColecaoModal from '../../CriarColecaoModal.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelColecoes (props) {
     const [loading, handleLoading] = useState(true)
@@ -42,30 +40,18 @@ export default function TabPanelColecoes (props) {
     const [followedCollections, setFollowedCollections] = useState([])
     const [followedCollectionsSlice, setFollowedCollectionsSlice] = useState([])
 
-    const getInfo = () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/collections'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/following/Collection'), props.config),
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Colecoes: ', responseArr)
-                if (responseArr[1].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[1].headers['access-token'])
-                }
-
-                handleLoading(false)
-                setUserCollections(responseArr[0].data)
-                setUserCollectionsSlice(responseArr[0].data.slice(0,3))
+    function handleSuccess (responseArr) {
+        handleLoading(false)
+        setUserCollections(responseArr[0].data)
+        setUserCollectionsSlice(responseArr[0].data.slice(0,3))
 
-                setFollowedCollections(responseArr[1].data)
-                setFollowedCollectionsSlice(responseArr[1].data.slice(0,4))
+        setFollowedCollections(responseArr[1].data)
+        setFollowedCollectionsSlice(responseArr[1].data.slice(0,4))
+    }
 
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+    const getInfo = () => {
+        const urls = [`/users/${props.id}/collections`, `/users/${props.id}/following/Collection`]
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }
 
     useEffect( () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
index 06ea8fd6..723ad97e 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
@@ -17,10 +17,9 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
+import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelCuradoria (props) {
     const [loading, handleLoading] = useState(true)
@@ -35,19 +34,15 @@ export default function TabPanelCuradoria (props) {
 
     const showAllSubmissions = () => {setSubmissionsSlice(submissions)}
 
+    function handleSuccess (data) {
+        handleLoading(false)
+        setSubmissions(data)
+        setSubmissionsSlice(data.slice(0,4))
+    }
     useEffect( () => {
-        axios.get( (`${apiUrl}/users/` + props.id + '/submissions?offset=0&status=submitted'), props.config)
-            .then(response => {
-                console.log(response)
-                if (response.headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-
-                handleLoading(false)
-                setSubmissions(response.data)
-                setSubmissionsSlice(response.data.slice(0,4))
+        const url = `/users/${props.id}/submissions?offset=0&status=submitted`
 
-            }, error => {console.log('error while running ComponentDidMout on TabPanelCuradoria')})
+        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js b/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
index 9e0560fd..a2a082d0 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
@@ -25,7 +25,7 @@ import IconButton from '@material-ui/core/IconButton';
 import PhotoCamera from '@material-ui/icons/PhotoCamera';
 import Tooltip from '@material-ui/core/Tooltip';
 import FormInput from "../../FormInput.js"
-import ValidateUserInput from '../../FormValidationFunction.js'
+import ValidateUserInput from '../../HelperFunctions/FormValidationFunction.js'
 import {apiDomain} from '../../../env.js'
 
 
@@ -69,7 +69,7 @@ export default function TabPanelEditarPerfil (props) {
                 key : flag,
                 value : userInput,
             })
-            
+
         }
     }
 
@@ -104,7 +104,7 @@ export default function TabPanelEditarPerfil (props) {
                     <div style={{padding:"0", display:"flex", flexDirection:"column"}}>
                         <HeaderContainer>
                             <div style={{position:"relative", height:"100%"}}>
-                                <img src={`${apiDomain}` + state.currentUser.cover_file_name} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/>
+                                <img src={`${apiDomain}` + state.currentUser.cover} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/>
                                 <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" onChange={(e) => updateCover(e.target.files)}/>
                                 <label htmlFor="icon-button-file">
                                     <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left">
@@ -115,7 +115,7 @@ export default function TabPanelEditarPerfil (props) {
                                 </label>
                             </div>
                             <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}>
-                                <img src={`${apiDomain}` + state.currentUser.avatar_file_name} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/>
+                                <img src={`${apiDomain}` + state.currentUser.avatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/>
                                 <ChangeAvatarDiv  style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}>
                                     <span>Alterar Foto</span>
                                 </ChangeAvatarDiv>
diff --git a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
index 75c96c27..e3b51866 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
@@ -17,11 +17,10 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import Template from '../PanelComponents/TemplateRecurso.js'
 import PanelTemplateColecao from '../PanelComponents/TemplateColecao.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelFavoritos (props) {
     const [loading, handleLoading] = useState(true)
@@ -32,29 +31,21 @@ export default function TabPanelFavoritos (props) {
     const [likedCollections, setlikedCollections] = useState([])
     const [likedCollectionsSlice, setlikedCollectionsSlice] = useState([])
 
+    function handleSuccess (responseArr) {
+        setlikedLearnObjs(responseArr[0].data)
+        setlikedLearnObjsSlice(responseArr[0].data.slice(0,4))
+
+        setlikedCollections(responseArr[1].data)
+        setlikedCollectionsSlice(responseArr[1].data.slice(0,4))
+
+        handleLoading(false)
+    }
+
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/learning_objects/liked'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/collections/liked'), props.config),
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr favoritos: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-                setlikedLearnObjs(responseArr[0].data)
-                setlikedLearnObjsSlice(responseArr[0].data.slice(0,4))
-
-                setlikedCollections(responseArr[1].data)
-                setlikedCollectionsSlice(responseArr[1].data.slice(0,4))
-
-                handleLoading(false)
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [ `/users/${props.id}/learning_objects/liked`, `/users/${props.id}/collections/liked`]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+
     }, [])
 
     const showMoreLikedLearnObj = () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js b/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js
index 421cadcd..0207eb9f 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelGerenciarConta.js
@@ -21,7 +21,7 @@ import Paper from '@material-ui/core/Paper';
 import FormInput from "../../FormInput.js"
 import {CompletarCadastroButton} from './PanelSolicitarContaProfessor.js'
 import {ButtonCancelar} from './PanelEditarPerfil.js'
-import ValidateUserInput from '../../FormValidationFunction.js'
+import ValidateUserInput from '../../HelperFunctions/FormValidationFunction.js'
 import ModalExcluirConta from './ModalExcluirConta.js'
 
 export default function TabPanelGerenciarConta (props) {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
index 3d9c93d0..0b05d5ac 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
@@ -17,11 +17,10 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import Template from '../PanelComponents/TemplateRecurso.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -35,34 +34,27 @@ export default function TabPanelAtividades (props) {
     const [curating, setCurating] = useState([]);
     const [curatingSlice, setCuratingSlice] = useState([])
 
+    function handleSuccess (responseArr) {
+        setLearningObjects(responseArr[0].data)
+        setLearningObjectsSlice(responseArr[0].data.slice(0, 4))
+
+        setDrafts(responseArr[1].data)
+        setDraftsSlice(responseArr[1].data.slice(0, 4))
+
+        setCurating(responseArr[2].data)
+        setCuratingSlice(responseArr[2].data.slice(0, 4))
+
+        handleLoading(false)
+    }
+
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/learning_objects'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/drafts'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/submissions?status=submitted'), props.config)
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Meus recursos: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-
-                setLearningObjects(responseArr[0].data)
-                setLearningObjectsSlice(responseArr[0].data.slice(0, 4))
-
-                setDrafts(responseArr[1].data)
-                setDraftsSlice(responseArr[1].data.slice(0, 4))
-
-                setCurating(responseArr[2].data)
-                setCuratingSlice(responseArr[2].data.slice(0, 4))
-
-                handleLoading(false)
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [
+            `/users/${props.id}/learning_objects`,
+            `/users/${props.id}/drafts`,
+            `/users/${props.id}/submissions?status=submitted`
+        ]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     const showMoreLearnObj = () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js
index 464b40c3..e8f56bdf 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelRede.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js
@@ -17,11 +17,10 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, {useState, useEffect} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../../../env';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ContainerRedeVazia from './ContainerRedeVazia.js'
 import PanelTemplateRede from '../PanelComponents/TemplateRede.js'
+import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelRede (props) {
     const [loading, handleLoading] = useState(true)
@@ -44,32 +43,24 @@ export default function TabPanelRede (props) {
     }
     const showAllFollowers = () => {setFollowersSlice(followersList)}
 
+    function handleSuccess (responseArr) {
+        setFollowing(responseArr[0].data)
+        setFollowingSlice(responseArr[0].data.slice(0,4))
+
+
+        setFollowers(responseArr[1].data)
+        setFollowersSlice(responseArr[1].data.slice(0,4))
+
+        handleLoading(false)
+    }
 
     useEffect( () => {
-        axios.all([
-            axios.get((`${apiUrl}/users/` + props.id + '/following/User'), props.config),
-            axios.get((`${apiUrl}/users/` + props.id + '/followers'), props.config)
-        ])
-        .then( (responseArr) => {
-                console.log('responseArr Rede: ', responseArr)
-                if (responseArr[0].headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', responseArr[0].headers['access-token'])
-                }
-
-                setFollowing(responseArr[0].data)
-                setFollowingSlice(responseArr[0].data.slice(0,4))
-
-
-                setFollowers(responseArr[1].data)
-                setFollowersSlice(responseArr[1].data.slice(0,4))
-
-                handleLoading(false)
-            },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+        const urls = [
+            `/users/${props.id}/following/User`,
+            `/users/${props.id}/followers`
+        ]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js b/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js
index 769977a5..3e0fe1c7 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelSolicitarContaProfessor.js
@@ -35,7 +35,6 @@ export default function TabPanelSolicitarContaProfessor (props) {
                 {
                     state.currentUser.submitter_request === 'default' || state.currentUser.submitter_request === 'rejected' ?
                     (
-                        [
                             <div style={{paddingLeft:"100px", paddingRight:"101px"}}>
                                 <ImageDiv/>
                                 <StyledH2>Você é professor(a) da educação básica e gostaria de colaborar com a Plataforma?</StyledH2>
@@ -48,28 +47,21 @@ export default function TabPanelSolicitarContaProfessor (props) {
                                     </CompletarCadastroButton>
                                 </div>
                             </div>
-                        ]
                     )
                     :
                     (
-                        [
                             <>
                             {
                                 state.currentUser.submitter_request === 'requested' ?
                                 (
-                                    [
                                         <span>Requested</span>
-                                    ]
                                 )
                                 :
                                 (
-                                    [
                                         <span>Professor</span>
-                                    ]
                                 )
                             }
                             </>
-                        ]
                     )
                 }
             </div>
diff --git a/src/Components/UploadPageComponents/ButtonsDiv.js b/src/Components/UploadPageComponents/ButtonsDiv.js
index 975017b0..b6aaaa3c 100644
--- a/src/Components/UploadPageComponents/ButtonsDiv.js
+++ b/src/Components/UploadPageComponents/ButtonsDiv.js
@@ -21,6 +21,7 @@ import ModalCancelar from './ModalCancelar.js'
 import { GreyButton, OrangeButton } from './StyledComponents';
 import Grid from '@material-ui/core/Grid';
 import {Redirect} from 'react-router-dom'
+
 export default function ButtonsDiv (props) {
     const [modalCancelar, toggleModalCancelar] = useState(false)
     const [redirectTrue, toggleRedirect] = useState(false)
diff --git a/src/Components/UploadPageComponents/FileToUpload.ts b/src/Components/UploadPageComponents/FileToUpload.ts
index 0fba0fc8..fddbf404 100644
--- a/src/Components/UploadPageComponents/FileToUpload.ts
+++ b/src/Components/UploadPageComponents/FileToUpload.ts
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 export default class FileToUpload {
     static chunkSize = 262144;
     readonly request: XMLHttpRequest;
diff --git a/src/Components/UploadPageComponents/FileUploadStage.js b/src/Components/UploadPageComponents/FileUploadStage.js
index 5419bb3f..79cb05be 100644
--- a/src/Components/UploadPageComponents/FileUploadStage.js
+++ b/src/Components/UploadPageComponents/FileUploadStage.js
@@ -21,25 +21,18 @@ import styled from 'styled-components'
 import {WrapperBox} from './StyledComponents.js'
 import DoneIcon from '@material-ui/icons/Done';
 import DeleteIcon from '@material-ui/icons/Delete';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
-import axios from 'axios'
-import {apiUrl} from '../../env';
+import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function FileUploadStage (props) {
     const [uploading, toggleUploading] = useState(true)
 
+    function handleSuccess (data) {
+        props.handleNextStage("default")
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig
+        const url = `/learning_objects/${props.draftID}`
 
-        axios.delete( (`${apiUrl}/learning_objects/` + props.draftID), config).then(
-            (response) => {
-                console.log(response)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                props.handleNextStage("default")
-            },
-            (error) => {console.log(error)})
+        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/UploadPageComponents/ModalCancelar.js b/src/Components/UploadPageComponents/ModalCancelar.js
index 5906286e..8f9e6990 100644
--- a/src/Components/UploadPageComponents/ModalCancelar.js
+++ b/src/Components/UploadPageComponents/ModalCancelar.js
@@ -22,37 +22,23 @@ import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import {Link} from 'react-router-dom'
+import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function ModalCancelar (props) {
+
+    function handleSuccess (data) {
+        props.handleClose()
+        console.log('ir pra home')
+
+    }
     const handleDelete = () => {
-        console.log(props.draftID)
         // {/*delete the draft*/}
         if (props.draftID) {
-            let config = {
-                headers : {
-                    'Accept': 'application/json',
-                    'Content-Type': 'application/json',
-                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                    'Uid': sessionStorage.getItem('@portalmec/uid'),
-                }
-            }
-            axios.delete( (`${apiUrl}/learning_objects/` + props.draftID), config).then(
-                (response) => {
-                    console.log(response)
-                    if ( response.headers['access-token'] ) {
-                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                    }
-                }, (error) => {console.log(error)})
-        }
-        // {/*close modal*/}
-        props.handleClose()
-        // {/*change current page to home page*/}
-        console.log('ir pra home')
+            const url = `/learning_objects/${props.draftID}`
 
+            makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        }
     }
 
     return (
diff --git a/src/Components/UploadPageComponents/PartOne.js b/src/Components/UploadPageComponents/PartOne.js
index 46540f49..4e071e0c 100644
--- a/src/Components/UploadPageComponents/PartOne.js
+++ b/src/Components/UploadPageComponents/PartOne.js
@@ -18,10 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useState, useEffect} from 'react'
 import Grid from '@material-ui/core/Grid';
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import ButtonsDiv from './ButtonsDiv.js'
-
 import SobreORecurso from './Forms/SobreORecurso.js'
 import NewTitle from './Forms/NewTitle.js'
 import Keywords from './Forms/Keywords.js'
@@ -29,40 +26,20 @@ import Autor from './Forms/Autor.js'
 import TipoDeRecurso from './Forms/TipoDeRecurso.js'
 import Idioma from './Forms/Idioma.js'
 import {SendInfo} from './SendInfo.js'
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartOne (props) {
     // {/*const [subjects, setSubjects] = useState([])*/}
     const [languages, setLanguages] = useState([])
     const [objTypes, setObjTypes] = useState([])
 
+    function handleSuccessGetObjTypes (data) {
+        setObjTypes(data.sort((a, b) => (a.name) > (b.name) ? 1 : -1))
+    }
     useEffect( () => {
-        //     {/*get the list of subjects*/}
-        // {/*    axios.get(`${apiUrl}/subjects/`).then(
-        //         (response) => {
-        //             console.log(response.data)
-        //             setSubjects(response.data)
-        //         }, (error) => {
-        //             console.log(error)
-        //         }
-        //     )*/}
-
-            // {/*get the list of object_types*/}
-            axios.get(`${apiUrl}/object_types/`).then(
-                (response) => {
-                    setObjTypes(response.data.sort((a, b) => (a.name) > (b.name) ? 1 : -1))
-                }, (error) => {
-                    console.log(error)
-                }
-            )
-
-            // {/*get the list of languages*/}
-            axios.get(`${apiUrl}/languages/`).then(
-                (response) => {
-                    setLanguages(response.data)
-                }, (error) => {
-                    console.log(error)
-                }
-            )
+            makeAxiosGetRequest(`/object_types/`, handleSuccessGetObjTypes, (error) => {console.log(error)})
+
+            makeAxiosGetRequest(`/languages/`, (data) => {setLanguages(data)}, (error) => {console.log(error)})
     }, [])
 
     const handleSubmit = () => {
diff --git a/src/Components/UploadPageComponents/PartThree.js b/src/Components/UploadPageComponents/PartThree.js
index 3a2608c7..61b70f09 100644
--- a/src/Components/UploadPageComponents/PartThree.js
+++ b/src/Components/UploadPageComponents/PartThree.js
@@ -20,8 +20,7 @@ import React, {useState, useEffect, useContext} from 'react'
 import {Store} from '../../Store.js'
 import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../../env';
+import {apiDomain} from '../../env';
 import Stepper from './Stepper.js'
 import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
@@ -34,8 +33,8 @@ import TranslateIcon from '@material-ui/icons/Translate';
 import AssignmentIcon from '@material-ui/icons/Assignment';
 import { GrayButton, OrangeButton} from './StyledComponents';
 import ModalCancelar from './ModalCancelar.js'
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
 import {getDefaultThumbnail} from '../HelperFunctions/getDefaultThumbnail'
+import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartThree (props) {
     var moment = require('moment')
@@ -48,24 +47,22 @@ export default function PartThree (props) {
     const [description, setDescription] = useState('')
     const [author, setAuthor] = useState('')
 
+    function handleSuccess (data) {
+        setDraft(data)
+        /*extract subjects*/
+        setSubjects(data.subjects.map((subject)=>(subject.name)).join(', '))
+        setTags(data.tags.map(tag => tag.name))
+        setDescription(data.description)
+        setAuthor(data.author)
+        setLoading(false)
+    }
+
     useEffect(() => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
-            axios.get( (`${apiUrl}/learning_objects/` + props.draftID), config
-            ).then( (response) => {
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                setDraft(response.data)
-
-                /*extract subjects*/
-                setSubjects(response.data.subjects.map((subject)=>(subject.name)).join(', '))
-                setTags(response.data.tags.map(tag => tag.name))
-                setDescription(response.data.description)
-                setAuthor(response.data.author)
-                setLoading(false)
-            }, (error) => {console.log(error)})
+            const url = `/learning_objects/${props.draftID}`
+
+            makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+
         }
     }, [state.currentUser.id])
 
diff --git a/src/Components/UploadPageComponents/PartTwo.js b/src/Components/UploadPageComponents/PartTwo.js
index 02a83da8..63810377 100644
--- a/src/Components/UploadPageComponents/PartTwo.js
+++ b/src/Components/UploadPageComponents/PartTwo.js
@@ -19,8 +19,6 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useState, useEffect} from 'react'
 import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl} from '../../env';
 import DragAndDropThumbnail from './PartTwoComponents/DragAndDropThumbnail'
 import EducationalStage from './PartTwoComponents/EducationalStage'
 import Licenca from './PartTwoComponents/Licenca'
@@ -32,9 +30,9 @@ import ButtonsDiv from './ButtonsDiv.js'
 import SubjectsAndThemes from './PartTwoComponents/SubjectsAndThemes.js'
 import {SendInfo} from './SendInfo.js'
 import EditThumbnail from './PartTwoComponents/EditThumbnail.js'
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig'
 import DisplayThumbnail from './PartTwoComponents/DisplayThumbnail.js'
 import CustomCircularProgress from './PartTwoComponents/CustomCircularProgress';
+import {makeAxiosGetRequest, makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export function LoadingDiv () {
     return (
@@ -49,21 +47,15 @@ export default function PartTwo (props) {
     const [subjects, setSubjects] = useState([])
     const [themes, setThemes] = useState([])
 
+    function handleSuccess (data) {
+        setSubjects(data.filter(subject => subject.theme === false).sort((a,b) => a.name > b.name ? 1 : -1))
+        setThemes(data.filter(subject => subject.theme === true).sort((a,b) => a.name > b.name ? 1 : -1))
+    }
+
     useEffect(() => {
-        axios.get(`${apiUrl}/educational_stages/`).then(
-            (response) => {console.log(response);
-                setEduStages(response.data)
-            },
-            (error) => {console.log(error)}
-        )
-
-        axios.get(`${apiUrl}/subjects/`).then(
-            (response) => {console.log(response);
-                setSubjects(response.data.filter(subject => subject.theme === false).sort((a,b) => a.name > b.name ? 1 : -1))
-                setThemes(response.data.filter(subject => subject.theme === true).sort((a,b) => a.name > b.name ? 1 : -1))
-            },
-            (error) => {console.log(error)}
-        )
+        makeAxiosGetRequest(`/educational_stages/`, (data) => {setEduStages(data)}, (error) => {console.log(error)})
+
+        makeAxiosGetRequest(`/subjects/`, handleSuccess, (error) => {console.log(error)})
     }, [])
 
 
@@ -86,23 +78,17 @@ export default function PartTwo (props) {
      const updateThumb = (newThumbnail) => {
          setThumbnail(newThumbnail)
          console.log(thumbnail)
-
      }
+
      const finalizeThumb = () => {
          setThumbnailStage('uploading')
-         let config = getAxiosConfig()
+
+         const url = `/learning_objects/${props.draftID}`
+
          let fdThumb = new FormData()
          fdThumb.set('learning_object[thumbnail]', thumbnail)
-         axios.put((`${apiUrl}/learning_objects/` + props.draftID), fdThumb, config).then(
-             (response) => {
-                 setThumbnailStage('done')
-                 console.log(response.data)
-                 if ( response.headers['access-token'] ) {
-                     sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                 }
-             },
-             (error) => {console.log(error)}
-         )
+
+         makeAxiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('done')}, (error) => {console.log(error)})
      }
 
      const [thumbnailStage, setThumbnailStage] = useState('default')
diff --git a/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js b/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js
index 617a8e70..21640918 100644
--- a/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js
+++ b/src/Components/UploadPageComponents/PartTwoComponents/CustomCircularProgress.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react';
 import { makeStyles } from '@material-ui/core/styles';
 import CircularProgress from '@material-ui/core/CircularProgress';
diff --git a/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js b/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js
index 261df04c..0c07e151 100644
--- a/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js
+++ b/src/Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react'
 import {StyledFormLabel} from '../StyledComponents.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
diff --git a/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js b/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js
index 35be2ce5..7cce6bf2 100644
--- a/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js
+++ b/src/Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React, {useState} from 'react'
 import {StyledFormLabel} from '../StyledComponents.js'
 import Cropper from '../../Cropper'
diff --git a/src/Components/UploadPageComponents/ReactFileToUpload.js b/src/Components/UploadPageComponents/ReactFileToUpload.js
index d7342d9c..ffbd6a45 100644
--- a/src/Components/UploadPageComponents/ReactFileToUpload.js
+++ b/src/Components/UploadPageComponents/ReactFileToUpload.js
@@ -19,13 +19,13 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useState, useEffect} from 'react'
 import CloudUploadIcon from '@material-ui/icons/CloudUpload';
 import {DottedBox, BlueButton} from './StyledComponents.js';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
+import {getAxiosConfigFromJSON, updateHeaders} from '../HelperFunctions/getAxiosConfig.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
 import axios from 'axios'
 import {apiUrl} from '../../env';
 
 export default function ReactFileToUpload (props) {
-    const [fileToUpload, setFileToUpload] = useState(null); 
+    const [fileToUpload, setFileToUpload] = useState(null);
     const chunkSize = 262144
     const uploadUrl = `${apiUrl}/learning_objects/` + props.draftID + '/chunk'
     const [fileName, setFileName] = useState(null)
@@ -50,7 +50,7 @@ export default function ReactFileToUpload (props) {
 
         for (var i = 0; i < total; i++) {
             let chunk = newFile.slice(currentChunkStartByte, currentChunkFinalByte)
-            let config = getAxiosConfig()
+            let config = getAxiosConfigFromJSON()
             let formData = new FormData()
             formData.append('_chunkFilename', newFile.name);
             formData.append('_chunkIdentifier', chunkIdentifier);
@@ -65,7 +65,7 @@ export default function ReactFileToUpload (props) {
                 const response = await axios.post(uploadUrl, formData, config);
                 console.log(response)
                 if (response.headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+                    updateHeaders(response.headers)
                 }
                 remainingBytes = newFile.size - currentChunkFinalByte;
                 if (currentChunkFinalByte === newFile.size) {
diff --git a/src/Components/UploadPageComponents/SendInfo.js b/src/Components/UploadPageComponents/SendInfo.js
index c931c5ba..166d9894 100644
--- a/src/Components/UploadPageComponents/SendInfo.js
+++ b/src/Components/UploadPageComponents/SendInfo.js
@@ -1,9 +1,25 @@
-import axios from 'axios'
-import {apiUrl} from '../../env';
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 
 export function SendInfo (fieldName, payload, draftID) {
-    console.log('fieldName', fieldName, 'payload', payload, 'draftID', draftID)
     const key = fieldName
     let value = payload
     if (key === "tags") {
@@ -18,23 +34,8 @@ export function SendInfo (fieldName, payload, draftID) {
         }
     }
     putObject.learning_object[key] = value
-    console.log(putObject)
 
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-        }
-    }
-    config.headers["Access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-    config.headers.Client = sessionStorage.getItem('@portalmec/clientToken')
-    config.headers.Uid = sessionStorage.getItem('@portalmec/uid')
-    axios.put((`${apiUrl}/learning_objects/` + draftID), putObject, config)
-     .then( (response) => {
-        if ( response.headers['access-token'] ) {
-            sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-        }
-        console.log(response)
-    } , (error) => {console.log(error)})
+    const url = `/learning_objects/${draftID}`
 
+    makeAxiosPutRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
 }
diff --git a/src/Components/UploadPageComponents/Stepper.js b/src/Components/UploadPageComponents/Stepper.js
index 2c0a1179..c1f9d40f 100644
--- a/src/Components/UploadPageComponents/Stepper.js
+++ b/src/Components/UploadPageComponents/Stepper.js
@@ -1,3 +1,21 @@
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
 import React from 'react';
 import styled from 'styled-components'
 import PropTypes from 'prop-types';
diff --git a/src/Components/UploadPageComponents/UploadFileWrapper.js b/src/Components/UploadPageComponents/UploadFileWrapper.js
index d93e8d47..4abdcaa0 100644
--- a/src/Components/UploadPageComponents/UploadFileWrapper.js
+++ b/src/Components/UploadPageComponents/UploadFileWrapper.js
@@ -21,7 +21,7 @@ import LinkIcon from '../../img/link_icon.svg'
 import ChooseLink from './ChooseLinkSection.js'
 import {WrapperBox, BlueButton, GrayButton} from './StyledComponents.js';
 import {DottedBox} from './StyledComponents.js';
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
+import {getAxiosConfigFromJSON, updateHeaders, makeAxiosDeleteRequest, makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
 import axios from 'axios'
 import {apiUrl} from '../../env';
@@ -71,7 +71,7 @@ export default function UploadFileWrapper (props) {
         handleNextStage("fileSelected")
         for (var i = 0; i < total; i++) {
             let chunk = newFile.slice(currentChunkStartByte, currentChunkFinalByte)
-            let config = getAxiosConfig()
+            let config = getAxiosConfigFromJSON()
             let formData = new FormData()
             formData.append('_chunkFilename', newFile.name);
             formData.append('_chunkIdentifier', chunkIdentifier);
@@ -86,7 +86,7 @@ export default function UploadFileWrapper (props) {
                 const response = await axios.post(uploadUrl, formData, config);
                 console.log(response)
                 if (response.headers['access-token']) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+                    updateHeaders(response.headers)
                 }
                 setProgress(Math.round((currentChunkFinalByte/newFile.size) * 100))
                 remainingBytes = newFile.size - currentChunkFinalByte;
@@ -112,17 +112,9 @@ export default function UploadFileWrapper (props) {
 
     const handleDelete = () => {
         if (attachmentID != null) {
+            const url = `/learning_objects/${props.draftID}/attachment/${attachmentID}`
 
-        let config = getAxiosConfig()
-        axios.delete( (`${apiUrl}/learning_objects/` + props.draftID + '/attachment/' + attachmentID), config).then(
-            (response) => {
-                console.log(response)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                handleNextStage("default")
-            },
-            (error) => {console.log(error)})
+            makeAxiosDeleteRequest(url, (data) => {handleNextStage("default")}, (error) => {console.log(error)})
         }
     }
 
@@ -148,26 +140,18 @@ export default function UploadFileWrapper (props) {
     };
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
+
     const handleChooseLink = (link) => {
-        let config = getAxiosConfig()
+        const url = `/learning_objects/${props.draftID}`
+
         let payload = {
             "learning_object" : {
                 "id" : props.draftID,
                 "link" : link
             }
         }
-        axios.put((`${apiUrl}/learning_objects/` + props.draftID), payload, config).then(
-            (response) => {
-                console.log(response)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleSnackbar(true)
-            }, (error) => {
-                console.log(error)
-            }
-        )
 
+        makeAxiosPutRequest(url, payload, (data) => {toggleSnackbar(true)}, (error) => {console.log(error)})
     }
 
     switch (stage) {
diff --git a/src/Components/UserCard.js b/src/Components/UserCard.js
deleted file mode 100644
index c8cb4a80..00000000
--- a/src/Components/UserCard.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
diff --git a/src/Components/UserPageComponents/Avatar.js b/src/Components/UserPageComponents/Avatar.js
index afecba14..f5ff994f 100644
--- a/src/Components/UserPageComponents/Avatar.js
+++ b/src/Components/UserPageComponents/Avatar.js
@@ -26,7 +26,7 @@ export default function ProfileAvatar (props) {
     // eslint-disable-next-line
     const {state, dispatch} = useContext(Store)
 
-    const [currentAvatar, setAvatar] = useState(state.currentUser.avatar_file_name)
+    const [currentAvatar, setAvatar] = useState(state.currentUser.avatar)
 
     const [hoverBool, toggleHover] = React.useState(false)
     const handleToggleHover = () => {toggleHover(!hoverBool)}
@@ -34,7 +34,7 @@ export default function ProfileAvatar (props) {
     const [open, toggleOpen] = useState(false)
     const controlModal = () => {toggleOpen(!open)}
 
-    useEffect(() => {setAvatar(state.currentUser.avatar_file_name)}, state.currentUser.avatar_file_name)
+    useEffect(() => {setAvatar(state.currentUser.avatar)}, state.currentUser.avatar)
 
     return (
         <>
diff --git a/src/Components/UserPageComponents/Cover.js b/src/Components/UserPageComponents/Cover.js
index 6fd3c539..14348745 100644
--- a/src/Components/UserPageComponents/Cover.js
+++ b/src/Components/UserPageComponents/Cover.js
@@ -27,7 +27,7 @@ import ModalAlterarCover from '../ModalAlterarCover/ModalAlterarCover.js'
 export default function Cover (props) {
     const {state} = useContext(Store)
 
-    const [currentCover, setCoverImg] = useState(state.currentUser.cover_file_name)
+    const [currentCover, setCoverImg] = useState(state.currentUser.cover)
     const [tempCover, setTempCover] = useState('')
 
     const [open, toggleOpen] = useState(false)
@@ -41,8 +41,8 @@ export default function Cover (props) {
     }
 
     useEffect( () => {
-        setCoverImg(state.currentUser.cover_file_name)
-    }, state.currentUser.cover_file_name)
+        setCoverImg(state.currentUser.cover)
+    }, state.currentUser.cover)
     return (
         <>
             <ModalAlterarCover
diff --git a/src/Pages/EditLearningObjectPage.js b/src/Pages/EditLearningObjectPage.js
index 7f4e39ba..f807d270 100644
--- a/src/Pages/EditLearningObjectPage.js
+++ b/src/Pages/EditLearningObjectPage.js
@@ -25,7 +25,6 @@ import UploadFileWrapper from '../Components/UploadPageComponents/UploadFileWrap
 import Alert from '../Components/Alert.js';
 import Snackbar from '@material-ui/core/Snackbar';
 import {GreyButton, OrangeButton, InfoBox} from '../Components/UploadPageComponents/StyledComponents.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig.js'
 import {Background} from '../Components/UploadPageComponents/StyledComponents'
 import LoadingSpinner from '../Components/LoadingSpinner'
 import NewTitle from '../Components/UploadPageComponents/Forms/NewTitle.js'
@@ -41,7 +40,7 @@ import {LoadingDiv} from '../Components/UploadPageComponents/PartTwo.js'
 import EditThumbnail from '../Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js'
 import DisplayThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js'
 import DragAndDropThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DragAndDropThumbnail'
-
+import {makeAxiosGetRequest, makeAxiosDeleteRequest, makeAxiosPutRequest, makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function EditLearningObjectPage (props) {
     const recursoId = props.match.params.recursoId
@@ -52,23 +51,19 @@ export default function EditLearningObjectPage (props) {
     const [eduStages, setEduStages] = useState([])
     const [subjects, setSubjects] = useState([])
 
+    function handleSuccessfulGet (data) {
+        setLearningObject(data)
+        if(data.thumbnail) {
+            setThumbnail(data.thumbnail)
+            setThumbnailStage('done')
+        }
+        setUpdatedInfo({...updatedInfo, 'id' : data.id})
+        toggleLoading(false)
+    }
+
     useEffect( () => {
-        const config = getAxiosConfig()
-        axios.get( (`${apiUrl}/learning_objects/` + recursoId), config
-            ).then( (response) => {
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                setLearningObject(response.data)
-                if(response.data.thumbnail) {
-                    setThumbnail(response.data.thumbnail)
-                    setThumbnailStage('done')
-                }
-                setUpdatedInfo({...updatedInfo, 'id' : response.data.id})
-                toggleLoading(false)
-            }, (error) => {console.log(error)}
-        )
+        const url = `/learning_objects/${recursoId}`
+        makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
         axios.get(`${apiUrl}/object_types/`).then(
             (response) => {
@@ -99,7 +94,7 @@ export default function EditLearningObjectPage (props) {
             },
             (error) => {console.log(error)}
         )
-    }, [state.currentUser.id])
+    }, [])
 
     const [loading, toggleLoading] = useState(true)
 
@@ -111,58 +106,37 @@ export default function EditLearningObjectPage (props) {
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
 
+    function handleSuccessfulDelete (data) {
+        toggleSnackbar(true)
+        props.history.push("/")
+    }
     const handleDelete = () => {
-        let config = getAxiosConfig()
-        axios.delete((`${apiUrl}/learning_objects/` + learningObject.id), config).then(
-            (response) => {
-                toggleSnackbar(true)
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                props.history.push("/")
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+        const url = `/learning_objects/${learningObject.id}`
+
+        makeAxiosDeleteRequest(url, handleSuccessfulDelete, (error) => {console.log(error)})
     }
 
     const handleUpdateInfo = () => {
-        let config = getAxiosConfig()
-        console.log(updatedInfo)
+        const url = `/learning_objects/${learningObject.id}`
         let payload = {
             "learning_object" : updatedInfo
         }
-        console.log(payload)
-        axios.put((`${apiUrl}/learning_objects/` + learningObject.id), payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data); props.history.goBack()
-            },
-            (error) => {console.log(error)}
-        )
+
+        makeAxiosPutRequest(url, payload, (data) => {props.history.goBack()}, (error) => {console.log(error)})
     }
 
     const handlePost = () => {
-        let config = getAxiosConfig()
-        console.log(updatedInfo)
+        const url = `/learning_objects/${learningObject.id}/publish`
+
         let payload = {
             "learning_object" : updatedInfo
         }
-        console.log(payload)
-        axios.post((`${apiUrl}/learning_objects/` + learningObject.id + '/publish'), payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data);
-                props.history.push('/recurso/' + learningObject.id)
-            },
+
+        makeAxiosPostRequest(url, payload,
+            (data) => {props.history.push( `/recurso/${learningObject.id}`)},
             (error) => {console.log(error)}
         )
+
     }
 
     const [thumbnailStage, setThumbnailStage] = useState('default')
@@ -182,63 +156,31 @@ export default function EditLearningObjectPage (props) {
 
     }
 
+    function handleFinalizeThumb (data) {
+        if(data.thumbnail) {
+            setThumbnail(data.thumbnail)
+            setThumbnailStage('done')
+        }
+    }
+
     const finalizeThumb = () => {
         setThumbnailStage('uploading')
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            }
-        }
-        config.headers["access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-        config.headers.client = sessionStorage.getItem('@portalmec/clientToken')
-        config.headers.uid = sessionStorage.getItem('@portalmec/uid')
+
+        const url = `/learning_objects/${learningObject.id}`
 
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', thumbnail)
-        axios.put((`${apiUrl}/learning_objects/` + learningObject.id), fdThumb, config).then(
-            (response) => {
-                setThumbnailStage('done')
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                if(response.data.thumbnail) {
-                    setThumbnail(response.data.thumbnail)
-                    setThumbnailStage('done')
-                }
-            },
-            () => {
-                setThumbnailStage('default')
-            }
-        )
+
+        makeAxiosPutRequest(url, fdThumb, handleFinalizeThumb, (error) => {setThumbnailStage('default')})
     }
 
     const handleDeleteThumbnail = () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            }
-        }
-        config.headers["access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-        config.headers.client = sessionStorage.getItem('@portalmec/clientToken')
-        config.headers.uid = sessionStorage.getItem('@portalmec/uid')
+        const url = `/learning_objects/${learningObject.id}`
 
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', null)
-        axios.put((`${apiUrl}/learning_objects/` + learningObject.id), fdThumb, config).then(
-            (response) => {
-                setThumbnailStage('default')
-                console.log(response.data)
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-            },
-            (error) => {
-                console.log(error)
-            }
-        )
+
+        makeAxiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('default')}, (error) => {console.log(error)})
     }
 
     const chooseRenderStageThumbnail = () => {
diff --git a/src/Pages/EditProfilePage.js b/src/Pages/EditProfilePage.js
index b91d0c4d..9dfab8da 100644
--- a/src/Pages/EditProfilePage.js
+++ b/src/Pages/EditProfilePage.js
@@ -10,13 +10,11 @@ import Snackbar from '@material-ui/core/Snackbar';
 import {Alert} from '../Components/LoginModal.js'
 import Grid from '@material-ui/core/Grid'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import axios from 'axios'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
-import {apiUrl} from '../env.js'
+import {makeAxiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
 import {Store} from '../Store.js'
 
 export default function EditProfilePage (props) {
-    const {state} = useContext(Store)
+    const {state, dispatch} = useContext(Store)
     const id = state.currentUser.id
 
     // eslint-disable-next-line
@@ -38,62 +36,42 @@ export default function EditProfilePage (props) {
     }
 
     const updateUserInfo = (newUserInfo) => {
-        console.log(newUserInfo)
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/users/` + id), newUserInfo, config
-        ).then (
-            (res) => {
-                console.log(res)
-                if ( res.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', res.headers['access-token'])
-                }
-
-                props.history.push('/perfil')
-
-            },
-            (err) => {
-                console.log(err)
-            }
+        const url = `/users/${id}`
+
+        makeAxiosPutRequest(url, newUserInfo,
+            (data) => {props.history.push('/perfil')},
+            (error) => {console.log(error)}
         )
     }
 
+    function handleSuccessUpdateEmail (data) {
+        let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+
+        auth_headers['uid'] = data.uid
+
+        sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
+
+        const target = state.currentUser
+        const source = {uid : data.uid}
+        dispatch({
+            type : 'USER_UPDATED_EMAIL',
+            currUser : Object.assign(target, source)
+        })
+    }
+
     const updateUserEmail = (newUserInfo) => {
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/users/` + id), newUserInfo, config
-        ).then (
-            (res) => {
-                console.log(res)
-                if ( res.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', res.headers['access-token'])
-                }
-
-                sessionStorage.setItem('@portalmec/uid', res.headers['uid'])
-            },
-            (err) => {
-                console.log(err)
-            }
+        const url = `/users/${id}`
+
+        makeAxiosPutRequest(url, newUserInfo, handleSuccessUpdateEmail, (error) => {console.log(error)}
         )
     }
 
     const updateUserPassword = (newUserInfo) => {
-        let config = getAxiosConfig()
-
-        axios.put( (`${apiUrl}/users/` + id), newUserInfo, config
-        ).then (
-            (res) => {
-                console.log(res)
-                if ( res.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', res.headers['access-token'])
-                }
-
-                handleSnackbar(true)
-                
-            },
-            (err) => {
-                console.log(err)
-            }
+        const url = `/users/${id}`
+
+        makeAxiosPutRequest(url, newUserInfo,
+            (data) => {handleSnackbar(true)},
+            (error) => {console.log(error)}
         )
     }
 
diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js
index 6c2f4538..b95221c5 100644
--- a/src/Pages/PageProfessor.js
+++ b/src/Pages/PageProfessor.js
@@ -6,8 +6,7 @@ import PartTwo from '../Components/PageProfessorComponents/PartTwo.js'
 import PartThree from '../Components/PageProfessorComponents/PartThree.js'
 import SuccessfulRequest from '../Components/PageProfessorComponents/SuccessfulRequest.js'
 import ModalConfirmarProfessor from '../Components/PageProfessorComponents/ModalConfirmarProfessor.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
+import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PageProfessor (props) {
     const {state} = useContext(Store)
@@ -49,7 +48,6 @@ export default function PageProfessor (props) {
     }
 
     const handleBuscarParteUm = (ufAbbreviation, ufName, nomeMunicipio, inep) => {
-        console.log('handleBuscarParteUm: ', ufAbbreviation, ufName, nomeMunicipio, inep)
         setRegisterInformation({...registerInformation,
             school_uf : {
                 abbreviation: (ufAbbreviation ? ufAbbreviation : ''),
@@ -90,27 +88,24 @@ export default function PageProfessor (props) {
         props.history.push('/perfil/atualizacoes')
     }
 
+    function handleSuccessfulSubmit (data) {
+        toggleModal()
+        toggleStepper(false, false, false, true)
+    }
+
     const handleFinalSubmit = () => {
-        //adicionar headers de accessToken
-        axios.post( `${apiUrl}/users/teacher_request`, {
+        const url = `/users/teacher_request`
+
+        const payload = {
             city : registerInformation.school_city.name,
             cpf : registerInformation.teacher_cpf,
             inep_id : registerInformation.inep_code,
             phone : registerInformation.school_phone,
             school : registerInformation.school_name,
             uf : registerInformation.school_uf.name
-        },
-        { headers : {
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid')
-        }}
-        )
-        .then( (response) => {
-            toggleModal()
-            toggleStepper(false, false, false, true)
-        }, (error) => console.log('deu erro')
-    )
+        }
+
+        makeAxiosPostRequest(url, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
     }
 
     return (
@@ -118,7 +113,6 @@ export default function PageProfessor (props) {
         {
             state.userAgreedToPublicationTerms?
             (
-                [
                     <>
                         <ModalConfirmarProfessor open={modalOpen} handleClose={handleModal}
                          info={registerInformation} confirmar = {() => {handleFinalSubmit()}}
@@ -154,7 +148,6 @@ export default function PageProfessor (props) {
                             </div>
                         </div>
                     </>
-                ]
             )
             :
             (
diff --git a/src/Pages/PasswordRecoveryPage.js b/src/Pages/PasswordRecoveryPage.js
index a2691a50..bb918847 100644
--- a/src/Pages/PasswordRecoveryPage.js
+++ b/src/Pages/PasswordRecoveryPage.js
@@ -2,14 +2,12 @@ import React, {useState} from 'react'
 import {BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
 import Paper from '@material-ui/core/Paper';
 import styled from 'styled-components'
-import ValidateUserInput from '../Components/FormValidationFunction.js'
+import ValidateUserInput from '../Components/HelperFunctions/FormValidationFunction.js'
 import Default from '../Components/PasswordRecoveryComponents/Default.js'
 import Success from '../Components/PasswordRecoveryComponents/Success.js'
 import CaseError from '../Components/PasswordRecoveryComponents/Error.js'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import {apiUrl} from '../env';
-import axios from 'axios'
-
+import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PasswordRecoveryPage (props) {
 
@@ -40,18 +38,21 @@ export default function PasswordRecoveryPage (props) {
         setCase(value)
     };
 
+    function handleSuccessfulSubmit (data) {
+        handleChangeSwitch((data.success ? "success" : "error"))
+    }
     const onSubmit = (e) => {
         e.stopPropagation()
+
+        const url = `/auth/password`
+
         const payload = {
             "email" : formEmail.value,
             "redirect_url" : "https://plataformaintegrada.mec.gov.br/recuperar-senha#/alterar-senha"
         }
-        axios.post((`${apiUrl}/auth/password`), payload).then(
-            (response) => {
-                console.log(response)
-                handleChangeSwitch(response.data.success ? "success" : "error")
-            },
-            (error) => {console.log(error)})
+
+        makeAxiosPostRequest(url, payload, handleSuccessfulSubmit, (error) => {console.log(error)})
+
     }
 
 
diff --git a/src/Pages/ProfilePage.js b/src/Pages/ProfilePage.js
deleted file mode 100644
index 6959ad93..00000000
--- a/src/Pages/ProfilePage.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React, {Component} from 'react';
-
-
-class ProfilePage extends Component {
-    render() {
-      return (
-        <h1> Página visulizar prefil de usuário</h1>
-      );
-    }
-  }
-
-export default ProfilePage;
diff --git a/src/Pages/PublicUserPage.js b/src/Pages/PublicUserPage.js
index 6ff59cb4..dda8ee1a 100644
--- a/src/Pages/PublicUserPage.js
+++ b/src/Pages/PublicUserPage.js
@@ -18,8 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useEffect, useState} from 'react'
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../env';
+import {apiDomain} from '../env';
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
 import Grid from '@material-ui/core/Grid';
 import FollowButton from '../Components/ContactButtons/FollowButton.js'
@@ -34,6 +33,7 @@ import TabRede from '../Components/TabPanels/PublicUserPageTabs/TabRede.js'
 import CheckDecagram from '../img/check-decagram-blue.svg'
 import ReportButton from '../Components/ReportButton.js'
 import {HeaderContainer, UserProfileContainer, CoverContainer, UserProfileInfoDiv, StyledTabs, CheckTeacherDiv, RodapeDiv, NavBarContentContainer, BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
+import {axiosAllRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 const RenderFollowContainer = (boolUserFollowed, id, followCount) => {
     return (
@@ -121,38 +121,19 @@ export default function PublicUserPage (props) {
     const handleCollections = (data) => {setCollections(data)}
     /*---------------------------------------------------------*/
 
+    function handleSuccess (responseArr) {
+        fillUserInfo(responseArr[0].data)
+
+        handleLearningObjects(responseArr[1].data)
+
+        handleCollections(responseArr[2].data)
+    }
 
     /*Component Will Mount*/
     useEffect( () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-                'Client': sessionStorage.getItem('@portalmec/clientToken'),
-                'Uid': sessionStorage.getItem('@portalmec/uid'),
-            }
-        }
-        axios.all([
-            axios.get( (`${apiUrl}/users/` + id ), config ),
-            axios.get( (`${apiUrl}/users/` + id + '/learning_objects'), {'Accept': 'application/json','Content-Type':'application/json'}),
-            axios.get( (`${apiUrl}/users/` + id + '/collections'), {'Accept': 'application/json','Content-Type':'application/json'})
-        ])
-        .then( (responseArr) => {
-
-            console.log(responseArr)
-            fillUserInfo(responseArr[0].data)
-
-            console.log(responseArr[1])
-            handleLearningObjects(responseArr[1].data)
-
-            console.log(responseArr[2])
-            handleCollections(responseArr[2].data)
-            },
-            (error) => {
-                console.log('error while running ComponentDidMout')
-            }
-        )
+        const urls = [`/users/${id}`, `/users/${id}/learning_objects`, `/users/${id}/collections`]
+
+        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
     /*---------------------------------------------------------*/
 
diff --git a/src/Pages/ResourcePage.js b/src/Pages/ResourcePage.js
index 546cffcd..8e8585df 100644
--- a/src/Pages/ResourcePage.js
+++ b/src/Pages/ResourcePage.js
@@ -19,8 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useEffect, useState, useContext} from 'react'
 import {Store} from '../Store.js'
 import styled from 'styled-components'
-import axios from 'axios'
-import {apiUrl, apiDomain} from '../env';
+import {apiDomain} from '../env';
 import Grid from '@material-ui/core/Grid';
 import TextoObjeto from '../Components/ResourcePageComponents/TextoObjeto.js'
 import Footer from '../Components/ResourcePageComponents/Footer.js'
@@ -36,7 +35,7 @@ import AppBar from '@material-ui/core/AppBar';
 import ButtonAvaliarRecurso from '../Components/ButtonAvaliarRecurso'
 import ModalAvaliarRecurso from '../Components/ModalAvaliarRecurso'
 import ModalConfirmarCuradoria from '../Components/ModalConfirmarCuradoria'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
+import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 function urlVerify (url) {
     return (url ? url.indexOf("youtu") !== -1 || url.indexOf("vimeo") !== -1 : false)
@@ -48,29 +47,16 @@ export default function LearningObjectPage (props){
     const [carregando, toggle] = useState(true)
     const [recurso, setRecurso] = useState({})
 
+    function handleSuccessfulGet (data) {
+        setRecurso(data)
+        toggle(false)
+    }
     useEffect( () => {
-        let config = {
-            headers : {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-            }
-        }
-        if (state.currentUser.id !== "") {
-            config.headers["Access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-            config.headers.Client = sessionStorage.getItem('@portalmec/clientToken')
-            config.headers.Uid = sessionStorage.getItem('@portalmec/uid')
-        }
+        const url = `/learning_objects/${id}`
 
-        axios.get( (`${apiUrl}/learning_objects/` + id), config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            setRecurso(response.data)
-            toggle(false)
-        }, (error) => {console.log(error);})
-    }, [state.currentUser])
+        makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+
+    }, [])
 
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
@@ -118,15 +104,8 @@ export default function LearningObjectPage (props){
 
     const finalizeCuratorshipFlow = () => {
         handleModalConfirmarCuradoria(false)
-        let config = getAxiosConfig()
-        axios.get( (`${apiUrl}/learning_objects/` + id), config
-        ).then( (response) => {
-            if ( response.headers['access-token'] ) {
-                sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-            }
-            console.log(response)
-            setRecurso(response.data)
-        }, (error) => {console.log(error);})
+        const url = `/learning_objects/${id}`
+        makeAxiosGetRequest(url, (data) => {setRecurso(data)}, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Pages/UploadPage.js b/src/Pages/UploadPage.js
index 8883bcef..41acd6fc 100644
--- a/src/Pages/UploadPage.js
+++ b/src/Pages/UploadPage.js
@@ -17,14 +17,12 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, {useState, useEffect, useContext} from 'react'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Grid from '@material-ui/core/Grid';
 import UploadFileWrapper from '../Components/UploadPageComponents/UploadFileWrapper.js'
 import {Store} from '../Store.js'
 import {InfoBox} from '../Components/UploadPageComponents/StyledComponents.js'
 import Stepper from '../Components/UploadPageComponents/Stepper.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 import PartOne from '../Components/UploadPageComponents/PartOne.js'
 import PartTwo from '../Components/UploadPageComponents/PartTwo.js'
 import PartThree from '../Components/UploadPageComponents/PartThree.js'
@@ -42,19 +40,19 @@ export default function UploadPage (props) {
 
     const [loading, toggleLoading] = useState(true)
     const [draft, setDraft] = useState({})
+    function handleSuccessfulGet (data) {
+        setDraft(data)
+        toggleLoading(false)
+    }
     useEffect( () => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
+
+            const url = `/learning_objects/`
+
             let payload = {}
-            axios.post( (`${apiUrl}/learning_objects/`), payload, config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                setDraft(response.data)
-                toggleLoading(false)
-                console.log(response)
-            }, (error) => {console.log(error)})
+
+            makeAxiosPostRequest(url, payload, handleSuccessfulGet, (error) => {console.log(error)})
+
         }
     }, [])
 
@@ -66,38 +64,33 @@ export default function UploadPage (props) {
 
     const handlePost = () => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
+            const url = `/learning_objects/${draft.id}/publish`
+
             let payload = {}
-            axios.post( (`${apiUrl}/learning_objects/` + draft.id + '/publish'), payload, config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                handleModal(true)
-                console.log(response)
 
-            }, (error) => {console.log(error)})
+            makeAxiosPostRequest(url, payload,
+                (data) => {handleModal(true)},
+                (error) => {console.log(error)}
+            )
+
         }
     }
 
     const handleSubmit = () => {
         if (state.currentUser.id !== "") {
-            const config = getAxiosConfig()
+            const url = `/submissions/`
+
             let payload = {
                 "submission" : {
                     "learning_object_id" : draft.id
                 }
             }
 
-            axios.post( (`${apiUrl}/submissions/`), payload, config
-            ).then( (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                handleModal(true)
-                console.log(response)
+            makeAxiosPostRequest(url, payload,
+                (data) => {handleModal(true)},
+                (error) => {console.log(error)}
+            )
 
-            }, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js
index 92d821b5..d023af93 100644
--- a/src/Pages/UserPage.js
+++ b/src/Pages/UserPage.js
@@ -28,8 +28,6 @@ import TabPanelFavoritos from '../Components/TabPanels/UserPageTabs/PanelFavorit
 import TabPanelColecoes from '../Components/TabPanels/UserPageTabs/PanelColecoes.js'
 import TabPanelRede from '../Components/TabPanels/UserPageTabs/PanelRede.js'
 import TabPanelCuradoria from '../Components/TabPanels/UserPageTabs/PanelCuradoria.js'
-import axios from 'axios'
-import {apiUrl} from '../env';
 import Grid from '@material-ui/core/Grid';
 import {HeaderContainer, UserProfileContainer, CheckTeacherDiv, StyledTabs, RodapeDiv, NavBarContentContainer, BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
 
@@ -38,23 +36,7 @@ import ProfileAvatar from '../Components/UserPageComponents/Avatar.js'
 import UserInfo from '../Components/UserPageComponents/UserInfo.js'
 import EditProfileButton from '../Components/UserPageComponents/EditProfileButton.js'
 import SubmitterStatus from '../Components/UserPageComponents/SubmitterStatus.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig.js'
-
-const GetHeaderConfig = () => {
-
-    let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-            'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
-            'Client': sessionStorage.getItem('@portalmec/clientToken'),
-            'Uid': sessionStorage.getItem('@portalmec/uid'),
-        }
-    }
-    // {/*'Host': 'api.portalmec.c3sl.ufpr.br',
-    // 'Cookie': ''*/}
-    return config
-}
+import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function UserPage (props){
     const {state, dispatch} = useContext(Store)
@@ -70,31 +52,25 @@ export default function UserPage (props){
         setTabValue(newValue)
     }
 
+    function handleSuccessfulGet (data) {
+        dispatch ( {
+            type: 'GET_USER',
+            user: data
+            }
+        )
+
+        if((data.role_ids.includes(4))) {
+            setTabs([
+                'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede', 'Curadoria'
+            ])
+        }
+    }
+
     useEffect( () => {
-        let config = getAxiosConfig()
         if (id !== '') {
-            axios.get( (`${apiUrl}/users/` + id), config)
-            .then( (response) => {
-                console.log(response)
-                dispatch ( {
-                    type: 'GET_USER',
-                    user: response.data
-                    }
-                )
-
-                if((response.data.role_ids.includes(4))) {
-                    setTabs([
-                        'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede', 'Curadoria'
-                    ])
-                }
-            }).catch( (error) => {
-                if (error.statusText === 401) {
-                    console.log('erro 401')
-                    //validate Token
-
-                    //retry request
-                }
-            })
+            const url = `/users/${id}`
+
+            makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
         }
     }, [])
 
@@ -115,7 +91,7 @@ export default function UserPage (props){
                         <ModalAlterarAvatar
                             open={modalOpen}
                             handleClose={() => {toggleModal(false)}}
-                            userAvatar={state.currentUser.avatar_file_name}
+                            userAvatar={state.currentUser.avatar}
                         />
 
                     <BackgroundDiv>
@@ -164,17 +140,17 @@ export default function UserPage (props){
 
                                 <Grid item xs={12}>
                                     {tabValue === 0 &&
-                                        <TabPanelAtividades id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelAtividades id={id}/>}
                                     {tabValue === 1 &&
-                                        <TabPanelMeusRecursos id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelMeusRecursos id={id}/>}
                                     {tabValue === 2 &&
-                                        <TabPanelFavoritos id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelFavoritos id={id}/>}
                                     {tabValue === 3 &&
-                                        <TabPanelColecoes id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelColecoes id={id}/>}
                                     {tabValue === 4 &&
-                                        <TabPanelRede id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelRede id={id}/>}
                                     {tabValue === 5 &&
-                                        <TabPanelCuradoria id={id} config={GetHeaderConfig()}/>}
+                                        <TabPanelCuradoria id={id}/>}
                                 </Grid>
                             </Grid>
                         </BackgroundDiv>
diff --git a/src/Store.js b/src/Store.js
index d53af64d..6beb65ee 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -39,8 +39,8 @@ const initialState = {
       id : '',
       name : '',
       email : '',
-      avatar_file_name : '',
-      cover_file_name : '',
+      avatar : '',
+      cover : '',
       uid : '',
       follows_count : 0,
       collections_count : 0,
@@ -83,7 +83,19 @@ function reducer(state, action) {
         return {
             ...state,
             userIsLoggedIn:action.userLoggedOut,
-            currentUser:action.login,
+            currentUser:{
+                askTeacherQuestion : false,
+                id : '',
+                name : '',
+                email : '',
+                avatar_file_name : '',
+                cover_file_name : '',
+                uid : '',
+                follows_count : 0,
+                collections_count : 0,
+                submitter_request : 'default',
+                roles : []
+            },
             userAgreedToPublicationTerms: false,
             userAgreedToPublicationPermissions: false
         }
@@ -136,6 +148,11 @@ function reducer(state, action) {
             ...state,
             currentUser:action.user
       }
+    case 'USER_UPDATED_EMAIL':
+        return {
+            ...state,
+            currentUser : action.currUser
+        }
     default:
       return state
   }
-- 
GitLab


From fc53cf93c5b5637cce75b2bc2ead324260757d42 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Fri, 29 Jan 2021 11:35:26 -0300
Subject: [PATCH 26/83] fixed merge error

---
 src/Components/HelperFunctions/getAxiosConfig.js         | 2 +-
 src/Components/TabPanels/UserPageTabs/PanelAtividades.js | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 0286868f..0d83716d 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -11,7 +11,7 @@ export const getAxiosConfig = () => {
     config.headers["Access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
     config.headers.Client = sessionStorage.getItem('@portalmec/clientToken')
     config.headers.Uid = sessionStorage.getItem('@portalmec/uid')
-
+    config.headers.Expiry = sessionStorage.getItem('@portalmec/expiry')
     return config
 }
 
diff --git a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
index 770b03b5..76a45f83 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
@@ -50,6 +50,7 @@ export default function TabPanelAtividades (props) {
         const url = `/feed?offset=0&limit=30`
 
         makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+
     }, [])
 
     return (
-- 
GitLab


From 1e042518114f2d99f1a6b116743f51eb95963ee7 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Fri, 29 Jan 2021 11:35:59 -0300
Subject: [PATCH 27/83] fixed load more than twelve not working

---
 .../TabPanels/PublicUserPageTabs/TabRecursos.js  | 16 +++++++++++++++-
 src/Pages/PublicUserPage.js                      |  2 +-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
index 6b0be8a7..2c17c5e4 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
@@ -21,6 +21,7 @@ import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
 import {ButtonMostrarMaisRecurso} from '../PanelComponents/ButtonsArea'
+import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabRecursos (props) {
     const [arr, setArr] = useState([])
@@ -32,9 +33,22 @@ export default function TabRecursos (props) {
         setSlice(props.learningObjs.slice(0,4))
     }, [])
 
+    function handleSuccess (data) {
+        setArr(data)
+        setSlice(data)
+    }
     const showMore = (quantity) => {
         var sliceLength = objsSlice.length
-        handleSlice(arr.slice(0, sliceLength + quantity))
+        var newLength = sliceLength + quantity
+
+        if (newLength > 12) {
+            const url = `/users/${props.id}/learning_objects?limit=${newLength}$offset=4`
+            makeAxiosGetRequest(url,handleSuccess,(error) => {console.log(error)})
+        }
+        else {
+            handleSlice(arr.slice(0, sliceLength + quantity))
+        }
+
     }
 
     return (
diff --git a/src/Pages/PublicUserPage.js b/src/Pages/PublicUserPage.js
index dda8ee1a..8a7b23bb 100644
--- a/src/Pages/PublicUserPage.js
+++ b/src/Pages/PublicUserPage.js
@@ -189,7 +189,7 @@ export default function PublicUserPage (props) {
                         {tabValue === 0 &&
                             <TabInicio id={id} user={userData} learningObjs={learningObjArr} collections={collectionsArr}/>}
                         {tabValue === 1 &&
-                            <TabRecursos count={userData.learning_objects_count} learningObjs={learningObjArr}/>}
+                            <TabRecursos count={userData.learning_objects_count} learningObjs={learningObjArr} id={id}/>}
                         {tabValue === 2 &&
                             <TabColecoes count={userData.collections_count} collections={collectionsArr}
                                 />}
-- 
GitLab


From 700ab88602596b583a17522dda7776853b35c8a7 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Fri, 29 Jan 2021 12:03:53 -0300
Subject: [PATCH 28/83] Improve search layout

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 .../SearchExpansionPanel/ExpansionPanel.css   |  7 ++++
 .../SearchExpansionPanel.js                   |  4 ++-
 src/Pages/Search.js                           | 35 +++++++++++--------
 3 files changed, 30 insertions(+), 16 deletions(-)
 create mode 100644 src/Components/SearchExpansionPanel/ExpansionPanel.css

diff --git a/src/Components/SearchExpansionPanel/ExpansionPanel.css b/src/Components/SearchExpansionPanel/ExpansionPanel.css
new file mode 100644
index 00000000..c96e8361
--- /dev/null
+++ b/src/Components/SearchExpansionPanel/ExpansionPanel.css
@@ -0,0 +1,7 @@
+.MuiAccordionActions-root{
+    display: block !important;
+}
+.MuiListItemIcon-root{
+    min-width: 30px !important;
+}
+
diff --git a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
index 92a2d39a..6a8dea5d 100644
--- a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
+++ b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
@@ -13,6 +13,8 @@ import { TextField } from "@material-ui/core";
 import Grid from '@material-ui/core/Grid'; 
 import CircularProgress from '@material-ui/core/CircularProgress';
 
+import './ExpansionPanel.css'
+
 const ExpansionPanel = withStyles({
   root: {
     border: "1px solid rgba(0, 0, 0, .125)",
@@ -101,7 +103,7 @@ export default function SearchExpansionPanel(props) {
                 style={{
                   fontSize: "18px",
                   textTransform: "uppercase",
-                  fontWeight: "500"
+                  fontWeight: "500",
                 }}
               >
                 Filtros
diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index ae2c068e..67be2704 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -141,7 +141,7 @@ export default function Search(props) {
   return (
     <div style={{ backgroundColor: "#f4f4f4" }}>
       <Principal>
-        <BreadCrumbsDiv>
+        <BreadCrumbsDiv style={{margin:"15px 2%", }}>
           <StyledBreadCrumbs>
             <Link to="/">Página Inicial</Link>
             <span>Busca</span>
@@ -152,7 +152,7 @@ export default function Search(props) {
           <HeaderFilters elevation={4} square>
             <Grid container spacing={0} style={{ height: "100%" }}>
               <Grid item xs style={{display:"flex", flexDirection:"column", justifyContent:"center", paddingLeft:20}}>
-                <div style={{ marginRight:5 }}>
+                <div style={{ marginRight:5, marginTop:15 }}>
                   <div className="textInfo">
                     <span  style={{ fontWeight:"bold" }}>
                       MOSTRAR
@@ -171,7 +171,7 @@ export default function Search(props) {
               {
                 optionResult === "User" ? null :
                   <Grid item xs style={{display: "flex", flexDirection: "column", justifyContent: "center", paddingRight: 20,}}>
-                    <div style={{marginLeft:5}}>
+                    <div style={{marginLeft:5, marginTop:15}}>
                       <div className="textInfo">
                         <span style={{ fontWeight:"bold" }}>
                           ORDENAR POR
@@ -187,14 +187,15 @@ export default function Search(props) {
                     </div>
                   </Grid>
               }
+              <Grid item xs={12}>
+                <div style={{display: "flex", flexDirection: "column", justifyContent: "center" }}>
+                  <div style={{textAlign: "center", paddingTop: 10, fontWeight:"bolder"}}>
+                    Exibindo {totalResults === 0 ? 0 : resultsPerPage} resultados de {totalResults} encontrados
+                  </div>
+                </div>
+              </Grid>
             </Grid>
           </HeaderFilters>
-
-          <div style={{display: "flex", flexDirection: "column", justifyContent: "center" }}>
-            <div style={{textAlign: "center", paddingTop: 10, paddingBottom:30, fontWeight:"bolder"}}>
-              Exibindo {totalResults === 0 ? 0 : resultsPerPage} resultados de {totalResults} encontrados
-            </div>
-          </div>
         
           {
             isloading ? <LoadingSpinner text="Carregando..." /> :
@@ -238,15 +239,19 @@ export default function Search(props) {
 
                 optionResult === "LearningObject" ? (
                   <GridBuscaResource container spacing={2}>
-                    <Grid item xs={12} md={3}>
-                      <Paper elevation={4} square>
-                          <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
-                      </Paper>
+                    <Grid item xs={12} md={2}>
+                      <Grid container >
+                        <Grid item xs={12}>
+                          <Paper elevation={4} square>
+                              <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
+                          </Paper>
+                        </Grid>
+                      </Grid>
                     </Grid>
                     <Grid item xs>
                       <Grid container spacing={2}>
                         {resultsResource.map((card) => (
-                          <Grid item  xs key={card.id}>
+                          <Grid item xs={12} sm={6} md={4} lg={3} key={card.id}>
                             <ResourceCardFunction
                               avatar={card.publisher.avatar}
                               id={card.id}
@@ -391,7 +396,7 @@ const GridBuscaUser = styled(Grid)`
 `;
 
 const HeaderFilters = styled(Paper)`
-  height: 110px;
+  height: 150px;
   text-align: center;
   background-color: #fff;
   margin-bottom: 30px;
-- 
GitLab


From 9eecc7a850567b2e04043e89f2b81c35917dcc3d Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 1 Feb 2021 10:21:10 -0300
Subject: [PATCH 29/83] changed the name of all axios helper functions

---
 src/Components/AreasSubPages.js                    |  6 +++---
 src/Components/ColCardPublicOptions.js             |  4 ++--
 src/Components/CollectionCardFunction.js           |  6 +++---
 src/Components/CollectionCommentSection.js         |  4 ++--
 src/Components/Comment.js                          |  6 +++---
 src/Components/ContactButtons/FollowButton.js      |  6 +++---
 src/Components/ContactButtons/FollowingButton.js   |  4 ++--
 src/Components/ContactCardOptions.js               |  4 ++--
 src/Components/ContactForm.js                      |  4 ++--
 src/Components/CriarColecaoForm.js                 |  4 ++--
 src/Components/EditarColecaoForm.js                |  6 +++---
 src/Components/Firulas.js                          |  4 ++--
 src/Components/FollowCollectionButton.js           |  8 ++++----
 src/Components/GuardarModal.js                     |  6 +++---
 src/Components/HelperFunctions/getAxiosConfig.js   |  8 ++++----
 src/Components/IframeOverlay/DrawerContent.js      |  4 ++--
 src/Components/MenuList.js                         |  4 ++--
 src/Components/MobileDrawerMenu.js                 |  4 ++--
 .../ModalAlterarAvatar/ComponentAlterarAvatar.js   |  4 ++--
 .../ModalAlterarCover/ComponentAlterarCover.js     |  4 ++--
 src/Components/ModalConfirmarCuradoria.js          |  4 ++--
 src/Components/ModalExcluirColecao.js              |  4 ++--
 src/Components/Notifications.js                    |  4 ++--
 src/Components/NotificationsInner.js               |  4 ++--
 src/Components/PublicationPermissionsContent.js    |  4 ++--
 src/Components/ReportModal.js                      |  4 ++--
 src/Components/ResourceCardFunction.js             |  4 ++--
 .../ResourcePageComponents/CommentForm.js          |  4 ++--
 .../ResourcePageComponents/CommentsArea.js         |  4 ++--
 .../ResourcePageComponents/TextoObjeto.js          |  4 ++--
 .../TabPanels/PublicUserPageTabs/TabRecursos.js    |  4 ++--
 .../TabPanels/UserPageTabs/ModalExcluirConta.js    |  4 ++--
 .../TabPanels/UserPageTabs/PanelAtividades.js      |  4 ++--
 .../TabPanels/UserPageTabs/PanelCuradoria.js       |  4 ++--
 .../UploadPageComponents/FileUploadStage.js        |  4 ++--
 .../UploadPageComponents/ModalCancelar.js          |  4 ++--
 src/Components/UploadPageComponents/PartOne.js     |  6 +++---
 src/Components/UploadPageComponents/PartThree.js   |  4 ++--
 src/Components/UploadPageComponents/PartTwo.js     |  8 ++++----
 src/Components/UploadPageComponents/SendInfo.js    |  4 ++--
 .../UploadPageComponents/UploadFileWrapper.js      |  6 +++---
 src/Pages/EditLearningObjectPage.js                | 14 +++++++-------
 src/Pages/EditProfilePage.js                       |  8 ++++----
 src/Pages/PageProfessor.js                         |  4 ++--
 src/Pages/PasswordRecoveryPage.js                  |  4 ++--
 src/Pages/ResourcePage.js                          |  6 +++---
 src/Pages/UploadPage.js                            |  8 ++++----
 src/Pages/UserPage.js                              |  4 ++--
 48 files changed, 120 insertions(+), 120 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index b61d0937..2988d77c 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -28,7 +28,7 @@ import colecoes from "../img/ilustra_colecoes.png";
 import Grid from "@material-ui/core/Grid";
 import ResourceCardFunction from "./ResourceCardFunction.js";
 import CollectionCardFunction from "./CollectionCardFunction.js";
-import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
 
 const areaStyle = {
   paddingTop: "5px",
@@ -51,7 +51,7 @@ class ReqResources extends Component {
 
 componentDidMount() {
     const url = `/learning_objects?limit=12&sort=["published_at", "desc"]`
-    makeAxiosGetRequest(url, (data) => {this.setState({ resources: data })}, (error) => {console.log(error)})
+    axiosGetRequest(url, (data) => {this.setState({ resources: data })}, (error) => {console.log(error)})
 }
   render() {
     var row1 = this.state.resources.slice(0, 4);
@@ -138,7 +138,7 @@ class ReqCollections extends Component {
   componentDidMount() {
       const url = `/collections?limit=12&sort=["updated_at", "desc"]`
 
-      makeAxiosGetRequest(url, (data) => {this.setState({ collections: data })}, (error) => {console.log(error)})
+      axiosGetRequest(url, (data) => {this.setState({ collections: data })}, (error) => {console.log(error)})
   }
   render() {
     var row1 = this.state.collections.slice(0, 4);
diff --git a/src/Components/ColCardPublicOptions.js b/src/Components/ColCardPublicOptions.js
index 9538aa24..1e386410 100644
--- a/src/Components/ColCardPublicOptions.js
+++ b/src/Components/ColCardPublicOptions.js
@@ -27,7 +27,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import styled from 'styled-components'
 import ErrorIcon from '@material-ui/icons/Error';
 import ReportModal from './ReportModal.js'
-import {makeAxiosDeleteRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosDeleteRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function ColCardPublicOptions (props) {
   const [anchorEl, setAnchorEl] = React.useState(null);
@@ -45,7 +45,7 @@ export default function ColCardPublicOptions (props) {
 
   const handleUnfollow = () => {
 
-      makeAxiosDeleteRequest(`/collections/${props.id}/follow`, (data) => {console.log(data)}, (error) => {console.log(error)})
+      axiosDeleteRequest(`/collections/${props.id}/follow`, (data) => {console.log(data)}, (error) => {console.log(error)})
   }
 
   return (
diff --git a/src/Components/CollectionCardFunction.js b/src/Components/CollectionCardFunction.js
index a0b1107e..7c80e7b4 100644
--- a/src/Components/CollectionCardFunction.js
+++ b/src/Components/CollectionCardFunction.js
@@ -35,7 +35,7 @@ import LockIcon from '@material-ui/icons/Lock';
 import ColCardOwnerOptions from './ColCardOwnerOptions.js'
 import ColCardPublicOptions from './ColCardPublicOptions'
 import {Link} from 'react-router-dom';
-import {makeAxiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function CollectionCardFunction (props) {
     const {state} = useContext(Store)
@@ -53,7 +53,7 @@ export default function CollectionCardFunction (props) {
         setLikesCount(data.count)
     }
     const handleLike = () => {
-        makeAxiosPutRequest(`/collections/${props.id}/like`, {}, handleSuccessLike, (error) => {console.log(error)})
+        axiosPutRequest(`/collections/${props.id}/like`, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const [followingHover, handleFollowingHover] = useState(false)
@@ -66,7 +66,7 @@ export default function CollectionCardFunction (props) {
         handleToggleUserFollowingCol()
     }
     const handleFollow = () => {
-        makeAxiosPutRequest(`/collections/${props.id}/follow`, {}, handleSuccessFollow, (error) => {console.log(error)})
+        axiosPutRequest(`/collections/${props.id}/follow`, {}, handleSuccessFollow, (error) => {console.log(error)})
     }
 
     const RenderFollowButton = () => {
diff --git a/src/Components/CollectionCommentSection.js b/src/Components/CollectionCommentSection.js
index 95ea693a..9aba6d1e 100644
--- a/src/Components/CollectionCommentSection.js
+++ b/src/Components/CollectionCommentSection.js
@@ -27,7 +27,7 @@ import Comment from './Comment.js';
 import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 import Comentario from '../img/comentarios.png';
-import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function CollectionCommentSection(props) {
 	const [post_snack_open, setPostSnackOpen] = useState(false);
@@ -113,7 +113,7 @@ export default function CollectionCommentSection(props) {
 	}
 
 	useEffect(() => {
-        makeAxiosGetRequest(`/collections/${props.id}/reviews`, (data) => {setReviews(data)}, (error) => {console.log(error)})
+        axiosGetRequest(`/collections/${props.id}/reviews`, (data) => {setReviews(data)}, (error) => {console.log(error)})
 	}, [render_state]);
 
 	return (
diff --git a/src/Components/Comment.js b/src/Components/Comment.js
index 374ec115..1d9c0058 100644
--- a/src/Components/Comment.js
+++ b/src/Components/Comment.js
@@ -31,7 +31,7 @@ import TextField from "@material-ui/core/TextField";
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
 import ModalExcluir from './ModalExcluirComentario.js'
-import {makeAxiosPutRequest, makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPutRequest, axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Comment (props) {
 
@@ -93,7 +93,7 @@ export default function Comment (props) {
                     "review_ratings_attributes" : props.reviewRatings
                 }
             }
-            makeAxiosPutRequest(`/learning_objects/${props.objectID}/reviews/`, payload, handleOnSuccessfulComment, (error) => {console.log(error)})
+            axiosPutRequest(`/learning_objects/${props.objectID}/reviews/`, payload, handleOnSuccessfulComment, (error) => {console.log(error)})
 
         }
     }
@@ -105,7 +105,7 @@ export default function Comment (props) {
 
     const deleteComment = () => {
 
-        makeAxiosDeleteRequest(`/learning_objects/${props.objectID}/reviews/${props.reviewID}`, handleSuccessDeleteComment, (error) => {console.log(error)})
+        axiosDeleteRequest(`/learning_objects/${props.objectID}/reviews/${props.reviewID}`, handleSuccessDeleteComment, (error) => {console.log(error)})
 
         toggleModal(false)
 
diff --git a/src/Components/ContactButtons/FollowButton.js b/src/Components/ContactButtons/FollowButton.js
index bb3f2ac2..e2ddc04a 100644
--- a/src/Components/ContactButtons/FollowButton.js
+++ b/src/Components/ContactButtons/FollowButton.js
@@ -20,7 +20,7 @@ import React from 'react'
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
 import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
-import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowButton (props) {
 
@@ -31,7 +31,7 @@ export default function FollowButton (props) {
     const handleFollow = (followerID) => {
         if (followerID !== undefined) {
             const url = `/users/${followerID}/follow/`
-            makeAxiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
+            axiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
         }
     }
 
@@ -51,7 +51,7 @@ export function NoIcon (props) {
     const handleFollow = (followerID) => {
         if (followerID !== undefined) {
             const url = `/users/${followerID}/follow/`
-            makeAxiosPutRequest(url, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
+            axiosPutRequest(url, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Components/ContactButtons/FollowingButton.js b/src/Components/ContactButtons/FollowingButton.js
index b76f6291..cbe0b692 100644
--- a/src/Components/ContactButtons/FollowingButton.js
+++ b/src/Components/ContactButtons/FollowingButton.js
@@ -21,7 +21,7 @@ import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
 import FollowingIcon from '../../img/how_to_reg-24px.png'
 import ModalConfirmarUnfollow from '../ModalConfirmarUnfollow.js'
-import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowingButton (props) {
 
@@ -44,7 +44,7 @@ export default function FollowingButton (props) {
     const handleUnfollowPartTwo = () => {
         const url = `/users/${unfollowID}/follow/`
 
-        makeAxiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
+        axiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ContactCardOptions.js b/src/Components/ContactCardOptions.js
index 0f122c0d..3a5ed17d 100644
--- a/src/Components/ContactCardOptions.js
+++ b/src/Components/ContactCardOptions.js
@@ -26,7 +26,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import OpenIcon from '@material-ui/icons/OpenInNew';
 import ReportIcon from '@material-ui/icons/Error';
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
-import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from './HelperFunctions/getAxiosConfig'
 import ReportModal from './ReportModal.js'
 import {Link} from 'react-router-dom'
 
@@ -43,7 +43,7 @@ export default function SimpleMenu(props) {
     }
     const handleFollow = (followerID) => {
 
-        makeAxiosPutRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
+        axiosPutRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
     }
 
     const [reportModal, toggleReportModal] = useState(false)
diff --git a/src/Components/ContactForm.js b/src/Components/ContactForm.js
index 7231f6d3..914dd3ab 100644
--- a/src/Components/ContactForm.js
+++ b/src/Components/ContactForm.js
@@ -19,7 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, { useState } from 'react';
 import styled from 'styled-components';
 import FormInput from "../Components/FormInput.js"
-import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 const Button = styled.button`
 
@@ -190,7 +190,7 @@ const Button = styled.button`
                   message: mensagem.dict.value
               }
             }
-            makeAxiosPostRequest(`/contacts`, payload, (data) => {limpaTudo()}, (error) => {console.log(error)})
+            axiosPostRequest(`/contacts`, payload, (data) => {limpaTudo()}, (error) => {console.log(error)})
   }
 }
 
diff --git a/src/Components/CriarColecaoForm.js b/src/Components/CriarColecaoForm.js
index 86eb3f78..4fd1fefe 100644
--- a/src/Components/CriarColecaoForm.js
+++ b/src/Components/CriarColecaoForm.js
@@ -25,7 +25,7 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function CriarColecaoForm (props) {
     const {state} = useContext(Store)
@@ -77,7 +77,7 @@ export default function CriarColecaoForm (props) {
                     "privacy" : finalRadioValue
                 }
             }
-            makeAxiosPostRequest( `/collections/`, payload, handleSuccess, (error) =>{console.log(error)})
+            axiosPostRequest( `/collections/`, payload, handleSuccess, (error) =>{console.log(error)})
 
         }
     }
diff --git a/src/Components/EditarColecaoForm.js b/src/Components/EditarColecaoForm.js
index 0f1a5d43..2b21b04c 100644
--- a/src/Components/EditarColecaoForm.js
+++ b/src/Components/EditarColecaoForm.js
@@ -25,7 +25,7 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import {makeAxiosGetRequest, makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosGetRequest, axiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function EditarColecaoForm (props) {
     const {state} = useContext(Store)
@@ -37,7 +37,7 @@ export default function EditarColecaoForm (props) {
     }
 
     useEffect(() => {
-        makeAxiosGetRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
+        axiosGetRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
     }, [])
 
     const [value, setValue] = useState(-1);
@@ -88,7 +88,7 @@ export default function EditarColecaoForm (props) {
                 }
             }
 
-            makeAxiosPutRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
+            axiosPutRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
         }
     }
 
diff --git a/src/Components/Firulas.js b/src/Components/Firulas.js
index 0c65a12c..20d6c101 100644
--- a/src/Components/Firulas.js
+++ b/src/Components/Firulas.js
@@ -4,7 +4,7 @@ import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import {LikeCounter, ButtonNoWidth} from '../Components/ResourceCardFunction.js'
 import FavoriteIcon from '@material-ui/icons/Favorite';
-import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Firulas (props) {
     const [liked, setLiked] = useState(props.liked)
@@ -13,7 +13,7 @@ export default function Firulas (props) {
         setLiked(!liked)
     }
     const handleLike = () => {
-        makeAxiosPutRequest(`/learning_objects/${props.recursoId}/like/`, {}, handleSuccess, (error) => {console.log(error)})
+        axiosPutRequest(`/learning_objects/${props.recursoId}/like/`, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/FollowCollectionButton.js b/src/Components/FollowCollectionButton.js
index 25aad567..5cea848a 100644
--- a/src/Components/FollowCollectionButton.js
+++ b/src/Components/FollowCollectionButton.js
@@ -22,7 +22,7 @@ import CheckIcon from '@material-ui/icons/Check';
 import AddIcon from '@material-ui/icons/Add';
 import styled from 'styled-components';
 import SignUpModal from './SignUpModal.js';
-import {makeAxiosGetRequest, makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosGetRequest, axiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function FollowCollectionButton(props) {
 	const [icon, setIcon] = useState(<AddIcon fontSize="large" />);
@@ -45,7 +45,7 @@ export default function FollowCollectionButton(props) {
     }
 	useEffect(() => {
 		const url = `/users/${props.user_id}/following/Collection`
-        makeAxiosGetRequest(url, handleSuccessGet, (error) => console.log(error))
+        axiosGetRequest(url, handleSuccessGet, (error) => console.log(error))
 	}, []);
 
 	//handleMouse{Enter, Leave} only do anything when user follows given collection:
@@ -83,9 +83,9 @@ export default function FollowCollectionButton(props) {
 		if (!props.user_id)
 			setSignUpOpen(true);
 		else if (!following) {
-            makeAxiosPutRequest(url, {}, handleSuccessfulFollow, (error) => {console.log(error)})
+            axiosPutRequest(url, {}, handleSuccessfulFollow, (error) => {console.log(error)})
 		} else {
-            makeAxiosPutRequest(url, {}, handleSuccessfulUnfollow, (error) => {console.log(error)})
+            axiosPutRequest(url, {}, handleSuccessfulUnfollow, (error) => {console.log(error)})
 		}
 	};
 
diff --git a/src/Components/GuardarModal.js b/src/Components/GuardarModal.js
index 2f66ee51..728ba0b8 100644
--- a/src/Components/GuardarModal.js
+++ b/src/Components/GuardarModal.js
@@ -30,7 +30,7 @@ import LockIcon from '@material-ui/icons/Lock';
 import LoadingSpinner from './LoadingSpinner.js'
 import CriarColecaoForm from './CriarColecaoForm.js'
 import SnackbarComponent from './SnackbarComponent'
-import {makeAxiosGetRequest, makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosGetRequest, axiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -57,7 +57,7 @@ export default function ReportModal (props) {
 
             const url = `/users/${id}/collections/`
 
-            makeAxiosGetRequest(url, handleSuccessGetCols, (error) => {console.log('error')})
+            axiosGetRequest(url, handleSuccessGetCols, (error) => {console.log('error')})
         }
     }
 
@@ -74,7 +74,7 @@ export default function ReportModal (props) {
                 "items" : [ {"id":props.recursoId, "type":"LearningObject"} ]
             }
         }
-        makeAxiosPostRequest( url, payload, handleSuccessPostToCol, (error) => {console.log(error)})
+        axiosPostRequest( url, payload, handleSuccessPostToCol, (error) => {console.log(error)})
 
     }
 
diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 0d83716d..cc75bd2f 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -43,7 +43,7 @@ export function updateHeaders (newHeaders) {
     sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
 }
 
-export const makeAxiosGetRequest = (url, onSuccess, onError) => {
+export const axiosGetRequest = (url, onSuccess, onError) => {
     let config = getAxiosConfigFromJSON()
 
     axios.get( (`${apiUrl}${url}`), config ).then(
@@ -61,7 +61,7 @@ export const makeAxiosGetRequest = (url, onSuccess, onError) => {
     )
 }
 
-export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
+export const axiosDeleteRequest = (url, onSuccess, onError) => {
     let config = getAxiosConfigFromJSON()
 
     axios.delete( (`${apiUrl}${url}`), config ).then(
@@ -79,7 +79,7 @@ export const makeAxiosDeleteRequest = (url, onSuccess, onError) => {
     )
 }
 
-export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
+export const axiosPutRequest = (url, payload, onSuccess, onError) => {
     let config = getAxiosConfigFromJSON()
 
     axios.put( (`${apiUrl}${url}`), payload, config ).then(
@@ -97,7 +97,7 @@ export const makeAxiosPutRequest = (url, payload, onSuccess, onError) => {
     )
 }
 
-export const makeAxiosPostRequest = (url, payload, onSuccess, onError) => {
+export const axiosPostRequest = (url, payload, onSuccess, onError) => {
     let config = getAxiosConfigFromJSON()
 
     axios.post( (`${apiUrl}${url}`), payload, config ).then(
diff --git a/src/Components/IframeOverlay/DrawerContent.js b/src/Components/IframeOverlay/DrawerContent.js
index 461cca83..1a89a937 100644
--- a/src/Components/IframeOverlay/DrawerContent.js
+++ b/src/Components/IframeOverlay/DrawerContent.js
@@ -4,7 +4,7 @@ import Grid from '@material-ui/core/Grid';
 import SearchInput from './SearchInput.js';
 import ResourceCard from './ResourceCard.js';
 import SmallFooter from './SmallFooter.js';
-import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function DrawerContent(props) {
 	const [resources, setResources] = useState([]);
@@ -16,7 +16,7 @@ export default function DrawerContent(props) {
         const url = `/search?
 			page=0&results_per_page=5&query=${query}&search_class=LearningObject`
 
-        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 	}
 
 	useEffect(() => {
diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js
index 3db6d12c..0d2b2117 100644
--- a/src/Components/MenuList.js
+++ b/src/Components/MenuList.js
@@ -27,7 +27,7 @@ import { Store } from '../Store';
 import Profile from '../img/default_profile0.png'
 import styled from 'styled-components'
 import {apiDomain} from '../env.js'
-import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 
 const OverrideButton = styled(Button)`
@@ -54,7 +54,7 @@ export default function MenuList(props) {
   }
   const handleLogout = () => {
       const url = `/auth/sign_out`
-      makeAxiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
+      axiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
   }
 
   return (
diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js
index b904e550..6409770f 100644
--- a/src/Components/MobileDrawerMenu.js
+++ b/src/Components/MobileDrawerMenu.js
@@ -37,7 +37,7 @@ import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
 import FolderOpenIcon from '@material-ui/icons/FolderOpen';
 import SettingsIcon from '@material-ui/icons/Settings';
 import {apiDomain} from '../env.js'
-import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function MobileDrawerMenu (props) {
     const {state, dispatch} = useContext(Store)
@@ -83,7 +83,7 @@ export default function MobileDrawerMenu (props) {
     }
     const handleLogout = () => {
         const url = `/auth/sign_out`
-        makeAxiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
+        axiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
index 8a31f4a0..ddb11196 100644
--- a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
+++ b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
@@ -24,7 +24,7 @@ import {apiDomain} from '../../env';
 import CloseIcon from '@material-ui/icons/Close';
 import Profile from '../../img/default_profile0.png'
 import Cropper from '../Cropper.js'
-import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 function ChooseImage (props) {
     return (
@@ -103,7 +103,7 @@ export default function ComponentAlterarAvatar (props) {
         let fdAvatar = new FormData()
         fdAvatar.set('user[avatar]', newAvatar)
 
-        makeAxiosPutRequest(url, fdAvatar, handleSuccess, (error) => {console.log(error)})
+        axiosPutRequest(url, fdAvatar, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarCover/ComponentAlterarCover.js b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
index 68da2c71..f9da4385 100644
--- a/src/Components/ModalAlterarCover/ComponentAlterarCover.js
+++ b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
@@ -22,7 +22,7 @@ import styled from 'styled-components'
 import {Store} from '../../Store.js'
 import CloseIcon from '@material-ui/icons/Close';
 import Cropper from '../Cropper.js'
-import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function ComponentAlterarCover (props) {
     const {state, dispatch} = useContext(Store)
@@ -53,7 +53,7 @@ export default function ComponentAlterarCover (props) {
         let fdCover = new FormData()
         fdCover.set('user[cover]', newCover)
 
-        makeAxiosPutRequest(url, fdCover, handleSuccess, (error) => {console.log(error)})
+        axiosPutRequest(url, fdCover, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalConfirmarCuradoria.js b/src/Components/ModalConfirmarCuradoria.js
index 1156810d..77fa7a4b 100644
--- a/src/Components/ModalConfirmarCuradoria.js
+++ b/src/Components/ModalConfirmarCuradoria.js
@@ -23,7 +23,7 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import CloseModalButton from './CloseModalButton'
-import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalConfirmarCuradoriaOpen (props) {
 
@@ -52,7 +52,7 @@ export default function ModalConfirmarCuradoriaOpen (props) {
                 "answers" : transformReportCriteria(props.reportCriteria)
             }
         }
-        makeAxiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
+        axiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalExcluirColecao.js b/src/Components/ModalExcluirColecao.js
index 13b6de08..c405179d 100644
--- a/src/Components/ModalExcluirColecao.js
+++ b/src/Components/ModalExcluirColecao.js
@@ -24,7 +24,7 @@ import styled from 'styled-components'
 import GreyButton from './GreyButton.js'
 import PurpleButton from './PurpleButton.js'
 import SnackbarComponent from './SnackbarComponent'
-import {makeAxiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalExcluirColecao (props) {
     const [snackbarOpen, toggleSnackbar] = useState(false)
@@ -36,7 +36,7 @@ export default function ModalExcluirColecao (props) {
     const handleDelete = () => {
         const url = `/collections/${props.id}`
 
-        makeAxiosDeleteRequest(url, handleDeleteSuccess, (error) => {console.log(error)})
+        axiosDeleteRequest(url, handleDeleteSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/Notifications.js b/src/Components/Notifications.js
index 298e706a..c82caab6 100644
--- a/src/Components/Notifications.js
+++ b/src/Components/Notifications.js
@@ -23,7 +23,7 @@ import styled from 'styled-components'
 import Menu from '@material-ui/core/Menu';
 import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
 import { withStyles } from '@material-ui/core/styles';
 import {Link} from 'react-router-dom'
 
@@ -88,7 +88,7 @@ export default function Notification (props) {
     }
 
     {/*setTimeout(() => {
-        makeAxiosGetRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
+        axiosGetRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
     }, 60000)*/}
 
     function handleClick(event) {
diff --git a/src/Components/NotificationsInner.js b/src/Components/NotificationsInner.js
index ffb5ef4f..c4c791c6 100644
--- a/src/Components/NotificationsInner.js
+++ b/src/Components/NotificationsInner.js
@@ -2,7 +2,7 @@ import React, {useState, useContext, useEffect} from 'react'
 import styled from 'styled-components'
 import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function NotificationInner (props) {
     const [notifications, setNotifications] = useState([]);
@@ -16,7 +16,7 @@ export default function NotificationInner (props) {
         let config = getAxiosConfig()
         const url = `/feed?offset=0&limit=30`
 
-        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
+        axiosGetRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
     }, [])
 
     return (
diff --git a/src/Components/PublicationPermissionsContent.js b/src/Components/PublicationPermissionsContent.js
index bdc34f32..0237291d 100644
--- a/src/Components/PublicationPermissionsContent.js
+++ b/src/Components/PublicationPermissionsContent.js
@@ -8,7 +8,7 @@ import Radio from '@material-ui/core/Radio';
 import FormControl from '@material-ui/core/FormControl';
 import Grid from '@material-ui/core/Grid';
 import { withStyles } from '@material-ui/core/styles';
-import {makeAxiosGetRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from './HelperFunctions/getAxiosConfig'
 
 const StyledFormControl = styled(FormControl)`
     display: "block ruby";
@@ -37,7 +37,7 @@ export default function PublicationPermissionsContent (props) {
     useEffect(() => {
         const url = `/questions/`
 
-        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/ReportModal.js b/src/Components/ReportModal.js
index b12218a8..1f94364f 100644
--- a/src/Components/ReportModal.js
+++ b/src/Components/ReportModal.js
@@ -27,7 +27,7 @@ import CloseIcon from '@material-ui/icons/Close';
 import ReportUserForm from './ReportUserForm.js'
 import ReportRecursoForm from './ReportRecursoForm.js'
 import ReportColecaoForm from './ReportColecaoForm.js'
-import {makeAxiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -52,7 +52,7 @@ export default function ReportModal (props) {
             }
         }
 
-        makeAxiosPostRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
+        axiosPostRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
 
     }
 
diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index 9b069378..46c55724 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -51,7 +51,7 @@ import {Link} from 'react-router-dom';
 import {getDefaultThumbnail} from './HelperFunctions/getDefaultThumbnail'
 import GetIconByName from './UploadPageComponents/GetIconByName'
 import "./ResourceCard.css";
-import {makeAxiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ResourceCardFunction (props) {
     const [thumbnail, setThumbnail] = useState(null)
@@ -86,7 +86,7 @@ export default function ResourceCardFunction (props) {
     const handleLike = () => {
         const url = `/learning_objects/${props.id}/like/`
 
-        makeAxiosPutRequest(url, {}, handleSuccessLike, (error) => {console.log(error)})
+        axiosPutRequest(url, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const SlideAnimationContent = () => {
diff --git a/src/Components/ResourcePageComponents/CommentForm.js b/src/Components/ResourcePageComponents/CommentForm.js
index d549bf01..99729ed8 100644
--- a/src/Components/ResourcePageComponents/CommentForm.js
+++ b/src/Components/ResourcePageComponents/CommentForm.js
@@ -6,7 +6,7 @@ import TextField from "@material-ui/core/TextField";
 import { Button } from '@material-ui/core';
 import EditIcon from '@material-ui/icons/Edit';
 import Grid from '@material-ui/core/Grid';
-import {makeAxiosPostRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentForm (props) {
     const [rating, setRating] = useState({
@@ -51,7 +51,7 @@ export default function CommentForm (props) {
                 }
             }
 
-            makeAxiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
+            axiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
         }
         else {
             setAttempt(true)
diff --git a/src/Components/ResourcePageComponents/CommentsArea.js b/src/Components/ResourcePageComponents/CommentsArea.js
index 2ed0ba13..60cb407b 100644
--- a/src/Components/ResourcePageComponents/CommentsArea.js
+++ b/src/Components/ResourcePageComponents/CommentsArea.js
@@ -26,7 +26,7 @@ import Comentarios from '../../img/comentarios.png'
 import {apiDomain} from '../../env';
 import CommentForm from './CommentForm.js'
 import Comment from '../Comment.js'
-import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentsArea (props) {
     const {state} = useContext(Store)
@@ -41,7 +41,7 @@ export default function CommentsArea (props) {
     useEffect( () => {
         const url = `/learning_objects/${props.recursoId}/reviews`
 
-        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [gambiarra])
 
     return (
diff --git a/src/Components/ResourcePageComponents/TextoObjeto.js b/src/Components/ResourcePageComponents/TextoObjeto.js
index 3fba2d8d..87637f54 100644
--- a/src/Components/ResourcePageComponents/TextoObjeto.js
+++ b/src/Components/ResourcePageComponents/TextoObjeto.js
@@ -29,7 +29,7 @@ import Button from '@material-ui/core/Button';
 import {Link, Redirect} from 'react-router-dom'
 import Alert from '../Alert.js';
 import Snackbar from '@material-ui/core/Snackbar';
-import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig'
+import {axiosDeleteRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function TextoObjeto (props) {
     const {state} = useContext(Store)
@@ -85,7 +85,7 @@ export default function TextoObjeto (props) {
     }
     const handleDelete = () => {
         const url = `/learning_objects/${props.recursoId}`
-        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     const checkAccessLevel = (levelToCheck) => {
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
index 2c17c5e4..2a8d54b6 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
@@ -21,7 +21,7 @@ import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
 import {ButtonMostrarMaisRecurso} from '../PanelComponents/ButtonsArea'
-import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabRecursos (props) {
     const [arr, setArr] = useState([])
@@ -43,7 +43,7 @@ export default function TabRecursos (props) {
 
         if (newLength > 12) {
             const url = `/users/${props.id}/learning_objects?limit=${newLength}$offset=4`
-            makeAxiosGetRequest(url,handleSuccess,(error) => {console.log(error)})
+            axiosGetRequest(url,handleSuccess,(error) => {console.log(error)})
         }
         else {
             handleSlice(arr.slice(0, sliceLength + quantity))
diff --git a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
index a49bfd52..171b6b73 100644
--- a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
+++ b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
@@ -29,7 +29,7 @@ import GreyButton from '../../GreyButton'
 import FormInput from '../../FormInput'
 import {Link} from 'react-router-dom'
 import SnackbarComponent from '../../SnackbarComponent.js'
-import {makeAxiosDeleteRequest} from '../../HelperFunctions/getAxiosConfig'
+import {axiosDeleteRequest} from '../../HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -71,7 +71,7 @@ export default function ModalExcluirConta (props) {
     }
     const deleteAccount = () => {
         const url = `/auth`
-        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
index 76a45f83..42809ba6 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
@@ -25,7 +25,7 @@ import Bolo from '../../../img/Bolo.png'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ActivityListItem from '../../ActivityListItem.js'
 import List from '@material-ui/core/List';
-import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest} from '../../HelperFunctions/getAxiosConfig.js'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -49,7 +49,7 @@ export default function TabPanelAtividades (props) {
     useEffect( () => {
         const url = `/feed?offset=0&limit=30`
 
-        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
index 723ad97e..b14f5b94 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
@@ -19,7 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useState, useEffect} from 'react'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
-import {makeAxiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelCuradoria (props) {
     const [loading, handleLoading] = useState(true)
@@ -42,7 +42,7 @@ export default function TabPanelCuradoria (props) {
     useEffect( () => {
         const url = `/users/${props.id}/submissions?offset=0&status=submitted`
 
-        makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/UploadPageComponents/FileUploadStage.js b/src/Components/UploadPageComponents/FileUploadStage.js
index 79cb05be..9aa89aa2 100644
--- a/src/Components/UploadPageComponents/FileUploadStage.js
+++ b/src/Components/UploadPageComponents/FileUploadStage.js
@@ -21,7 +21,7 @@ import styled from 'styled-components'
 import {WrapperBox} from './StyledComponents.js'
 import DoneIcon from '@material-ui/icons/Done';
 import DeleteIcon from '@material-ui/icons/Delete';
-import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {axiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function FileUploadStage (props) {
     const [uploading, toggleUploading] = useState(true)
@@ -32,7 +32,7 @@ export default function FileUploadStage (props) {
     const handleDelete = () => {
         const url = `/learning_objects/${props.draftID}`
 
-        makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/UploadPageComponents/ModalCancelar.js b/src/Components/UploadPageComponents/ModalCancelar.js
index 8f9e6990..1bf82317 100644
--- a/src/Components/UploadPageComponents/ModalCancelar.js
+++ b/src/Components/UploadPageComponents/ModalCancelar.js
@@ -23,7 +23,7 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import {Link} from 'react-router-dom'
-import {makeAxiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {axiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function ModalCancelar (props) {
 
@@ -37,7 +37,7 @@ export default function ModalCancelar (props) {
         if (props.draftID) {
             const url = `/learning_objects/${props.draftID}`
 
-            makeAxiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+            axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Components/UploadPageComponents/PartOne.js b/src/Components/UploadPageComponents/PartOne.js
index 4e071e0c..2e4a1724 100644
--- a/src/Components/UploadPageComponents/PartOne.js
+++ b/src/Components/UploadPageComponents/PartOne.js
@@ -26,7 +26,7 @@ import Autor from './Forms/Autor.js'
 import TipoDeRecurso from './Forms/TipoDeRecurso.js'
 import Idioma from './Forms/Idioma.js'
 import {SendInfo} from './SendInfo.js'
-import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartOne (props) {
     // {/*const [subjects, setSubjects] = useState([])*/}
@@ -37,9 +37,9 @@ export default function PartOne (props) {
         setObjTypes(data.sort((a, b) => (a.name) > (b.name) ? 1 : -1))
     }
     useEffect( () => {
-            makeAxiosGetRequest(`/object_types/`, handleSuccessGetObjTypes, (error) => {console.log(error)})
+            axiosGetRequest(`/object_types/`, handleSuccessGetObjTypes, (error) => {console.log(error)})
 
-            makeAxiosGetRequest(`/languages/`, (data) => {setLanguages(data)}, (error) => {console.log(error)})
+            axiosGetRequest(`/languages/`, (data) => {setLanguages(data)}, (error) => {console.log(error)})
     }, [])
 
     const handleSubmit = () => {
diff --git a/src/Components/UploadPageComponents/PartThree.js b/src/Components/UploadPageComponents/PartThree.js
index 61b70f09..340c19bb 100644
--- a/src/Components/UploadPageComponents/PartThree.js
+++ b/src/Components/UploadPageComponents/PartThree.js
@@ -34,7 +34,7 @@ import AssignmentIcon from '@material-ui/icons/Assignment';
 import { GrayButton, OrangeButton} from './StyledComponents';
 import ModalCancelar from './ModalCancelar.js'
 import {getDefaultThumbnail} from '../HelperFunctions/getDefaultThumbnail'
-import {makeAxiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartThree (props) {
     var moment = require('moment')
@@ -61,7 +61,7 @@ export default function PartThree (props) {
         if (state.currentUser.id !== "") {
             const url = `/learning_objects/${props.draftID}`
 
-            makeAxiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+            axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
 
         }
     }, [state.currentUser.id])
diff --git a/src/Components/UploadPageComponents/PartTwo.js b/src/Components/UploadPageComponents/PartTwo.js
index 63810377..6d30d2b7 100644
--- a/src/Components/UploadPageComponents/PartTwo.js
+++ b/src/Components/UploadPageComponents/PartTwo.js
@@ -32,7 +32,7 @@ import {SendInfo} from './SendInfo.js'
 import EditThumbnail from './PartTwoComponents/EditThumbnail.js'
 import DisplayThumbnail from './PartTwoComponents/DisplayThumbnail.js'
 import CustomCircularProgress from './PartTwoComponents/CustomCircularProgress';
-import {makeAxiosGetRequest, makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest, axiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export function LoadingDiv () {
     return (
@@ -53,9 +53,9 @@ export default function PartTwo (props) {
     }
 
     useEffect(() => {
-        makeAxiosGetRequest(`/educational_stages/`, (data) => {setEduStages(data)}, (error) => {console.log(error)})
+        axiosGetRequest(`/educational_stages/`, (data) => {setEduStages(data)}, (error) => {console.log(error)})
 
-        makeAxiosGetRequest(`/subjects/`, handleSuccess, (error) => {console.log(error)})
+        axiosGetRequest(`/subjects/`, handleSuccess, (error) => {console.log(error)})
     }, [])
 
 
@@ -88,7 +88,7 @@ export default function PartTwo (props) {
          let fdThumb = new FormData()
          fdThumb.set('learning_object[thumbnail]', thumbnail)
 
-         makeAxiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('done')}, (error) => {console.log(error)})
+         axiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('done')}, (error) => {console.log(error)})
      }
 
      const [thumbnailStage, setThumbnailStage] = useState('default')
diff --git a/src/Components/UploadPageComponents/SendInfo.js b/src/Components/UploadPageComponents/SendInfo.js
index 166d9894..b9a8585a 100644
--- a/src/Components/UploadPageComponents/SendInfo.js
+++ b/src/Components/UploadPageComponents/SendInfo.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import {makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 
 export function SendInfo (fieldName, payload, draftID) {
@@ -37,5 +37,5 @@ export function SendInfo (fieldName, payload, draftID) {
 
     const url = `/learning_objects/${draftID}`
 
-    makeAxiosPutRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
+    axiosPutRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
 }
diff --git a/src/Components/UploadPageComponents/UploadFileWrapper.js b/src/Components/UploadPageComponents/UploadFileWrapper.js
index 4abdcaa0..0675f589 100644
--- a/src/Components/UploadPageComponents/UploadFileWrapper.js
+++ b/src/Components/UploadPageComponents/UploadFileWrapper.js
@@ -21,7 +21,7 @@ import LinkIcon from '../../img/link_icon.svg'
 import ChooseLink from './ChooseLinkSection.js'
 import {WrapperBox, BlueButton, GrayButton} from './StyledComponents.js';
 import {DottedBox} from './StyledComponents.js';
-import {getAxiosConfigFromJSON, updateHeaders, makeAxiosDeleteRequest, makeAxiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {getAxiosConfigFromJSON, updateHeaders, axiosDeleteRequest, axiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
 import axios from 'axios'
 import {apiUrl} from '../../env';
@@ -114,7 +114,7 @@ export default function UploadFileWrapper (props) {
         if (attachmentID != null) {
             const url = `/learning_objects/${props.draftID}/attachment/${attachmentID}`
 
-            makeAxiosDeleteRequest(url, (data) => {handleNextStage("default")}, (error) => {console.log(error)})
+            axiosDeleteRequest(url, (data) => {handleNextStage("default")}, (error) => {console.log(error)})
         }
     }
 
@@ -151,7 +151,7 @@ export default function UploadFileWrapper (props) {
             }
         }
 
-        makeAxiosPutRequest(url, payload, (data) => {toggleSnackbar(true)}, (error) => {console.log(error)})
+        axiosPutRequest(url, payload, (data) => {toggleSnackbar(true)}, (error) => {console.log(error)})
     }
 
     switch (stage) {
diff --git a/src/Pages/EditLearningObjectPage.js b/src/Pages/EditLearningObjectPage.js
index f807d270..141f83ff 100644
--- a/src/Pages/EditLearningObjectPage.js
+++ b/src/Pages/EditLearningObjectPage.js
@@ -40,7 +40,7 @@ import {LoadingDiv} from '../Components/UploadPageComponents/PartTwo.js'
 import EditThumbnail from '../Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js'
 import DisplayThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js'
 import DragAndDropThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DragAndDropThumbnail'
-import {makeAxiosGetRequest, makeAxiosDeleteRequest, makeAxiosPutRequest, makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest, axiosDeleteRequest, axiosPutRequest, axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function EditLearningObjectPage (props) {
     const recursoId = props.match.params.recursoId
@@ -63,7 +63,7 @@ export default function EditLearningObjectPage (props) {
 
     useEffect( () => {
         const url = `/learning_objects/${recursoId}`
-        makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
         axios.get(`${apiUrl}/object_types/`).then(
             (response) => {
@@ -113,7 +113,7 @@ export default function EditLearningObjectPage (props) {
     const handleDelete = () => {
         const url = `/learning_objects/${learningObject.id}`
 
-        makeAxiosDeleteRequest(url, handleSuccessfulDelete, (error) => {console.log(error)})
+        axiosDeleteRequest(url, handleSuccessfulDelete, (error) => {console.log(error)})
     }
 
     const handleUpdateInfo = () => {
@@ -122,7 +122,7 @@ export default function EditLearningObjectPage (props) {
             "learning_object" : updatedInfo
         }
 
-        makeAxiosPutRequest(url, payload, (data) => {props.history.goBack()}, (error) => {console.log(error)})
+        axiosPutRequest(url, payload, (data) => {props.history.goBack()}, (error) => {console.log(error)})
     }
 
     const handlePost = () => {
@@ -132,7 +132,7 @@ export default function EditLearningObjectPage (props) {
             "learning_object" : updatedInfo
         }
 
-        makeAxiosPostRequest(url, payload,
+        axiosPostRequest(url, payload,
             (data) => {props.history.push( `/recurso/${learningObject.id}`)},
             (error) => {console.log(error)}
         )
@@ -171,7 +171,7 @@ export default function EditLearningObjectPage (props) {
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', thumbnail)
 
-        makeAxiosPutRequest(url, fdThumb, handleFinalizeThumb, (error) => {setThumbnailStage('default')})
+        axiosPutRequest(url, fdThumb, handleFinalizeThumb, (error) => {setThumbnailStage('default')})
     }
 
     const handleDeleteThumbnail = () => {
@@ -180,7 +180,7 @@ export default function EditLearningObjectPage (props) {
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', null)
 
-        makeAxiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('default')}, (error) => {console.log(error)})
+        axiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('default')}, (error) => {console.log(error)})
     }
 
     const chooseRenderStageThumbnail = () => {
diff --git a/src/Pages/EditProfilePage.js b/src/Pages/EditProfilePage.js
index 9dfab8da..6a33290b 100644
--- a/src/Pages/EditProfilePage.js
+++ b/src/Pages/EditProfilePage.js
@@ -10,7 +10,7 @@ import Snackbar from '@material-ui/core/Snackbar';
 import {Alert} from '../Components/LoginModal.js'
 import Grid from '@material-ui/core/Grid'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import {makeAxiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
 import {Store} from '../Store.js'
 
 export default function EditProfilePage (props) {
@@ -38,7 +38,7 @@ export default function EditProfilePage (props) {
     const updateUserInfo = (newUserInfo) => {
         const url = `/users/${id}`
 
-        makeAxiosPutRequest(url, newUserInfo,
+        axiosPutRequest(url, newUserInfo,
             (data) => {props.history.push('/perfil')},
             (error) => {console.log(error)}
         )
@@ -62,14 +62,14 @@ export default function EditProfilePage (props) {
     const updateUserEmail = (newUserInfo) => {
         const url = `/users/${id}`
 
-        makeAxiosPutRequest(url, newUserInfo, handleSuccessUpdateEmail, (error) => {console.log(error)}
+        axiosPutRequest(url, newUserInfo, handleSuccessUpdateEmail, (error) => {console.log(error)}
         )
     }
 
     const updateUserPassword = (newUserInfo) => {
         const url = `/users/${id}`
 
-        makeAxiosPutRequest(url, newUserInfo,
+        axiosPutRequest(url, newUserInfo,
             (data) => {handleSnackbar(true)},
             (error) => {console.log(error)}
         )
diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js
index b95221c5..496ffdd4 100644
--- a/src/Pages/PageProfessor.js
+++ b/src/Pages/PageProfessor.js
@@ -6,7 +6,7 @@ import PartTwo from '../Components/PageProfessorComponents/PartTwo.js'
 import PartThree from '../Components/PageProfessorComponents/PartThree.js'
 import SuccessfulRequest from '../Components/PageProfessorComponents/SuccessfulRequest.js'
 import ModalConfirmarProfessor from '../Components/PageProfessorComponents/ModalConfirmarProfessor.js'
-import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PageProfessor (props) {
     const {state} = useContext(Store)
@@ -105,7 +105,7 @@ export default function PageProfessor (props) {
             uf : registerInformation.school_uf.name
         }
 
-        makeAxiosPostRequest(url, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
+        axiosPostRequest(url, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
     }
 
     return (
diff --git a/src/Pages/PasswordRecoveryPage.js b/src/Pages/PasswordRecoveryPage.js
index bb918847..78f289a0 100644
--- a/src/Pages/PasswordRecoveryPage.js
+++ b/src/Pages/PasswordRecoveryPage.js
@@ -7,7 +7,7 @@ import Default from '../Components/PasswordRecoveryComponents/Default.js'
 import Success from '../Components/PasswordRecoveryComponents/Success.js'
 import CaseError from '../Components/PasswordRecoveryComponents/Error.js'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PasswordRecoveryPage (props) {
 
@@ -51,7 +51,7 @@ export default function PasswordRecoveryPage (props) {
             "redirect_url" : "https://plataformaintegrada.mec.gov.br/recuperar-senha#/alterar-senha"
         }
 
-        makeAxiosPostRequest(url, payload, handleSuccessfulSubmit, (error) => {console.log(error)})
+        axiosPostRequest(url, payload, handleSuccessfulSubmit, (error) => {console.log(error)})
 
     }
 
diff --git a/src/Pages/ResourcePage.js b/src/Pages/ResourcePage.js
index 8e8585df..d3a736ce 100644
--- a/src/Pages/ResourcePage.js
+++ b/src/Pages/ResourcePage.js
@@ -35,7 +35,7 @@ import AppBar from '@material-ui/core/AppBar';
 import ButtonAvaliarRecurso from '../Components/ButtonAvaliarRecurso'
 import ModalAvaliarRecurso from '../Components/ModalAvaliarRecurso'
 import ModalConfirmarCuradoria from '../Components/ModalConfirmarCuradoria'
-import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 function urlVerify (url) {
     return (url ? url.indexOf("youtu") !== -1 || url.indexOf("vimeo") !== -1 : false)
@@ -54,7 +54,7 @@ export default function LearningObjectPage (props){
     useEffect( () => {
         const url = `/learning_objects/${id}`
 
-        makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+        axiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
     }, [])
 
@@ -105,7 +105,7 @@ export default function LearningObjectPage (props){
     const finalizeCuratorshipFlow = () => {
         handleModalConfirmarCuradoria(false)
         const url = `/learning_objects/${id}`
-        makeAxiosGetRequest(url, (data) => {setRecurso(data)}, (error) => {console.log(error)})
+        axiosGetRequest(url, (data) => {setRecurso(data)}, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Pages/UploadPage.js b/src/Pages/UploadPage.js
index 41acd6fc..0ddf5264 100644
--- a/src/Pages/UploadPage.js
+++ b/src/Pages/UploadPage.js
@@ -22,7 +22,7 @@ import UploadFileWrapper from '../Components/UploadPageComponents/UploadFileWrap
 import {Store} from '../Store.js'
 import {InfoBox} from '../Components/UploadPageComponents/StyledComponents.js'
 import Stepper from '../Components/UploadPageComponents/Stepper.js'
-import {makeAxiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 import PartOne from '../Components/UploadPageComponents/PartOne.js'
 import PartTwo from '../Components/UploadPageComponents/PartTwo.js'
 import PartThree from '../Components/UploadPageComponents/PartThree.js'
@@ -51,7 +51,7 @@ export default function UploadPage (props) {
 
             let payload = {}
 
-            makeAxiosPostRequest(url, payload, handleSuccessfulGet, (error) => {console.log(error)})
+            axiosPostRequest(url, payload, handleSuccessfulGet, (error) => {console.log(error)})
 
         }
     }, [])
@@ -68,7 +68,7 @@ export default function UploadPage (props) {
 
             let payload = {}
 
-            makeAxiosPostRequest(url, payload,
+            axiosPostRequest(url, payload,
                 (data) => {handleModal(true)},
                 (error) => {console.log(error)}
             )
@@ -86,7 +86,7 @@ export default function UploadPage (props) {
                 }
             }
 
-            makeAxiosPostRequest(url, payload,
+            axiosPostRequest(url, payload,
                 (data) => {handleModal(true)},
                 (error) => {console.log(error)}
             )
diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js
index d023af93..a1f4b928 100644
--- a/src/Pages/UserPage.js
+++ b/src/Pages/UserPage.js
@@ -36,7 +36,7 @@ import ProfileAvatar from '../Components/UserPageComponents/Avatar.js'
 import UserInfo from '../Components/UserPageComponents/UserInfo.js'
 import EditProfileButton from '../Components/UserPageComponents/EditProfileButton.js'
 import SubmitterStatus from '../Components/UserPageComponents/SubmitterStatus.js'
-import {makeAxiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function UserPage (props){
     const {state, dispatch} = useContext(Store)
@@ -70,7 +70,7 @@ export default function UserPage (props){
         if (id !== '') {
             const url = `/users/${id}`
 
-            makeAxiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+            axiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
         }
     }, [])
 
-- 
GitLab


From 109408ce3d8669f1fefff7529f8f34a9ba937777 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 1 Feb 2021 10:42:29 -0300
Subject: [PATCH 30/83] added get requests again

---
 src/Components/Notifications.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/Components/Notifications.js b/src/Components/Notifications.js
index c82caab6..e85b578d 100644
--- a/src/Components/Notifications.js
+++ b/src/Components/Notifications.js
@@ -15,7 +15,7 @@ GNU Affero General Public License for more details.
 
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-import React, {useState, useEffect} from 'react';
+import React, {useState} from 'react';
 import NotificationsIcon from '@material-ui/icons/Notifications';
 import { Button } from '@material-ui/core';
 import Badge from '@material-ui/core/Badge';
@@ -87,9 +87,11 @@ export default function Notification (props) {
         console.log(error)
     }
 
-    {/*setTimeout(() => {
+
+    setInterval(() => {
         axiosGetRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
-    }, 60000)*/}
+    }, 60000)
+
 
     function handleClick(event) {
         console.log('event.currentTarget: ', event.currentTarget)
-- 
GitLab


From 774e043b7f66f35060459bceac60eba5431bfb0c Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 1 Feb 2021 10:43:01 -0300
Subject: [PATCH 31/83] fixed avatar display bug

---
 src/Components/LoginModal.js | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js
index 814457ea..cd13e71a 100644
--- a/src/Components/LoginModal.js
+++ b/src/Components/LoginModal.js
@@ -55,7 +55,16 @@ export default function LoginModal (props){
         handleSnackbar(false);
     }
 
+    function renameKeys (obj) {
+        if (obj.avatar_file_name) {
+            Object.defineProperty(obj, 'avatar',
+                Object.getOwnPropertyDescriptor(obj, 'avatar_file_name'));
+            delete obj['avatar_file_name'];
+        }
+    }
+
     function handleSuccess (data) {
+        renameKeys(data.data)
         dispatch ({
             type: "USER_LOGGED_IN",
             userLoggedIn: !state.userIsLoggedIn,
-- 
GitLab


From aaff3e043183eb46718d33336ab027e1241ed06d Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:11:37 -0300
Subject: [PATCH 32/83] Added sign up modal if the user is not logged

---
 src/Components/ButtonGuardarColecao.js | 61 +++++++++++++++++++++-----
 1 file changed, 49 insertions(+), 12 deletions(-)

diff --git a/src/Components/ButtonGuardarColecao.js b/src/Components/ButtonGuardarColecao.js
index 65ae71a2..4d8865f7 100644
--- a/src/Components/ButtonGuardarColecao.js
+++ b/src/Components/ButtonGuardarColecao.js
@@ -1,30 +1,67 @@
-import React, {useState, useContext} from 'react'
-import {Store} from '../Store.js'
+import React, { useState, useContext } from 'react'
+import { Store } from '../Store.js'
 import Button from '@material-ui/core/Button';
 import styled from 'styled-components'
 import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';
 import GuardarModal from './GuardarModal'
+import SignUpModal from './SignUpModal'
+import LoginModal from './LoginModal.js'
+import Snackbar from '@material-ui/core/Snackbar';
+import MuiAlert from '@material-ui/lab/Alert';
 
-export default function ButtonGuardarColecao (props) {
-    const {state} = useContext(Store)
+export default function ButtonGuardarColecao(props) {
+    const { state } = useContext(Store)
     const [saveToCol, toggleSave] = useState(false)
     const handleGuardar = () => {
-        if(state.currentUser.id === '') {
-            console.log('abrir login modal');
+        if (!state.currentUser.id) {
+            handleLogin()
         }
         else {
             toggleSave(true);
         }
     }
 
+    const handleSignUp = () => {
+        setSignUp(!signUpOpen)
+    }
+
+    const handleLogin = () => {
+        setLogin(!loginOpen)
+    }
+
+    function Alert(props) {
+        return <MuiAlert elevation={6} variant="filled" {...props} />;
+    }
+
+    function toggleLoginSnackbar(reason) {
+        if (reason === 'clickaway') {
+            return;
+        }
+        handleSuccessfulLogin(false);
+    }
+
+    const [signUpOpen, setSignUp] = useState(false)
+    const [loginOpen, setLogin] = useState(false)
+    const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
+
     return (
         <>
-        <GuardarModal open={saveToCol} handleClose={() => {toggleSave(false)}}
-            thumb={props.thumb} title={props.title} recursoId={props.learningObjectId}
-        />
-        <StyledButton onClick={handleGuardar}>
-                <CreateNewFolderIcon/> &nbsp; GUARDAR
-        </StyledButton>
+            <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}
+            />
+            <LoginModal open={loginOpen} handleClose={() => setLogin(false)} openSignUp={handleSignUp}
+                openSnackbar={() => { handleSuccessfulLogin(true) }}
+            />
+            <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleLoginSnackbar}
+                anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
+            >
+                <Alert severity="success" style={{ backgroundColor: "#00acc1" }}>Você está conectado(a)!</Alert>
+            </Snackbar>
+            <GuardarModal open={saveToCol} handleClose={() => { toggleSave(false) }}
+                thumb={props.thumb} title={props.title} recursoId={props.learningObjectId}
+            />
+            <StyledButton onClick={handleGuardar}>
+                <CreateNewFolderIcon /> &nbsp; GUARDAR
+            </StyledButton>
         </>
     )
 }
-- 
GitLab


From 6c4d585f161fbbd58f934d8fdfe9ef4d1a924e3d Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:12:42 -0300
Subject: [PATCH 33/83] Changed the documenet name

---
 src/Components/ExpandedMaterialCard.js | 63 --------------------------
 1 file changed, 63 deletions(-)
 delete mode 100644 src/Components/ExpandedMaterialCard.js

diff --git a/src/Components/ExpandedMaterialCard.js b/src/Components/ExpandedMaterialCard.js
deleted file mode 100644
index f958a17e..00000000
--- a/src/Components/ExpandedMaterialCard.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React, { useState } from 'react';
-import Card from '@material-ui/core/Card';
-import CardContent from '@material-ui/core/CardContent';
-import CardActions from '@material-ui/core/CardActions';
-import Typography from '@material-ui/core/Typography';
-import styled from 'styled-components';
-import Button from '@material-ui/core/Button';
-
-export default function MaterialCard(props) {
-
-    const [expanded, setExpanded] = useState(false);
-
-    const thumb = require(`../../public/${props.thumb}`)
-
-    return (
-        <Card>
-            <img style={{maxHeight : "100%", maxWidth:"100%"}} src={thumb} alt="thumbnail do recurso" />
-            <CardContent style={{ height: "50px"}}>
-                <Title>
-                    {props.name}
-                </Title>
-            </CardContent>
-            <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
-                <Button
-                    color="secondary"
-                >
-                    Ver módulos
-                </Button>
-            </CardActions>
-        </Card >
-    )
-}
-
-const SizedBox = styled.div`
-  width : 5px;
-`
-const Title = styled(Typography)`
-    text-overflow: ellipsis;
-    overflow: hidden;
-    margin-bottom: 10px;
-    font-size: 1.2em;
-    line-height: 1.1;
-    max-height: 46px;
-    color: #666;
-`
\ No newline at end of file
-- 
GitLab


From ac6aa7b885f46af57bd54744b6f1b5c213588136 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:13:42 -0300
Subject: [PATCH 34/83] Centralized the topic cards

---
 src/Components/ExpandedMaterials.js | 30 ++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/Components/ExpandedMaterials.js b/src/Components/ExpandedMaterials.js
index 25f7f49a..603ec4ed 100644
--- a/src/Components/ExpandedMaterials.js
+++ b/src/Components/ExpandedMaterials.js
@@ -4,10 +4,10 @@ import styled from 'styled-components';
 import Chip from '@material-ui/core/Chip';
 import Grid from '@material-ui/core/Grid';
 import Button from '@material-ui/core/Button';
-import ExpandedMaterialCard from './ExpandedMaterialCard';
+import TopicCard from './TopicCard';
 import Paper from '@material-ui/core/Paper';
 import Library from '@material-ui/icons/LibraryBooks';
-import {Link} from 'react-router-dom';
+import { Link } from 'react-router-dom';
 
 const useStyles = makeStyles((theme) => ({
     root: {
@@ -26,7 +26,7 @@ const ExpandedMaterial = (props) => {
     return (
         <Paper elevation={3} style={{ backgroundColor: "#444444", padding: "20px" }}>
             <Grid container direction="row" spacing={2}>
-                <Grid item direction="column" xs={4}>
+                <Grid item direction="column" xs={12} md={4}>
                     <Grid item>
                         <Title variant="body2">
                             {
@@ -61,8 +61,8 @@ const ExpandedMaterial = (props) => {
                         </StyledLink>
                     </Grid>
                 </Grid>
-                <Grid item direction="column" xs={8}>
-                    <Grid container direction="row" alignItems="center">
+                <Grid item direction="column" xs={12} md={8}>
+                    <Grid container direction="row">
                         <Library style={{ color: "White" }} />
                         <SizedWidthBox />
                         <Title>
@@ -70,23 +70,23 @@ const ExpandedMaterial = (props) => {
                         </Title>
                     </Grid>
                     <SizedHeightBox />
-                    <Grid container direction="row" spacing={3}>
+                    <Grid container direction="row" justify="center" alignItems="center" spacing={3}>
                         <Grid item md={4}>
-                            <ExpandedMaterialCard
-                                name={material.topics[0].pre_title + material.topics[0].title}
-                                thumb={material.topics[0].img}
+                            <TopicCard
+                                topic={material.topics[0]}
+                                colecao_id={material.id}
                             />
                         </Grid>
                         <Grid item md={4}>
-                            <ExpandedMaterialCard
-                                name={material.topics[1].pre_title + material.topics[1].title}
-                                thumb={material.topics[1].img}
+                            <TopicCard
+                                topic={material.topics[1]}
+                                colecao_id={material.id}
                             />
                         </Grid>
                         <Grid item md={4}>
-                            <ExpandedMaterialCard
-                                name={material.topics[2].pre_title + material.topics[2].title}
-                                thumb={material.topics[2].img}
+                            <TopicCard
+                                topic={material.topics[2]}
+                                colecao_id={material.id}
                             />
                         </Grid>
                     </Grid>
-- 
GitLab


From ecd08e9410573694482b5a75efa59d268823a917 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:15:26 -0300
Subject: [PATCH 35/83] Add a function to decide if it will to display expanded
 material component

---
 src/Components/MaterialCard.js | 56 ++++++++++++++++++++++++----------
 1 file changed, 40 insertions(+), 16 deletions(-)

diff --git a/src/Components/MaterialCard.js b/src/Components/MaterialCard.js
index 18c37b4d..a79236b9 100644
--- a/src/Components/MaterialCard.js
+++ b/src/Components/MaterialCard.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useState} from 'react';
+import React, { useState } from 'react';
 import Card from '@material-ui/core/Card';
 import CardContent from '@material-ui/core/CardContent';
 import CardActions from '@material-ui/core/CardActions';
@@ -28,15 +28,19 @@ import Grid from '@material-ui/core/Grid';
 import styled from 'styled-components';
 import Button from '@material-ui/core/Button';
 import ExpandMoreRoundedIcon from '@material-ui/icons/ExpandMoreRounded';
+import {Link} from 'react-router-dom';
 
 export default function MaterialCard(props) {
 
     const thumb = require(`../../public/${props.thumb}`)
 
     const HandleButtonPressed = () => {
-        props.handleExpand(props.id); 
+        props.handleExpand(props.id);
     }
 
+    const width = window.innerWidth;
+    const height = window.innerHeight;
+
     return (
         <Card>
             <img src={thumb} alt="thumbnail do recurso" />
@@ -67,14 +71,27 @@ export default function MaterialCard(props) {
                 </Grid>
             </CardActions>
             <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
-                <Button 
-                    color="secondary" 
-                    endIcon={<ExpandMoreRoundedIcon/>}
-                    onClick={HandleButtonPressed}
-                >
-                    
-                    Ver módulos
-                </Button>
+                {
+                    width <= 767 ?
+                        <StyledLink to={`/colecao?colecao=${props.id}`}>
+                            <Button
+                                color="secondary"
+                                endIcon={<ExpandMoreRoundedIcon />}
+                            >
+
+                                Ver módulos
+                            </Button>
+                        </StyledLink>
+                        :
+                        <Button
+                            color="secondary"
+                            endIcon={<ExpandMoreRoundedIcon />}
+                            onClick={HandleButtonPressed}
+                        >
+
+                            Ver módulos
+                        </Button>
+                }
             </CardActions>
         </Card >
     )
@@ -84,11 +101,18 @@ const SizedBox = styled.div`
   width : 5px;
 `
 const Title = styled(Typography)`
-    text-overflow: ellipsis;
+    font-weight: 500;
+	color: rgb(102, 102, 102);
+	font-size: 0.9em;
+	margin-left: 10px;
+	margin-right: 10px;
+
+	display: -webkit-box;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
     overflow: hidden;
-    margin-bottom: 10px;
-    font-size: 1.2em;
-    line-height: 1.1;
-    max-height: 46px;
-    color: #666;
+`
+const StyledLink = styled(Link)`
+	text-decoration: none ;
+	color: inherit ;
 `
\ No newline at end of file
-- 
GitLab


From 0897032af1eb4fea73bb9af7acc84b031d5600aa Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:17:08 -0300
Subject: [PATCH 36/83] start to fix the animation

---
 src/Components/ResourceCard.js | 36 +++++++++++++++++++++-------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/src/Components/ResourceCard.js b/src/Components/ResourceCard.js
index 03576afd..8752fe3e 100644
--- a/src/Components/ResourceCard.js
+++ b/src/Components/ResourceCard.js
@@ -25,6 +25,7 @@ import CardActions from "@material-ui/core/CardActions";
 import IconButton from "@material-ui/core/IconButton";
 import Typography from "@material-ui/core/Typography";
 import FavoriteIcon from "@material-ui/icons/Favorite";
+import styled from 'styled-components';
 import animacao from "../img/laranja/ANIMACAO_SIMULACAO.jpg";
 import apresentacao from "../img/laranja/APRESENTACAO.jpg";
 import aplicativo from "../img/laranja/APP.jpg";
@@ -74,7 +75,7 @@ const slideStyle = {
 const publisherStyle = {
   color: "white",
   paddinLeft: "30px",
-  fontSize: "15px"
+  fontSize: "15px",
 };
 
 class ResourceCard extends Component {
@@ -86,16 +87,16 @@ class ResourceCard extends Component {
       userAvatar: null
     };
   }
-  renderType(type){
-      if (!this.state.thumbnail) {
-          if(!this.props.thumbnail) {
-              const aux = types.find(function(element){return element.label === type});
-              this.setState({thumbnail: aux.thumb});
-          }
-          else{
-              this.setState({thumbnail: `${apiDomain}` + this.props.thumbnail});
-          }
+  renderType(type) {
+    if (!this.state.thumbnail) {
+      if (!this.props.thumbnail) {
+        const aux = types.find(function (element) { return element.label === type });
+        this.setState({ thumbnail: aux.thumb });
       }
+      else {
+        this.setState({ thumbnail: `${apiDomain}` + this.props.thumbnail });
+      }
+    }
     // {/*if (!this.state.thumbnail && !this.props.thumbnail ) {
     //   var aux = types.find(function(element){ return element.label === type});
     //   this.setState({thumbnail: aux.thumb});
@@ -135,10 +136,10 @@ class ResourceCard extends Component {
         >
           <div className={this.state.userStyle}>
             <img style={slideStyle} src={this.state.userAvatar} alt="Avatar" />
-            <Typography style={publisherStyle}>
+            <StyledPublisher style={publisherStyle}>
               Enviado por: <br />
               {this.props.author}
-            </Typography>
+            </StyledPublisher>
           </div>
           <img
             src={this.state.thumbnail}
@@ -172,8 +173,8 @@ class ResourceCard extends Component {
           {this.props.type === "Vídeo" ? (
             <Video style={{ color: "#ff7f00" }} />
           ) : (
-            <br />
-          )}
+              <br />
+            )}
           <IconButton aria-label="Favoritar" size="small">
             <FavoriteIcon />
           </IconButton>
@@ -194,4 +195,11 @@ class ResourceCard extends Component {
   }
 }
 
+const StyledPublisher = styled(Typography)`
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+`
+
 export default ResourceCard;
-- 
GitLab


From 774932e45a03b7964b2b418c7fb53e452d20380a Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:17:51 -0300
Subject: [PATCH 37/83] Fixed the menu of the card

---
 src/Components/ResourceCardOptions.js | 178 +++++++++++++++++---------
 1 file changed, 114 insertions(+), 64 deletions(-)

diff --git a/src/Components/ResourceCardOptions.js b/src/Components/ResourceCardOptions.js
index 7503fec2..44bc52df 100644
--- a/src/Components/ResourceCardOptions.js
+++ b/src/Components/ResourceCardOptions.js
@@ -16,8 +16,8 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useContext, useState} from 'react';
-import {Store} from '../Store.js'
+import React, { useContext, useState } from 'react';
+import { Store } from '../Store.js'
 import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
 import Menu from '@material-ui/core/Menu';
@@ -27,16 +27,22 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import OpenIcon from '@material-ui/icons/OpenInNew';
 import ReportIcon from '@material-ui/icons/Error';
 import ReportModal from './ReportModal.js'
-import {Link} from 'react-router-dom'
+import { Link } from 'react-router-dom'
 import DownloadIcon from '@material-ui/icons/CloudDownload';
 import ShareIcon from '@material-ui/icons/Share';
 import AddIcon from '@material-ui/icons/CreateNewFolder';
 import GuardarModal from './GuardarModal'
 import ShareModal from './ShareModal'
 import SnackbarComponent from './SnackbarComponent'
-
-export default function ResourceCardOptions (props) {
-    const {state} = useContext(Store)
+import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';
+import Tooltip from '@material-ui/core/Tooltip';
+import SignUpModal from './SignUpModal'
+import LoginModal from './LoginModal.js'
+import Snackbar from '@material-ui/core/Snackbar';
+import MuiAlert from '@material-ui/lab/Alert';
+
+export default function ResourceCardOptions(props) {
+    const { state } = useContext(Store)
     const [anchorEl, setAnchorEl] = React.useState(null);
 
     function handleClick(event) {
@@ -60,8 +66,8 @@ export default function ResourceCardOptions (props) {
 
     const [saveToCol, toggleSave] = useState(false)
     const handleGuardar = () => {
-        if(state.currentUser.id === '') {
-            console.log('abrir login modal');
+        if (!state.currentUser.id) {
+            handleLogin();
         }
         else {
             toggleSave(true);
@@ -78,8 +84,8 @@ export default function ResourceCardOptions (props) {
     const [shareOpen, toggleShare] = useState(false)
 
     const handleShare = () => {
-        if(state.currentUser.id === '') {
-            console.log('abrir login modal');
+        if (!state.currentUser.id) {
+            handleLogin()
         }
         else {
             toggleShare(true);
@@ -87,65 +93,109 @@ export default function ResourceCardOptions (props) {
         handleClose()
     }
     const getShareablePageLink = () => {
-        return (window.location.href + "/recurso/" + props.learningObjectId)
+        return (window.origin + "/recurso/" + props.learningObjectId)
+    }
+
+    const handleSignUp = () => {
+        setSignUp(!signUpOpen)
+    }
+
+    const handleLogin = () => {
+        setLogin(!loginOpen)
+    }
+
+    function Alert(props) {
+        return <MuiAlert elevation={6} variant="filled" {...props} />;
+    }
+
+    function toggleLoginSnackbar(reason) {
+        if (reason === 'clickaway') {
+            return;
+        }
+        handleSuccessfulLogin(false);
     }
 
     const [snackbarOpen, toggleSnackbar] = useState(false)
+    const [signUpOpen, setSignUp] = useState(false)
+    const [loginOpen, setLogin] = useState(false)
+    const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
 
     return (
-        <React.Fragment>
-        <ReportModal open={reportModal} handleClose={() => handleModalReportar(false)}
-            form="recurso" complainableId={props.learningObjectId}
-            complainableType={"LearningObject"}
-            {...props}
-        />
-        <GuardarModal open={saveToCol} handleClose={() => {toggleSave(false)}}
-            thumb={props.thumb} title={props.title} recursoId={props.learningObjectId}
-        />
-        <ShareModal open={shareOpen} handleClose={() => {toggleShare(false)}}
-            thumb={props.thumb} title={props.title} link={getShareablePageLink()}
-        />
-        <SnackbarComponent snackbarOpen={snackbarOpen} severity={"info"} handleClose={() => {toggleSnackbar(false)}} text={"Baixando o Recurso... Lembre-se de relatar sua experiência após o uso do Recurso!"}
-            />
-        <div style={{fontSize: "12px", display : "flex", flexDirection : "column", justifyContent : "center"}}>
-            <ButtonNoWidth aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick} style={{color : "#666"}}>
-                <MoreVertIcon style={{color : "#666"}}/>
-            </ButtonNoWidth>
-            <Menu
-                id="simple-menu"
-                anchorEl={anchorEl}
-                keepMounted
-                open={Boolean(anchorEl)}
-                onClose={handleClose}
-            >
-                <StyledMenuItem onClick={handleClose}>
-                    <Link to={"/recurso/" + props.learningObjectId}>
-                        <ListItemIcon><OpenIcon /></ListItemIcon>Abrir
-                    </Link>
-                </StyledMenuItem>
-
-                {
-                    props.downloadableLink &&
-                    <StyledMenuItem onClick={() => {enableDownload(); handleClose()}}>
-                        <ListItemIcon><DownloadIcon /></ListItemIcon>Baixar
-                    </StyledMenuItem>
-                }
-
-                <StyledMenuItem onClick={handleShare}>
-                    <ListItemIcon><ShareIcon /></ListItemIcon>Compartilhar
-                </StyledMenuItem>
-
-                <StyledMenuItem onClick={handleGuardar}>
-                    <ListItemIcon><AddIcon /></ListItemIcon>Guardar
-                </StyledMenuItem>
-
-                <StyledMenuItem onClick={() => {handleModalReportar(true); handleClose()}}>
-                    <ListItemIcon><ReportIcon /></ListItemIcon>Reportar
-                </StyledMenuItem>
-            </Menu>
-        </div>
-    </React.Fragment>
-  );
+        <>
+
+            <React.Fragment>
+                <ReportModal open={reportModal} handleClose={() => handleModalReportar(false)}
+                    form="recurso" complainableId={props.learningObjectId}
+                    complainableType={"LearningObject"}
+                    {...props}
+                />
+                <GuardarModal open={saveToCol} handleClose={() => { toggleSave(false) }}
+                    thumb={props.thumb} title={props.title} recursoId={props.learningObjectId}
+                />
+                <ShareModal open={shareOpen} handleClose={() => { toggleShare(false) }}
+                    thumb={props.thumb} title={props.title} link={getShareablePageLink()}
+                />
+                <SnackbarComponent snackbarOpen={snackbarOpen} severity={"info"} handleClose={() => { toggleSnackbar(false) }} text={"Baixando o Recurso... Lembre-se de relatar sua experiência após o uso do Recurso!"}
+                />
+                <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}
+                />
+                <LoginModal open={loginOpen} handleClose={() => setLogin(false)} openSignUp={handleSignUp}
+                    openSnackbar={() => { handleSuccessfulLogin(true) }}
+                />
+                <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleLoginSnackbar}
+                    anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
+                >
+                    <Alert severity="success" style={{ backgroundColor: "#00acc1" }}>Você está conectado(a)!</Alert>
+                </Snackbar>
+                <div style={{ fontSize: "12px", display: "flex", flexDirection: "column", justifyContent: "center" }}>
+                    <ButtonNoWidth aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick} style={{ color: "#666" }}>
+                        <MoreVertIcon style={{ color: "#666" }} />
+                    </ButtonNoWidth>
+                    <Menu
+                        id="simple-menu"
+                        anchorEl={anchorEl}
+                        keepMounted
+                        open={Boolean(anchorEl)}
+                        onClose={handleClose}
+                    >
+                        <Tooltip title="Não preserva filtro" arrow>
+                            <StyledMenuItem onClick={handleClose}>
+                                <Link to={"/recurso/" + props.learningObjectId}>
+                                    <ListItemIcon><OpenIcon /></ListItemIcon>Abrir
+                                </Link>
+                            </StyledMenuItem>
+                        </Tooltip>
+
+                        <Tooltip title="Preserva filtro" arrow>
+                            <StyledMenuItem onClick={() => window.open("/recurso/" + props.learningObjectId, "_blank")}>
+                                <ListItemIcon><OpenInBrowserIcon /></ListItemIcon> Abrir em nova guia
+                            </StyledMenuItem>
+                        </Tooltip>
+
+                        {
+                            props.downloadableLink &&
+                            <StyledMenuItem onClick={() => { enableDownload(); handleClose() }}>
+                                <ListItemIcon><DownloadIcon /></ListItemIcon>Baixar
+                            </StyledMenuItem>
+                        }
+
+                        <StyledMenuItem onClick={handleShare}>
+                            <ListItemIcon><ShareIcon /></ListItemIcon>Compartilhar
+                        </StyledMenuItem>
+
+                        <StyledMenuItem onClick={handleGuardar}>
+                            <ListItemIcon><AddIcon /></ListItemIcon>Guardar
+                        </StyledMenuItem>
+
+                        <StyledMenuItem onClick={() => { handleModalReportar(true); handleClose() }}>
+                            <ListItemIcon><ReportIcon /></ListItemIcon>Reportar
+                        </StyledMenuItem>
+
+                    </Menu>
+                </div>
+            </React.Fragment>
+        </>
+    );
 }
 
 const ButtonNoWidth = styled(Button)`
-- 
GitLab


From 63212c3cad4a3f85cc3b4ce9874b3afab2423655 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:18:34 -0300
Subject: [PATCH 38/83] removed the decoration from the link

---
 src/Components/ShareModal.js | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/Components/ShareModal.js b/src/Components/ShareModal.js
index 4089314b..93eb4828 100644
--- a/src/Components/ShareModal.js
+++ b/src/Components/ShareModal.js
@@ -73,7 +73,7 @@ export default function ReportModal (props) {
 
                             {/*Share to facebook*/}
                             <Grid item xs={4}>
-                                <a
+                                <StyledLink
                                     href={"https://www.facebook.com/sharer/sharer.php?u=" + props.link}
                                     rel="noreferrer"
                                     target="_blank">
@@ -81,12 +81,12 @@ export default function ReportModal (props) {
                                         <img src={Facebook} alt="facebook-logo"/>
                                         <p>FACEBOOK</p>
                                     </ShareButton>
-                                </a>
+                                </StyledLink>
                             </Grid>
 
                             {/*Share to Twitter*/}
                             <Grid item xs={4}>
-                                <a
+                                <StyledLink
                                     href={"https://www.twitter.com/intent/tweet?url=" + props.link}
                                     rel="noreferrer"
                                     target="_blank">
@@ -94,7 +94,7 @@ export default function ReportModal (props) {
                                         <img src={Twitter} alt="twitter-logo"/>
                                         <p>TWITTER</p>
                                     </ShareButton>
-                                </a>
+                                </StyledLink>
                             </Grid>
 
                             {/*Get shareable link*/}
@@ -242,3 +242,6 @@ const Container = styled.div`
         height : 100%;
     }
 `
+const StyledLink = styled.a`
+    text-decoration : none; 
+`
\ No newline at end of file
-- 
GitLab


From c5ab64092ca3c0754bea5cc5da69f9cbd9980e9f Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:19:51 -0300
Subject: [PATCH 39/83] Fixed the responsiveness

---
 src/Components/TopicCard.js | 112 ++++++++++++++++++++----------------
 1 file changed, 63 insertions(+), 49 deletions(-)

diff --git a/src/Components/TopicCard.js b/src/Components/TopicCard.js
index 6058cacf..eb79a6be 100644
--- a/src/Components/TopicCard.js
+++ b/src/Components/TopicCard.js
@@ -1,65 +1,79 @@
-import React from 'react';
-import { Link } from 'react-router-dom';
-import styled from 'styled-components'
+/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana
+
+This file is part of Plataforma Integrada MEC.
+
+Plataforma Integrada MEC is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Plataforma Integrada MEC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
+
+import React, { useState } from 'react';
 import Card from '@material-ui/core/Card';
+import CardContent from '@material-ui/core/CardContent';
 import CardActions from '@material-ui/core/CardActions';
+import Typography from '@material-ui/core/Typography';
+import styled from 'styled-components';
+import Button from '@material-ui/core/Button';
+import { Link } from 'react-router-dom';
+
+export default function MaterialCard(props) {
+    console.log(props);
+    const [expanded, setExpanded] = useState(false);
 
-export default function TopicCard(props) {
-  return (	
-		<CardModel>
-			<StyledLink to={"topico?colecao="+props.colecao_id+"&topico="+props.topico_obj.id}>
-				<CardImage src={require(`../../public/${props.topico_obj.img}`)}/>
-				<Title>
-					<BoldTitle>
-						{ props.topico_obj.pre_title }
-					</BoldTitle>
-					{ props.topico_obj.title } 
-				</Title>
-				<StyledCardActions>
-					<StyledLink to={"topico?colecao="+props.colecao_id+"&topico="+props.topico_obj.id}>
-						<Red><strong>Ver mais</strong></Red>
-					</StyledLink>
-				</StyledCardActions>
-			</StyledLink>
-		</CardModel>
-  );
+    const thumb = require(`../../public/${props.topic.img}`)
+
+    return (
+        <Card style={{ maxHeight: "100%", maxWidth: "300px" }}>
+            <img style={{ maxHeight: "100%", maxWidth: "100%" }} src={thumb} alt="thumbnail do recurso" />
+            <CardContent style={{ height: "50px" }}>
+                <Title>
+                    <BoldTitle>
+                        {props.topic.pre_title}
+                    </BoldTitle>
+                    {props.topic.title}
+                </Title>
+            </CardContent>
+            <CardActions style={{ borderTop: "1px solid #e5e5e5", justifyContent: "center" }}>
+                <StyledLink to={"topico?colecao=" + props.colecao_id + "&topico=" + props.topic.id}>
+                    <Button
+                        color="secondary"
+                    >
+                        Ver módulos
+                    </Button>
+                </StyledLink>
+            </CardActions>
+        </Card >
+    )
 }
 
-const Title=styled.h1`
-	font-weight: 500;
+const SizedBox = styled.div`
+  width : 5px;
+`
+const Title = styled(Typography)`
+    font-weight: 500;
 	color: rgb(102, 102, 102);
 	font-size: 0.9em;
 	margin-left: 10px;
 	margin-right: 10px;
 
 	display: -webkit-box;
-  -webkit-line-clamp: 3;
-  -webkit-box-orient: vertical;
-  overflow: hidden;
-`
-const CardModel=styled(Card)`
-	position: relative;
-	margin-bottom: 30px;
-	padding: 0;
-	height: 270px;
-`
-const CardImage=styled.img`
-	width: 100%;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
+    overflow: hidden;
 `
-const BoldTitle=styled.span`
+const BoldTitle = styled.span`
 	font-weight: bold;
 `
-const StyledLink=styled(Link)`
+const StyledLink = styled(Link)`
 	text-decoration: none !important;
 	color: inherit !important;
-`
-const Red=styled.span`
-	color: #e81f4f;
-	font-size: 14px;
-`
-const StyledCardActions=styled(CardActions)`
-	position: absolute;
-	padding: 10px;
-	left: 0;
-	bottom: 0;
-`
+`
\ No newline at end of file
-- 
GitLab


From 81034a10aed91daacd643d552d2b8578b6afc103 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:23:12 -0300
Subject: [PATCH 40/83] Added circular progress while its catching the data

---
 src/Components/IframeOverlay/DrawerContent.js | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/Components/IframeOverlay/DrawerContent.js b/src/Components/IframeOverlay/DrawerContent.js
index 8bd7e483..cd4772a6 100644
--- a/src/Components/IframeOverlay/DrawerContent.js
+++ b/src/Components/IframeOverlay/DrawerContent.js
@@ -6,15 +6,19 @@ import SearchInput from './SearchInput.js';
 import ResourceCard from './ResourceCard.js';
 import { apiUrl } from '../../env';
 import SmallFooter from './SmallFooter.js';
+import CircularProgress from '@material-ui/core/CircularProgress';
 
 export default function DrawerContent(props) {
 	const [resources, setResources] = useState([]);
+	const [isLoading, setIsLoading] = useState(false); 
 
 	const search = (query) => {
+		setIsLoading(true);
 		axios.get(`${apiUrl}/search?
-			page=0&results_per_page=5&query=${query}&search_class=LearningObject`)
+			page=0&results_per_page=12&query=${query}&search_class=LearningObject`)
 			.then(res => {
 				setResources(res.data);
+				setIsLoading(false);
 			});
 	}
 
@@ -40,13 +44,18 @@ export default function DrawerContent(props) {
 					Recursos Relacionados na Plataforma MEC:
 				</Description>
 			</Grid>
-			{resources.map(r => {
+
+			{
+				isLoading ? <CircularProgress style={{color : 'white'}}/>
+				:
+				resources.map((r, index) => {
 				return(
-					<Grid item xs={11}>
+					<Grid item xs={11} key={index}>
 						<ResourceCard
 							id={r.id}
 							name={r.name}
 							likes={r.likes_count}
+							thumb={r.thumbnail}
 						/>
 					</Grid>
 				);}
-- 
GitLab


From b7b54560568928cfb132ee5941a89461b8524e04 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:24:35 -0300
Subject: [PATCH 41/83] Fixed the static img

---
 src/Components/IframeOverlay/ResourceCard.js | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/Components/IframeOverlay/ResourceCard.js b/src/Components/IframeOverlay/ResourceCard.js
index 57f2b5be..365ea9a3 100644
--- a/src/Components/IframeOverlay/ResourceCard.js
+++ b/src/Components/IframeOverlay/ResourceCard.js
@@ -6,10 +6,17 @@ import Grid from '@material-ui/core/Grid';
 import WhiteAreaOfCard from './WhiteAreaOfCard.js';
 
 export default function ResourceCard(props) {
+
+	const getThumb = () => {
+		return props.thumb ? 
+		`https://api.portalmec.c3sl.ufpr.br${props.thumb}` 
+		: require('../../img/laranja/IMAGEM.jpg');
+
+	}
+
 	return(
 		<Anchor
-			to={'/recurso?id='+props.id
-					+'&name='+props.name}
+			to={'/recurso/'+props.id}
 		>
 			<CardPaper elevation={3}>
 				<Grid container
@@ -18,7 +25,7 @@ export default function ResourceCard(props) {
 					alignItems="center"
 				>
 					<Grid item>
-						<Img src="https://api.portalmec.c3sl.ufpr.br/system/learning_objects/thumbnails/000/032/128/original/1427119781385_thumb_w300_h160.jpg?1544253610" />
+						<Img src={getThumb()} />
 					</Grid>
 					<Grid item>
 						<WhiteAreaOfCard name={props.name} likes={props.likes} />
-- 
GitLab


From d2c2af1cc989a232014aab6e9db845e1f90df52f Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:25:42 -0300
Subject: [PATCH 42/83] Added icons to seacrh and clean input

---
 src/Components/IframeOverlay/SearchInput.js | 49 ++++++++++++++++-----
 1 file changed, 38 insertions(+), 11 deletions(-)

diff --git a/src/Components/IframeOverlay/SearchInput.js b/src/Components/IframeOverlay/SearchInput.js
index f201d314..3fd246cb 100644
--- a/src/Components/IframeOverlay/SearchInput.js
+++ b/src/Components/IframeOverlay/SearchInput.js
@@ -5,6 +5,8 @@ import IconButton from '@material-ui/core/IconButton';
 import OutlinedInput from '@material-ui/core/OutlinedInput';
 import InputAdornment from '@material-ui/core/InputAdornment';
 import FormControl from '@material-ui/core/FormControl';
+import Divider from '@material-ui/core/Divider';
+import CloseRoundedIcon from '@material-ui/icons/CloseRounded';
 
 export default function SearchInput(props) {
 	const [text, setText] = useState(props.stdin);
@@ -17,31 +19,56 @@ export default function SearchInput(props) {
 		props.search(text);
 	}
 
+	const handleCleanInput = () => {
+		setText("");
+	}
+
+	const handleKeyUp = (event) => {
+		if (event.key === "Enter")
+			handleClickSearch()
+	}
+
 	return (
 		<Wrapper>
-			<FormControl variant="outlined" style={{width: '100%'}}>
+			<FormControl variant="outlined" style={{ width: '100%' }}>
 				<OutlinedInput
 					type="text"
 					value={text}
+					placeholder="O quê você está buscando?"
 					onChange={handleChange}
+					onKeyUp={handleKeyUp}
 					endAdornment={
-						<InputAdornment position="end">
-							<IconButton
-								onClick={handleClickSearch}
-								edge="end"
-							>
-								<SearchIcon />
-							</IconButton>
-						</InputAdornment>
+						<>
+							<InputAdornment position="end">
+								<IconButton
+									onClick={handleCleanInput}
+									edge="end"
+								>
+									<CloseRoundedIcon />
+								</IconButton>
+							</InputAdornment>
+							<SizedWidhtBox />
+							<Divider orientation="vertical" flexItem />
+							<InputAdornment position="end">
+								<IconButton
+									onClick={handleClickSearch}
+									edge="end"
+								>
+									<SearchIcon style={{ fill: "#00bcd4" }} />
+								</IconButton>
+							</InputAdornment>
+						</>
 					}
 				/>
 			</FormControl>
 		</Wrapper>
 	);
 }
-const Wrapper=styled.div`
+const Wrapper = styled.div`
 	background-color: white;
 	border-radius: 5px;
 	margin: 20px;	
-
+`
+const SizedWidhtBox = styled.div`
+	margin-right : 22px;
 `
-- 
GitLab


From f8990a52db21178ef642a88d6bfa1cc43229a8a8 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 1 Feb 2021 12:26:13 -0300
Subject: [PATCH 43/83] Fixed responsviness and aligment

---
 .../FormationMaterialDescription.js           | 137 ++++++++-------
 src/Components/FormationMaterialHeader.js     | 163 ++++++++++--------
 src/Components/TopicFooter.js                 |   3 +-
 src/Components/TopicList.js                   |   4 +-
 4 files changed, 163 insertions(+), 144 deletions(-)

diff --git a/src/Components/FormationMaterialDescription.js b/src/Components/FormationMaterialDescription.js
index 1ff56731..a1ef5c3a 100644
--- a/src/Components/FormationMaterialDescription.js
+++ b/src/Components/FormationMaterialDescription.js
@@ -21,87 +21,84 @@ export default function FormationMaterialDescription(props) {
 	const colecao_obj = props.colecao_obj;
 	const topico_obj = props.topico_obj;
 
-  return (
+	return (
 		<WrappingCard>
 			<Grid container
 				direction="row"
 				justify="flex-start"
 				alignItems="center"
 			>
-				<Grid item xs={9}>
-					<HeightAdjustment>
+				<Grid item xs={12} md={8}>
 					<TextContainer>
 						<Title>
-							{ colecao ? 
-								"Sobre o Material" 
-								: "Resumo do "+props.colecao_obj.topic_name.slice(0, -1)
+							{colecao ?
+								"Sobre o Material"
+								: "Resumo do " + props.colecao_obj.topic_name.slice(0, -1)
 							}
 						</Title>
 						<Description>
-							{ colecao ?
+							{colecao ?
 								colecao_obj.description
 								: topico_obj.description
 							}
 						</Description>
-							{ colecao ?
-								<SubTitle>Histórico do Curso</SubTitle>
-								: <Strong>Autoria (autores):</Strong>
-							}
+						{colecao ?
+							<SubTitle>Histórico do Curso</SubTitle>
+							: <Strong>Autoria (autores):</Strong>
+						}
 						<Description>
-							{ colecao ?
+							{colecao ?
 								colecao_obj.historic
 								: topico_obj.author
 							}
 						</Description>
 					</TextContainer>
-					</HeightAdjustment>
 				</Grid>
-				<Grid item xs={3}>
-					<HeightAdjustment>
+				<Grid item xs={12} md={3}>
 					<IconList>
 						<IconItem>
-							<LibraryBooksIcon/>
+							<LibraryBooksIcon />
 							<Strong>Tipo de recurso: </Strong>
 							Material de Formação
-							<br/>
+							<br />
 						</IconItem>
 
 						<IconItem>
-							<MoveToInboxIcon/>
+							<MoveToInboxIcon />
 							<Strong>Ano de publicação: </Strong>
-							{ colecao ?
+							{colecao ?
 								colecao_obj.created_at.split('-')[0]
 								: topico_obj.created_at.split('-')[0]
 							}
-							<br/>
+							<br />
 						</IconItem>
 
-							{ [0, 1, 2].map(i => {
-								const content = colecao ?
-									(colecao_obj.language[i] ?
-										colecao_obj.language[i].name
-										: '')
-									: (topico_obj.language[i] ?
-										topico_obj.language[i].name
-										: '')
-								return (
-									<IconItem>
-										<TranslateIcon/>
-										<Strong>Idioma: </Strong>
-										{ content }
-										<br/>
-									</IconItem>
-								);
-							})}
+						{[0, 1, 2].map(i => {
+							const content = colecao ?
+								(colecao_obj.language[i] ?
+									colecao_obj.language[i].name
+									: '')
+								: (topico_obj.language[i] ?
+									topico_obj.language[i].name
+									: '')
+							return (
+								<IconItem>
+									<TranslateIcon />
+									<Strong>Idioma: </Strong>
+									{content}
+									<br />
+								</IconItem>
+							);
+						})}
 
 						<IconItem>
-							<Strong>{ colecao ? "Criado" : "Enviado" } por:</Strong>
-							<br/>
+							<Strong>{colecao ? "Criado" : "Enviado"} por:</Strong>
+							<br />
 							<StyledAnchor href={colecao_obj.developedurl}>
 								{
-									colecao_obj.id === 3 ?	<LongUserIcon src={require("../img/logo_parceiros/ic_peninsula.png")} />
-									: <div>
-											<UserIcon src={require("../img/logo_parceiros/ic_nute.png")}/>
+									colecao_obj.id === 3 ? <LongUserIcon src={require("../img/logo_parceiros/ic_peninsula.png")} />
+										: <div>
+											<UserIcon src={require("../img/logo_parceiros/ic_nute.png")} />
 											<Red>
 												{colecao_obj.developed}
 											</Red>
@@ -110,67 +107,78 @@ export default function FormationMaterialDescription(props) {
 							</StyledAnchor>
 						</IconItem>
 					</IconList>
-					</HeightAdjustment>
 				</Grid>
 			</Grid>
 		</WrappingCard>
-  );
+	);
 }
 
-const Title=styled.h1`
+const Title = styled.h1`
 	font-weight: 100;
 	color: rgb(102, 102, 102);
 `
-const SubTitle=styled.h3`
+const SubTitle = styled.h3`
 	font-weight: 900;
 	padding-top: 10px;
 	color: rgb(102, 102, 102);
 `
-const UserIcon=styled.img`
+const UserIcon = styled.img`
 	width: 50px;
 	height: 50px;
 	border-radius: 100px;
 	margin: 10px 5px 10px 10px;
 `
-const LongUserIcon=styled.img`
+const LongUserIcon = styled.img`
 	width: 90px;
 	margin: 10px;
 `
-const Description=styled.p`
+const Description = styled.p`
 	color: #666;
 `
-const TextContainer=styled.div`
+const TextContainer = styled.div`
 	margin: 15px;
 	height: 100%;
-	border-right: solid 1px #e5e5e5;
+		@media screen and (max-width: 768px) {
+			border-bottom: solid 1px #e5e5e5;
+			padding : 0 0 10px 0
+		}
+		@media screen and (max-width: 990px) {
+			border-bottom: solid 1px #e5e5e5;
+			padding : 0 0 10px 0
+		}
+		@media screen and (min-width: 992px) {
+			border-right: solid 1px #e5e5e5;
+			padding : 0 15px 0 0
+
+		}
+		@media screen and (min-width: 1200px) {
+			border-right: solid 1px #e5e5e5;
+			padding : 0 15px 0 0
+		}
 `
-const HeightAdjustment=styled.div`
+const HeightAdjustment = styled.div`
 	height: 450px;
 `
-const WrappingCard=styled(Card)`
+const WrappingCard = styled(Card)`
 		border-radius: 0;
-		height: 500px !important;
 		margin-right : auto;
 		margin-left : auto;
 		margin-bottom: 30px;
 
 		@media screen and (max-width: 768px) {
 				width : 100% !important;
-				height: 600px !important;
 		}
 		@media screen and (min-width: 992px) {
 				width : 770px;
-				height: 600px !important;
 		}
 		@media screen and (min-width: 1200px) {
 				width : 970px !important;
-				height: 600px !important;
 		}
 `
-const IconList=styled.div`
-	margin-top: 50px;
+const IconList = styled.div`
+	margin: 15px;
 `
-const IconItem=styled.span`
+const IconItem = styled.span`
 		width: 100%;
 		display: inline-block;
 		margin-bottom: 15px;
@@ -185,18 +193,15 @@ const IconItem=styled.span`
 			vertical-align: middle
 		}
 
-		span {
-				margin-left : 2%;
-		}
 `
-const Strong=styled.span`
+const Strong = styled.span`
 	font-weight: bold;
 	color: #666;
 `
-const Red=styled.span`
+const Red = styled.span`
 	color: #e81f4f;
 `
-const StyledAnchor=styled.a`
+const StyledAnchor = styled.a`
 	text-decoration: none !important;
 	color: inherit !important;
 `
diff --git a/src/Components/FormationMaterialHeader.js b/src/Components/FormationMaterialHeader.js
index bf051eb5..0c497723 100644
--- a/src/Components/FormationMaterialHeader.js
+++ b/src/Components/FormationMaterialHeader.js
@@ -4,119 +4,131 @@ import styled from 'styled-components'
 import Grid from '@material-ui/core/Grid';
 import Card from '@material-ui/core/Card';
 import Button from '@material-ui/core/Button';
+import Chip from '@material-ui/core/Chip';
+import { makeStyles } from '@material-ui/core/styles';
+
+const useStyles = makeStyles((theme) => ({
+	root: {
+		display: 'flex',
+		flexWrap: 'wrap',
+		'& > *': {
+			margin: theme.spacing(0.5),
+		},
+	},
+}));
+
 
 export default function FormationMaterialHeader(props) {
 	const colecao = props.colecao;
 	const colecao_obj = props.colecao_obj;
 	const topico_obj = props.topico_obj;
 
+	const classes = useStyles();
+
 	const get_title = () => {
 		return colecao ?
-						colecao_obj.name
-						: (topico_obj.pre_title + topico_obj.title);
+			colecao_obj.name
+			: (topico_obj.pre_title + topico_obj.title);
 	}
 
 	const get_subtitle = () => {
 		return colecao ?
-					colecao_obj.topics.length+' '+colecao_obj.topic_name
-					: colecao_obj.name;
+			colecao_obj.topics.length + ' ' + colecao_obj.topic_name
+			: colecao_obj.name;
 	}
 
-  return (
+	const getThumb = () => {
+		return colecao ? 
+			require(`../../public/${colecao_obj.img}`)
+			: require(`../../public/${topico_obj.img}`)
+	}
+
+	return (
 		<WrappingCard>
-				<Grid container
-					direction="row"
+			<Grid container
+				direction="row"
+				justify="flex-start"
+				alignItems="stretch"
+			>
+				<Grid item xs={12} lg={5}>
+					<Img src={getThumb()} />
+				</Grid>
+				<Grid item xs={12} lg={7}
+					direction="column"
 					justify="flex-start"
 					alignItems="stretch"
+					style={{ padding: "8px 10px" }}
 				>
-					<Grid item xs={5}>
-						<Img src={require(`../../public/${colecao_obj.img}`)}/>
+					<Grid item>
+						<Title>{get_title()}</Title>
+					</Grid>
+					<Grid item>
+						<SubTitle>
+							{colecao ?
+								get_subtitle()
+								: <StyledLink to={'/colecao?id=' + colecao_obj.id}>{get_subtitle()}</StyledLink>}
+						</SubTitle>
 					</Grid>
-					<Grid item container xs={7}
-						direction="column"
-						justify="flex-start"
-						alignItems="stretch"
-					>
-						<Grid item>
-							<Title>{get_title()}</Title>
-						</Grid>
-						<Grid item>
-							<SubTitle>
-								{ colecao ? 
-										get_subtitle()
-										: <StyledLink to={'/colecao?id='+colecao_obj.id}>{get_subtitle()}</StyledLink> }
-							</SubTitle>
-						</Grid>
-						<Grid item>
-							<TagList>
-								{colecao_obj.tags.map((t) => {
-									return (<Badge>{t.name}</Badge>);
-								})}
-							</TagList>
-						</Grid>		
-						<Grid item>
-							{ colecao ? 	
-									<Button
-										variant="contained"
-										color="secondary"
-										style={{marginLeft: '15px'}}
-										onClick={props.handleClick}
-									>
-										{ props.colecao ? "Ver todos os módulos" : "Iniciar leitura" }
-									</Button>
-									:
-									<StyledLink to={'/iframe-colecao?colecao='+colecao_obj.id+'&topico='+topico_obj.id}>
-										<Button
-											variant="contained"
-											color="secondary"
-											style={{marginLeft: '15px'}}
-											onClick={props.handleClick}
-										>
-											{ props.colecao ? "Ver todos os módulos" : "Iniciar leitura" }
-										</Button>
-									</StyledLink>
-							}
-						</Grid>
+					<Grid item>
+						<ChipsDiv className={classes.root}>
+							{colecao_obj.tags.map((t, index) => {
+								return (<Chip color="default" label={t.name} key={index} style={{ padding: "0.5px" }} />);
+							})}
+						</ChipsDiv>
+					</Grid>
+					<Grid item>
+						{colecao ?
+							<Button
+								variant="contained"
+								color="secondary"
+								style={{ marginLeft: '15px' }}
+								onClick={props.handleClick}
+							>
+								{props.colecao ? "Ver todos os módulos" : "Iniciar leitura"}
+							</Button>
+							:
+							<StyledLink to={'/iframe-colecao?colecao=' + colecao_obj.id + '&topico=' + topico_obj.id}>
+								<Button
+									variant="contained"
+									color="secondary"
+									style={{ marginLeft: '15px', marginTop: '10px' }}
+									onClick={props.handleClick}
+								>
+									{props.colecao ? "Ver todos os módulos" : "Iniciar leitura"}
+								</Button>
+							</StyledLink>
+						}
 					</Grid>
 				</Grid>
+			</Grid>
 		</WrappingCard>
-  );
+	);
 }
 
-const Badge=styled.span`
-	background-color: #e5e5e5;
-	color: #666;
-	border-radius: 15px;
-	margin-left: 5px;
-	padding: 3px 7px;
-	line-height: 1.2em;
-	font-size: 0.7em;
-	display: inline-block;
-`
-const TagList=styled.div`
+const ChipsDiv = styled.div`
 	margin-bottom: 10px;
 	width: 100%;
 	margin-left: 10px;
 `
-const Img=styled.img`
-	max-width: 100%;
+const Img = styled.img`
+	width: 100%;
+	height: 100%;
+    display: block; /* remove extra space below image */
 	background-color: #e5e5e5;
-	display: inline-block;
 `
-const Title=styled.h1`
+const Title = styled.h2`
 	font-weight: 100;
 	margin: 15px;
 	color: rgb(102, 102, 102);
 `
-const SubTitle=styled.h3`
-	font-weight: 100;
+const SubTitle = styled.h4`
+	font-weight: 50;
 	margin: 15px;;
 	margin-top: 0;
 	color: rgb(102, 102, 102);
 `
-export const WrappingCard=styled(Card)`
+export const WrappingCard = styled(Card)`
 		border-radius: 0;
-		height: 250px !important;
 		margin-right : auto;
 		margin-left : auto;
 		margin-bottom: 30px;
@@ -132,7 +144,8 @@ export const WrappingCard=styled(Card)`
 				width : 970px !important;
 		}
 `
+
 const StyledLink = styled(Link)`
 	text-decoration: none !important;
-	color: inherit !important;
+	color: #e81f4f !important;
 `
diff --git a/src/Components/TopicFooter.js b/src/Components/TopicFooter.js
index 153ee88b..c6ce8ea4 100644
--- a/src/Components/TopicFooter.js
+++ b/src/Components/TopicFooter.js
@@ -9,7 +9,7 @@ export default function TopicFooter(props) {
 				<Grid
 					container
 					direction="row"
-					justify="flex-start"
+					justify="center"
 					alignItems="center"
 				>
 					<Grid item>
@@ -36,7 +36,6 @@ const Container=styled.div`
 `
 const FormationMaterialImage=styled.img`
 	width: 300px;
-	display: block;
 	margin-right: 20px;
 `
 const Text=styled.h2`
diff --git a/src/Components/TopicList.js b/src/Components/TopicList.js
index 71c232cd..e965adad 100644
--- a/src/Components/TopicList.js
+++ b/src/Components/TopicList.js
@@ -19,11 +19,13 @@ export default function TopicList(props) {
 			<Grid
 				container
 				spacing={3}
+				justify="center"
+				alignItems="center"
 			>
 				{props.topicos.slice(0, (expanded ? -1 : 5)).map((t, index) => {
 					return (
 						<Grid item key={index} md={3}>
-							<TopicCard topico_obj={t} colecao_id={props.colecao_id} />
+							<TopicCard topic={t} colecao_id={props.colecao_id} />
 						</Grid>
 					);
 				})
-- 
GitLab


From 9089f97ac69623e1a4b4b9c8ac960f7a1812b222 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 3 Feb 2021 09:26:26 -0300
Subject: [PATCH 44/83] Improve reponsivity of some pages

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Components/CollectionCommentSection.js    |  2 +-
 .../ResourcePageComponents/CommentForm.js     | 30 +++++++++----------
 .../ResourcePageComponents/Sobre.js           |  1 -
 .../SearchExpansionPanel/ExpansionPanel.css   |  7 +++++
 .../SearchExpansionPanel.js                   |  4 +--
 src/Pages/CollectionPage.js                   |  1 -
 6 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/Components/CollectionCommentSection.js b/src/Components/CollectionCommentSection.js
index 9351596e..375a4ba4 100644
--- a/src/Components/CollectionCommentSection.js
+++ b/src/Components/CollectionCommentSection.js
@@ -74,7 +74,7 @@ export default function CollectionCommentSection(props) {
 		`
 		return (
 			<NoCommentsContainer>
-				<Image src={Comentario} />
+				<Image src={Comentario} style={{width:"100%", maxWidth:234}}/>
 				<BlueTitle>Compartilhe sua opinião com a rede!</BlueTitle>
 				<Secondary>Gostou desta coleção? Comente e compartilhe com a rede sua opinião. Interagindo com a rede, você contribui para que mais coleções como esta sejam criadas.</Secondary>
 				<Button
diff --git a/src/Components/ResourcePageComponents/CommentForm.js b/src/Components/ResourcePageComponents/CommentForm.js
index 1859e116..0c1b3a85 100644
--- a/src/Components/ResourcePageComponents/CommentForm.js
+++ b/src/Components/ResourcePageComponents/CommentForm.js
@@ -90,7 +90,7 @@ export default function CommentForm (props) {
             <div className="star-alert" style={attemptedSubmit ? {visibility : "visible"} : {visibility : "hidden" }}>{props.recurso ? "Avalie se o recurso foi útil." : "Avalie se esta coleção foi útil."}</div>
 
             <Grid container>
-                <Grid item xs={10}>
+                <Grid item xs={12} md={9}>
                 <StyledTextField
                     colecao={!props.recurso}
                     value={comment.value}
@@ -103,22 +103,22 @@ export default function CommentForm (props) {
                     help = {comment.error ? (props.recurso ? "Escreva aqui a sua experiência com este Recurso" : "Escreva aqui a sua experiência com esta Coleção") : ''}
                 />
                 </Grid>
-                <Grid item xs={2}>
+                <Grid item xs={12} md={3}>
                     <div style={{height : "100%", display : "flex", flexDirection : "column", justifyContent : "flex-end"}}>
-            {
-                props.recurso ?
-                (
-                    <OrangeButton type="submit">Publicar</OrangeButton>
-                )
-                :
-                (
-                    <PurpleButton type="submit"><EditIcon/>Enviar</PurpleButton>
-                )
-            }
-        </div>
-        </Grid>
+                        {
+                            props.recurso ?
+                            (
+                                <OrangeButton type="submit">Publicar</OrangeButton>
+                            )
+                            :
+                            (
+                                <PurpleButton type="submit"><EditIcon/>Enviar</PurpleButton>
+                            )
+                        }
+                    </div>
+                </Grid>
 
-        <div className="campos-obrigatorios">* Campos obrigatórios.</div>
+                <div className="campos-obrigatorios">* Campos obrigatórios.</div>
             </Grid >
         </StyledForm>
     )
diff --git a/src/Components/ResourcePageComponents/Sobre.js b/src/Components/ResourcePageComponents/Sobre.js
index 0ff18fa7..7cf58bf7 100644
--- a/src/Components/ResourcePageComponents/Sobre.js
+++ b/src/Components/ResourcePageComponents/Sobre.js
@@ -270,7 +270,6 @@ const SobreDiv = styled.div`
         .tags-container {
             padding : 0;
             width : 100%;
-            display : flex;
             flex-direction : row;
             align-items : center;
             font-size : .8em;
diff --git a/src/Components/SearchExpansionPanel/ExpansionPanel.css b/src/Components/SearchExpansionPanel/ExpansionPanel.css
index c96e8361..f97d0f57 100644
--- a/src/Components/SearchExpansionPanel/ExpansionPanel.css
+++ b/src/Components/SearchExpansionPanel/ExpansionPanel.css
@@ -5,3 +5,10 @@
     min-width: 30px !important;
 }
 
+.MuiListItem-secondaryAction {
+    padding-right: 0px !important;
+}
+
+.MuiListItem-gutters {
+    padding-left: 10px !important;
+}
\ No newline at end of file
diff --git a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
index 6a8dea5d..ca65cb10 100644
--- a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
+++ b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
@@ -64,7 +64,7 @@ const TesteTypography = withStyles({
 
 const ExpansionPanelDetails = withStyles(theme => ({
   root: {
-    padding: theme.spacing(2)
+    // padding: theme.spacing(2)
   }
 }))(MuiExpansionPanelDetails);
 
@@ -98,7 +98,7 @@ export default function SearchExpansionPanel(props) {
             direction="row"
             justify="space-between"
           >
-            <Grid item>
+            <Grid item >
               <Typography
                 style={{
                   fontSize: "18px",
diff --git a/src/Pages/CollectionPage.js b/src/Pages/CollectionPage.js
index 123f6c6a..d2b71215 100644
--- a/src/Pages/CollectionPage.js
+++ b/src/Pages/CollectionPage.js
@@ -190,7 +190,6 @@ export default function CollectionPage(props) {
 const StyledBreadCrumbs = styled(Breadcrumbs)`
   display: flex;
   justify-content: flex-start;
-  max-width: 1170px;
   span {
     color: #a5a5a5;
   }
-- 
GitLab


From 818dd9d897ba9fcacdfe15b2a23f09dddad78a3a Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Wed, 3 Feb 2021 09:56:08 -0300
Subject: [PATCH 45/83] fixed default avatar not appearing

---
 src/Pages/PublicUserPage.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Pages/PublicUserPage.js b/src/Pages/PublicUserPage.js
index 8a7b23bb..b1967ec9 100644
--- a/src/Pages/PublicUserPage.js
+++ b/src/Pages/PublicUserPage.js
@@ -151,7 +151,7 @@ export default function PublicUserPage (props) {
                                 <HeaderContainer>
                                     <>
                                     {RenderFollowContainer(userData.followed, id, userData.follows_count)}
-                                    {RenderProfileAvatar(userData.avatar ? userData.avatar : noAvatar)}
+                                    {RenderProfileAvatar(userData.avatar ? userData.avatar : undefined)}
                                     <CoverContainer>
                                         {userData.cover && <img src={apiDomain + userData.cover} alt = '' style= {{width:"100%", height:"100%", objectFit : "cover" }}/>}
                                     </CoverContainer>
-- 
GitLab


From fce31ebfe5c0a0b9270f8bdd9b120968d3ee4fa8 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Wed, 3 Feb 2021 10:07:24 -0300
Subject: [PATCH 46/83] final version done

---
 .../HelperFunctions/getAxiosConfig.js         | 60 +++++++++++++++----
 1 file changed, 48 insertions(+), 12 deletions(-)

diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index cc75bd2f..84b1682f 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -22,25 +22,56 @@ export function getAxiosConfigFromJSON () {
     return config
 }
 
-export function updateHeaders (newHeaders) {
-    sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token'])
+function checkPreviousTokens (new_token) {
 
-    let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+    let prev_tokens = JSON.parse(sessionStorage.getItem('@portalmec/tokens'))
 
-    if (auth_headers) {
-        auth_headers['access-token'] = newHeaders['access-token']
+    if (prev_tokens) {
+        console.log('hasOwnProperty = ', prev_tokens.hasOwnProperty(new_token))
+        if (!prev_tokens.hasOwnProperty(new_token)) {
+            prev_tokens[new_token] = 1
+            console.log('adicionando token', new_token, ' a hash')
+            sessionStorage.setItem('@portalmec/tokens', JSON.stringify(prev_tokens))
+            return true
+        }
+        else {
+            return false
+        }
     }
     else {
-        auth_headers = {
-            client: newHeaders.client,
-            "access-token": newHeaders['access-token'],
-            uid: newHeaders.uid,
-            expiry: newHeaders.expiry,
-            "token-type": "Bearer"
+        let tokens = {}
+        tokens[new_token] = 1
+        console.log('adicionando token', new_token, ' a hash')
+        sessionStorage.setItem('@portalmec/tokens', JSON.stringify(tokens))
+        return true
+    }
+
+}
+
+export function updateHeaders (newHeaders) {
+
+    if (checkPreviousTokens(newHeaders['access-token'])) {
+
+        sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token'])
+
+        let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+
+        if (auth_headers) {
+            auth_headers['access-token'] = newHeaders['access-token']
         }
+        else {
+            auth_headers = {
+                client: newHeaders.client,
+                "access-token": newHeaders['access-token'],
+                uid: newHeaders.uid,
+                expiry: newHeaders.expiry,
+                "token-type": "Bearer"
+            }
+        }
+
+        sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
     }
 
-    sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
 }
 
 export const axiosGetRequest = (url, onSuccess, onError) => {
@@ -50,6 +81,7 @@ export const axiosGetRequest = (url, onSuccess, onError) => {
         (response) => {
 
             if ( response.headers['access-token'] && response.status !== 304) {
+                console.log('filtered = ', response)
                 updateHeaders(response.headers)
             }
 
@@ -68,6 +100,7 @@ export const axiosDeleteRequest = (url, onSuccess, onError) => {
         (response) => {
 
             if ( response.headers['access-token'] && response.status !== 304) {
+                console.log('filtered = ', response)
                 updateHeaders(response.headers)
             }
 
@@ -86,6 +119,7 @@ export const axiosPutRequest = (url, payload, onSuccess, onError) => {
         (response) => {
 
             if ( response.headers['access-token'] && response.status !== 304) {
+                console.log('filtered = ', response)
                 updateHeaders(response.headers)
             }
 
@@ -104,6 +138,7 @@ export const axiosPostRequest = (url, payload, onSuccess, onError) => {
         (response) => {
 
             if ( response.headers['access-token'] && response.status !== 304) {
+                console.log('filtered = ', response)
                 updateHeaders(response.headers)
             }
 
@@ -131,6 +166,7 @@ export const axiosAllRequest = (urls, onSuccess, onError) => {
         (responseArray) => {
             var aux = responseArray.filter(filterFunction)
             if (aux[0]) {
+                console.log('filtered = ', aux)
                 updateHeaders(aux[0].headers)
             }
 
-- 
GitLab


From 76563ff4232e2c450cf7c51510bbd1dd1f0e1bb8 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 3 Feb 2021 10:59:42 -0300
Subject: [PATCH 47/83] Improve resposivity of HelpCenter

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 .../HelpCenter/Cards/CardEncontrando.js       |   4 +-
 .../HelpCenter/Cards/CardGerenciando.js       |   3 +-
 .../HelpCenter/Cards/CardParticipando.js      |   5 +-
 .../HelpCenter/Cards/CardPublicando.js        |   4 +-
 src/Components/ResourceList.js                |   1 -
 src/Pages/HelpCenter.js                       | 167 ++++++++----------
 6 files changed, 87 insertions(+), 97 deletions(-)

diff --git a/src/Components/HelpCenter/Cards/CardEncontrando.js b/src/Components/HelpCenter/Cards/CardEncontrando.js
index f989352e..173f179d 100644
--- a/src/Components/HelpCenter/Cards/CardEncontrando.js
+++ b/src/Components/HelpCenter/Cards/CardEncontrando.js
@@ -75,7 +75,7 @@ const CardAjuda = styled.div`
 
   height: 360px;
   margin-bottom: 20px;
-
+  width: 100%
 
   .card {
     height: 280px;
@@ -84,7 +84,7 @@ const CardAjuda = styled.div`
     font-size: 14px;
     background-color:#fff;
     box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
-
+    margin-top:30px
     h3 {
       font-size: 23px;
       font-weight: 400;
diff --git a/src/Components/HelpCenter/Cards/CardGerenciando.js b/src/Components/HelpCenter/Cards/CardGerenciando.js
index 3cc9506a..d3e1daa3 100644
--- a/src/Components/HelpCenter/Cards/CardGerenciando.js
+++ b/src/Components/HelpCenter/Cards/CardGerenciando.js
@@ -93,7 +93,7 @@ const CardAjuda = styled.div`
 
   height: 360px;
   margin-bottom: 20px;
-
+  width: 100%
 
   .card {
     height: 280px;
@@ -102,6 +102,7 @@ const CardAjuda = styled.div`
     font-size: 14px;
     background-color:#fff;
     box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
+    margin-top:30px
 
     h3 {
       font-size: 23px;
diff --git a/src/Components/HelpCenter/Cards/CardParticipando.js b/src/Components/HelpCenter/Cards/CardParticipando.js
index 9dfdbf1a..5091e990 100644
--- a/src/Components/HelpCenter/Cards/CardParticipando.js
+++ b/src/Components/HelpCenter/Cards/CardParticipando.js
@@ -66,7 +66,8 @@ const CardAjuda = styled.div`
 
   height: 360px;
   margin-bottom: 20px;
-
+  width: 100%
+  
 
   .card {
     height: 280px;
@@ -75,6 +76,8 @@ const CardAjuda = styled.div`
     font-size: 14px;
     background-color:#fff;
     box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
+    margin-top:30px
+    
 
     h3 {
       font-size: 23px;
diff --git a/src/Components/HelpCenter/Cards/CardPublicando.js b/src/Components/HelpCenter/Cards/CardPublicando.js
index 673c7d15..c5fb0a3f 100644
--- a/src/Components/HelpCenter/Cards/CardPublicando.js
+++ b/src/Components/HelpCenter/Cards/CardPublicando.js
@@ -74,7 +74,7 @@ const CardAjuda = styled.div`
 
 height: 360px;
 margin-bottom: 20px;
-
+width: 100%
 
 .card {
   height: 280px;
@@ -83,7 +83,7 @@ margin-bottom: 20px;
   font-size: 14px;
   background-color:#fff;
   box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
-
+  margin-top:30px
   h3 {
     font-size: 23px;
     font-weight: 400;
diff --git a/src/Components/ResourceList.js b/src/Components/ResourceList.js
index 77c3ce1d..1925388c 100644
--- a/src/Components/ResourceList.js
+++ b/src/Components/ResourceList.js
@@ -36,7 +36,6 @@ function Alert(props) {
 
 
 export default function ResourceList(props) {
-	console.log(props);
 
 	const [selected, setSelected] = useState(Array.apply(
 		null, {length: props.resources.length}).map(i => false));
diff --git a/src/Pages/HelpCenter.js b/src/Pages/HelpCenter.js
index a082dce1..f70481b0 100644
--- a/src/Pages/HelpCenter.js
+++ b/src/Pages/HelpCenter.js
@@ -34,13 +34,20 @@ import CardGerenciando from '../Components/HelpCenter/Cards/CardGerenciando';
 
 
 function HelpCenter(props) {
+  let windowWidth = window.innerWidth
+
   return(
     <div style={{backgroundColor: "#f4f4f4"}}>
       <link href="https://fonts.googleapis.com/css?family=Pompiere|Roboto:300,400&display=swap" rel="stylesheet"/>
 
       <Secao1>
         <div className= "container">
-          <img src={Banner3} alt="banner3"/>
+          {
+            windowWidth > 420?
+              <img src={Banner3} alt="banner3"/>
+            :
+              <div/>
+          }
           <div className= "conteudo">
             <div className= "title">
               <h2>OLÁ! COMO PODEMOS AJUDAR?</h2>
@@ -57,17 +64,17 @@ function HelpCenter(props) {
                 <h2>Tópicos de Ajuda</h2>
               </div>
               <div>
-                <Grid container spacing={2}>
-                  <Grid item xs={3}>
+                <Grid container justify="center" style={{margin:-8}}>
+                  <Grid item xs={12} md={5} style={{padding:8}}>
                     <CardPublicando/>                  
                   </Grid>
-                  <Grid item xs={3}>
+                  <Grid item xs={12} md={5} style={{padding:8}}>
                     <CardEncontrando/>
                   </Grid>
-                  <Grid item xs={3}>
+                  <Grid item xs={12} md={5} style={{padding:8}}>
                     <CardParticipando/>
                   </Grid>
-                  <Grid item xs={3}>
+                  <Grid item xs={12} md={5} style={{padding:8}}>
                     <CardGerenciando/>
                   </Grid>
                 </Grid>
@@ -77,64 +84,66 @@ function HelpCenter(props) {
         </div>
 
       </Secao2>
-
+    <div style={{width:"100%"}}>
       <Secao3>
-        <Grid style={{height:"100%"}} container spacing={2}>
-          <Grid style={{backgroundColor: "#333",paddingInline:"0" }} item xs={6}>
-            <iframe title="Vídeo página ajuda" src="https://player.vimeo.com/video/231609051" width="100%" height="100%" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
-          </Grid>
-          <Grid item xs={6}>
-            <p className="titulo-sobre-ajuda">Plataforma MEC de Recursos Educacionais Digitais</p>
-            <p className="conteudo-sobre-ajuda">
-              Construa conosco a plataforma e amplie sua rede de conhecimento<br/>
-              interagindo com pessoas envolvidas com experiências que ocorrem<br/>
-              em todo o Brasil!
-            </p>
-            <hr/>
-            <Grid container spacing={1}>
-              <Grid item xs={6}>
-                <p className="links">
-                  <br/>
-                  <Link to={{
-                    pathname : 'plataforma-mec',
-                    state : {value : '0'}
-                  }}>O que é a Plataforma MEC</Link>
-                  <br/>
-                  <Link to={{
-                    pathname : 'plataforma-mec',
-                    state : {value : '1'}
-                  }}>Como foi construida a Plataforma<br/>MEC?</Link>
-                  <br/>
-                  <Link to={{
-                    pathname : 'plataforma-mec',
-                    state : {value : '3'}
-                  }}>Quais são os Portais Parceiros?</Link>
-                </p>
-              </Grid>
-              <Grid item xs={6}>
-                <p className="links">
-                  <br/>
-                  <Link to={{
-                    pathname : 'plataforma-mec',
-                    state : {value : '2'}
-                  }}>Entendendo as 3 áreas</Link>
-                  <br/>
-                  <Link to={{
-                    pathname : 'plataforma-mec',
-                    state : {value : '4'}
-                  }}>Tipos de recursos</Link>
-                  <br/>
-                  <Link to={{
-                    pathname : 'plataforma-mec',
-                    state : {value : '5'}
-                  }}>Softwares específicos</Link>
+          <Grid style={{height:"100%"}} container justify="center">
+            <Grid style={{backgroundColor: "#333",paddingInline:"0" }} item xs={12} md={6}>
+              <iframe title="Vídeo página ajuda" src="https://player.vimeo.com/video/231609051" width="100%" height="100%" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
+            </Grid>
+            <Grid item xs={12} md={6}>
+              <div>
+                <p className="titulo-sobre-ajuda">Plataforma MEC de Recursos Educacionais Digitais</p>
+                <p className="conteudo-sobre-ajuda">
+                  Construa conosco a plataforma e amplie sua rede de conhecimento
+                  interagindo com pessoas envolvidas com experiências que ocorrem
+                  em todo o Brasil!
                 </p>
+              </div>
+              <Grid container>
+                <Grid item xs={12} md={6}>
+                  <p className="links">
+                    <br/>
+                    <Link to={{
+                      pathname : 'plataforma-mec',
+                      state : {value : '0'}
+                    }}>O que é a Plataforma MEC</Link>
+                    <br/>
+                    <Link to={{
+                      pathname : 'plataforma-mec',
+                      state : {value : '1'}
+                    }}>Como foi construida a Plataforma<br/>MEC?</Link>
+                    <br/>
+                    <Link to={{
+                      pathname : 'plataforma-mec',
+                      state : {value : '3'}
+                    }}>Quais são os Portais Parceiros?</Link>
+                  </p>
+                </Grid>
+                <Grid item xs={12} md={6}>
+                  <p className="links">
+                    <br/>
+                    <Link to={{
+                      pathname : 'plataforma-mec',
+                      state : {value : '2'}
+                    }}>Entendendo as 3 áreas</Link>
+                    <br/>
+                    <Link to={{
+                      pathname : 'plataforma-mec',
+                      state : {value : '4'}
+                    }}>Tipos de recursos</Link>
+                    <br/>
+                    <Link to={{
+                      pathname : 'plataforma-mec',
+                      state : {value : '5'}
+                    }}>Softwares específicos</Link>
+                  </p>
+                </Grid>
               </Grid>
-            </Grid>
 
+            </Grid>
           </Grid>
-        </Grid>
-      </Secao3>
+        </Secao3>
+      </div>
 
       <Secao4>
         <div className="container">
@@ -142,7 +151,7 @@ function HelpCenter(props) {
             <h2>Não encontrou o que você precisa?</h2>
             <span>Entre em contato com a nossa Central de Ajuda</span>
             <br/>
-            <button><a href="contato">ENTRAR EM CONTATO</a></button>
+            <button style={{marginBottom:50, marginTop:20}}><a href="contato">ENTRAR EM CONTATO</a></button>
 
           </div>
         </div>
@@ -156,27 +165,25 @@ export default HelpCenter;
 
 
 const Secao1 = styled.div`
-  height: 374px;
   background-color:#00bcd4;
   text-align: center;
+  width: 100%;
   .container {
     height: 100%;
-    width: 1170px;
     display: flex;
     -webkit-box-pack: center;
     justify-content: center;
     -webkit-box-align: center;
     align-items: center;
-    padding-right: 15px;
     padding-left: 15px;
     margin-right: auto;
     margin-left: auto;
 
     img {
       position: relative;
-      left: 82px;
       top: 41.6%;
-      width: 230px;
+      max-width: 230px;
+      width: 90%;
       float: left;
       min-height: 1px;
       padding-right: 15px;
@@ -208,14 +215,13 @@ const Secao1 = styled.div`
 `
 
 const Secao2 = styled.div`
-  height: 536px;
   background-color:#f4f4f4;
   text-align: center;
   margin-bottom: 20px;
-
+  padding-bottom: 50px
+  width: 100%;
   .container {
     height: 100%;
-    width: 1170px;
     margin-right: auto;
     margin-left: auto;
 
@@ -243,7 +249,7 @@ const Secao2 = styled.div`
 
           .card {
             height: 280px;
-            padding: 40px 15px;
+            padding: 40px 0px;
             text-align: center;
             font-size: 14px;
             background-color:#fff;
@@ -258,13 +264,6 @@ const Secao2 = styled.div`
               line-height: 1.1;
             }
 
-            hr {
-              margin-top: 20px;
-              margin-bottom: 20px;
-              border: 0;
-              border-top: 1px solid #eee;
-              color: #a5a5a5;
-            }
 
             a {
               font-size: 15px;
@@ -321,14 +320,12 @@ const Secao2 = styled.div`
 `
 
 const Secao3 = styled.div`
-  height: 375px;
   padding: 0;
   text-align: center;
   background-color: #fff;
-  width: 1170px;
   margin-inline: auto;
   color: rgba(0,0,0,0.87);
-
+  width: 100%;
   .links {
     font-size: 15px;
     font-weight: lighter;
@@ -356,26 +353,16 @@ const Secao3 = styled.div`
     margin: 0 0 10px;
   }
 
-  hr {
-    width: 350px;
-    border: 0;
-    border-top: 1px solid #ccc;
-    margin-top: 20px;
-    margin-bottom: 20px;
-
-  }
 
 
 
 `
 
 const Secao4 = styled.div`
-  height: 290px;
-
+  width: 100%;
   .container {
     height: 100%;
     color: #a5a5a5;
-    width: 1170px;
     margin-inline: auto;
     display: flex;
     flex-direction: column;
-- 
GitLab


From 98c7524f799a1b62d847811f80674a5d801e5846 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 3 Feb 2021 11:42:58 -0300
Subject: [PATCH 48/83] Improve Responsivity of page TabResourceHelp

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/TabsHelp/TabResoursePub.js | 94 +++++++++++++---------------
 1 file changed, 43 insertions(+), 51 deletions(-)

diff --git a/src/Pages/TabsHelp/TabResoursePub.js b/src/Pages/TabsHelp/TabResoursePub.js
index 00214bc4..75dead02 100644
--- a/src/Pages/TabsHelp/TabResoursePub.js
+++ b/src/Pages/TabsHelp/TabResoursePub.js
@@ -60,48 +60,37 @@ export default function TabResoursePub (props) {
             </Link>
             <Link to="ajuda" >
               Ajuda
-            </Link>
-            
+            </Link>            
             <span>
                 {tabs[3]}
             </span>
-
-
           </StyledBreadCrumbs>
 
         </BreadCrumbsDiv>
-        <Grid container spacing={4}>
-          <Grid item xs={3}>
-            <Menu>
-              <h4>{tabs[3]}</h4>
-              <TabsStyled orientation = "vertical"
-                          variant = "scrollable"
-                          value = {tabValue}
-                          onChange = {handleChangeTab}
-                          TabIndicatorProps = {{style:{display: "none"}}}
-              >
-              <TabStyled label={tabs[0]}></TabStyled>
-              <TabStyled label={tabs[1]}></TabStyled>
-              <TabStyled label={tabs[2]}></TabStyled>
-              </TabsStyled>
-              <br/>
-              <div className="voltarInicio">
-                <a href="ajuda">VOLTAR AO ÍNICIO</a>
-              </div>
-              <hr/>
-              <div className="procurava">
-                Não encontrou o que procurava? Entre em 
-                <a href="contato"> contato</a>
-              </div>
-            </Menu>
-          </Grid>
-
-          <Grid item xs={9}>
+        <Grid container justify="center">
+          <Grid item xs={12} md={10} >
             <Principal>
-              <div className="fixo">
-                <img src={PublicandoRecursos} alt="Publicando Recursos"/>
-                <span>{tabs[3]}</span>
-              </div>
+              <Menu>
+                <div className="fixo">
+                  <img src={PublicandoRecursos} alt="Publicando Recursos"/>
+                  <span>{tabs[3]}</span>
+                </div>
+                <TabsStyled orientation = "vertical"
+                            variant = "scrollable"
+                            value = {tabValue}
+                            onChange = {handleChangeTab}
+                            TabIndicatorProps = {{style:{display: "none"}}}
+                >
+                <TabStyled label={tabs[0]}></TabStyled>
+                <TabStyled label={tabs[1]}></TabStyled>
+                <TabStyled label={tabs[2]}></TabStyled>
+                </TabsStyled>
+                <br/>
+                <div className="voltarInicio">
+                  <a href="ajuda">VOLTAR AO ÍNICIO</a>
+                </div>
+              </Menu>
+
               {tabValue === 0 && <Why title={tabs[0]}/>}
               {tabValue === 1 && <How title={tabs[1]}/>}
               {tabValue === 2 && <Which title={tabs[2]}/>}
@@ -111,22 +100,22 @@ export default function TabResoursePub (props) {
                   <span>Você pode navegar pelos tópicos de ajuda ou entrar em <a href="contato">Contato</a>.</span>
                 </div>
               </div>
-              <Grid style={{marginBottom:"50px"}} container spacing={2}>
-                <Grid item xs={4}>
-                  <CardEncontrando/>
-                </Grid>
-                <Grid item xs={4}>
-                  <CardParticipando/>
-                </Grid>
-                <Grid item xs={4}>
-                  <CardGerenciando/>
-                </Grid>
-
-              </Grid>
 
             </Principal>
           </Grid>  
-        </Grid>        
+        </Grid>   
+        <Grid style={{paddingBottom:"50px"}} container justify={"center"}>
+          <Grid item xs={12} md={3} style={{margin:5}}>
+            <CardEncontrando/>
+          </Grid>
+          <Grid item xs={12} md={3} style={{margin:5}}>
+            <CardParticipando/>
+          </Grid>
+          <Grid item xs={12} md={3} style={{margin:5}}>
+            <CardGerenciando/>
+          </Grid>
+
+        </Grid>     
 
 
       </Secao>
@@ -136,7 +125,6 @@ export default function TabResoursePub (props) {
 const StyledBreadCrumbs = styled(Breadcrumbs)`
   display : flex;
   justify-content : flex-start;
-  max-width : 1170px;
   span {
     color : #a5a5a5;
   }
@@ -160,7 +148,6 @@ const Principal = styled.div`
     height: 40px;
     text-align: center;
     background-color: #fff;
-    box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
     padding: 30px;
     margin-bottom: 30px;
     color: #666;
@@ -217,7 +204,10 @@ const TabsStyled = styled(Tabs)`
 
   .MuiTab-root{
     text-transform: none !important;
+    max-width:100%
   }
+  text-align: center;
+  width:100%
 
 `
 
@@ -227,6 +217,7 @@ const TabStyled = styled(Tab)`
   font-weight: 500;
   font-size: 14px !important;
   border-radius: 4px !important;
+  text-align: center;
 
 
   
@@ -244,6 +235,8 @@ const Menu = styled.div`
   color: #666;
   padding-block: 10px;
   box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px  rgba(0,0,0,.24);
+  margin-bottom:30px
+
 
   h4 {
     padding-inline: 15px;
@@ -289,7 +282,6 @@ const Menu = styled.div`
 `
 
 const Secao = styled.div`
-  width: 1138px;
   margin-inline: auto;
 
 `
-- 
GitLab


From 380c73fc0e93255aeffb60a6b04829043ce03555 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Wed, 3 Feb 2021 11:54:51 -0300
Subject: [PATCH 49/83] Improve Responsivity of page TabResourceFIndHelp

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/TabsHelp/TabResourseFind.js | 87 +++++++++++++--------------
 1 file changed, 42 insertions(+), 45 deletions(-)

diff --git a/src/Pages/TabsHelp/TabResourseFind.js b/src/Pages/TabsHelp/TabResourseFind.js
index 0398c28b..8691d282 100644
--- a/src/Pages/TabsHelp/TabResourseFind.js
+++ b/src/Pages/TabsHelp/TabResourseFind.js
@@ -73,38 +73,30 @@ export default function TabResourseFind (props) {
           </StyledBreadCrumbs>
 
         </BreadCrumbsDiv>
-        <Grid container spacing={4}>
-          <Grid item xs={3}>
-            <Menu>
-              <h4>{tabs[3]}</h4>
-              <TabsStyled orientation = "vertical"
-                          variant = "scrollable"
-                          value = {tabValue}
-                          onChange = {handleChangeTab}
-                          TabIndicatorProps = {{style:{display: "none"}}}
-              >
-              <TabStyled label={tabs[0]}></TabStyled>
-              <TabStyled label={tabs[1]}></TabStyled>
-              <TabStyled label={tabs[2]}></TabStyled>
-              </TabsStyled>
-              <br/>
-              <div className="voltarInicio">
-                <a href="ajuda">VOLTAR AO ÍNICIO</a>
-              </div>
-              <hr/>
-              <div className="procurava">
-                Não encontrou o que procurava? Entre em 
-                <a href="contato"> contato</a>
-              </div>
-            </Menu>
-          </Grid>
-
-          <Grid item xs={9}>
+        <Grid container justify="center">
+          <Grid item xs={12} md={10} >
             <Principal>
-              <div className="fixo">
+              <Menu>
+                <div className="fixo">
                 <img src={EncontrandoRecurso} alt="Encontrando Recursos"/>
-                <span>{tabs[3]}</span>
-              </div>
+                  <span>{tabs[3]}</span>
+                </div>
+                <TabsStyled orientation = "vertical"
+                            variant = "scrollable"
+                            value = {tabValue}
+                            onChange = {handleChangeTab}
+                            TabIndicatorProps = {{style:{display: "none"}}}
+                >
+                <TabStyled label={tabs[0]}></TabStyled>
+                <TabStyled label={tabs[1]}></TabStyled>
+                <TabStyled label={tabs[2]}></TabStyled>
+                </TabsStyled>
+                <br/>
+                <div className="voltarInicio">
+                  <a href="ajuda">VOLTAR AO ÍNICIO</a>
+                </div>
+              </Menu>
+
               {tabValue === 0 && <HowToDo title={tabs[0]}/>}
               {tabValue === 1 && <HowToFilter title={tabs[1]}/>}
               {tabValue === 2 && <HowToRank title={tabs[2]}/>}
@@ -114,22 +106,23 @@ export default function TabResourseFind (props) {
                   <span>Você pode navegar pelos tópicos de ajuda ou entrar em <a href="contato">Contato</a>.</span>
                 </div>
               </div>
-              <Grid style={{marginBottom:"50px"}} container spacing={2}>
-                <Grid item xs={4}>
-                  <CardPublicando/>
-                </Grid>
-                <Grid item xs={4}>
-                  <CardParticipando/>
-                </Grid>
-                <Grid item xs={4}>
-                  <CardGerenciando/>
-                </Grid>
-              </Grid>
+              
 
             </Principal>
           </Grid>  
         </Grid>        
-
+        <Grid style={{paddingBottom:"50px"}} container justify={"center"}>
+          <Grid item xs={12} md={3} style={{margin:5}}>
+            <CardPublicando/>
+          </Grid>
+          <Grid item xs={12} md={3} style={{margin:5}}>
+            <CardParticipando/>
+          </Grid>
+          <Grid item xs={12} md={3} style={{margin:5}}>
+            <CardGerenciando/>
+          </Grid>
+        </Grid>
+        
 
       </Secao>
     </div>
@@ -139,7 +132,6 @@ export default function TabResourseFind (props) {
 const StyledBreadCrumbs = styled(Breadcrumbs)`
   display : flex;
   justify-content : flex-start;
-  max-width : 1170px;
   span {
     color : #a5a5a5;
   }
@@ -156,13 +148,13 @@ const BreadCrumbsDiv = styled.div`
   display : flex;
 `
 
+
 const Principal = styled.div`
   .fixo {
     
     height: 40px;
     text-align: center;
     background-color: #fff;
-    box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
     padding: 30px;
     margin-bottom: 30px;
     color: #666;
@@ -219,7 +211,10 @@ const TabsStyled = styled(Tabs)`
 
   .MuiTab-root{
     text-transform: none !important;
+    max-width:100%
   }
+  text-align: center;
+  width:100%
 
 `
 
@@ -229,6 +224,7 @@ const TabStyled = styled(Tab)`
   font-weight: 500;
   font-size: 14px !important;
   border-radius: 4px !important;
+  text-align: center;
 
 
   
@@ -246,6 +242,8 @@ const Menu = styled.div`
   color: #666;
   padding-block: 10px;
   box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px  rgba(0,0,0,.24);
+  margin-bottom:30px
+
 
   h4 {
     padding-inline: 15px;
@@ -291,7 +289,6 @@ const Menu = styled.div`
 `
 
 const Secao = styled.div`
-  width: 1138px;
   margin-inline: auto;
 
 `
-- 
GitLab


From 6d3bf7eb5843fba892262254fb67181559c5058b Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:37:41 -0300
Subject: [PATCH 50/83] Function to save tokens from response

---
 src/Components/HelperFunctions/saveTokens.js | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 src/Components/HelperFunctions/saveTokens.js

diff --git a/src/Components/HelperFunctions/saveTokens.js b/src/Components/HelperFunctions/saveTokens.js
new file mode 100644
index 00000000..15b89b05
--- /dev/null
+++ b/src/Components/HelperFunctions/saveTokens.js
@@ -0,0 +1,6 @@
+export const saveHeaders = (response) => {
+    if (response.headers['access-token'])
+        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+    if (response.headers.client)
+        sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
+}
\ No newline at end of file
-- 
GitLab


From 2f21c90ba34981bdb4481a8a0b933b956b6f1795 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:38:39 -0300
Subject: [PATCH 51/83] Passed tags as params to collection card

---
 src/Components/AreasSubPages.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 73b9f823..4b24e10d 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -92,7 +92,7 @@ class ReqResources extends Component {
                     rating={card.review_average}
                     // author={card.author}
                     author={card.publisher.name}
-                    tags={card.educational_stages}
+                    tags={card.tags}
                     href={"/recurso/" + card.id}
                     downloadableLink={card.default_attachment_location}
                   />
-- 
GitLab


From cc133d5393ecca2b68e421b711667c2868e2d419 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:39:26 -0300
Subject: [PATCH 52/83] Passed params to collection card + add function to save
 tokens

---
 src/Pages/Search.js | 478 ++++++++++++++++++++++----------------------
 1 file changed, 244 insertions(+), 234 deletions(-)

diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index 8a5da348..b1763c24 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -39,6 +39,10 @@ import ResourceCardFunction from "../Components/ResourceCardFunction";
 import CollectionCardFunction from "../Components/CollectionCardFunction";
 import ContactCard from "../Components/ContactCard";
 import CircularProgress from '@material-ui/core/CircularProgress';
+import { getAxiosConfig } from '../Components/HelperFunctions/getAxiosConfig';
+import { saveHeaders } from '../Components/HelperFunctions/saveTokens';
+
+
 
 let order = "review_average";
 let currFilter = "";
@@ -75,179 +79,247 @@ export default function Search(props) {
   const [optionResult, setOptionResult] = useState(option);
 
   const collectStuff = (tipoBusca, filtro) => {
-    if(!loadingMoreData) // this line prevents resetting filter when loading more data
+    if (!loadingMoreData) // this line prevents resetting filter when loading more data
       currFilter = filtro;
     if (filtro)
       setIsFiltering(true);
-     
-    console.log(currFilter)
 
-    console.log(`${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`)
-    axios
-      .get(
-        `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`
-      )
-      .then((res) => {
-        if (tipoBusca === "LearningObject") setResultsResource(res.data);
-        else if (tipoBusca === "Collection") setResultsCollection(res.data);
-        else if (tipoBusca === "User") setResultsUser(res.data);
-        setOptionResult(tipoBusca);
-        dispatch({
-          type: "SAVE_SEARCH",
-          newSearch: {
-            query: state.search.query,
-            class: tipoBusca,
-          },
-        });
-        console.log(res);
-        setTotalResults(res.headers["x-total-count"]);
-        setIsLoading(false);
-        setIsFiltering(false);
-        setLoadingMoreData(false);
-      });
-  };
+    const axiosConfig = getAxiosConfig();
+    console.log(axiosConfig);
+    axios({
+      method: 'get',
+      url: `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`,
+      headers: axiosConfig.headers
+    }).then(res => {
+    if (tipoBusca === "LearningObject") setResultsResource(res.data);
+    else if (tipoBusca === "Collection") setResultsCollection(res.data);
+    else if (tipoBusca === "User") setResultsUser(res.data);
+    setOptionResult(tipoBusca);
+    dispatch({
+      type: "SAVE_SEARCH",
+      newSearch: {
+        query: state.search.query,
+        class: tipoBusca,
+      },
+    });
+    setTotalResults(res.headers["x-total-count"]);
+    setIsLoading(false);
+    setIsFiltering(false);
+    setLoadingMoreData(false);
+    saveHeaders(res);
+  })
+};
+
+useEffect(() => {
+  dispatch({
+    type: "HANDLE_SEARCH_BAR",
+    opened: false,
+  });
+
+  const urlParams = new URLSearchParams(window.location.search);
+  const query = urlParams.get("query");
+  const searchClass = urlParams.get("search_class");
+  console.log(searchClass);
+  if (state.search.query !== query || state.search.class !== searchClass) {
+    dispatch({
+      type: "SAVE_SEARCH",
+      newSearch: {
+        query: query,
+        class: searchClass,
+      },
+    });
+  }
 
-  useEffect(() => {
+  return () =>
     dispatch({
       type: "HANDLE_SEARCH_BAR",
       opened: false,
     });
+}, []);
 
-    const urlParams = new URLSearchParams(window.location.search);
-    const query = urlParams.get("query");
-    const searchClass = urlParams.get("search_class");
-    console.log(searchClass);
-    if (state.search.query !== query || state.search.class !== searchClass) {
-      dispatch({
-        type: "SAVE_SEARCH",
-        newSearch: {
-          query: query,
-          class: searchClass,
-        },
-      });
-    }
+useEffect(() => {
+  collectStuff(option);
+}, [resultsPerPage]);
 
-    return () =>
-      dispatch({
-        type: "HANDLE_SEARCH_BAR",
-        opened: false,
-      });
-  }, []);
-
-  useEffect(() => {
-    collectStuff(option);
-  }, [resultsPerPage]);
-
-  return (
-    <div style={{ backgroundColor: "#f4f4f4" }}>
-      <Principal>
-        <BreadCrumbsDiv>
-          <StyledBreadCrumbs>
-            <Link to="/">Página Inicial</Link>
-            <span>Busca</span>
-          </StyledBreadCrumbs>
-        </BreadCrumbsDiv>
-        <HeaderFilters elevation={4} square>
-          <Grid container spacing={0} style={{ height: "100%" }}>
-            <Grid
-              item
-              xs={4}
-              style={{
-                display: "flex",
-                flexDirection: "column",
-                justifyContent: "center",
-                paddingLeft: 20,
-              }}
-            >
-              <div style={{ display: "flex", flexDirection: "row" }}>
-                <span style={{ alignSelf: "center", marginRight: 10 }}>
-                  MOSTRAR:
+return (
+  <div style={{ backgroundColor: "#f4f4f4" }}>
+    <Principal>
+      <BreadCrumbsDiv>
+        <StyledBreadCrumbs>
+          <Link to="/">Página Inicial</Link>
+          <span>Busca</span>
+        </StyledBreadCrumbs>
+      </BreadCrumbsDiv>
+      <HeaderFilters elevation={4} square>
+        <Grid container spacing={0} style={{ height: "100%" }}>
+          <Grid
+            item
+            xs={4}
+            style={{
+              display: "flex",
+              flexDirection: "column",
+              justifyContent: "center",
+              paddingLeft: 20,
+            }}
+          >
+            <div style={{ display: "flex", flexDirection: "row" }}>
+              <span style={{ alignSelf: "center", marginRight: 10 }}>
+                MOSTRAR:
                 </span>
-                <Dropdown
-                  options={options}
-                  value={optionResult}
-                  onChange={(e) => {
-                    setIsLoading(true);
-                    setOption(e.value);
-                    collectStuff(e.value, "");
-                  }}
-                  placeholder="Select an type"
-                />
-              </div>
-            </Grid>
-            <Grid
-              item
-              xs={4}
-              style={{
-                display: "flex",
-                flexDirection: "column",
-                justifyContent: "center",
-              }}
-            >
-              <div>
-                Resultados encontrados: {totalResults}
-              </div>
-            </Grid>
-            {
-              optionResult === "User" ? null :
-                <Grid
-                  item
-                  xs={4}
+              <Dropdown
+                options={options}
+                value={optionResult}
+                onChange={(e) => {
+                  setIsLoading(true);
+                  setOption(e.value);
+                  collectStuff(e.value, "");
+                }}
+                placeholder="Select an type"
+              />
+            </div>
+          </Grid>
+          <Grid
+            item
+            xs={4}
+            style={{
+              display: "flex",
+              flexDirection: "column",
+              justifyContent: "center",
+            }}
+          >
+            <div>
+              Resultados encontrados: {totalResults}
+            </div>
+          </Grid>
+          {
+            optionResult === "User" ? null :
+              <Grid
+                item
+                xs={4}
+                style={{
+                  display: "flex",
+                  flexDirection: "column",
+                  justifyContent: "center",
+                  paddingRight: 20,
+                }}
+              >
+                <div
                   style={{
                     display: "flex",
-                    flexDirection: "column",
-                    justifyContent: "center",
-                    paddingRight: 20,
+                    flexDirection: "row",
+                    justifyContent: "end",
                   }}
                 >
-                  <div
+                  <span
                     style={{
-                      display: "flex",
-                      flexDirection: "row",
-                      justifyContent: "end",
+                      textAlign: "right",
+                      alignSelf: "center",
+                      marginRight: 10,
                     }}
                   >
-                    <span
-                      style={{
-                        textAlign: "right",
-                        alignSelf: "center",
-                        marginRight: 10,
-                      }}
-                    >
-                      ORDENAR POR:
+                    ORDENAR POR:
                 </span>
-                    <Dropdown
-                      options={ordenar}
-                      value={currOrder}
-                      onChange={(e) => {
-                        order = e.value;
-                        setCurrOrder(e.label)
-                        collectStuff(optionResult, currFilter);
-                      }}
-                      placeholder="Select an order "
-                    />
-                  </div>
+                  <Dropdown
+                    options={ordenar}
+                    value={currOrder}
+                    onChange={(e) => {
+                      order = e.value;
+                      setCurrOrder(e.label)
+                      collectStuff(optionResult, currFilter);
+                    }}
+                    placeholder="Select an order "
+                  />
+                </div>
+              </Grid>
+          }
+        </Grid>
+      </HeaderFilters>
+
+      {
+        isloading ? <LoadingSpinner text="Carregando..." /> :
+          optionResult === "Collection" ? (
+            <GridBuscaCollection container spacing={2}>
+              <Grid item md={12} xs={12}>
+                <Grid container spacing={2}>
+                  {resultsCollection.map((card) => (
+                    <Grid item md={4} xs={6} key={card.id}>
+                      <CollectionCardFunction
+                        name={card.name}
+                        tags={card.tags}
+                        rating={card.score}
+                        id={card.id}
+                        author={card.owner.name}
+                        description={card.description}
+                        thumbnails={card.items_thumbnails}
+                        avatar={card.owner.avatar}
+                        likeCount={card.likes_count}
+                        followed={card.followed}
+                        liked={card.liked}
+                        collections={card.collection_items}
+                        authorID={card.owner.id}
+                        onRefresh={() => collectStuff("Collection", currFilter)}
+                      />
+                    </Grid>
+                  ))}
                 </Grid>
-            }
-          </Grid>
-        </HeaderFilters>
+                <div
+                  style={{
+                    display: "flex",
+                    flexDirection: "row",
+                    justifyContent: "center",
+                  }}
+                >
+                  <button
+                    style={{
+                      height: 36,
+                      backgroundColor: "#ff7f00",
+                      marginBottom: 50,
+                      marginTop: 50,
+                      fontSize: 14,
+                      color: "white",
+                      borderRadius: 4,
+                      border: "none",
+                    }}
+                    onClick={() => {
+                      setLoadingMoreData(true);
+                      setResultsPerPage(resultsPerPage + 12)
+                      // collectStuff("Collection", "");
+                    }}
+                  >
+                    {
+                      loadingMoreData ? <CircularProgress size={24} color="inherit" /> : "Carregar mais 12"
+                    }
+                  </button>
+                </div>
+              </Grid>
+            </GridBuscaCollection>
+          ) :
 
-        {
-          isloading ? <LoadingSpinner text="Carregando..." /> :
-            optionResult === "Collection" ? (
-              <GridBuscaCollection container spacing={2}>
-                <Grid item md={12} xs={12}>
+            optionResult === "LearningObject" ? (
+              <GridBuscaResource container spacing={2}>
+                <Grid item md={3} xs={12}>
+                  <Paper elevation={4} square>
+                    <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
+                  </Paper>
+                </Grid>
+                <Grid item md={9} xs={12}>
                   <Grid container spacing={2}>
-                    {resultsCollection.map((card) => (
+                    {resultsResource.map((card) => (
                       <Grid item md={4} xs={6} key={card.id}>
-                        <CollectionCardFunction
-                          name={card.name}
-                          rating={card.score}
+                        <ResourceCardFunction
+                          avatar={card.publisher.avatar}
                           id={card.id}
-                          author={card.owner.name}
-                          description={card.description}
-                          thumbnails={card.items_thumbnails}
-                          avatar={card.owner.avatar}
+                          thumbnail={card.thumbnail}
+                          type={card.object_type ? card.object_type : "Outros"}
+                          title={card.name}
+                          published={card.state === "published" ? true : false}
+                          likeCount={card.likes_count}
+                          liked={card.liked}
+                          rating={card.review_average}
+                          author={card.publisher.name}
+                          tags={card.tags}
+                          href={"/recurso/" + card.id}
+                          downloadableLink={card.default_attachment_location}
                         />
                       </Grid>
                     ))}
@@ -273,7 +345,7 @@ export default function Search(props) {
                       onClick={() => {
                         setLoadingMoreData(true);
                         setResultsPerPage(resultsPerPage + 12)
-                        // collectStuff("Collection", "");
+                        // collectStuff("LearningObject", "");
                       }}
                     >
                       {
@@ -282,34 +354,24 @@ export default function Search(props) {
                     </button>
                   </div>
                 </Grid>
-              </GridBuscaCollection>
+              </GridBuscaResource>
             ) :
-
-              optionResult === "LearningObject" ? (
-                <GridBuscaResource container spacing={2}>
-                  <Grid item md={3} xs={12}>
-                    <Paper elevation={4} square>
-                      <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
-                    </Paper>
-                  </Grid>
-                  <Grid item md={9} xs={12}>
+              optionResult === "User" && (
+                <GridBuscaUser container spacing={2}>
+                  <Grid item md={12} xs={12}>
                     <Grid container spacing={2}>
-                      {resultsResource.map((card) => (
+                      {resultsUser.map((card) => (
                         <Grid item md={4} xs={6} key={card.id}>
-                          <ResourceCardFunction
-                            avatar={card.publisher.avatar}
-                            id={card.id}
-                            thumbnail={card.thumbnail}
-                            type={card.object_type ? card.object_type : "Outros"}
-                            title={card.name}
-                            published={card.state === "published" ? true : false}
-                            likeCount={card.likes_count}
-                            liked={card.liked}
-                            rating={card.review_average}
-                            author={card.author}
-                            tags={card.educational_stages}
-                            href={"/recurso/" + card.id}
-                            downloadableLink={card.default_attachment_location}
+                          <ContactCard
+                            name={card.name}
+                            avatar={card.avatar ? apiDomain + card.avatar : null}
+                            cover={card.cover ? apiDomain + card.cover : null}
+                            numCollections={card.collections_count}
+                            numLearningObjects={card.learning_objects_count}
+                            follow_count={card.follows_count}
+                            followed={card.followed || null}
+                            followerID={card.id}
+                            href={'/usuario-publico/' + card.id}
                           />
                         </Grid>
                       ))}
@@ -335,73 +397,21 @@ export default function Search(props) {
                         onClick={() => {
                           setLoadingMoreData(true);
                           setResultsPerPage(resultsPerPage + 12)
-                          // collectStuff("LearningObject", "");
+                          // collectStuff("User", "");
                         }}
                       >
                         {
-                          loadingMoreData ? <CircularProgress size={24} color="inherit" /> : "Carregar mais 12"
+                          loadingMoreData ? <CircularProgress color="inherit" size={24} /> : "Carregar mais 12"
                         }
                       </button>
                     </div>
                   </Grid>
-                </GridBuscaResource>
-              ) :
-                optionResult === "User" && (
-                  <GridBuscaUser container spacing={2}>
-                    <Grid item md={12} xs={12}>
-                      <Grid container spacing={2}>
-                        {resultsUser.map((card) => (
-                          <Grid item md={4} xs={6} key={card.id}>
-                            <ContactCard
-                              name={card.name}
-                              avatar={card.avatar ? apiDomain + card.avatar : null}
-                              cover={card.cover ? apiDomain + card.cover : null}
-                              numCollections={card.collections_count}
-                              numLearningObjects={card.learning_objects_count}
-                              follow_count={card.follows_count}
-                              followed={card.followed || null}
-                              followerID={card.id}
-                              href={'/usuario-publico/' + card.id}
-                            />
-                          </Grid>
-                        ))}
-                      </Grid>
-                      <div
-                        style={{
-                          display: "flex",
-                          flexDirection: "row",
-                          justifyContent: "center",
-                        }}
-                      >
-                        <button
-                          style={{
-                            height: 36,
-                            backgroundColor: "#ff7f00",
-                            marginBottom: 50,
-                            marginTop: 50,
-                            fontSize: 14,
-                            color: "white",
-                            borderRadius: 4,
-                            border: "none",
-                          }}
-                          onClick={() => {
-                            setLoadingMoreData(true);
-                            setResultsPerPage(resultsPerPage + 12)
-                            // collectStuff("User", "");
-                          }}
-                        >
-                          {
-                            loadingMoreData ? <CircularProgress color="inherit" size={24} /> : "Carregar mais 12"
-                          }
-                        </button>
-                      </div>
-                    </Grid>
-                  </GridBuscaUser>
-                )
-        }
-      </Principal>
-    </div>
-  );
+                </GridBuscaUser>
+              )
+      }
+    </Principal>
+  </div>
+);
 }
 
 const GridBuscaCollection = styled(Grid)`
-- 
GitLab


From c533565dc3377ddea4035e2f80b6acb6bd535008 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:41:30 -0300
Subject: [PATCH 53/83] add a tab to open the collection page in other browser
 tab

---
 src/Components/ColCardPublicOptions.js | 209 +++++++++++++++----------
 1 file changed, 127 insertions(+), 82 deletions(-)

diff --git a/src/Components/ColCardPublicOptions.js b/src/Components/ColCardPublicOptions.js
index 53c8e8a3..0974c292 100644
--- a/src/Components/ColCardPublicOptions.js
+++ b/src/Components/ColCardPublicOptions.js
@@ -16,92 +16,137 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useState} from 'react';
-import Button from '@material-ui/core/Button';
-import Menu from '@material-ui/core/Menu';
-import ListItemIcon from '@material-ui/core/ListItemIcon';
-import MenuItem from '@material-ui/core/MenuItem';
-import OpenIcon from '@material-ui/icons/OpenInNew';
-import {Link} from 'react-router-dom'
-import MoreVertIcon from '@material-ui/icons/MoreVert';
-import styled from 'styled-components'
-import ErrorIcon from '@material-ui/icons/Error';
-import ReportModal from './ReportModal.js'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
-import axios from 'axios'
-import {apiUrl} from '../env';
-
-export default function ColCardPublicOptions (props) {
-  const [anchorEl, setAnchorEl] = React.useState(null);
-
-  function handleClick(event) {
-    setAnchorEl(event.currentTarget);
-  }
-
-  function handleClose() {
-    setAnchorEl(null);
-  }
-
-  const [reportModalOpen, toggleReportModal] = useState(false)
-  const handleReportModal = (value) => {toggleReportModal(value)}
-
-  const handleUnfollow = () => {
-      let config = getAxiosConfig()
-      let payload = {}
+import React, { useState } from "react";
+import Button from "@material-ui/core/Button";
+import Menu from "@material-ui/core/Menu";
+import ListItemIcon from "@material-ui/core/ListItemIcon";
+import MenuItem from "@material-ui/core/MenuItem";
+import OpenIcon from "@material-ui/icons/OpenInNew";
+import { Link } from "react-router-dom";
+import MoreVertIcon from "@material-ui/icons/MoreVert";
+import styled from "styled-components";
+import ErrorIcon from "@material-ui/icons/Error";
+import ReportModal from "./ReportModal.js";
+import { getAxiosConfig } from "../Components/HelperFunctions/getAxiosConfig";
+import axios from "axios";
+import ReportProblemIcon from '@material-ui/icons/ReportProblem';
+import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';
+import { apiUrl } from "../env";
+
+export default function ColCardPublicOptions(props) {
+    const [anchorEl, setAnchorEl] = React.useState(null);
+
+    function handleClick(event) {
+        setAnchorEl(event.currentTarget);
+    }
 
-      axios.put( (`${apiUrl}/collections/` + props.id + '/follow'),payload, config).then(
-          (response) => {
-              console.log(response.data)
-              if ( response.headers['access-token'] ) {
-                  sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-              }
-          }, (error) => {console.log(error)})
-  }
+    function handleClose() {
+        setAnchorEl(null);
+    }
 
-  return (
-      <>
-      <ReportModal open={reportModalOpen} handleClose={() => handleReportModal(false)}
-              form="colecao" complainableId={props.id}
-              complainableType={"Collection"}
-              />
-        <div style={{fontSize: "12px"}}>
-          <Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick} style={{color : "#666"}}>
-        <MoreVertIcon style={{color : "inherit"}}/>
-          </Button>
-          <Menu
-            id="simple-menu"
-            anchorEl={anchorEl}
-            keepMounted
-            open={Boolean(anchorEl)}
-            onClose={handleClose}
-          >
-            <StyledMenuItem>
-                <Link to={"/colecao-do-usuario/" + props.id}>
-                    <ListItemIcon><OpenIcon /></ListItemIcon>Abrir
-                </Link>
-            </StyledMenuItem>
-
-            <StyledMenuItem onClick={handleUnfollow}>
-                <ListItemIcon><ErrorIcon /></ListItemIcon>Deixar de Seguir
-            </StyledMenuItem>
-
-            <StyledMenuItem onClick={() => {handleReportModal(true)}}>
-                <ListItemIcon><ErrorIcon /></ListItemIcon>Reportar
-            </StyledMenuItem>
-          </Menu>
-        </div>
+    const [reportModalOpen, toggleReportModal] = useState(false);
+    const handleReportModal = (value) => {
+        toggleReportModal(value);
+    };
+
+    const handleUnfollow = () => {
+        let config = getAxiosConfig();
+        let payload = {};
+
+        axios
+            .put(`${apiUrl}/collections/` + props.id + "/follow", payload, config)
+            .then(
+                (response) => {
+                    console.log(response.data);
+                    if (response.headers["access-token"]) {
+                        sessionStorage.setItem(
+                            "@portalmec/accessToken",
+                            response.headers["access-token"]
+                        );
+                    }
+                },
+                (error) => {
+                    console.log(error);
+                }
+            );
+    };
+
+    return (
+        <>
+            <ReportModal
+                open={reportModalOpen}
+                handleClose={() => handleReportModal(false)}
+                form="colecao"
+                complainableId={props.id}
+                complainableType={"Collection"}
+            />
+            <div style={{ fontSize: "12px" }}>
+                <Button
+                    aria-controls="simple-menu"
+                    aria-haspopup="true"
+                    onClick={handleClick}
+                    style={{ color: "#666" }}
+                >
+                    <MoreVertIcon style={{ color: "inherit" }} />
+                </Button>
+                <Menu
+                    id="simple-menu"
+                    anchorEl={anchorEl}
+                    keepMounted
+                    open={Boolean(anchorEl)}
+                    onClose={handleClose}
+                >
+                    <StyledMenuItem>
+                        <Link to={"/colecao-do-usuario/" + props.id}>
+                            <ListItemIcon>
+                                <OpenIcon />
+                            </ListItemIcon>
+                            Abrir
+                        </Link>
+                    </StyledMenuItem>
+
+                    <StyledMenuItem
+                        onClick={() =>
+                            window.open("/colecao-do-usuario/" + props.id, "_blank")
+                        }
+                    >
+                        <ListItemIcon>
+                            <OpenInBrowserIcon />
+                        </ListItemIcon>
+                        Abrir em nova guia
+                    </StyledMenuItem>
+
+                    <StyledMenuItem onClick={handleUnfollow}>
+                        <ListItemIcon>
+                            <ErrorIcon />
+                        </ListItemIcon>
+                        Deixar de Seguir
+                    </StyledMenuItem>
+
+                    <StyledMenuItem
+                        onClick={() => {
+                            handleReportModal(true);
+                        }}
+                    >
+                        <ListItemIcon>
+                            <ReportProblemIcon />
+                        </ListItemIcon>
+                        Reportar
+                    </StyledMenuItem>
+                </Menu>
+            </div>
         </>
-  )
+    );
 }
 
 export const StyledMenuItem = styled(MenuItem)`
-    color : #666 !important;
+  color: #666 !important;
 
-    .MuiSvgIcon-root {
-        vertical-align : middle !important;
-    }
-    a {
-        text-decoration : none !important;
-        color : #666 !important;
-    }
-`
+  .MuiSvgIcon-root {
+    vertical-align: middle !important;
+  }
+  a {
+    text-decoration: none !important;
+    color: #666 !important;
+  }
+`;
-- 
GitLab


From 9e7e94518f0029309dbdd8688ca656cd8809ae11 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:42:38 -0300
Subject: [PATCH 54/83] Try to fix the animations

---
 src/Components/CollectionCardFunction.js | 377 +++++++++++++----------
 1 file changed, 212 insertions(+), 165 deletions(-)

diff --git a/src/Components/CollectionCardFunction.js b/src/Components/CollectionCardFunction.js
index 5b015705..b48c2eb6 100644
--- a/src/Components/CollectionCardFunction.js
+++ b/src/Components/CollectionCardFunction.js
@@ -16,15 +16,15 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useState, useContext} from 'react';
-import {Store} from '../Store.js'
-import {apiDomain, apiUrl} from '../env';
+import React, { useState, useContext, useEffect } from 'react';
+import { Store } from '../Store.js'
+import { apiDomain, apiUrl } from '../env';
 import noAvatar from "../img/default_profile.png";
 import Button from '@material-ui/core/Button';
 import styled from 'styled-components'
 import Slide from '@material-ui/core/Slide';
 import Grid from '@material-ui/core/Grid';
-import {StyledCard, CardDiv, CardReaDiv, Footer, LikeCounter, ButtonNoWidth, EnviadoPor, TagContainer} from './ResourceCardFunction.js'
+import { StyledCard, CardDiv, CardReaDiv, Footer, LikeCounter, ButtonNoWidth, EnviadoPor, TagContainer } from './ResourceCardFunction.js'
 import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import FolderIcon from '@material-ui/icons/Folder';
@@ -34,86 +34,109 @@ import CheckIcon from '@material-ui/icons/Check';
 import LockIcon from '@material-ui/icons/Lock';
 import ColCardOwnerOptions from './ColCardOwnerOptions.js'
 import ColCardPublicOptions from './ColCardPublicOptions'
-import {Link} from 'react-router-dom';
+import { Link } from 'react-router-dom';
 import axios from 'axios'
-import {getAxiosConfig} from '../Components/HelperFunctions/getAxiosConfig'
+import { getAxiosConfig } from '../Components/HelperFunctions/getAxiosConfig'
+import { saveHeaders } from '../Components/HelperFunctions/saveTokens';
+import SignUpModal from './SignUpModal'
+import LoginModal from './LoginModal.js'
+import Snackbar from '@material-ui/core/Snackbar';
+import MuiAlert from '@material-ui/lab/Alert';
 
-export default function CollectionCardFunction (props) {
-    const {state} = useContext(Store)
+export default function CollectionCardFunction(props) {
+    console.log(props);
+    const { state } = useContext(Store)
 
     // eslint-disable-next-line
     const [userAvatar] = useState(props.avatar ? (`${apiDomain}` + props.avatar) : noAvatar)
-    const [userFollowingCol, toggleUserFollowingCol] = useState(props.followed)
-    const handleToggleUserFollowingCol = () => {toggleUserFollowingCol(!userFollowingCol)}
+    const [userFollowingCol, toggleUserFollowingCol] = useState(props.followed ? props.followed : false)
+    const handleToggleUserFollowingCol = () => { toggleUserFollowingCol(!userFollowingCol) }
 
     const [likesCount, setLikesCount] = useState(props.likeCount)
     const [liked, toggleLiked] = useState(props.liked)
+
+    const [signUpOpen, setSignUp] = useState(false)
+    const [loginOpen, setLogin] = useState(false)
+    const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
+
     const handleLike = () => {
         let payload = {}
         let config = getAxiosConfig()
 
-        axios.put( (`${apiUrl}/collections/` + props.id + '/like'),payload, config
-        ).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                toggleLiked(!liked)
-                setLikesCount(response.data.count)
-            },
-            (error) => {console.log(error)}
-        )
+        if (state.currentUser.id) {
+            axios({
+                method: 'put',
+                url: `${apiUrl}/collections/` + props.id + '/like',
+                headers: config.headers
+            }).then(
+                (response) => {
+                    toggleLiked(!liked)
+                    setLikesCount(response.data.count)
+                    saveHeaders(response)
+                },
+                (error) => { console.log(error) }
+            )
+        }
+        else {
+            setLogin(!loginOpen)
+        }
     }
 
     const [followingHover, handleFollowingHover] = useState(false)
-    const toggleFollowingHover = (value) => {handleFollowingHover(value)}
+    const toggleFollowingHover = (value) => { handleFollowingHover(value) }
 
     const [slideIn, setSlide] = useState(false)
-    const controlSlide = () => {setSlide(!slideIn)}
+    const controlSlide = () => { setSlide(!slideIn) }
 
     const handleFollow = () => {
         let config = getAxiosConfig()
         let payload = {}
 
-        axios.put( (`${apiUrl}/collections/` + props.id + '/follow'),payload, config).then(
-            (response) => {
-                if ( response.headers['access-token'] ) {
-                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-                }
-                console.log(response.data)
-                handleToggleUserFollowingCol()
-            },
-            (error) => {console.log(error)}
-        )
+        if (state.currentUser.id) {
+            axios.put((`${apiUrl}/collections/` + props.id + '/follow'), payload, config).then(
+                (response) => {
+                    saveHeaders(response)
+                    handleToggleUserFollowingCol()
+                },
+                (error) => { console.log(error) }
+            )
+        }
+        else {
+            setLogin(!loginOpen)
+        }
     }
 
     const RenderFollowButton = () => {
         return (
             <FollowButton onClick={handleFollow}>
-                <AddIcon/><span>SEGUIR</span>
+                <AddIcon /><span>SEGUIR</span>
             </FollowButton>
         )
     }
 
+    useEffect(() => {
+        console.log("bla!");
+    }, [state.currentUser.id])
+
     const RenderFollowingButton = () => {
         return (
             <FollowingButton onMouseOver={() => toggleFollowingHover(true)}
                 onMouseLeave={() => toggleFollowingHover(false)} onClick={handleFollow}>
                 {
                     followingHover ?
-                    (
-                        [
-                            <span>DEIXAR DE SEGUIR</span>
-                        ]
-                    )
-                    :
-                    (
-                        [
-                            <React.Fragment>
-                                <CheckIcon/><span>SEGUINDO</span>
-                            </React.Fragment>
-                        ]
-                    )
+                        (
+                            [
+                                <span>DEIXAR DE SEGUIR</span>
+                            ]
+                        )
+                        :
+                        (
+                            [
+                                <React.Fragment>
+                                    <CheckIcon /><span>SEGUINDO</span>
+                                </React.Fragment>
+                            ]
+                        )
                 }
             </FollowingButton>
         )
@@ -122,147 +145,171 @@ export default function CollectionCardFunction (props) {
     const SlideAnimationContent = () => {
         return (
             <SlideContentDiv>
-                <div style={{display:"flex", flex:"1"}}>{/*marginBottom:10px*/}
+                <div style={{ display: "flex", flex: "1" }}>{/*marginBottom:10px*/}
                     <SlideAvatarDiv>
-                        <img className="img" src={userAvatar} alt="user avatar"/>
+                        <img className="img" src={userAvatar} alt="user avatar" />
                     </SlideAvatarDiv>
                     <EnviadoPor>
                         Enviado por:
-                        <br/>
+                    <br />
                         <p>{props.author}</p>
                     </EnviadoPor>
                 </div>
                 {
-                props.tags &&
-                <TagContainer>
-                    <Grid container spacing={1} justify='safe' style={{height : "inherit"}}>
-                    {
-                        props.tags.map( (tag) =>
-                            <Grid item key={tag.id}>
+                    props.tags &&
+                    <TagContainer>
+                        {
+                            props.tags.map((tag) =>
                                 <span key={tag.id}>{tag.name}</span>
-                            </Grid>
-                        )
-                    }
-                    </Grid>
-                </TagContainer>
+                            )
+                        }
+                    </TagContainer>
                 }
             </SlideContentDiv>
         )
     }
 
-    return (
-        <StyledCard>
-            <CardDiv>
-                <CardReaDiv>
-                    <Header onMouseEnter={controlSlide} onMouseLeave={controlSlide}>
-                        {/*slide animation and content*/}
-                        <Slide direction="right" in={slideIn} timeout={300}>
-                            <Link to={"/colecao-do-usuario/" + props.id} className="text">
-                            {/* <a href={"/colecao-do-usuario/" + props.id} className="text"> */}
-                                {SlideAnimationContent()}
-                            </Link>
-                        </Slide>
-                        <Slide direction="left" in={!slideIn} timeout={700}>
-                            <a href={"/colecao-do-usuario/" + props.id}>
-
-                                        <UserInfo>
-                                            <AvatarDiv>
-                                                <img src={userAvatar} alt="user avatar"/>
-                                            </AvatarDiv>
-                                            <UserAndTitle>
-                                                <span>{props.author}</span>
-                                                <span className={"col-name"}>{props.name}</span>
-                                            </UserAndTitle>
-                                        </UserInfo>
-
-
-                                <StyledGrid container direction="row">
-                                    {
-                                        props.thumbnails.map( (thumb) =>
-                                            <Grid item xs={props.thumbnails <= 4 && props.thumbnails > 0 ? 12/props.thumbnails.length : 6}>
-                                                <div style={{backgroundImage : `url(${ `${apiDomain}` + thumb})`, height : "100%", width : "100%", backgroundSize : "cover", backgroundPosition : "center"}}/>
-                                            </Grid>
-                                        )
-                                    }
-                                </StyledGrid>
-                            </a>
-                        </Slide>
-                    </Header>
+    const handleSignUp = () => {
+        setSignUp(!signUpOpen)
+    }
 
-                    <Description> {/*renders rating, number of learning objects and likes count*/}
-                        {
-                            props.authorID !== state.currentUser.id &&
-                            <Rating
-                              name="customized-empty"
-                              value={props.rating*10}
-                              precision={0.5}
-                              style={{color:"#666"}}
-                              emptyIcon={<StarBorderIcon fontSize="inherit" />}
-                            />
-                        }
+    const handleLogin = () => {
+        setLogin(!loginOpen)
+    }
 
-                        <Footer>
-                            <Type>
-                                <FolderIcon />
-                                <span style={{fontWeight:"bold"}}>{props.thumbnails.length} </span>
-                                <span>{props.thumbnails.length !== 1 ? "Recursos" : "Recurso"}</span>
-                            </Type>
-                            <LikeCounter>
-                                <span>{likesCount}</span>
-                                <ButtonNoWidth onClick={handleLike}>
-                                    <FavoriteIcon style={{color : liked ? "red" : "#666" }}/>
-                                </ButtonNoWidth>
-                            </LikeCounter>
-                        </Footer>
-                    </Description>
-
-                </CardReaDiv>
+    function Alert(props) {
+        return <MuiAlert elevation={6} variant="filled" {...props} />;
+    }
 
-                {
-                    props.authorID === state.currentUser.id ?
-                    (
-                        <CardReaFooter style={{justifyContent : "space-between"}}> {/*renders following/unfollow and follow button*/}
-                            <Grid container>
-                                <Grid item xs={6} style={{display : "flex", justifyContent : "center"}}>
-                                    {
-                                        props.privacy === 'private' &&
-                                        <LockIcon style={{color : "#666"}}/>
-                                    }
-                                </Grid>
-                                <Grid item xs={6} style={{display : "flex", justifyContent : "flex-end"}}>
-                                    <ColCardOwnerOptions
-                                        id={props.id}
-                                        />
-                                </Grid>
-                            </Grid>
-                        </CardReaFooter>
-                    )
-                    :
-                    (
-                        <CardReaFooter> {/*renders following/unfollow and follow button*/}
-                        {
-                            userFollowingCol ?
+    function toggleLoginSnackbar(reason) {
+        if (reason === 'clickaway') {
+            return;
+        }
+        handleSuccessfulLogin(false);
+    }
+    
+    return (
+        <>
+            <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}
+            />
+            <LoginModal open={loginOpen} handleClose={() => setLogin(false)} openSignUp={handleSignUp}
+                openSnackbar={() => { handleSuccessfulLogin(true) }}
+            />
+            <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleLoginSnackbar}
+                anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
+            >
+                <Alert severity="success" style={{ backgroundColor: "#00acc1" }}>Você está conectado(a)!</Alert>
+            </Snackbar>
+            <StyledCard>
+                <CardDiv>
+                    <CardReaDiv>
+                        <Header onMouseEnter={controlSlide} onMouseLeave={controlSlide}>
+                            {/*slide animation and content*/}
+                            <Slide direction="right" in={slideIn} timeout={1000}>
+                                <Link to={"/colecao-do-usuario/" + props.id} className="text">
+                                    {SlideAnimationContent()}
+                                </Link>
+                            </Slide>
+                            <div className={`slideContentLinkBeforeActive${slideIn}`} style={{ width: '100%', height: '100%' }}>
+                                <a href={"/colecao-do-usuario/" + props.id}>
+                                    <UserInfo>
+                                        <AvatarDiv>
+                                            <img src={userAvatar} alt="user avatar" />
+                                        </AvatarDiv>
+                                        <UserAndTitle>
+                                            <span>{props.author}</span>
+                                            <span className={"col-name"}>{props.name}</span>
+                                        </UserAndTitle>
+                                    </UserInfo>
+                                    <StyledGrid container direction="row">
+                                        {
+                                            props.thumbnails.map((thumb) =>
+                                                <Grid item xs={props.thumbnails <= 4 && props.thumbnails > 0 ? 12 / props.thumbnails.length : 6}>
+                                                    <div style={{ backgroundImage: `url(${`${apiDomain}` + thumb})`, height: "100%", width: "100%", backgroundSize: "cover", backgroundPosition: "center" }} />
+                                                </Grid>
+                                            )
+                                        }
+                                    </StyledGrid>
+                                </a>
+                            </div>
+                        </Header>
+
+                        <Description> {/*renders rating, number of learning objects and likes count*/}
+                            {
+                                props.authorID !== state.currentUser.id &&
+                                <Rating
+                                    name="customized-empty"
+                                    value={props.rating * 10}
+                                    precision={0.5}
+                                    readOnly
+                                    style={{ color: "#666" }}
+                                    emptyIcon={<StarBorderIcon fontSize="inherit" />}
+                                />
+                            }
+
+                            <Footer>
+                                <Type>
+                                    <FolderIcon />
+                                    <span style={{ fontWeight: "bold" }}>{props.collections.length} </span>
+                                    <span>{props.collections.length !== 1 ? "Recursos" : "Recurso"}</span>
+                                </Type>
+                                <LikeCounter>
+                                    <span>{likesCount}</span>
+                                    <ButtonNoWidth onClick={handleLike}>
+                                        <FavoriteIcon style={{ color: liked ? "red" : "#666" }} />
+                                    </ButtonNoWidth>
+                                </LikeCounter>
+                            </Footer>
+                        </Description>
+
+                    </CardReaDiv>
+
+                    {
+                        props.authorID === state.currentUser.id ?
                             (
-                                [
-                                    RenderFollowingButton()
-                                ]
+                                <CardReaFooter style={{ justifyContent: "space-between" }}> {/*renders following/unfollow and follow button*/}
+                                    <Grid container>
+                                        <Grid item xs={6} style={{ display: "flex", justifyContent: "center" }}>
+                                            {
+                                                props.privacy === 'private' &&
+                                                <LockIcon style={{ color: "#666" }} />
+                                            }
+                                        </Grid>
+                                        <Grid item xs={6} style={{ display: "flex", justifyContent: "flex-end" }}>
+                                            <ColCardOwnerOptions
+                                                id={props.id}
+                                            />
+                                        </Grid>
+                                    </Grid>
+                                </CardReaFooter>
                             )
                             :
                             (
-                                [
-                                    RenderFollowButton()
-                                ]
+                                <CardReaFooter> {/*renders following/unfollow and follow button*/}
+                                    {
+                                        userFollowingCol ?
+                                            (
+                                                [
+                                                    RenderFollowingButton()
+                                                ]
+                                            )
+                                            :
+                                            (
+                                                [
+                                                    RenderFollowButton()
+                                                ]
+                                            )
+                                    }
+                                    <ColCardPublicOptions
+                                        id={props.id}
+                                    />
+                                </CardReaFooter>
                             )
-                        }
-                        <ColCardPublicOptions
-                            id={props.id}
-                            />
-                        </CardReaFooter>
-                    )
-                }
+                    }
 
-            </CardDiv>
-        </StyledCard>
+                </CardDiv>
+            </StyledCard>
+        </>
     )
 }
 
-- 
GitLab


From a790de627e6da1070133c8d5d342b4081621e06c Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:43:46 -0300
Subject: [PATCH 55/83] Add read only param in the rating

---
 src/Components/ResourceCard.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/Components/ResourceCard.js b/src/Components/ResourceCard.js
index 8752fe3e..2e76e5fc 100644
--- a/src/Components/ResourceCard.js
+++ b/src/Components/ResourceCard.js
@@ -164,6 +164,7 @@ class ResourceCard extends Component {
             name="customized-empty"
             value={this.props.rating * 10}
             precision={0.5}
+            readOnly
             emptyIcon={<StarBorderIcon fontSize="inherit" />}
           />
         </Container>
-- 
GitLab


From 11e18f89b3860278e900eac717e05b3b49b1f44e Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 3 Feb 2021 12:44:57 -0300
Subject: [PATCH 56/83] Trying to fix the position of the tags

---
 src/Components/ResourceCardFunction.js | 140 ++++++++++++++-----------
 1 file changed, 76 insertions(+), 64 deletions(-)

diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index ede74c3f..52699418 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -16,10 +16,10 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useState, useEffect} from 'react';
+import React, { useState, useEffect } from 'react';
 import Card from '@material-ui/core/Card';
 import axios from 'axios'
-import {apiDomain, apiUrl} from '../env';
+import { apiDomain, apiUrl } from '../env';
 import ResourceCardOptions from './ResourceCardOptions'
 import noAvatar from "../img/default_profile.png";
 // import { makeStyles } from '@material-ui/core/styles';
@@ -48,27 +48,28 @@ import FavoriteIcon from '@material-ui/icons/Favorite';
 import ButtonGuardarColecao from './ButtonGuardarColecao.js'
 import Slide from '@material-ui/core/Slide';
 import Grid from '@material-ui/core/Grid';
-import {Link} from 'react-router-dom';
-import {getDefaultThumbnail} from './HelperFunctions/getDefaultThumbnail'
+import { Link } from 'react-router-dom';
+import { getDefaultThumbnail } from './HelperFunctions/getDefaultThumbnail'
 import GetIconByName from './UploadPageComponents/GetIconByName'
-import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
-
+import { getAxiosConfig } from './HelperFunctions/getAxiosConfig'
+// import DefaultAvatar from '../../public/img/logo_parceiros/ic_default.png'
 import "./ResourceCard.css";
 
 // const types = [{label: "Animação", thumb: animacao}, {label: "Apresentação", thumb: apresentacao},
 // {label: "Aplicativo" , thumb: aplicativo}, {label: "Áudio", thumb: audio}, {label: "Vazio", thumb: vazio}, {label: "Imagem", thumb: imagem}, {label: "Gráfico", thumb: grafico}, {label: "Jogo", thumb: jogo}, {label: "Livro", thumb: livro}, {label:"Livro digital", thumb: livro}, {label: "Mapa", thumb: mapa}, {label: "Outros", thumb: outros}, {label: "Software Educacional", thumb:software}, {label: "Software", thumb:software}, {label: "Texto", thumb:texto}, {label: "Vídeo", thumb:video}]
 
-export default function ResourceCardFunction (props) {
+export default function ResourceCardFunction(props) {
+    console.log(props);
     const [thumbnail, setThumbnail] = useState(null)
     // eslint-disable-next-line
     const [label, setLabel] = useState(props.type)
     const [userAvatar, setUserAvatar] = useState(noAvatar)
     const [slideIn, setSlide] = useState(false)
-    const controlSlide = () => {setSlide(!slideIn)}
+    const controlSlide = () => { setSlide(!slideIn) }
     const [liked, toggleLiked] = useState(props.liked)
     const [likesCount, setLikesCount] = useState(props.likeCount)
 
-    useEffect( () => {
+    useEffect(() => {
         //decide which thumbnail to use
         if (props.thumbnail) {
             setThumbnail(`${apiDomain}` + props.thumbnail)
@@ -80,6 +81,9 @@ export default function ResourceCardFunction (props) {
         if (props.avatar) {
             setUserAvatar(`${apiDomain}` + props.avatar)
         }
+        else {
+            setUserAvatar(require('../img/logo_parceiros/ic_default.png'))
+        }
 
     }, [])
 
@@ -87,44 +91,41 @@ export default function ResourceCardFunction (props) {
         let payload = {}
         let config = getAxiosConfig()
 
-        axios.put( (`${apiUrl}/learning_objects/` + props.id + '/like'),payload, config
+        axios.put((`${apiUrl}/learning_objects/` + props.id + '/like'), payload, config
         ).then(
             (response) => {
                 console.log(response.data)
-                if ( response.headers['access-token'] ) {
+                if (response.headers['access-token']) {
                     sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
                 }
                 toggleLiked(!liked)
                 setLikesCount(response.data.count)
 
             },
-            (error) => {console.log(error)}
+            (error) => { console.log(error) }
         )
     }
 
     const SlideAnimationContent = () => {
         return (
             <SlideContentDiv>
-                <div style={{display:"flex", flex:"1"}}>{/*marginBottom:10px*/}
+                <HeaderContainer>{/*marginBottom:10px*/}
                     <AvatarDiv>
-                        <img className="img" src={userAvatar} alt="user avatar"/>
+                        <img className="img" src={userAvatar} alt="user avatar" />
                     </AvatarDiv>
                     <EnviadoPor>
                         Enviado por:
-                        <br/>
+                        <br />
                         <p>{props.author}</p>
                     </EnviadoPor>
-                </div>
+                </HeaderContainer>
                 <TagContainer>
-                    <Grid container spacing={0} justify='flex-start' style={{height : "inherit"}}>
                     {
-                        props.tags.map( (tag) =>
-                            <Grid item key={tag.id}>
-                                <span key={tag.id}>{tag.name}</span>
-                            </Grid>
+                        props.tags.map((tag) =>
+                            <span key={tag.id}>{tag.name}</span>
+
                         )
                     }
-                    </Grid>
                 </TagContainer>
             </SlideContentDiv>
         )
@@ -137,38 +138,38 @@ export default function ResourceCardFunction (props) {
                     <Header onMouseEnter={controlSlide} onMouseLeave={controlSlide}>
                         {
                             props.published &&
-                            <Slide  direction="left" in={slideIn} timeout={500}>
-                                <div className={`slideContentLinkAfterActive${slideIn}`} style={{}}>
+                            <Slide direction="left" in={slideIn} timeout={1000}>
+                                <div className={`slideContentLinkAfterActive${slideIn}`} style={{ width: '100%' }}>
                                     <Link to={props.href} className="text" >
                                         {SlideAnimationContent()}
                                     </Link>
-
                                 </div>
                             </Slide >
                         }
-                        <div className={`slideContentLinkBeforeActive${slideIn}`} style={{}}>
+                        <div className={`slideContentLinkBeforeActive${slideIn}`} style={{width: '100%', height : '100%'}}>
 
                             <Link to={props.href}>
-                                <img className="img-cover" src={thumbnail} alt="learning object thumbnail"/>
+                                <img className="img-cover" src={thumbnail} alt="learning object thumbnail" />
                             </Link>
                         </div>
                     </Header>
 
                     <Description>
-                        <Link to={props.href} className="text"> {/*add link to learningObject*/}
-                            <span>
+                        <Link to={props.href} className="text" style={{height : '45px'}}> {/*add link to learningObject*/}
+                            <Title>
                                 {props.title}
-                            </span>
+                            </Title>
                         </Link>
 
                         {
                             props.published &&
                             <Rating
-                              name="customized-empty"
-                              value={props.rating}
-                              precision={0.5}
-                              style={{color:"#666"}}
-                              emptyIcon={<StarBorderIcon fontSize="inherit" />}
+                                name="customized-empty"
+                                value={props.rating}
+                                precision={0.5}
+                                readOnly
+                                style={{ color: "#666" }}
+                                emptyIcon={<StarBorderIcon fontSize="inherit" />}
                             />
                         }
 
@@ -183,7 +184,7 @@ export default function ResourceCardFunction (props) {
                                 <LikeCounter>
                                     <span>{likesCount}</span>
                                     <ButtonNoWidth onClick={handleLike}>
-                                        <FavoriteIcon style={{color : liked ? "red" : "#666" }}/>
+                                        <FavoriteIcon style={{ color: liked ? "red" : "#666" }} />
                                     </ButtonNoWidth>
                                 </LikeCounter>
                             }
@@ -194,16 +195,16 @@ export default function ResourceCardFunction (props) {
                 {
                     props.published &&
                     <CardReaFooter>
-                        <div style={{display : "flex", height : "100%"}}>
+                        <div style={{ display: "flex", height: "100%" }}>
                             <ButtonGuardarColecao thumb={props.thumbnail} title={props.title} recursoId={props.id}
-                                />
+                            />
                         </div>
                         <ResourceCardOptions
                             learningObjectId={props.id}
-                            downloadableLink = {props.downloadableLink}
+                            downloadableLink={props.downloadableLink}
                             thumb={props.thumbnail}
                             title={props.title}
-                            />
+                        />
                     </CardReaFooter>
                 }
             </CardDiv>
@@ -211,20 +212,35 @@ export default function ResourceCardFunction (props) {
     )
 }
 /*---------- USED IN SLIDE DIV ONLY -----------*/
+const HeaderContainer = styled.div`
+    display: flex; 
+    flex : 1;
+`
+
 export const TagContainer = styled.div`
+    margin-top: 0.5em;
     display : flex;
-    flex-direction : row;
-    width : 100%;
-    overflow : hidden;
-    flex : 2;
+    width : 90%;
+    overflow : auto;
+    ${'' /* flex : 2; */}
     height : 120px;
-
+    max-height : 120px;
+    flex-wrap: wrap;
+    -webkit-box-direction: normal;
+    flex-direction: row; 
+    ${'' /* border : 5px solid red; */}
     span {
+        word-wrap: break-word;
         background-color : #fff;
-        height : 20px;
+        display : flex; 
+        justify-content : center; 
+        align-items : center; 
+        height : 22px;
+        tet-align : center;
+        margin: 3px;
+        -webkit-box-direction: normal;
         overflow : hidden;
-        margin : 2px;
-        padding : 3px 8px;
+        padding : 1px 8px;
         border-radius : 10px;
         color : #666;
         font-size : 11px;
@@ -239,10 +255,11 @@ export const EnviadoPor = styled.div`
     padding-right : 1em;
 
     p {
-        text-overflow : ellipsis;
-        overflow : hidden;
-        white-space : nowrap;
         margin : 0;
+        display: -webkit-box;
+        -webkit-line-clamp: 1;
+        -webkit-box-orient: vertical;
+        overflow: hidden;
     }
 `
 const AvatarDiv = styled.div`
@@ -264,9 +281,6 @@ const SlideContentDiv = styled.div`
     padding : 10px;
     width : 100%;
     height : 100%;
-    // position : absolute;
-    // display : flex;
-    // flex-direction : column;
 `
 /*--------------------------------------------*/
 
@@ -341,6 +355,7 @@ export const Footer = styled.div`
     display : flex;
     flex-direction : row;
     justify-content : space-between;
+    margin-top : 5px; 
 `
 
 const Description = styled.div`
@@ -355,16 +370,13 @@ const Description = styled.div`
         text-decoration : none !important;
         color : inherit;
     }
-
-    .title {
-        text-overflow : ellipsis;
-        overflow : hidden;
-        margin-bottom : 10px;
-        font-size : 1.2em;
-        line-height : 1.1;
-        max-height : 46px;
-        color : #666;
-    }
+`
+const Title = styled.span`
+    display: -webkit-box;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
+    overflow: hidden;
+    color : #666;
 `
 
 export const Header = styled.div`
-- 
GitLab


From 736cbd18525db569380c2844b21f7e42b17ec116 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 4 Feb 2021 08:26:58 -0300
Subject: [PATCH 57/83] Improve Responsivity of page TabResourceHelpManageAc

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/TabsHelp/TabManageAc.js | 139 +++++++++++++++++-------------
 1 file changed, 78 insertions(+), 61 deletions(-)

diff --git a/src/Pages/TabsHelp/TabManageAc.js b/src/Pages/TabsHelp/TabManageAc.js
index ab485dd1..9aa293b3 100644
--- a/src/Pages/TabsHelp/TabManageAc.js
+++ b/src/Pages/TabsHelp/TabManageAc.js
@@ -65,41 +65,32 @@ export default function TabManageAc(props) {
             <span>{tabs[5]}</span>
           </StyledBreadCrumbs>
         </BreadCrumbsDiv>
-        <Grid container spacing={4}>
-          <Grid item xs={3}>
-            <Menu>
-              <h4>{tabs[5]}</h4>
-              <TabsStyled
-                orientation="vertical"
-                variant="scrollable"
-                value={tabValue}
-                onChange={handleChangeTab}
-                TabIndicatorProps={{ style: { display: "none" } }}
-              >
+        <Grid container justify="center">
+          <Grid item xs={12} md={10} >
+            <Principal>
+              <Menu>
+                <div className="fixo">
+                  <img src={GerenciandoConta} alt="Gerenciando a conta" />
+                  <span>{tabs[5]}</span>
+                </div>
+                <TabsStyled orientation = "vertical"
+                            variant = "scrollable"
+                            value = {tabValue}
+                            onChange = {handleChangeTab}
+                            TabIndicatorProps = {{style:{display: "none"}}}
+                >
                 <TabStyled label={tabs[0]}></TabStyled>
                 <TabStyled label={tabs[1]}></TabStyled>
                 <TabStyled label={tabs[2]}></TabStyled>
                 <TabStyled label={tabs[3]}></TabStyled>
                 <TabStyled label={tabs[4]}></TabStyled>
-              </TabsStyled>
-              <br />
-              <div className="voltarInicio">
-                <a href="ajuda">VOLTAR AO ÍNICIO</a>
-              </div>
-              <hr />
-              <div className="procurava">
-                Não encontrou o que procurava? Entre em
-                <a href="contato"> contato</a>
-              </div>
-            </Menu>
-          </Grid>
+                </TabsStyled>
+                <br/>
+                <div className="voltarInicio">
+                  <a href="ajuda">VOLTAR AO ÍNICIO</a>
+                </div>
+              </Menu>
 
-          <Grid item xs={9}>
-            <Principal>
-              <div className="fixo">
-                <img src={GerenciandoConta} alt="Gerenciando a conta" />
-                <span>{tabs[5]}</span>
-              </div>
               {tabValue === 0 && <Why title={tabs[0]} />}
               {tabValue === 1 && <HowToDo title={tabs[1]} />}
               {tabValue === 2 && <HowToChange title={tabs[2]} />}
@@ -108,69 +99,77 @@ export default function TabManageAc(props) {
               <div className="resultadosProcura">
                 <span>Não era bem o que você procurava?</span>
                 <div className="subtitulo">
-                  <span>
-                    Você pode navegar pelos tópicos de ajuda ou entrar em{" "}
-                    <a href="contato">Contato</a>.
-                  </span>
+                  <span>Você pode navegar pelos tópicos de ajuda ou entrar em <a href="contato">Contato</a>.</span>
                 </div>
               </div>
-              <Grid style={{ marginBottom: "50px" }} container spacing={2}>
-                <Grid item xs={4}>
+
+            </Principal>
+          </Grid>  
+        </Grid>    
+
+              
+        <Grid style={{ marginBottom: "50px" }} container justify={"center"}>
+                <Grid item xs={12} md={3} style={{margin:5}}>
                   <CardPublicando />
                 </Grid>
-                <Grid item xs={4}>
+                <Grid item xs={12} md={3} style={{margin:5}}>
                   <CardEncontrando />
                 </Grid>
-                <Grid item xs={4}>
+                <Grid item xs={12} md={3} style={{margin:5}}>
                   <CardParticipando />
                 </Grid>
               </Grid>
-            </Principal>
-          </Grid>
-        </Grid>
       </Secao>
     </div>
   );
 }
 
 const StyledBreadCrumbs = styled(Breadcrumbs)`
-  display: flex;
-  justify-content: flex-start;
-  max-width: 1170px;
+  display : flex;
+  justify-content : flex-start;
   span {
-    color: #a5a5a5;
+    color : #a5a5a5;
   }
   a {
     color: #00bcd4;
     text-decoration: none;
   }
-`;
+
+`
 
 const BreadCrumbsDiv = styled.div`
-  padding: 10px;
-  display: flex;
-`;
+
+  padding : 10px;
+  display : flex;
+`
+
 
 const Principal = styled.div`
   .fixo {
+    
     height: 40px;
     text-align: center;
     background-color: #fff;
-    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
     padding: 30px;
     margin-bottom: 30px;
     color: #666;
 
+
     img {
       height: 50px;
       width: 50px;
       margin-right: 40px;
       vertical-align: middle;
+
     }
 
     span {
       font-size: 20px;
+      vertical-align: ;
     }
+
+    
+
   }
   .resultadosProcura {
     text-align: center;
@@ -184,46 +183,62 @@ const Principal = styled.div`
       margin-top: 10px;
 
       span {
-        font-size: 15px;
+        font-size: 15px
       }
 
       a {
         font-size: 15px;
         padding: 0;
-        color: #00bcd4;
+        color:#00bcd4;
         text-decoration: none;
       }
+
     }
   }
-`;
+
+`
 
 const TabsStyled = styled(Tabs)`
+  
   .Mui-selected {
     background-color: #e7e4e4;
   }
 
-  .MuiTab-root {
+  .MuiTab-root{
     text-transform: none !important;
+    max-width:100%
   }
-`;
+  text-align: center;
+  width:100%
+
+`
 
 const TabStyled = styled(Tab)`
+    
   padding: 4px 15px !important;
   font-weight: 500;
   font-size: 14px !important;
   border-radius: 4px !important;
+  text-align: center;
+
+
+  
+
 
   &:hover {
     background-color: #e7e4e4;
   }
-`;
+`
+
 
 const Menu = styled.div`
   width: auto;
   background-color: #fff;
   color: #666;
   padding-block: 10px;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
+  box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px  rgba(0,0,0,.24);
+  margin-bottom:30px
+
 
   h4 {
     padding-inline: 15px;
@@ -240,7 +255,7 @@ const Menu = styled.div`
     a {
       font-size: 15px;
       padding: 0;
-      color: #00bcd4;
+      color:#00bcd4;
       text-decoration: none;
     }
   }
@@ -260,13 +275,15 @@ const Menu = styled.div`
     a {
       font-size: 15px;
       padding: 0;
-      color: #00bcd4;
+      color:#00bcd4;
       text-decoration: none;
     }
+
   }
-`;
+
+`
 
 const Secao = styled.div`
-  width: 1138px;
   margin-inline: auto;
-`;
+
+`
-- 
GitLab


From 5fe2a6666fa6a7c271a4fae43a29621ddf38dd9b Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 4 Feb 2021 08:27:14 -0300
Subject: [PATCH 58/83] Improve Responsivity of page TabResourceHelpNetPart

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/TabsHelp/TabNetPart.js | 78 +++++++++++++++-----------------
 1 file changed, 37 insertions(+), 41 deletions(-)

diff --git a/src/Pages/TabsHelp/TabNetPart.js b/src/Pages/TabsHelp/TabNetPart.js
index c63a0816..107a998b 100644
--- a/src/Pages/TabsHelp/TabNetPart.js
+++ b/src/Pages/TabsHelp/TabNetPart.js
@@ -73,37 +73,29 @@ export default function TabNetPart (props) {
           </StyledBreadCrumbs>
 
         </BreadCrumbsDiv>
-        <Grid container spacing={4}>
-          <Grid item xs={3}>
-            <Menu>
-              <h4>{tabs[2]}</h4>
-              <TabsStyled orientation = "vertical"
-                          variant = "scrollable"
-                          value = {tabValue}
-                          onChange = {handleChangeTab}
-                          TabIndicatorProps = {{style:{display: "none"}}}
-              >
-              <TabStyled label={tabs[0]}></TabStyled>
-              <TabStyled label={tabs[1]}></TabStyled>
-              </TabsStyled>
-              <br/>
-              <div className="voltarInicio">
-                <a href="ajuda">VOLTAR AO ÍNICIO</a>
-              </div>
-              <hr/>
-              <div className="procurava">
-                Não encontrou o que procurava? Entre em 
-                <a href="contato"> contato</a>
-              </div>
-            </Menu>
-          </Grid>
-
-          <Grid item xs={9}>
+        <Grid container justify="center">
+          <Grid item xs={12} md={10} >
             <Principal>
-              <div className="fixo">
+              <Menu>
+                <div className="fixo">
                 <img src={ParticipandoRede} alt="Participando da Rede"/>
-                <span>{tabs[2]}</span>
-              </div>
+                  <span>{tabs[2]}</span>
+                </div>
+                <TabsStyled orientation = "vertical"
+                            variant = "scrollable"
+                            value = {tabValue}
+                            onChange = {handleChangeTab}
+                            TabIndicatorProps = {{style:{display: "none"}}}
+                >
+                <TabStyled label={tabs[0]}></TabStyled>
+                <TabStyled label={tabs[1]}></TabStyled>
+                </TabsStyled>
+                <br/>
+                <div className="voltarInicio">
+                  <a href="ajuda">VOLTAR AO ÍNICIO</a>
+                </div>
+              </Menu>
+
               {tabValue === 0 && <How title={tabs[0]}/>}
               {tabValue === 1 && <What title={tabs[1]}/>}
               <div className="resultadosProcura">
@@ -112,24 +104,25 @@ export default function TabNetPart (props) {
                   <span>Você pode navegar pelos tópicos de ajuda ou entrar em <a href="contato">Contato</a>.</span>
                 </div>
               </div>
-              <Grid style={{marginBottom:"50px"}} container spacing={2}>
-                <Grid item xs={4}>
+
+            </Principal>
+          </Grid>  
+        </Grid>
+          
+              
+          <Grid style={{paddingBottom:"50px"}} container justify={"center"}>
+                <Grid item xs={12} md={3} style={{margin:5}}>
                   <CardPublicando/>
                 </Grid>
-                <Grid item xs={4}>
+                <Grid item xs={12} md={3} style={{margin:5}}>
                   <CardEncontrando/>
                 </Grid>
-                <Grid item xs={4}>
+                <Grid item xs={12} md={3} style={{margin:5}}>
                   <CardGerenciando/>
                 </Grid>
               </Grid>
 
 
-            </Principal>
-          </Grid>  
-        </Grid>        
-
-
       </Secao>
     </div>
   );
@@ -137,7 +130,6 @@ export default function TabNetPart (props) {
 const StyledBreadCrumbs = styled(Breadcrumbs)`
   display : flex;
   justify-content : flex-start;
-  max-width : 1170px;
   span {
     color : #a5a5a5;
   }
@@ -161,7 +153,6 @@ const Principal = styled.div`
     height: 40px;
     text-align: center;
     background-color: #fff;
-    box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
     padding: 30px;
     margin-bottom: 30px;
     color: #666;
@@ -218,7 +209,10 @@ const TabsStyled = styled(Tabs)`
 
   .MuiTab-root{
     text-transform: none !important;
+    max-width:100%
   }
+  text-align: center;
+  width:100%
 
 `
 
@@ -228,6 +222,7 @@ const TabStyled = styled(Tab)`
   font-weight: 500;
   font-size: 14px !important;
   border-radius: 4px !important;
+  text-align: center;
 
 
   
@@ -245,6 +240,8 @@ const Menu = styled.div`
   color: #666;
   padding-block: 10px;
   box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px  rgba(0,0,0,.24);
+  margin-bottom:30px
+
 
   h4 {
     padding-inline: 15px;
@@ -290,7 +287,6 @@ const Menu = styled.div`
 `
 
 const Secao = styled.div`
-  width: 1138px;
   margin-inline: auto;
 
 `
-- 
GitLab


From 548e032fa1514553c7aa904e89027c3b8a3eaeb5 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Thu, 4 Feb 2021 08:41:09 -0300
Subject: [PATCH 59/83] Improve Responsivity of page UserTerms

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/UserTerms.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/Pages/UserTerms.js b/src/Pages/UserTerms.js
index fed310ad..d7722bef 100644
--- a/src/Pages/UserTerms.js
+++ b/src/Pages/UserTerms.js
@@ -199,7 +199,7 @@ class UserTerms extends Component {
           </BannerStyle>
 
           <ImagemSeçao2>
-            <Grid container spacing={3}>
+            <Grid container >
               <Grid item xs={12} md={1}></Grid>
               <Grid item xs={12} md={10}>
                 <div>
@@ -216,7 +216,7 @@ class UserTerms extends Component {
           </ImagemSeçao2>
 
           <Secao3 >
-          <Grid container spacing ={3}>
+          <Grid container >
             <h3>Para melhor compreensão, podemos dividir os recursos em dois tipos:</h3>
               <Grid item xs={12} md={1} ></Grid>
               <Grid item xs={12} md={5} >
@@ -243,7 +243,7 @@ class UserTerms extends Component {
 
 
 
-          <Grid container spacing={3}>
+          <Grid container >
             <Grid item xs={12} md={1}></Grid>
             <Grid item xs={12} md={10}>
               <Secao4>
@@ -267,7 +267,7 @@ class UserTerms extends Component {
           </Grid>
 
 
-          <Grid container spacing={3}>
+          <Grid container >
             <Grid item xs={12} md={1}></Grid>
             <Grid item xs={12} md={10}>
               <div style={{ marginBottom:"50px",paddingTop: "20px"}}>
-- 
GitLab


From f8a55a02bf2a00e25ba1d78cdf258ef8dcbd614c Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Thu, 4 Feb 2021 09:50:14 -0300
Subject: [PATCH 60/83] v1 fetch api version done. missing error handling

---
 .../HelperFunctions/getAxiosConfig.js         | 261 ++++++++++--------
 src/Components/Notifications.js               |   6 +-
 src/Components/NotificationsInner.js          |   1 -
 .../TabPanels/PublicUserPageTabs/TabRede.js   |   8 +-
 .../TabPanels/UserPageTabs/PanelColecoes.js   |   8 +-
 .../TabPanels/UserPageTabs/PanelFavoritos.js  |   8 +-
 .../UserPageTabs/PanelMeusRecursos.js         |  12 +-
 .../TabPanels/UserPageTabs/PanelRede.js       |   8 +-
 .../UploadPageComponents/DragAndDrop.tsx      | 153 ----------
 src/Pages/PublicUserPage.js                   |   6 +-
 10 files changed, 169 insertions(+), 302 deletions(-)
 delete mode 100644 src/Components/UploadPageComponents/DragAndDrop.tsx

diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 84b1682f..000ffb6b 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -1,25 +1,43 @@
 import {apiUrl} from '../../env.js'
 import axios from 'axios'
 
-export const getAxiosConfig = () => {
+export function getAxiosConfigFromJSON () {
     let config = {
-        headers : {
-            'Accept': 'application/json',
-            'Content-Type': 'application/json',
-        }
+        headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
     }
-    config.headers["Access-Token"] = sessionStorage.getItem('@portalmec/accessToken');
-    config.headers.Client = sessionStorage.getItem('@portalmec/clientToken')
-    config.headers.Uid = sessionStorage.getItem('@portalmec/uid')
-    config.headers.Expiry = sessionStorage.getItem('@portalmec/expiry')
     return config
 }
 
-export function getAxiosConfigFromJSON () {
-    let config = {
-        headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+export function updateHeaders (newHeaders) {
+
+    sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token'])
+
+    let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+    if (auth_headers) {
+        auth_headers['access-token'] = newHeaders['access-token']
+    }
+    else {
+        auth_headers = {
+            client: newHeaders.client,
+            "access-token": newHeaders['access-token'],
+            uid: newHeaders.uid,
+            expiry: newHeaders.expiry,
+            "token-type": "Bearer"
+        }
+    }
+    sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
+}
+
+function fetchHeaders () {
+    let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
+
+    if (auth_headers) {
+        const myHeaders = new Headers(auth_headers)
+        return myHeaders
+    }
+    else {
+        return {}
     }
-    return config
 }
 
 function checkPreviousTokens (new_token) {
@@ -27,10 +45,8 @@ function checkPreviousTokens (new_token) {
     let prev_tokens = JSON.parse(sessionStorage.getItem('@portalmec/tokens'))
 
     if (prev_tokens) {
-        console.log('hasOwnProperty = ', prev_tokens.hasOwnProperty(new_token))
         if (!prev_tokens.hasOwnProperty(new_token)) {
             prev_tokens[new_token] = 1
-            console.log('adicionando token', new_token, ' a hash')
             sessionStorage.setItem('@portalmec/tokens', JSON.stringify(prev_tokens))
             return true
         }
@@ -41,141 +57,136 @@ function checkPreviousTokens (new_token) {
     else {
         let tokens = {}
         tokens[new_token] = 1
-        console.log('adicionando token', new_token, ' a hash')
         sessionStorage.setItem('@portalmec/tokens', JSON.stringify(tokens))
         return true
     }
 
 }
 
-export function updateHeaders (newHeaders) {
+function updateAccessToken (newAccessToken) {
 
-    if (checkPreviousTokens(newHeaders['access-token'])) {
+    if (checkPreviousTokens(newAccessToken)) {
 
-        sessionStorage.setItem('@portalmec/accessToken', newHeaders['access-token'])
+        sessionStorage.setItem('@portalmec/accessToken', newAccessToken)
 
         let auth_headers = JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))
 
         if (auth_headers) {
-            auth_headers['access-token'] = newHeaders['access-token']
-        }
-        else {
-            auth_headers = {
-                client: newHeaders.client,
-                "access-token": newHeaders['access-token'],
-                uid: newHeaders.uid,
-                expiry: newHeaders.expiry,
-                "token-type": "Bearer"
-            }
+            auth_headers['access-token'] = newAccessToken
         }
 
         sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
     }
-
 }
 
 export const axiosGetRequest = (url, onSuccess, onError) => {
-    let config = getAxiosConfigFromJSON()
-
-    axios.get( (`${apiUrl}${url}`), config ).then(
-        (response) => {
-
-            if ( response.headers['access-token'] && response.status !== 304) {
-                console.log('filtered = ', response)
-                updateHeaders(response.headers)
+    fetch((`${apiUrl}${url}`), {
+        headers : fetchHeaders()
+    })
+        .then(response => {
+            if (response.headers.has('access-token')) {
+                updateAccessToken(response.headers.get('access-token'))
             }
-
-            onSuccess(response.data)
-        },
-        (error) => {
+            return response.json()
+        })
+        .then(data => {
+            console.log(data)
+            onSuccess(data)
+        })
+        .catch(error => {
             onError(error)
-        }
-    )
+        })
 }
 
 export const axiosDeleteRequest = (url, onSuccess, onError) => {
-    let config = getAxiosConfigFromJSON()
-
-    axios.delete( (`${apiUrl}${url}`), config ).then(
-        (response) => {
-
-            if ( response.headers['access-token'] && response.status !== 304) {
-                console.log('filtered = ', response)
-                updateHeaders(response.headers)
+    fetch((`${apiUrl}${url}`), {
+        method : 'DELETE',
+        headers : fetchHeaders()
+    })
+        .then(response => {
+            if (response.headers.has('access-token')) {
+                updateAccessToken(response.headers.get('access-token'))
             }
-
-            onSuccess(response.data)
-        },
-        (error) => {
+            return response.json()
+        })
+        .then(data => {
+            console.log(data)
+            onSuccess(data)
+        })
+        .catch(error => {
             onError(error)
-        }
-    )
+        })
 }
 
 export const axiosPutRequest = (url, payload, onSuccess, onError) => {
-    let config = getAxiosConfigFromJSON()
-
-    axios.put( (`${apiUrl}${url}`), payload, config ).then(
-        (response) => {
+    let formData = new FormData()
+    for (const [key, value] of Object.entries(payload)) {
+        formData.append(`${key}`,value);
+    }
 
-            if ( response.headers['access-token'] && response.status !== 304) {
-                console.log('filtered = ', response)
-                updateHeaders(response.headers)
+    fetch((`${apiUrl}${url}`), {
+        method : 'PUT',
+        headers : fetchHeaders(),
+        body: formData
+    })
+        .then(response => {
+            if (response.headers.has('access-token')) {
+                updateAccessToken(response.headers.get('access-token'))
             }
-
-            onSuccess(response.data)
-        },
-        (error) => {
+            return response.json()
+        })
+        .then(data => {
+            console.log(data)
+            onSuccess(data)
+        })
+        .catch(error => {
             onError(error)
-        }
-    )
+        })
 }
 
 export const axiosPostRequest = (url, payload, onSuccess, onError) => {
-    let config = getAxiosConfigFromJSON()
-
-    axios.post( (`${apiUrl}${url}`), payload, config ).then(
-        (response) => {
+    let formData = new FormData()
+    for (const [key, value] of Object.entries(payload)) {
+        formData.append(`${key}`,value);
+    }
 
-            if ( response.headers['access-token'] && response.status !== 304) {
-                console.log('filtered = ', response)
-                updateHeaders(response.headers)
+    fetch((`${apiUrl}${url}`), {
+        method : 'POST',
+        headers : fetchHeaders(),
+        body: formData
+    })
+        .then(response => {
+            if (response.headers.has('access-token')) {
+                updateAccessToken(response.headers.get('access-token'))
             }
-
-            onSuccess(response.data)
-        },
-        (error) => {
+            return response.json()
+        })
+        .then(data => {
+            console.log(data)
+            onSuccess(data)
+        })
+        .catch(error => {
             onError(error)
-        }
-    )
-}
-
-function filterFunction (value) {
-    if (value.headers['access-token'] && value.status !== 304) {
-        return true
-    }
-    else {
-        return false
-    }
+        })
 }
 
 export const axiosAllRequest = (urls, onSuccess, onError) => {
-    axios.all(
-        urls.map( url => axios.get(`${apiUrl}${url}`, getAxiosConfigFromJSON()) )
-    ).then(
-        (responseArray) => {
-            var aux = responseArray.filter(filterFunction)
-            if (aux[0]) {
-                console.log('filtered = ', aux)
-                updateHeaders(aux[0].headers)
+    Promise.all( urls.map( url => fetch(`${apiUrl}${url}`,  {
+        headers : fetchHeaders()
+    }))).then( (responses) => {
+        for(let res of responses) {
+            console.log(res)
+            if (res.headers.has('access-token') && res.status !== 304) {
+                console.log(res)
+                updateAccessToken(res.headers.get('access-token'))
             }
-
-            onSuccess(responseArray)
-        },
-        (error) => {
-            onError(error)
         }
-    )
+        return Promise.all(responses.map( (response) => response.json()))
+    }).then( (data) => {
+        onSuccess(data)
+    }).catch((error) => {
+        onError(error)
+    })
 }
 
 export const validateGoogleLoginToken = (config, onSuccess, onError) => {
@@ -195,25 +206,35 @@ export const validateGoogleLoginToken = (config, onSuccess, onError) => {
 }
 
 export const authentication = (url, payload, onSuccess, onError) => {
-    let config = getAxiosConfigFromJSON()
-
-    axios.post( (`${apiUrl}${url}`), payload, config ).then(
-        (response) => {
+    let formData = new FormData()
+    for (const [key, value] of Object.entries(payload)) {
+        formData.append(`${key}`,value);
+    }
 
+    fetch((`${apiUrl}${url}`), {
+        method : 'POST',
+        headers : fetchHeaders(),
+        body: formData
+    })
+        .then(response => {
             const auth_headers = {
-                client: response.headers.client,
-                "access-token": response.headers['access-token'],
-                uid: response.headers.uid,
-                expiry: response.headers.expiry,
+                client: response.headers.get('client'),
+                "access-token": response.headers.get('access-token'),
+                uid: response.headers.get('uid'),
+                expiry: response.headers.get('expiry'),
                 "token-type": "Bearer"
             }
 
             sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
 
-            onSuccess(response.data)
-        },
-        (error) => {
+            return response.json()
+        })
+        .then(data => {
+            console.log(data)
+            onSuccess(data)
+        })
+        .catch(error => {
             onError(error)
-        }
-    )
+        })
+
 }
diff --git a/src/Components/Notifications.js b/src/Components/Notifications.js
index e85b578d..5911a309 100644
--- a/src/Components/Notifications.js
+++ b/src/Components/Notifications.js
@@ -15,7 +15,7 @@ GNU Affero General Public License for more details.
 
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-import React, {useState} from 'react';
+import React, {useState, useEffect} from 'react';
 import NotificationsIcon from '@material-ui/icons/Notifications';
 import { Button } from '@material-ui/core';
 import Badge from '@material-ui/core/Badge';
@@ -88,9 +88,9 @@ export default function Notification (props) {
     }
 
 
-    setInterval(() => {
+    useEffect(() => {
         axiosGetRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
-    }, 60000)
+    }, [])
 
 
     function handleClick(event) {
diff --git a/src/Components/NotificationsInner.js b/src/Components/NotificationsInner.js
index c4c791c6..6d05f5f5 100644
--- a/src/Components/NotificationsInner.js
+++ b/src/Components/NotificationsInner.js
@@ -13,7 +13,6 @@ export default function NotificationInner (props) {
         setLength(data.length)
     }
     useEffect(() => {
-        let config = getAxiosConfig()
         const url = `/feed?offset=0&limit=30`
 
         axiosGetRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
index 125d7a2f..75201d42 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
@@ -39,11 +39,11 @@ export default function TabRede (props) {
     const showAllFollowing = () => {setFollowingSlice(following)}
 
     function handleSuccess (responseArr) {
-        setFollowers(responseArr[0].data)
-        setFollowersSlice(responseArr[0].data.slice(0,4))
+        setFollowers(responseArr[0])
+        setFollowersSlice(responseArr[0].slice(0,4))
 
-        setFollowing(responseArr[1].data)
-        setFollowingSlice(responseArr[1].data.slice(0,4))
+        setFollowing(responseArr[1])
+        setFollowingSlice(responseArr[1].slice(0,4))
     }
 
     useEffect( () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
index c9ea1c8d..28dda245 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
@@ -42,11 +42,11 @@ export default function TabPanelColecoes (props) {
 
     function handleSuccess (responseArr) {
         handleLoading(false)
-        setUserCollections(responseArr[0].data)
-        setUserCollectionsSlice(responseArr[0].data.slice(0,3))
+        setUserCollections(responseArr[0])
+        setUserCollectionsSlice(responseArr[0].slice(0,3))
 
-        setFollowedCollections(responseArr[1].data)
-        setFollowedCollectionsSlice(responseArr[1].data.slice(0,4))
+        setFollowedCollections(responseArr[1])
+        setFollowedCollectionsSlice(responseArr[1].slice(0,4))
     }
 
     const getInfo = () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
index e3b51866..350e2bc1 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
@@ -32,11 +32,11 @@ export default function TabPanelFavoritos (props) {
     const [likedCollectionsSlice, setlikedCollectionsSlice] = useState([])
 
     function handleSuccess (responseArr) {
-        setlikedLearnObjs(responseArr[0].data)
-        setlikedLearnObjsSlice(responseArr[0].data.slice(0,4))
+        setlikedLearnObjs(responseArr[0])
+        setlikedLearnObjsSlice(responseArr[0].slice(0,4))
 
-        setlikedCollections(responseArr[1].data)
-        setlikedCollectionsSlice(responseArr[1].data.slice(0,4))
+        setlikedCollections(responseArr[1])
+        setlikedCollectionsSlice(responseArr[1].slice(0,4))
 
         handleLoading(false)
     }
diff --git a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
index 0b05d5ac..0faa14af 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
@@ -35,14 +35,14 @@ export default function TabPanelAtividades (props) {
     const [curatingSlice, setCuratingSlice] = useState([])
 
     function handleSuccess (responseArr) {
-        setLearningObjects(responseArr[0].data)
-        setLearningObjectsSlice(responseArr[0].data.slice(0, 4))
+        setLearningObjects(responseArr[0])
+        setLearningObjectsSlice(responseArr[0].slice(0, 4))
 
-        setDrafts(responseArr[1].data)
-        setDraftsSlice(responseArr[1].data.slice(0, 4))
+        setDrafts(responseArr[1])
+        setDraftsSlice(responseArr[1].slice(0, 4))
 
-        setCurating(responseArr[2].data)
-        setCuratingSlice(responseArr[2].data.slice(0, 4))
+        setCurating(responseArr[2])
+        setCuratingSlice(responseArr[2].slice(0, 4))
 
         handleLoading(false)
     }
diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js
index e8f56bdf..ae61981e 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelRede.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js
@@ -44,12 +44,12 @@ export default function TabPanelRede (props) {
     const showAllFollowers = () => {setFollowersSlice(followersList)}
 
     function handleSuccess (responseArr) {
-        setFollowing(responseArr[0].data)
-        setFollowingSlice(responseArr[0].data.slice(0,4))
+        setFollowing(responseArr[0])
+        setFollowingSlice(responseArr[0].slice(0,4))
 
 
-        setFollowers(responseArr[1].data)
-        setFollowersSlice(responseArr[1].data.slice(0,4))
+        setFollowers(responseArr[1])
+        setFollowersSlice(responseArr[1].slice(0,4))
 
         handleLoading(false)
     }
diff --git a/src/Components/UploadPageComponents/DragAndDrop.tsx b/src/Components/UploadPageComponents/DragAndDrop.tsx
deleted file mode 100644
index d416b222..00000000
--- a/src/Components/UploadPageComponents/DragAndDrop.tsx
+++ /dev/null
@@ -1,153 +0,0 @@
-/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
-Departamento de Informatica - Universidade Federal do Parana
-
-This file is part of Plataforma Integrada MEC.
-
-Plataforma Integrada MEC is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Plataforma Integrada MEC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
-
-import React, {useState, useEffect} from 'react'
-import CloudUploadIcon from '@material-ui/icons/CloudUpload';
-import {DottedBox, BlueButton} from './StyledComponents.js';
-import FileToUpload from './FileToUpload'
-import {getAxiosConfig} from '../HelperFunctions/getAxiosConfig.js'
-import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
-
-type Props = {
-    draftID : string;
-}
-
-const UploadMediaComponent: React.FC<Props> = ({draftID, children}) => {
-    const [filesToUpload, setFilesToUpload] = useState<FileToUpload | undefined>(undefined);
-
-    const onFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
-        const files: FileList | null = e.target.files;
-        if(!files) return;
-
-        let fileToUpload: FileToUpload = new FileToUpload(files[0], files[0].name, draftID);
-
-        setFilesToUpload(fileToUpload);
-        if (fileToUpload != undefined){
-            console.log(fileToUpload.uploadFile())
-
-        }
-    };
-
-    return (
-        <div className="upload-container">
-            <h2 className="upload-title">File Uploader</h2>
-            <div className="upload-form">
-                <form id="file_upload">
-                    <DottedBox
-
-                        >
-                        <AddAPhotoIcon className="icon"/>
-                        <input
-                            type="file"
-                            onChange = {onFileChange}
-                            id="upload-file-thumbnail"
-                            style={{display : "none"}}
-                            />
-                        <BlueButton>
-                            <label htmlFor="upload-file-thumbnail" style={{width : "inherit", cursor : "pointer"}}>
-                                ESCOLHER IMAGEM
-                            </label>
-                        </BlueButton>
-                        <span style={{marginTop : "6px"}}>Ou arrastar e soltar o arquivo aqui</span>
-                    </DottedBox>
-                </form>
-            </div>
-        </div>
-    )
-}
-UploadMediaComponent.displayName = 'UploadMedia';
-export default UploadMediaComponent;
-
-{/*<div className="upload-file-select">
-    <label htmlFor="file_1">Select files for upload</label>
-    <input id="file_1" type="file" multiple onChange={onFileChange}/>
-</div>
-
-<div className="upload-file-list">
-    {filesToUpload.map((f,i) => <div className="upload-file" key={i}>{f.name} - {f.file.size}bytes</div>)}
-</div>
-
-<div className="upload-submit">
-    <input type="submit" value="submit"/>
-</div>*/}
-
-{/*
-    const [dropDepth, setDropDepth] = useState(0)
-    const [inDropZone, toggleInDropZone] = useState(false)
-    const [fileList, setFileList] = useState([])
-
-    const handleDragEnter = e => {
-        e.preventDefault();
-        e.stopPropagation();
-
-        setDropDepth(dropDepth + 1)
-    };
-
-    const handleDragLeave = e => {
-        e.preventDefault();
-        e.stopPropagation();
-
-        setDropDepth(dropDepth - 1)
-        if (dropDepth > 0)
-            toggleInDropZone(true)
-    };
-
-    const handleDragOver = e => {
-        e.preventDefault();
-        e.stopPropagation();
-        e.dataTransfer.dropEffect = 'copy';
-        toggleInDropZone(true)
-    };
-
-    const handleDrop = e => {
-        e.preventDefault();
-        e.stopPropagation();
-        let files = [...e.dataTransfer.files]
-
-        if (files && files.length > 0) {
-            props.acceptFile(files[0])
-        }
-    };
-
-    const handleUpload = (e, selectorFiles : FileList) => {
-        e.preventDefault();
-        props.acceptFile(selectorFiles[0])
-    }
-
-
-    <DottedBox
-    onDrop={e => handleDrop(e)}
-    onDragOver={e => handleDragOver(e)}
-    onDragEnter={e => handleDragEnter(e)}
-    onDragLeave={e => handleDragLeave(e)}
-    >
-    <CloudUploadIcon className="icon"/>
-    <input
-        type="file"
-        onChange = {(e) => handleUpload(e, e.target.files)}
-        id="upload-file"
-        style={{display : "none"}}
-        />
-    <BlueButton>
-        <label htmlFor="upload-file" style={{width : "inherit", cursor : "pointer"}}>
-            ESCOLHER O ARQUIVO
-        </label>
-    </BlueButton>
-    <span style={{marginTop : "6px"}}>Ou arrastar e soltar o arquivo aqui</span>
-</DottedBox>
-    */}
diff --git a/src/Pages/PublicUserPage.js b/src/Pages/PublicUserPage.js
index b1967ec9..b197f082 100644
--- a/src/Pages/PublicUserPage.js
+++ b/src/Pages/PublicUserPage.js
@@ -122,11 +122,11 @@ export default function PublicUserPage (props) {
     /*---------------------------------------------------------*/
 
     function handleSuccess (responseArr) {
-        fillUserInfo(responseArr[0].data)
+        fillUserInfo(responseArr[0])
 
-        handleLearningObjects(responseArr[1].data)
+        handleLearningObjects(responseArr[1])
 
-        handleCollections(responseArr[2].data)
+        handleCollections(responseArr[2])
     }
 
     /*Component Will Mount*/
-- 
GitLab


From 51de6013436ec4296a7437625bbac5073a24cc65 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Thu, 4 Feb 2021 10:47:23 -0300
Subject: [PATCH 61/83] fixed 403 error

---
 src/Components/ActivityListItem.js                       | 3 ++-
 src/Components/TabPanels/PanelComponents/TemplateRede.js | 8 ++++----
 src/Components/TabPanels/UserPageTabs/PanelRede.js       | 1 +
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/Components/ActivityListItem.js b/src/Components/ActivityListItem.js
index 00def5db..e6d9d2b7 100644
--- a/src/Components/ActivityListItem.js
+++ b/src/Components/ActivityListItem.js
@@ -34,6 +34,7 @@ import ReportIcon from '@material-ui/icons/Report';
 import CloudUploadIcon from '@material-ui/icons/CloudUpload';
 import ThumbDownIcon from '@material-ui/icons/ThumbDown';
 import DeleteIcon from '@material-ui/icons/Delete';
+import {Link} from 'react-router-dom'
 
 const GetObjectColor = (tag) => {
     return ObjectColor[tag]
@@ -137,7 +138,7 @@ export default function ActivityListItem (props) {
                 secondary = {
                     <div>
                         <span>
-                            <a href={props.ownerHref} className="owner-name-a" >{props.ownerName}</a> {activity.text} <a href={props.recipientHref} className="recipient-name-a">{props.recipientName}</a> {activity.text2}
+                            <Link to={props.ownerHref} className="owner-name-a" >{props.ownerName}</Link> {activity.text} <Link to={props.recipientHref} className="recipient-name-a">{props.recipientName}</Link> {activity.text2}
                         </span>
                     </div>
                 }
diff --git a/src/Components/TabPanels/PanelComponents/TemplateRede.js b/src/Components/TabPanels/PanelComponents/TemplateRede.js
index b4ded29e..e92a49db 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateRede.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateRede.js
@@ -13,8 +13,8 @@ export default function PanelTemplateRede (props) {
             return (
                 <ContactCard
                     name = {card.follower.name}
-                    avatar = {card.follower.avatar ? apiDomain + card.follower.avatar : null}
-                    cover={card.follower.cover ? apiDomain + card.follower.cover : null}
+                    avatar = {card.follower.avatar !== undefined && card.follower.avatar  !== ""? apiDomain + card.follower.avatar : null}
+                    cover={card.follower.cover !== undefined && card.follower.cover !== "" ? apiDomain + card.follower.cover : null}
                     numCollections = {card.follower.collections_count}
                     numLearningObjects = {card.follower.learning_objects_count}
                     follow_count={card.follower.follows_count}
@@ -28,8 +28,8 @@ export default function PanelTemplateRede (props) {
             return (
                 <ContactCard
                          name = {card.followable.name}
-                         avatar = {card.followable.avatar ? apiDomain + '/' + card.followable.avatar : null}
-                         cover={apiDomain + card.followable.cover}
+                         avatar = {card.followable.avatar !== undefined && card.followable.avatar !== "" ? apiDomain + '/' + card.followable.avatar : null}
+                         cover={card.followable.cover !== undefined && card.followable.cover !== "" ? apiDomain + card.followable.cover : null}
                          numCollections = {card.followable.collections_count}
                          numLearningObjects = {card.followable.learning_objects_count}
                          follow_count={card.followable.follows_count}
diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js
index ae61981e..96940f9e 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelRede.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js
@@ -44,6 +44,7 @@ export default function TabPanelRede (props) {
     const showAllFollowers = () => {setFollowersSlice(followersList)}
 
     function handleSuccess (responseArr) {
+        console.log(responseArr)
         setFollowing(responseArr[0])
         setFollowingSlice(responseArr[0].slice(0,4))
 
-- 
GitLab


From 6b352c8adb85e810afb6cfd742307404727a45da Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Thu, 4 Feb 2021 11:46:05 -0300
Subject: [PATCH 62/83] fix post/put error 500

---
 src/Components/HelperFunctions/getAxiosConfig.js | 16 +++-------------
 1 file changed, 3 insertions(+), 13 deletions(-)

diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 000ffb6b..c59bb1a7 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -33,6 +33,7 @@ function fetchHeaders () {
 
     if (auth_headers) {
         const myHeaders = new Headers(auth_headers)
+        myHeaders.append('Content-Type', 'application/json')
         return myHeaders
     }
     else {
@@ -119,15 +120,10 @@ export const axiosDeleteRequest = (url, onSuccess, onError) => {
 }
 
 export const axiosPutRequest = (url, payload, onSuccess, onError) => {
-    let formData = new FormData()
-    for (const [key, value] of Object.entries(payload)) {
-        formData.append(`${key}`,value);
-    }
-
     fetch((`${apiUrl}${url}`), {
         method : 'PUT',
         headers : fetchHeaders(),
-        body: formData
+        body: JSON.stringify(payload)
     })
         .then(response => {
             if (response.headers.has('access-token')) {
@@ -145,15 +141,10 @@ export const axiosPutRequest = (url, payload, onSuccess, onError) => {
 }
 
 export const axiosPostRequest = (url, payload, onSuccess, onError) => {
-    let formData = new FormData()
-    for (const [key, value] of Object.entries(payload)) {
-        formData.append(`${key}`,value);
-    }
-
     fetch((`${apiUrl}${url}`), {
         method : 'POST',
         headers : fetchHeaders(),
-        body: formData
+        body: JSON.stringify(payload)
     })
         .then(response => {
             if (response.headers.has('access-token')) {
@@ -213,7 +204,6 @@ export const authentication = (url, payload, onSuccess, onError) => {
 
     fetch((`${apiUrl}${url}`), {
         method : 'POST',
-        headers : fetchHeaders(),
         body: formData
     })
         .then(response => {
-- 
GitLab


From 293ae805656fff4c9c7061e6f122ee2a40f766a8 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 4 Feb 2021 12:15:03 -0300
Subject: [PATCH 63/83] Removed consoles

---
 src/Pages/Search.js | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index b1763c24..302dcf12 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -85,7 +85,6 @@ export default function Search(props) {
       setIsFiltering(true);
 
     const axiosConfig = getAxiosConfig();
-    console.log(axiosConfig);
     axios({
       method: 'get',
       url: `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`,
@@ -119,7 +118,6 @@ useEffect(() => {
   const urlParams = new URLSearchParams(window.location.search);
   const query = urlParams.get("query");
   const searchClass = urlParams.get("search_class");
-  console.log(searchClass);
   if (state.search.query !== query || state.search.class !== searchClass) {
     dispatch({
       type: "SAVE_SEARCH",
@@ -257,7 +255,6 @@ return (
                         liked={card.liked}
                         collections={card.collection_items}
                         authorID={card.owner.id}
-                        onRefresh={() => collectStuff("Collection", currFilter)}
                       />
                     </Grid>
                   ))}
-- 
GitLab


From f78fa0300bc010ab848679f1e46d9adeadce72df Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Thu, 4 Feb 2021 12:15:20 -0300
Subject: [PATCH 64/83] Passed the correct params to collection card

---
 src/Components/AreasSubPages.js               |  95 ++++----
 src/Components/CollectionCardFunction.js      |  73 +++++-
 .../PanelComponents/TemplateColecao.js        |  96 ++++----
 .../PublicUserPageTabs/LastCollections.js     |  87 +++----
 .../PublicUserPageTabs/TabColecoes.js         |  45 ++--
 .../TabPanels/UserPageTabs/PanelColecoes.js   | 221 +++++++++---------
 6 files changed, 346 insertions(+), 271 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 4b24e10d..00984b87 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -48,38 +48,38 @@ class ReqResources extends Component {
         this.setState({ resources: res.data });
       });
   }
-  
-  resourcesPerPage(){
+
+  resourcesPerPage() {
     var pageWidth = window.innerWidth
-    if (pageWidth >= 1200){
+    if (pageWidth >= 1200) {
       return 3
     }
-    else{
+    else {
       if (pageWidth > 766) {
         return 2
       }
-      else{
+      else {
         return 1
       }
     }
   }
-  
+
 
 
   render() {
     var rows = []
     var resources_per_page = this.resourcesPerPage()
-    for(let i = 0; i < 12/resources_per_page; i++){
-      rows.push(this.state.resources.slice(i*resources_per_page, resources_per_page*(i+1)))
+    for (let i = 0; i < 12 / resources_per_page; i++) {
+      rows.push(this.state.resources.slice(i * resources_per_page, resources_per_page * (i + 1)))
     }
     return (
 
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
         {
           rows.map((row, index) => (
-            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%",  justifyContent: "center"}} key={(index+1)}>
+            <Row style={{ paddingBottom: "5px", margin: '0 auto', width: "80%", justifyContent: "center" }} key={(index + 1)}>
               {row.map((card) => (
-                <div style={{marginLeft:10, display: 'flex' }} key={card.id*(index+1)}>
+                <div style={{ marginLeft: 10, display: 'flex' }} key={card.id * (index + 1)}>
                   <ResourceCardFunction
                     avatar={card.publisher.avatar}
                     id={card.id}
@@ -120,16 +120,16 @@ class ReqCollections extends Component {
         console.log(res.data);
       });
   }
-  collectionsPerPage(){
+  collectionsPerPage() {
     var pageWidth = window.innerWidth
-    if (pageWidth >= 1200){
+    if (pageWidth >= 1200) {
       return 3
     }
-    else{
+    else {
       if (pageWidth > 766) {
         return 2
       }
-      else{
+      else {
         return 1
       }
     }
@@ -138,18 +138,19 @@ class ReqCollections extends Component {
   render() {
     var rows = []
     var collections_per_page = this.collectionsPerPage()
-    for(let i = 0; i < 12/collections_per_page; i++){
-      rows.push(this.state.collections.slice(i*collections_per_page, collections_per_page*(i+1)))
+    for (let i = 0; i < 12 / collections_per_page; i++) {
+      rows.push(this.state.collections.slice(i * collections_per_page, collections_per_page * (i + 1)))
     }
     return (
       <Carousel showThumbs={false} infiniteLoop={true} showStatus={false}>
         {
           rows.map((row, index) => (
-            <Row style={{ paddingBottom: "5px", margin:'0 auto', width:"80%", justifyContent: "center" }} key={(index+1)}>
+            <Row style={{ paddingBottom: "5px", margin: '0 auto', width: "80%", justifyContent: "center" }} key={(index + 1)}>
               {row.map((card) => (
-                <div style={{marginLeft:10, display: 'flex' }} key={card.id*(index+1)}>
+                <div style={{ marginLeft: 10, display: 'flex' }} key={card.id * (index + 1)}>
                   <CollectionCardFunction
                     name={card.name}
+                    tags={card.tags}
                     rating={card.score}
                     id={card.id}
                     author={card.owner.name}
@@ -157,11 +158,15 @@ class ReqCollections extends Component {
                     thumbnails={card.items_thumbnails}
                     avatar={card.owner.avatar}
                     likeCount={card.likes_count}
+                    followed={card.followed}
+                    liked={card.liked}
+                    collections={card.collection_items}
+                    authorID={card.owner.id}
                   />
                 </div>
               ))}
             </Row>
-        ))}
+          ))}
       </Carousel>
     );
   }
@@ -183,20 +188,20 @@ class SubPages extends Component {
       case "Recursos":
         return (
           <React.Fragment>
-            <div style={{ backgroundColor: "#ff7f00", position:"relative" }}>
-              <div style={{ textAlign: "justify", color: "#fff", minHeight:195, paddingLeft:10, paddingRight:10, paddingTop:20, paddingBottom:20 }}>
+            <div style={{ backgroundColor: "#ff7f00", position: "relative" }}>
+              <div style={{ textAlign: "justify", color: "#fff", minHeight: 195, paddingLeft: 10, paddingRight: 10, paddingTop: 20, paddingBottom: 20 }}>
                 <img
                   src={recursos}
                   alt="aba recursos"
                   height="155"
-                  style={{ float: "left", marginRight:20, marginBottom:20, marginLeft: window.innerWidth >= 825? "25%" : "0px" }}
+                  style={{ float: "left", marginRight: 20, marginBottom: 20, marginLeft: window.innerWidth >= 825 ? "25%" : "0px" }}
                 />
-                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825? "25%" : "0px"}}>
-                      Nesta área, você tem acesso a Recursos Educacionais
-                      Digitais, isto é, a vídeos, animações e a outros recursos
-                      destinados à educação. São Recursos de portais parceiros
-                      do MEC e de professores que, como você, atuam na Educação
-                      Básica!
+                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825 ? "25%" : "0px" }}>
+                  Nesta área, você tem acesso a Recursos Educacionais
+                  Digitais, isto é, a vídeos, animações e a outros recursos
+                  destinados à educação. São Recursos de portais parceiros
+                  do MEC e de professores que, como você, atuam na Educação
+                  Básica!
                     </p>
               </div>
             </div>
@@ -241,20 +246,20 @@ class SubPages extends Component {
 
         return (
           <React.Fragment>
-            <div style={{ backgroundColor: "#e81f4f", position:"relative" }}>
-              <div style={{ textAlign: "justify", color: "#fff", minHeight:195, paddingLeft:10, paddingRight:10, paddingTop:20, paddingBottom:20 }}>
+            <div style={{ backgroundColor: "#e81f4f", position: "relative" }}>
+              <div style={{ textAlign: "justify", color: "#fff", minHeight: 195, paddingLeft: 10, paddingRight: 10, paddingTop: 20, paddingBottom: 20 }}>
                 <img
                   src={materiais}
                   alt="aba recursos"
                   height="155"
-                  style={{ float: "left", marginRight:20, marginBottom:20, marginLeft: window.innerWidth >= 825? "25%" : "0px" }}
+                  style={{ float: "left", marginRight: 20, marginBottom: 20, marginLeft: window.innerWidth >= 825 ? "25%" : "0px" }}
                 />
-                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825? "25%" : "0px"}}>
-                      Nesta área, você acessa livremente materiais completos de
-                      formação, como cursos já oferecidos pelo MEC e seus
-                      parceiros. São conteúdos elaborados por equipes
-                      multidisciplinares e de autoria de pesquisadores e
-                      educadores renomados nas áreas.
+                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825 ? "25%" : "0px" }}>
+                  Nesta área, você acessa livremente materiais completos de
+                  formação, como cursos já oferecidos pelo MEC e seus
+                  parceiros. São conteúdos elaborados por equipes
+                  multidisciplinares e de autoria de pesquisadores e
+                  educadores renomados nas áreas.
                     </p>
               </div>
             </div>
@@ -306,19 +311,19 @@ class SubPages extends Component {
       case "Colecoes":
         return (
           <React.Fragment>
-            <div style={{ backgroundColor: "#673ab7", position:"relative" }}>
-              <div style={{ textAlign: "justify", color: "#fff", minHeight:195, paddingLeft:10, paddingRight:10, paddingTop:20, paddingBottom:20 }}>
+            <div style={{ backgroundColor: "#673ab7", position: "relative" }}>
+              <div style={{ textAlign: "justify", color: "#fff", minHeight: 195, paddingLeft: 10, paddingRight: 10, paddingTop: 20, paddingBottom: 20 }}>
                 <img
                   src={colecoes}
                   alt="aba recursos"
                   height="155"
-                  style={{ float: "left", marginRight:20, marginBottom:20, marginLeft: window.innerWidth >= 825? "25%" : "0px" }}
+                  style={{ float: "left", marginRight: 20, marginBottom: 20, marginLeft: window.innerWidth >= 825 ? "25%" : "0px" }}
                 />
-                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825? "25%" : "0px"}}>
-                      Nesta área, você tem acesso às coleções criadas e
-                      organizadas pelos usuários da plataforma. É mais uma
-                      possibilidade de buscar recursos educacionais para sua
-                      aula!
+                <p style={{ textAlign: "justify", color: "#fff", marginRight: window.innerWidth >= 825 ? "25%" : "0px" }}>
+                  Nesta área, você tem acesso às coleções criadas e
+                  organizadas pelos usuários da plataforma. É mais uma
+                  possibilidade de buscar recursos educacionais para sua
+                  aula!
                     </p>
               </div>
             </div>
diff --git a/src/Components/CollectionCardFunction.js b/src/Components/CollectionCardFunction.js
index b48c2eb6..5a61b287 100644
--- a/src/Components/CollectionCardFunction.js
+++ b/src/Components/CollectionCardFunction.js
@@ -44,7 +44,7 @@ import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 
 export default function CollectionCardFunction(props) {
-    console.log(props);
+    // console.log(props);
     const { state } = useContext(Store)
 
     // eslint-disable-next-line
@@ -115,7 +115,54 @@ export default function CollectionCardFunction(props) {
     }
 
     useEffect(() => {
-        console.log("bla!");
+        // setTimeout(function () {
+        //     if (state.currentUser.id) {
+        //         const config = getAxiosConfig();
+        //         axios({
+        //             method: 'get',
+        //             url: `${apiUrl}/users/${state.currentUser.id}/following/Collection`,
+        //             headers: config.headers
+        //         }).then(
+        //             (response) => {
+        //                 const data = response.data
+        //                 for (let i = 0; i < data.length; i++)
+        //                     if (data[i].followable.id === props.id)
+        //                         toggleUserFollowingCol(true)
+        //                 saveHeaders(response)
+        //             })
+        //     }
+        //     else {
+        //         toggleLiked(false);
+        //         toggleUserFollowingCol(false);
+        //     }
+        // }, 1000);
+        
+        // setTimeout(function () {
+        //     if (state.currentUser.id) {
+        //         const config = getAxiosConfig();
+        //         axios({
+        //             method: 'get',
+        //             url: `${apiUrl}/users/${state.currentUser.id}/collections/liked`,
+        //             headers: config.headers
+        //         }).then(
+        //             (response) => {
+        //                 const data = response.data
+        //                 for (let i = 0; i < data.length; i++)
+        //                     if (data[i].id === props.id)
+        //                         toggleLiked(true)
+        //                 saveHeaders(response)
+        //             })
+        //     }
+        //     else {
+        //         toggleLiked(false);
+        //         toggleUserFollowingCol(false);
+        //     }
+        // }, 2000);
+        if(!state.currentUser.id)
+        {
+            toggleLiked(false);
+            toggleUserFollowingCol(false);
+        }
     }, [state.currentUser.id])
 
     const RenderFollowingButton = () => {
@@ -144,6 +191,26 @@ export default function CollectionCardFunction(props) {
 
     const SlideAnimationContent = () => {
         return (
+            // <SlideContentDiv>
+            //     <HeaderContainer>{/*marginBottom:10px*/}
+            //         <AvatarDiv>
+            //             <img className="img" src={userAvatar} alt="user avatar" />
+            //         </AvatarDiv>
+            //         <EnviadoPor>
+            //             Enviado por:
+            //             <br />
+            //             <p>{props.author}</p>
+            //         </EnviadoPor>
+            //     </HeaderContainer>
+            //     <TagContainer>
+            //         {
+            //             props.tags.map((tag) =>
+            //                 <span key={tag.id}>{tag.name}</span>
+
+            //             )
+            //         }
+            //     </TagContainer>
+            // </SlideContentDiv>
             <SlideContentDiv>
                 <div style={{ display: "flex", flex: "1" }}>{/*marginBottom:10px*/}
                     <SlideAvatarDiv>
@@ -187,7 +254,7 @@ export default function CollectionCardFunction(props) {
         }
         handleSuccessfulLogin(false);
     }
-    
+
     return (
         <>
             <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}
diff --git a/src/Components/TabPanels/PanelComponents/TemplateColecao.js b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
index dfb193fc..0aeff38c 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateColecao.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
@@ -21,16 +21,17 @@ import Grid from '@material-ui/core/Grid';
 import NoContent from './NoContent.js'
 import CollectionCardFunction from '../../CollectionCardFunction.js'
 import Title from './PanelTitle.js'
-import {WhiteContainer, StyledGrid} from '../StyledComponents.js'
-import {ButtonsAreaColecao} from './ButtonsArea'
+import { WhiteContainer, StyledGrid } from '../StyledComponents.js'
+import { ButtonsAreaColecao } from './ButtonsArea'
 
 
-export default function PanelTemplateColecao (props) {
+export default function PanelTemplateColecao(props) {
     const RenderFollowedColCard = (card, followerBoolean) => {
         if (followerBoolean) {
             return (
                 <CollectionCardFunction
-                    name={card.followable.name}
+                    name={card.name}
+                    collections={card.followable.collection_items}
                     rating={card.followable.score}
                     type={card.followable.object_type}
                     description={card.followable.description}
@@ -43,27 +44,28 @@ export default function PanelTemplateColecao (props) {
                     followed={card.followable.followed}
                     privacy={card.followable.privacy}
                     id={card.followable.id}
-                    />
+                />
             )
         }
         else {
             return (
                 <CollectionCardFunction
-                      name={card.name}
-                      rating={card.score}
-                      type={card.object_type}
-                      description={card.description}
-                      author={card.owner.name}
-                      avatar={card.owner.avatar}
-                      authorID={card.owner.id}
-                      thumbnails={card.items_thumbnails}
-                      likeCount={card.likes_count}
-                      privacy={card.privacy}
-                      liked={card.liked}
-                      followed={card.followed}
-                      tags={card.tags}
-                      id={card.id}
-                  />
+                    name={card.name}
+                    rating={card.score}
+                    type={card.object_type}
+                    collections={card.collection_items}
+                    description={card.description}
+                    author={card.owner.name}
+                    avatar={card.owner.avatar}
+                    authorID={card.owner.id}
+                    thumbnails={card.items_thumbnails}
+                    likeCount={card.likes_count}
+                    privacy={card.privacy}
+                    liked={card.liked}
+                    followed={card.followed}
+                    tags={card.tags}
+                    id={card.id}
+                />
             )
         }
     }
@@ -77,35 +79,35 @@ export default function PanelTemplateColecao (props) {
 
             {
                 props.length === 0 ?
-                (
-                    [
-                        <NoContent text={props.noContentText}/>
-                    ]
-                )
-                :
-                (
-                    [
-                        <React.Fragment>
+                    (
+                        [
+                            <NoContent text={props.noContentText} />
+                        ]
+                    )
+                    :
+                    (
+                        [
+                            <React.Fragment>
 
-                            <StyledGrid container spacing={1} style={{paddingLeft : "30px", paddingRight : "15px"}}>
-                            {
-                                props.sliceArr.map( (card) =>
-                                <Grid item md={3} xs={12} key={card.id}>
-                                    {RenderFollowedColCard(card, props.followed)}
-                                </Grid>
-                                )
-                            }
-                            </StyledGrid>
+                                <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}>
+                                    {
+                                        props.sliceArr.map((card) =>
+                                            <Grid item md={3} xs={12} key={card.id}>
+                                                {RenderFollowedColCard(card, props.followed)}
+                                            </Grid>
+                                        )
+                                    }
+                                </StyledGrid>
 
-                            <ButtonsAreaColecao
-                                sliceLength={props.sliceArr.length}
-                                length={props.length}
-                                showMore={() => props.showMore()}
-                                showAll={() => props.showAll()}
-                            />
-                        </React.Fragment>
-                    ]
-                )
+                                <ButtonsAreaColecao
+                                    sliceLength={props.sliceArr.length}
+                                    length={props.length}
+                                    showMore={() => props.showMore()}
+                                    showAll={() => props.showAll()}
+                                />
+                            </React.Fragment>
+                        ]
+                    )
             }
 
         </WhiteContainer>
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
index 3aab2492..2b2148c3 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
@@ -1,11 +1,11 @@
 import React from 'react'
 import Grid from '@material-ui/core/Grid';
-import {HeaderGrid, StyledGrid} from '../StyledComponents.js'
-import {NoContent} from './TabInicio.js'
+import { HeaderGrid, StyledGrid } from '../StyledComponents.js'
+import { NoContent } from './TabInicio.js'
 import CollectionCardFunction from '../../CollectionCardFunction.js'
 import NoCol from '../../../img/Pagina_vazia_colecao.png'
 
-export default function LastCols (props) {
+export default function LastCols(props) {
     return (
         <React.Fragment>
             <HeaderGrid container>
@@ -16,47 +16,48 @@ export default function LastCols (props) {
 
 
             {
-                props.count === 0  || props.collections.length === 0?
-                (
-                    [
-                        <Grid container>
-                            <Grid item xs={12}>
-                                <NoContent
-                                    image={NoCol}
-                                    text1={props.username + " ainda não disponibilizou nenhuma coleção."}
-                                    text2={"Quando disponibilizar, elas aparecerão aqui."}
-                                />
+                props.count === 0 || props.collections.length === 0 ?
+                    (
+                        [
+                            <Grid container>
+                                <Grid item xs={12}>
+                                    <NoContent
+                                        image={NoCol}
+                                        text1={props.username + " ainda não disponibilizou nenhuma coleção."}
+                                        text2={"Quando disponibilizar, elas aparecerão aqui."}
+                                    />
+                                </Grid>
                             </Grid>
-                        </Grid>
-                    ]
-                )
-                :
-                (
-                    [
-                        <StyledGrid container spacing={1} style={{paddingLeft : "0.5em"}}>
-                            {
-                                props.collections.slice(0,4).map( (card) =>
-                                    <Grid item md={3} xs={12} key={card.id}>
-                                        <CollectionCardFunction
-                                            name={card.name}
-                                            rating={card.score}
-                                            type={card.object_type}
-                                            description={card.description}
-                                            author={card.owner.name}
-                                            avatar={card.owner.avatar}
-                                            thumbnails={card.items_thumbnails}
-                                            likeCount={card.likes_count}
-                                            liked={card.liked}
-                                            followed={card.followed}
-                                            tags={card.tags}
-                                            id={card.id}
-                                        />
-                                    </Grid>
-                                )
-                            }
-                        </StyledGrid>
-                    ]
-                )
+                        ]
+                    )
+                    :
+                    (
+                        [
+                            <StyledGrid container spacing={1} style={{ paddingLeft: "0.5em" }}>
+                                {
+                                    props.collections.slice(0, 4).map((card) =>
+                                        <Grid item md={3} xs={12} key={card.id}>
+                                            <CollectionCardFunction
+                                                name={card.name}
+                                                tags={card.tags}
+                                                rating={card.score}
+                                                id={card.id}
+                                                author={card.owner.name}
+                                                description={card.description}
+                                                thumbnails={card.items_thumbnails}
+                                                avatar={card.owner.avatar}
+                                                likeCount={card.likes_count}
+                                                followed={card.followed}
+                                                liked={card.liked}
+                                                collections={card.collection_items}
+                                                authorID={card.owner.id}
+                                            />
+                                        </Grid>
+                                    )
+                                }
+                            </StyledGrid>
+                        ]
+                    )
             }
         </React.Fragment>
     )
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
index 3622356c..f2beba8f 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
@@ -1,17 +1,17 @@
-import React, {useState, useEffect} from 'react'
-import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
+import React, { useState, useEffect } from 'react'
+import { HeaderGrid, ContainerStyled, Carregados } from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
 import CollectionCardFunction from '../../CollectionCardFunction.js'
-import {ButtonMostrarMaisColecao} from '../PanelComponents/ButtonsArea.js'
+import { ButtonMostrarMaisColecao } from '../PanelComponents/ButtonsArea.js'
 
-export default function TabRecursos (props) {
+export default function TabRecursos(props) {
     const [arr, setArr] = useState([])
     const [colsSlice, setSlice] = useState([])
-    const handleSlice = (newArr) => {setSlice(newArr)}
+    const handleSlice = (newArr) => { setSlice(newArr) }
 
-    useEffect( () => {
+    useEffect(() => {
         setArr(props.collections)
-        setSlice(props.collections.slice(0,4))
+        setSlice(props.collections.slice(0, 4))
     }, [])
 
     const showMore = (quantity) => {
@@ -20,31 +20,32 @@ export default function TabRecursos (props) {
     }
 
     return (
-        <ContainerStyled style={{flexDirection : "column"}}>
+        <ContainerStyled style={{ flexDirection: "column" }}>
 
             <HeaderGrid container>
                 <Grid item xs={12}>
-                    <h3>Coleções públicas <b style={{fontWeight:"500"}}>({props.count})</b></h3>
+                    <h3>Coleções públicas <b style={{ fontWeight: "500" }}>({props.count})</b></h3>
                 </Grid>
             </HeaderGrid>
 
-            <Grid container spacing={1} style={{paddingLeft : "0.5em"}}>
+            <Grid container spacing={1} style={{ paddingLeft: "0.5em" }}>
                 {
-                    colsSlice.map( (card) =>
+                    colsSlice.map((card) =>
                         <Grid item md={3} xs={12} key={card.id}>
                             <CollectionCardFunction
                                 name={card.name}
+                                tags={card.tags}
                                 rating={card.score}
-                                type={card.object_type}
-                                description={card.description}
+                                id={card.id}
                                 author={card.owner.name}
-                                avatar={card.owner.avatar}
+                                description={card.description}
                                 thumbnails={card.items_thumbnails}
+                                avatar={card.owner.avatar}
                                 likeCount={card.likes_count}
-                                liked={card.liked}
                                 followed={card.followed}
-                                tags={card.tags}
-                                id={card.id}
+                                liked={card.liked}
+                                collections={card.collection_items}
+                                authorID={card.owner.id}
                             />
                         </Grid>
                     )
@@ -52,19 +53,19 @@ export default function TabRecursos (props) {
             </Grid>
 
             <Carregados>
-                <p style={{margin:"0 0 10px", fontSize:"14px"}}>
+                <p style={{ margin: "0 0 10px", fontSize: "14px" }}>
                     Carregados {colsSlice.length} de {arr.length}
                 </p>
 
                 {
                     props.count > 5 &&
                     <React.Fragment>
-                        <ButtonMostrarMaisColecao onClick={() => {showMore(4)}}>
-                            <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS 4</span>
+                        <ButtonMostrarMaisColecao onClick={() => { showMore(4) }}>
+                            <span style={{ color: "#fff", fontSize: "14px", fontWeight: "500" }}>MOSTRAR MAIS 4</span>
                         </ButtonMostrarMaisColecao>
 
-                        <ButtonMostrarMaisColecao onClick={() => {showMore(20)}}>
-                            <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS 20</span>
+                        <ButtonMostrarMaisColecao onClick={() => { showMore(20) }}>
+                            <span style={{ color: "#fff", fontSize: "14px", fontWeight: "500" }}>MOSTRAR MAIS 20</span>
                         </ButtonMostrarMaisColecao>
                     </React.Fragment>
                 }
diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
index f7883396..1a397869 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
@@ -16,24 +16,24 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useState, useEffect} from 'react'
+import React, { useState, useEffect } from 'react'
 import styled from 'styled-components'
 import Grid from '@material-ui/core/Grid';
 import LoadingSpinner from '../../LoadingSpinner.js'
 import axios from 'axios'
-import {apiUrl} from '../../../env';
+import { apiUrl } from '../../../env';
 import PanelTemplateColecao from '../PanelComponents/TemplateColecao.js'
 import PaginaVaziaColecao from '../../../img/Pagina_vazia_colecao.png'
 
 import NoContent from '../PanelComponents/NoContent.js'
-import {WhiteContainer, StyledGrid} from '../StyledComponents.js'
+import { WhiteContainer, StyledGrid } from '../StyledComponents.js'
 import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';
 import Title from '../PanelComponents/PanelTitle.js'
 import CollectionCardFunction from '../../CollectionCardFunction.js'
-import {ButtonsAreaColecao} from '../PanelComponents/ButtonsArea'
+import { ButtonsAreaColecao } from '../PanelComponents/ButtonsArea'
 import CriarColecaoModal from '../../CriarColecaoModal.js'
 
-export default function TabPanelColecoes (props) {
+export default function TabPanelColecoes(props) {
     const [loading, handleLoading] = useState(true)
 
     const [userCollections, setUserCollections] = useState([])
@@ -47,7 +47,7 @@ export default function TabPanelColecoes (props) {
             axios.get((`${apiUrl}/users/` + props.id + '/collections'), props.config),
             axios.get((`${apiUrl}/users/` + props.id + '/following/Collection'), props.config),
         ])
-        .then( (responseArr) => {
+            .then((responseArr) => {
                 console.log('responseArr Colecoes: ', responseArr)
                 if (responseArr[1].headers['access-token']) {
                     sessionStorage.setItem('@portalmec/accessToken', responseArr[1].headers['access-token'])
@@ -55,20 +55,20 @@ export default function TabPanelColecoes (props) {
 
                 handleLoading(false)
                 setUserCollections(responseArr[0].data)
-                setUserCollectionsSlice(responseArr[0].data.slice(0,3))
+                setUserCollectionsSlice(responseArr[0].data.slice(0, 3))
 
                 setFollowedCollections(responseArr[1].data)
-                setFollowedCollectionsSlice(responseArr[1].data.slice(0,4))
+                setFollowedCollectionsSlice(responseArr[1].data.slice(0, 4))
 
             },
-            (error) => {
-                handleLoading(false)
-                console.log('error while running axios all')
-            }
-        )
+                (error) => {
+                    handleLoading(false)
+                    console.log('error while running axios all')
+                }
+            )
     }
 
-    useEffect( () => {
+    useEffect(() => {
         getInfo()
     }, [])
 
@@ -77,86 +77,86 @@ export default function TabPanelColecoes (props) {
         setUserCollectionsSlice(userCollections.slice(0, sliceLength + 4))
     }
 
-    const showAllUserCollections = () => {setUserCollectionsSlice(userCollections)}
+    const showAllUserCollections = () => { setUserCollectionsSlice(userCollections) }
 
     const showMoreFollowedCollections = () => {
         var sliceLength = followedCollectionsSlice.length
         setFollowedCollectionsSlice(followedCollections.slice(0, sliceLength + 4))
     }
 
-    const showAllFollowedCollections = () => {setFollowedCollectionsSlice(followedCollections)}
+    const showAllFollowedCollections = () => { setFollowedCollectionsSlice(followedCollections) }
 
     return (
         <>
-        {
-            loading ?
-            (
-                <LoadingSpinner text={'CARREGANDO COLEÇÕES'}/>
+            {
+                loading ?
+                    (
+                        <LoadingSpinner text={'CARREGANDO COLEÇÕES'} />
 
-            )
-            :
-            (
-                [
-                    <React.Fragment>
-                        <Tentativa
-                            title={"Minhas Coleções"}
-                            length={userCollections.length}
-                            noContentText={
-                                <div>
-                                    <img src={PaginaVaziaColecao} alt="PaginaVaziaColecao" style={{height:"150px",width:"150px", verticalAlign:"middle", border:"0"}}/>
-                                    <br/>
-                                    <span style={{fontFamily:"Roboto", fontWeight:"lighter", fontSize:"24px"}}>
-                                        Criamos a sua primeira Coleção!
+                    )
+                    :
+                    (
+                        [
+                            <React.Fragment>
+                                <Tentativa
+                                    title={"Minhas Coleções"}
+                                    length={userCollections.length}
+                                    noContentText={
+                                        <div>
+                                            <img src={PaginaVaziaColecao} alt="PaginaVaziaColecao" style={{ height: "150px", width: "150px", verticalAlign: "middle", border: "0" }} />
+                                            <br />
+                                            <span style={{ fontFamily: "Roboto", fontWeight: "lighter", fontSize: "24px" }}>
+                                                Criamos a sua primeira Coleção!
                                     </span>
-                                    <p style={{fontFamily:"Roboto", fontSize:"16px", margin:"10px 0 0", fontWeight : "normal"}}>
-                                        Adicione nela recursos que você queira acessar mais tarde.
-                                        <br/>
+                                            <p style={{ fontFamily: "Roboto", fontSize: "16px", margin: "10px 0 0", fontWeight: "normal" }}>
+                                                Adicione nela recursos que você queira acessar mais tarde.
+                                        <br />
                                         Crie novas coleções clicando no cartão roxo "Criar Colecão".
                                     </p>
-                                </div>
-                            }
-                            sliceArr={userCollectionsSlice}
-                            showMore={showMoreUserCollections}
-                            showAll={showAllUserCollections}
-                            callback={getInfo}
-                        />
-
-                        <PanelTemplateColecao
-                            title={"Coleções que eu sigo"}
-                            length={followedCollections.length}
-                            noContentText={"Você ainda não segue nenhuma coleção."}
-                            sliceArr={followedCollectionsSlice}
-                            showMore={showMoreFollowedCollections}
-                            showAll={showAllFollowedCollections}
-                            followed={true}
-                        />
-                    </React.Fragment>
-                ]
-            )
-        }
+                                        </div>
+                                    }
+                                    sliceArr={userCollectionsSlice}
+                                    showMore={showMoreUserCollections}
+                                    showAll={showAllUserCollections}
+                                    callback={getInfo}
+                                />
+
+                                <PanelTemplateColecao
+                                    title={"Coleções que eu sigo"}
+                                    length={followedCollections.length}
+                                    noContentText={"Você ainda não segue nenhuma coleção."}
+                                    sliceArr={followedCollectionsSlice}
+                                    showMore={showMoreFollowedCollections}
+                                    showAll={showAllFollowedCollections}
+                                    followed={true}
+                                />
+                            </React.Fragment>
+                        ]
+                    )
+            }
         </>
     )
 }
 
-function Tentativa (props) {
+function Tentativa(props) {
     const [modalOpen, toggleModal] = useState(false)
-    const handleModal = () => {toggleModal(!modalOpen)};
+    const handleModal = () => { toggleModal(!modalOpen) };
 
     return (
         <WhiteContainer>
-            <CriarColecaoModal open={modalOpen} handleClose={() => {handleModal(); props.callback()}}/>
+            <CriarColecaoModal open={modalOpen} handleClose={() => { handleModal(); props.callback() }} />
 
             <Title
                 title={props.title}
                 length={props.length}
             />
 
-            <StyledGrid container spacing={1} style={{paddingLeft : "30px", paddingRight : "15px"}}>
+            <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}>
                 <Grid item md={3} xs={12}>
-                    <CardDiv onClick={()=>{handleModal()}}>
-                        <div style={{backgroundColor:"#673ab7", height:"250px", display:"flex", justifyContent:"center", alignItems:"center"}}>
-                            <CreateNewFolderIcon style={{color:"#fff", fontSize:"70px"}}/>
-                            <p style={{fontSize:"16px", margin:"0 0 10px", color : "#fff"}}>
+                    <CardDiv onClick={() => { handleModal() }}>
+                        <div style={{ backgroundColor: "#673ab7", height: "250px", display: "flex", justifyContent: "center", alignItems: "center" }}>
+                            <CreateNewFolderIcon style={{ color: "#fff", fontSize: "70px" }} />
+                            <p style={{ fontSize: "16px", margin: "0 0 10px", color: "#fff" }}>
                                 CRIAR COLEÇÃO
                             </p>
                         </div>
@@ -165,53 +165,52 @@ function Tentativa (props) {
 
                 {
                     props.length === 0 ?
-                    (
-                        [
-                            <Grid item lg={6} md={4} sm={6} xs={12}>
-                                <NoContent text={props.noContentText}/>
-                            </Grid>
-                        ]
-                    )
-                    :
-                    (
-                        [
-                            <React.Fragment>
-                            {
-                                props.sliceArr.map( (card) =>
-                                <Grid item md={3} xs={12} key={card.id}>
-                                    <CollectionCardFunction
-                                          name={card.name}
-                                          rating={card.score}
-                                          type={card.object_type}
-                                          description={card.description}
-                                          author={card.owner.name}
-                                          avatar={card.owner.avatar}
-                                          authorID={card.owner.id}
-                                          thumbnails={card.items_thumbnails}
-                                          likeCount={card.likes_count}
-                                          liked={card.liked}
-                                          followed={card.followed}
-                                          tags={card.tags}
-                                          privacy={card.privacy}
-                                          id={card.id}
-                                      />
+                        (
+                            [
+                                <Grid item lg={6} md={4} sm={6} xs={12}>
+                                    <NoContent text={props.noContentText} />
                                 </Grid>
-                                )
-                            }
-                            </React.Fragment>
-                        ]
-                    )
-                }
-                </StyledGrid>
-                {
-                    props.length  > 0 &&
-                    <ButtonsAreaColecao
-                        sliceLength={props.sliceArr.length}
-                        length={props.length}
-                        showMore={() => props.showMore()}
-                        showAll={() => props.showAll()}
-                    />
+                            ]
+                        )
+                        :
+                        (
+                            [
+                                <React.Fragment>
+                                    {
+                                        props.sliceArr.map((card) =>
+                                            <Grid item md={3} xs={12} key={card.id}>
+                                                <CollectionCardFunction
+                                                    name={card.name}
+                                                    tags={card.tags}
+                                                    rating={card.score}
+                                                    id={card.id}
+                                                    author={card.owner.name}
+                                                    description={card.description}
+                                                    thumbnails={card.items_thumbnails}
+                                                    avatar={card.owner.avatar}
+                                                    likeCount={card.likes_count}
+                                                    followed={card.followed}
+                                                    liked={card.liked}
+                                                    collections={card.collection_items}
+                                                    authorID={card.owner.id}
+                                                />
+                                            </Grid>
+                                        )
+                                    }
+                                </React.Fragment>
+                            ]
+                        )
                 }
+            </StyledGrid>
+            {
+                props.length > 0 &&
+                <ButtonsAreaColecao
+                    sliceLength={props.sliceArr.length}
+                    length={props.length}
+                    showMore={() => props.showMore()}
+                    showAll={() => props.showAll()}
+                />
+            }
         </WhiteContainer>
     )
 }
-- 
GitLab


From 71135725059faa593353d3ecb6a38b002b3ec5cf Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Fri, 5 Feb 2021 10:06:06 -0300
Subject: [PATCH 65/83] changed request function names to reflect the api
 change from axios to fetch

---
 src/Components/AreasSubPages.js                    |  6 +++---
 src/Components/ColCardPublicOptions.js             |  4 ++--
 src/Components/CollectionCardFunction.js           |  6 +++---
 src/Components/CollectionCommentSection.js         |  4 ++--
 src/Components/Comment.js                          |  6 +++---
 src/Components/ContactButtons/FollowButton.js      |  6 +++---
 src/Components/ContactButtons/FollowingButton.js   |  4 ++--
 src/Components/ContactCardOptions.js               |  4 ++--
 src/Components/ContactForm.js                      |  4 ++--
 src/Components/CriarColecaoForm.js                 |  4 ++--
 src/Components/EditarColecaoForm.js                |  6 +++---
 src/Components/Firulas.js                          |  4 ++--
 src/Components/FollowCollectionButton.js           |  8 ++++----
 src/Components/GuardarModal.js                     |  6 +++---
 src/Components/HelperFunctions/getAxiosConfig.js   |  8 ++++----
 src/Components/IframeOverlay/DrawerContent.js      |  4 ++--
 src/Components/MenuList.js                         |  4 ++--
 src/Components/MobileDrawerMenu.js                 |  4 ++--
 .../ModalAlterarAvatar/ComponentAlterarAvatar.js   |  4 ++--
 .../ModalAlterarCover/ComponentAlterarCover.js     |  4 ++--
 src/Components/ModalConfirmarCuradoria.js          |  4 ++--
 src/Components/ModalExcluirColecao.js              |  4 ++--
 src/Components/Notifications.js                    |  4 ++--
 src/Components/NotificationsInner.js               |  4 ++--
 src/Components/PublicationPermissionsContent.js    |  4 ++--
 src/Components/ReportModal.js                      |  4 ++--
 src/Components/ResourceCardFunction.js             |  4 ++--
 .../ResourcePageComponents/CommentForm.js          |  4 ++--
 .../ResourcePageComponents/CommentsArea.js         |  4 ++--
 .../ResourcePageComponents/TextoObjeto.js          |  4 ++--
 .../TabPanels/PublicUserPageTabs/TabRecursos.js    |  4 ++--
 .../TabPanels/UserPageTabs/ModalExcluirConta.js    |  4 ++--
 .../TabPanels/UserPageTabs/PanelAtividades.js      |  4 ++--
 .../TabPanels/UserPageTabs/PanelCuradoria.js       |  4 ++--
 .../UploadPageComponents/FileUploadStage.js        |  4 ++--
 .../UploadPageComponents/ModalCancelar.js          |  4 ++--
 src/Components/UploadPageComponents/PartOne.js     |  6 +++---
 src/Components/UploadPageComponents/PartThree.js   |  4 ++--
 src/Components/UploadPageComponents/PartTwo.js     |  8 ++++----
 src/Components/UploadPageComponents/SendInfo.js    |  7 +++++--
 .../UploadPageComponents/UploadFileWrapper.js      |  6 +++---
 src/Pages/EditLearningObjectPage.js                | 14 +++++++-------
 src/Pages/EditProfilePage.js                       |  8 ++++----
 src/Pages/PageProfessor.js                         |  4 ++--
 src/Pages/PasswordRecoveryPage.js                  |  4 ++--
 src/Pages/ResourcePage.js                          |  6 +++---
 src/Pages/UploadPage.js                            |  8 ++++----
 src/Pages/UserPage.js                              |  4 ++--
 48 files changed, 123 insertions(+), 120 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 2988d77c..c4444afe 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -28,7 +28,7 @@ import colecoes from "../img/ilustra_colecoes.png";
 import Grid from "@material-ui/core/Grid";
 import ResourceCardFunction from "./ResourceCardFunction.js";
 import CollectionCardFunction from "./CollectionCardFunction.js";
-import {axiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
+import {getRequest} from './HelperFunctions/getAxiosConfig.js'
 
 const areaStyle = {
   paddingTop: "5px",
@@ -51,7 +51,7 @@ class ReqResources extends Component {
 
 componentDidMount() {
     const url = `/learning_objects?limit=12&sort=["published_at", "desc"]`
-    axiosGetRequest(url, (data) => {this.setState({ resources: data })}, (error) => {console.log(error)})
+    getRequest(url, (data) => {this.setState({ resources: data })}, (error) => {console.log(error)})
 }
   render() {
     var row1 = this.state.resources.slice(0, 4);
@@ -138,7 +138,7 @@ class ReqCollections extends Component {
   componentDidMount() {
       const url = `/collections?limit=12&sort=["updated_at", "desc"]`
 
-      axiosGetRequest(url, (data) => {this.setState({ collections: data })}, (error) => {console.log(error)})
+      getRequest(url, (data) => {this.setState({ collections: data })}, (error) => {console.log(error)})
   }
   render() {
     var row1 = this.state.collections.slice(0, 4);
diff --git a/src/Components/ColCardPublicOptions.js b/src/Components/ColCardPublicOptions.js
index 1e386410..aad23a6a 100644
--- a/src/Components/ColCardPublicOptions.js
+++ b/src/Components/ColCardPublicOptions.js
@@ -27,7 +27,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import styled from 'styled-components'
 import ErrorIcon from '@material-ui/icons/Error';
 import ReportModal from './ReportModal.js'
-import {axiosDeleteRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {deleteRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function ColCardPublicOptions (props) {
   const [anchorEl, setAnchorEl] = React.useState(null);
@@ -45,7 +45,7 @@ export default function ColCardPublicOptions (props) {
 
   const handleUnfollow = () => {
 
-      axiosDeleteRequest(`/collections/${props.id}/follow`, (data) => {console.log(data)}, (error) => {console.log(error)})
+      deleteRequest(`/collections/${props.id}/follow`, (data) => {console.log(data)}, (error) => {console.log(error)})
   }
 
   return (
diff --git a/src/Components/CollectionCardFunction.js b/src/Components/CollectionCardFunction.js
index 7c80e7b4..c0c21870 100644
--- a/src/Components/CollectionCardFunction.js
+++ b/src/Components/CollectionCardFunction.js
@@ -35,7 +35,7 @@ import LockIcon from '@material-ui/icons/Lock';
 import ColCardOwnerOptions from './ColCardOwnerOptions.js'
 import ColCardPublicOptions from './ColCardPublicOptions'
 import {Link} from 'react-router-dom';
-import {axiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {putRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function CollectionCardFunction (props) {
     const {state} = useContext(Store)
@@ -53,7 +53,7 @@ export default function CollectionCardFunction (props) {
         setLikesCount(data.count)
     }
     const handleLike = () => {
-        axiosPutRequest(`/collections/${props.id}/like`, {}, handleSuccessLike, (error) => {console.log(error)})
+        putRequest(`/collections/${props.id}/like`, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const [followingHover, handleFollowingHover] = useState(false)
@@ -66,7 +66,7 @@ export default function CollectionCardFunction (props) {
         handleToggleUserFollowingCol()
     }
     const handleFollow = () => {
-        axiosPutRequest(`/collections/${props.id}/follow`, {}, handleSuccessFollow, (error) => {console.log(error)})
+        putRequest(`/collections/${props.id}/follow`, {}, handleSuccessFollow, (error) => {console.log(error)})
     }
 
     const RenderFollowButton = () => {
diff --git a/src/Components/CollectionCommentSection.js b/src/Components/CollectionCommentSection.js
index 9aba6d1e..f7a3ad52 100644
--- a/src/Components/CollectionCommentSection.js
+++ b/src/Components/CollectionCommentSection.js
@@ -27,7 +27,7 @@ import Comment from './Comment.js';
 import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 import Comentario from '../img/comentarios.png';
-import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {getRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function CollectionCommentSection(props) {
 	const [post_snack_open, setPostSnackOpen] = useState(false);
@@ -113,7 +113,7 @@ export default function CollectionCommentSection(props) {
 	}
 
 	useEffect(() => {
-        axiosGetRequest(`/collections/${props.id}/reviews`, (data) => {setReviews(data)}, (error) => {console.log(error)})
+        getRequest(`/collections/${props.id}/reviews`, (data) => {setReviews(data)}, (error) => {console.log(error)})
 	}, [render_state]);
 
 	return (
diff --git a/src/Components/Comment.js b/src/Components/Comment.js
index 1d9c0058..09b66d5a 100644
--- a/src/Components/Comment.js
+++ b/src/Components/Comment.js
@@ -31,7 +31,7 @@ import TextField from "@material-ui/core/TextField";
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
 import ModalExcluir from './ModalExcluirComentario.js'
-import {axiosPutRequest, axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {putRequest, deleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Comment (props) {
 
@@ -93,7 +93,7 @@ export default function Comment (props) {
                     "review_ratings_attributes" : props.reviewRatings
                 }
             }
-            axiosPutRequest(`/learning_objects/${props.objectID}/reviews/`, payload, handleOnSuccessfulComment, (error) => {console.log(error)})
+            putRequest(`/learning_objects/${props.objectID}/reviews/`, payload, handleOnSuccessfulComment, (error) => {console.log(error)})
 
         }
     }
@@ -105,7 +105,7 @@ export default function Comment (props) {
 
     const deleteComment = () => {
 
-        axiosDeleteRequest(`/learning_objects/${props.objectID}/reviews/${props.reviewID}`, handleSuccessDeleteComment, (error) => {console.log(error)})
+        deleteRequest(`/learning_objects/${props.objectID}/reviews/${props.reviewID}`, handleSuccessDeleteComment, (error) => {console.log(error)})
 
         toggleModal(false)
 
diff --git a/src/Components/ContactButtons/FollowButton.js b/src/Components/ContactButtons/FollowButton.js
index e2ddc04a..5594fa66 100644
--- a/src/Components/ContactButtons/FollowButton.js
+++ b/src/Components/ContactButtons/FollowButton.js
@@ -20,7 +20,7 @@ import React from 'react'
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
 import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
-import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {putRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowButton (props) {
 
@@ -31,7 +31,7 @@ export default function FollowButton (props) {
     const handleFollow = (followerID) => {
         if (followerID !== undefined) {
             const url = `/users/${followerID}/follow/`
-            axiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
+            putRequest(url, {}, handleSuccess, (error) => {console.log(error)})
         }
     }
 
@@ -51,7 +51,7 @@ export function NoIcon (props) {
     const handleFollow = (followerID) => {
         if (followerID !== undefined) {
             const url = `/users/${followerID}/follow/`
-            axiosPutRequest(url, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
+            putRequest(url, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Components/ContactButtons/FollowingButton.js b/src/Components/ContactButtons/FollowingButton.js
index cbe0b692..b2d22f24 100644
--- a/src/Components/ContactButtons/FollowingButton.js
+++ b/src/Components/ContactButtons/FollowingButton.js
@@ -21,7 +21,7 @@ import styled from 'styled-components'
 import Button from '@material-ui/core/Button';
 import FollowingIcon from '../../img/how_to_reg-24px.png'
 import ModalConfirmarUnfollow from '../ModalConfirmarUnfollow.js'
-import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {putRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function FollowingButton (props) {
 
@@ -44,7 +44,7 @@ export default function FollowingButton (props) {
     const handleUnfollowPartTwo = () => {
         const url = `/users/${unfollowID}/follow/`
 
-        axiosPutRequest(url, {}, handleSuccess, (error) => {console.log(error)})
+        putRequest(url, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ContactCardOptions.js b/src/Components/ContactCardOptions.js
index 3a5ed17d..24d16ab1 100644
--- a/src/Components/ContactCardOptions.js
+++ b/src/Components/ContactCardOptions.js
@@ -26,7 +26,7 @@ import MoreVertIcon from '@material-ui/icons/MoreVert';
 import OpenIcon from '@material-ui/icons/OpenInNew';
 import ReportIcon from '@material-ui/icons/Error';
 import PersonAddIcon from '@material-ui/icons/PersonAdd';
-import {axiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {putRequest} from './HelperFunctions/getAxiosConfig'
 import ReportModal from './ReportModal.js'
 import {Link} from 'react-router-dom'
 
@@ -43,7 +43,7 @@ export default function SimpleMenu(props) {
     }
     const handleFollow = (followerID) => {
 
-        axiosPutRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
+        putRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
     }
 
     const [reportModal, toggleReportModal] = useState(false)
diff --git a/src/Components/ContactForm.js b/src/Components/ContactForm.js
index 914dd3ab..971001eb 100644
--- a/src/Components/ContactForm.js
+++ b/src/Components/ContactForm.js
@@ -19,7 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, { useState } from 'react';
 import styled from 'styled-components';
 import FormInput from "../Components/FormInput.js"
-import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {postRequest} from './HelperFunctions/getAxiosConfig'
 
 const Button = styled.button`
 
@@ -190,7 +190,7 @@ const Button = styled.button`
                   message: mensagem.dict.value
               }
             }
-            axiosPostRequest(`/contacts`, payload, (data) => {limpaTudo()}, (error) => {console.log(error)})
+            postRequest(`/contacts`, payload, (data) => {limpaTudo()}, (error) => {console.log(error)})
   }
 }
 
diff --git a/src/Components/CriarColecaoForm.js b/src/Components/CriarColecaoForm.js
index 4fd1fefe..ea8c0507 100644
--- a/src/Components/CriarColecaoForm.js
+++ b/src/Components/CriarColecaoForm.js
@@ -25,7 +25,7 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {postRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function CriarColecaoForm (props) {
     const {state} = useContext(Store)
@@ -77,7 +77,7 @@ export default function CriarColecaoForm (props) {
                     "privacy" : finalRadioValue
                 }
             }
-            axiosPostRequest( `/collections/`, payload, handleSuccess, (error) =>{console.log(error)})
+            postRequest( `/collections/`, payload, handleSuccess, (error) =>{console.log(error)})
 
         }
     }
diff --git a/src/Components/EditarColecaoForm.js b/src/Components/EditarColecaoForm.js
index 2b21b04c..4e127b9a 100644
--- a/src/Components/EditarColecaoForm.js
+++ b/src/Components/EditarColecaoForm.js
@@ -25,7 +25,7 @@ import RadioGroup from '@material-ui/core/RadioGroup';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import FormControl from '@material-ui/core/FormControl';
 import TextField from '@material-ui/core/TextField';
-import {axiosGetRequest, axiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {getRequest, putRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function EditarColecaoForm (props) {
     const {state} = useContext(Store)
@@ -37,7 +37,7 @@ export default function EditarColecaoForm (props) {
     }
 
     useEffect(() => {
-        axiosGetRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
+        getRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
     }, [])
 
     const [value, setValue] = useState(-1);
@@ -88,7 +88,7 @@ export default function EditarColecaoForm (props) {
                 }
             }
 
-            axiosPutRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
+            putRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
         }
     }
 
diff --git a/src/Components/Firulas.js b/src/Components/Firulas.js
index 20d6c101..6a368a11 100644
--- a/src/Components/Firulas.js
+++ b/src/Components/Firulas.js
@@ -4,7 +4,7 @@ import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import {LikeCounter, ButtonNoWidth} from '../Components/ResourceCardFunction.js'
 import FavoriteIcon from '@material-ui/icons/Favorite';
-import {axiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {putRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function Firulas (props) {
     const [liked, setLiked] = useState(props.liked)
@@ -13,7 +13,7 @@ export default function Firulas (props) {
         setLiked(!liked)
     }
     const handleLike = () => {
-        axiosPutRequest(`/learning_objects/${props.recursoId}/like/`, {}, handleSuccess, (error) => {console.log(error)})
+        putRequest(`/learning_objects/${props.recursoId}/like/`, {}, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/FollowCollectionButton.js b/src/Components/FollowCollectionButton.js
index 5cea848a..be01ad44 100644
--- a/src/Components/FollowCollectionButton.js
+++ b/src/Components/FollowCollectionButton.js
@@ -22,7 +22,7 @@ import CheckIcon from '@material-ui/icons/Check';
 import AddIcon from '@material-ui/icons/Add';
 import styled from 'styled-components';
 import SignUpModal from './SignUpModal.js';
-import {axiosGetRequest, axiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {getRequest, putRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function FollowCollectionButton(props) {
 	const [icon, setIcon] = useState(<AddIcon fontSize="large" />);
@@ -45,7 +45,7 @@ export default function FollowCollectionButton(props) {
     }
 	useEffect(() => {
 		const url = `/users/${props.user_id}/following/Collection`
-        axiosGetRequest(url, handleSuccessGet, (error) => console.log(error))
+        getRequest(url, handleSuccessGet, (error) => console.log(error))
 	}, []);
 
 	//handleMouse{Enter, Leave} only do anything when user follows given collection:
@@ -83,9 +83,9 @@ export default function FollowCollectionButton(props) {
 		if (!props.user_id)
 			setSignUpOpen(true);
 		else if (!following) {
-            axiosPutRequest(url, {}, handleSuccessfulFollow, (error) => {console.log(error)})
+            putRequest(url, {}, handleSuccessfulFollow, (error) => {console.log(error)})
 		} else {
-            axiosPutRequest(url, {}, handleSuccessfulUnfollow, (error) => {console.log(error)})
+            putRequest(url, {}, handleSuccessfulUnfollow, (error) => {console.log(error)})
 		}
 	};
 
diff --git a/src/Components/GuardarModal.js b/src/Components/GuardarModal.js
index 728ba0b8..3a231ac2 100644
--- a/src/Components/GuardarModal.js
+++ b/src/Components/GuardarModal.js
@@ -30,7 +30,7 @@ import LockIcon from '@material-ui/icons/Lock';
 import LoadingSpinner from './LoadingSpinner.js'
 import CriarColecaoForm from './CriarColecaoForm.js'
 import SnackbarComponent from './SnackbarComponent'
-import {axiosGetRequest, axiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {getRequest, postRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -57,7 +57,7 @@ export default function ReportModal (props) {
 
             const url = `/users/${id}/collections/`
 
-            axiosGetRequest(url, handleSuccessGetCols, (error) => {console.log('error')})
+            getRequest(url, handleSuccessGetCols, (error) => {console.log('error')})
         }
     }
 
@@ -74,7 +74,7 @@ export default function ReportModal (props) {
                 "items" : [ {"id":props.recursoId, "type":"LearningObject"} ]
             }
         }
-        axiosPostRequest( url, payload, handleSuccessPostToCol, (error) => {console.log(error)})
+        postRequest( url, payload, handleSuccessPostToCol, (error) => {console.log(error)})
 
     }
 
diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index c59bb1a7..e88e370d 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -80,7 +80,7 @@ function updateAccessToken (newAccessToken) {
     }
 }
 
-export const axiosGetRequest = (url, onSuccess, onError) => {
+export const getRequest = (url, onSuccess, onError) => {
     fetch((`${apiUrl}${url}`), {
         headers : fetchHeaders()
     })
@@ -99,7 +99,7 @@ export const axiosGetRequest = (url, onSuccess, onError) => {
         })
 }
 
-export const axiosDeleteRequest = (url, onSuccess, onError) => {
+export const deleteRequest = (url, onSuccess, onError) => {
     fetch((`${apiUrl}${url}`), {
         method : 'DELETE',
         headers : fetchHeaders()
@@ -119,7 +119,7 @@ export const axiosDeleteRequest = (url, onSuccess, onError) => {
         })
 }
 
-export const axiosPutRequest = (url, payload, onSuccess, onError) => {
+export const putRequest = (url, payload, onSuccess, onError) => {
     fetch((`${apiUrl}${url}`), {
         method : 'PUT',
         headers : fetchHeaders(),
@@ -140,7 +140,7 @@ export const axiosPutRequest = (url, payload, onSuccess, onError) => {
         })
 }
 
-export const axiosPostRequest = (url, payload, onSuccess, onError) => {
+export const postRequest = (url, payload, onSuccess, onError) => {
     fetch((`${apiUrl}${url}`), {
         method : 'POST',
         headers : fetchHeaders(),
diff --git a/src/Components/IframeOverlay/DrawerContent.js b/src/Components/IframeOverlay/DrawerContent.js
index 1a89a937..124a8f4e 100644
--- a/src/Components/IframeOverlay/DrawerContent.js
+++ b/src/Components/IframeOverlay/DrawerContent.js
@@ -4,7 +4,7 @@ import Grid from '@material-ui/core/Grid';
 import SearchInput from './SearchInput.js';
 import ResourceCard from './ResourceCard.js';
 import SmallFooter from './SmallFooter.js';
-import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig'
+import {getRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function DrawerContent(props) {
 	const [resources, setResources] = useState([]);
@@ -16,7 +16,7 @@ export default function DrawerContent(props) {
         const url = `/search?
 			page=0&results_per_page=5&query=${query}&search_class=LearningObject`
 
-        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        getRequest(url, handleSuccess, (error) => {console.log(error)})
 	}
 
 	useEffect(() => {
diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js
index 0d2b2117..0b2963f7 100644
--- a/src/Components/MenuList.js
+++ b/src/Components/MenuList.js
@@ -27,7 +27,7 @@ import { Store } from '../Store';
 import Profile from '../img/default_profile0.png'
 import styled from 'styled-components'
 import {apiDomain} from '../env.js'
-import {axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {deleteRequest} from './HelperFunctions/getAxiosConfig'
 
 
 const OverrideButton = styled(Button)`
@@ -54,7 +54,7 @@ export default function MenuList(props) {
   }
   const handleLogout = () => {
       const url = `/auth/sign_out`
-      axiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
+      deleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
   }
 
   return (
diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js
index 6409770f..4e0d6b22 100644
--- a/src/Components/MobileDrawerMenu.js
+++ b/src/Components/MobileDrawerMenu.js
@@ -37,7 +37,7 @@ import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
 import FolderOpenIcon from '@material-ui/icons/FolderOpen';
 import SettingsIcon from '@material-ui/icons/Settings';
 import {apiDomain} from '../env.js'
-import {axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {deleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function MobileDrawerMenu (props) {
     const {state, dispatch} = useContext(Store)
@@ -83,7 +83,7 @@ export default function MobileDrawerMenu (props) {
     }
     const handleLogout = () => {
         const url = `/auth/sign_out`
-        axiosDeleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
+        deleteRequest(url, handleSuccessSignOut, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
index ddb11196..8936af0a 100644
--- a/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
+++ b/src/Components/ModalAlterarAvatar/ComponentAlterarAvatar.js
@@ -24,7 +24,7 @@ import {apiDomain} from '../../env';
 import CloseIcon from '@material-ui/icons/Close';
 import Profile from '../../img/default_profile0.png'
 import Cropper from '../Cropper.js'
-import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {putRequest} from '../HelperFunctions/getAxiosConfig'
 
 function ChooseImage (props) {
     return (
@@ -103,7 +103,7 @@ export default function ComponentAlterarAvatar (props) {
         let fdAvatar = new FormData()
         fdAvatar.set('user[avatar]', newAvatar)
 
-        axiosPutRequest(url, fdAvatar, handleSuccess, (error) => {console.log(error)})
+        putRequest(url, fdAvatar, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalAlterarCover/ComponentAlterarCover.js b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
index f9da4385..99a5f549 100644
--- a/src/Components/ModalAlterarCover/ComponentAlterarCover.js
+++ b/src/Components/ModalAlterarCover/ComponentAlterarCover.js
@@ -22,7 +22,7 @@ import styled from 'styled-components'
 import {Store} from '../../Store.js'
 import CloseIcon from '@material-ui/icons/Close';
 import Cropper from '../Cropper.js'
-import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig'
+import {putRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function ComponentAlterarCover (props) {
     const {state, dispatch} = useContext(Store)
@@ -53,7 +53,7 @@ export default function ComponentAlterarCover (props) {
         let fdCover = new FormData()
         fdCover.set('user[cover]', newCover)
 
-        axiosPutRequest(url, fdCover, handleSuccess, (error) => {console.log(error)})
+        putRequest(url, fdCover, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalConfirmarCuradoria.js b/src/Components/ModalConfirmarCuradoria.js
index 77fa7a4b..4687b187 100644
--- a/src/Components/ModalConfirmarCuradoria.js
+++ b/src/Components/ModalConfirmarCuradoria.js
@@ -23,7 +23,7 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import CloseModalButton from './CloseModalButton'
-import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {postRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalConfirmarCuradoriaOpen (props) {
 
@@ -52,7 +52,7 @@ export default function ModalConfirmarCuradoriaOpen (props) {
                 "answers" : transformReportCriteria(props.reportCriteria)
             }
         }
-        axiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
+        postRequest(url, payload, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/ModalExcluirColecao.js b/src/Components/ModalExcluirColecao.js
index c405179d..879112ae 100644
--- a/src/Components/ModalExcluirColecao.js
+++ b/src/Components/ModalExcluirColecao.js
@@ -24,7 +24,7 @@ import styled from 'styled-components'
 import GreyButton from './GreyButton.js'
 import PurpleButton from './PurpleButton.js'
 import SnackbarComponent from './SnackbarComponent'
-import {axiosDeleteRequest} from './HelperFunctions/getAxiosConfig'
+import {deleteRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ModalExcluirColecao (props) {
     const [snackbarOpen, toggleSnackbar] = useState(false)
@@ -36,7 +36,7 @@ export default function ModalExcluirColecao (props) {
     const handleDelete = () => {
         const url = `/collections/${props.id}`
 
-        axiosDeleteRequest(url, handleDeleteSuccess, (error) => {console.log(error)})
+        deleteRequest(url, handleDeleteSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/Notifications.js b/src/Components/Notifications.js
index 5911a309..cf8a2f05 100644
--- a/src/Components/Notifications.js
+++ b/src/Components/Notifications.js
@@ -23,7 +23,7 @@ import styled from 'styled-components'
 import Menu from '@material-ui/core/Menu';
 import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {axiosGetRequest} from './HelperFunctions/getAxiosConfig.js'
+import {getRequest} from './HelperFunctions/getAxiosConfig.js'
 import { withStyles } from '@material-ui/core/styles';
 import {Link} from 'react-router-dom'
 
@@ -89,7 +89,7 @@ export default function Notification (props) {
 
 
     useEffect(() => {
-        axiosGetRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
+        getRequest('/feed?offset=0&limit=30', handleAxiosSuccess, handleAxiosError)
     }, [])
 
 
diff --git a/src/Components/NotificationsInner.js b/src/Components/NotificationsInner.js
index 6d05f5f5..46302879 100644
--- a/src/Components/NotificationsInner.js
+++ b/src/Components/NotificationsInner.js
@@ -2,7 +2,7 @@ import React, {useState, useContext, useEffect} from 'react'
 import styled from 'styled-components'
 import {apiDomain} from '../env.js'
 import ActivityListItem from './ActivityListItem.js'
-import {axiosGetRequest} from './HelperFunctions/getAxiosConfig'
+import {getRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function NotificationInner (props) {
     const [notifications, setNotifications] = useState([]);
@@ -15,7 +15,7 @@ export default function NotificationInner (props) {
     useEffect(() => {
         const url = `/feed?offset=0&limit=30`
 
-        axiosGetRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
+        getRequest(url, handleSuccess, (error) => {console.log('error while running getNotifications')})
     }, [])
 
     return (
diff --git a/src/Components/PublicationPermissionsContent.js b/src/Components/PublicationPermissionsContent.js
index 0237291d..ddccba30 100644
--- a/src/Components/PublicationPermissionsContent.js
+++ b/src/Components/PublicationPermissionsContent.js
@@ -8,7 +8,7 @@ import Radio from '@material-ui/core/Radio';
 import FormControl from '@material-ui/core/FormControl';
 import Grid from '@material-ui/core/Grid';
 import { withStyles } from '@material-ui/core/styles';
-import {axiosGetRequest} from './HelperFunctions/getAxiosConfig'
+import {getRequest} from './HelperFunctions/getAxiosConfig'
 
 const StyledFormControl = styled(FormControl)`
     display: "block ruby";
@@ -37,7 +37,7 @@ export default function PublicationPermissionsContent (props) {
     useEffect(() => {
         const url = `/questions/`
 
-        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        getRequest(url, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/ReportModal.js b/src/Components/ReportModal.js
index 1f94364f..736d00b2 100644
--- a/src/Components/ReportModal.js
+++ b/src/Components/ReportModal.js
@@ -27,7 +27,7 @@ import CloseIcon from '@material-ui/icons/Close';
 import ReportUserForm from './ReportUserForm.js'
 import ReportRecursoForm from './ReportRecursoForm.js'
 import ReportColecaoForm from './ReportColecaoForm.js'
-import {axiosPostRequest} from './HelperFunctions/getAxiosConfig'
+import {postRequest} from './HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -52,7 +52,7 @@ export default function ReportModal (props) {
             }
         }
 
-        axiosPostRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
+        postRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
 
     }
 
diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index 46c55724..44e4feb8 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -51,7 +51,7 @@ import {Link} from 'react-router-dom';
 import {getDefaultThumbnail} from './HelperFunctions/getDefaultThumbnail'
 import GetIconByName from './UploadPageComponents/GetIconByName'
 import "./ResourceCard.css";
-import {axiosPutRequest} from './HelperFunctions/getAxiosConfig'
+import {putRequest} from './HelperFunctions/getAxiosConfig'
 
 export default function ResourceCardFunction (props) {
     const [thumbnail, setThumbnail] = useState(null)
@@ -86,7 +86,7 @@ export default function ResourceCardFunction (props) {
     const handleLike = () => {
         const url = `/learning_objects/${props.id}/like/`
 
-        axiosPutRequest(url, {}, handleSuccessLike, (error) => {console.log(error)})
+        putRequest(url, {}, handleSuccessLike, (error) => {console.log(error)})
     }
 
     const SlideAnimationContent = () => {
diff --git a/src/Components/ResourcePageComponents/CommentForm.js b/src/Components/ResourcePageComponents/CommentForm.js
index 99729ed8..5e5f3921 100644
--- a/src/Components/ResourcePageComponents/CommentForm.js
+++ b/src/Components/ResourcePageComponents/CommentForm.js
@@ -6,7 +6,7 @@ import TextField from "@material-ui/core/TextField";
 import { Button } from '@material-ui/core';
 import EditIcon from '@material-ui/icons/Edit';
 import Grid from '@material-ui/core/Grid';
-import {axiosPostRequest} from '../HelperFunctions/getAxiosConfig'
+import {postRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentForm (props) {
     const [rating, setRating] = useState({
@@ -51,7 +51,7 @@ export default function CommentForm (props) {
                 }
             }
 
-            axiosPostRequest(url, payload, handleSuccess, (error) => {console.log(error)})
+            postRequest(url, payload, handleSuccess, (error) => {console.log(error)})
         }
         else {
             setAttempt(true)
diff --git a/src/Components/ResourcePageComponents/CommentsArea.js b/src/Components/ResourcePageComponents/CommentsArea.js
index 60cb407b..10a9482f 100644
--- a/src/Components/ResourcePageComponents/CommentsArea.js
+++ b/src/Components/ResourcePageComponents/CommentsArea.js
@@ -26,7 +26,7 @@ import Comentarios from '../../img/comentarios.png'
 import {apiDomain} from '../../env';
 import CommentForm from './CommentForm.js'
 import Comment from '../Comment.js'
-import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig'
+import {getRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function CommentsArea (props) {
     const {state} = useContext(Store)
@@ -41,7 +41,7 @@ export default function CommentsArea (props) {
     useEffect( () => {
         const url = `/learning_objects/${props.recursoId}/reviews`
 
-        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        getRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [gambiarra])
 
     return (
diff --git a/src/Components/ResourcePageComponents/TextoObjeto.js b/src/Components/ResourcePageComponents/TextoObjeto.js
index 87637f54..1554cc9e 100644
--- a/src/Components/ResourcePageComponents/TextoObjeto.js
+++ b/src/Components/ResourcePageComponents/TextoObjeto.js
@@ -29,7 +29,7 @@ import Button from '@material-ui/core/Button';
 import {Link, Redirect} from 'react-router-dom'
 import Alert from '../Alert.js';
 import Snackbar from '@material-ui/core/Snackbar';
-import {axiosDeleteRequest} from '../HelperFunctions/getAxiosConfig'
+import {deleteRequest} from '../HelperFunctions/getAxiosConfig'
 
 export default function TextoObjeto (props) {
     const {state} = useContext(Store)
@@ -85,7 +85,7 @@ export default function TextoObjeto (props) {
     }
     const handleDelete = () => {
         const url = `/learning_objects/${props.recursoId}`
-        axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        deleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     const checkAccessLevel = (levelToCheck) => {
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
index 2a8d54b6..a4e2b068 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
@@ -21,7 +21,7 @@ import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
 import {ButtonMostrarMaisRecurso} from '../PanelComponents/ButtonsArea'
-import {axiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
+import {getRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabRecursos (props) {
     const [arr, setArr] = useState([])
@@ -43,7 +43,7 @@ export default function TabRecursos (props) {
 
         if (newLength > 12) {
             const url = `/users/${props.id}/learning_objects?limit=${newLength}$offset=4`
-            axiosGetRequest(url,handleSuccess,(error) => {console.log(error)})
+            getRequest(url,handleSuccess,(error) => {console.log(error)})
         }
         else {
             handleSlice(arr.slice(0, sliceLength + quantity))
diff --git a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
index 171b6b73..1d441049 100644
--- a/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
+++ b/src/Components/TabPanels/UserPageTabs/ModalExcluirConta.js
@@ -29,7 +29,7 @@ import GreyButton from '../../GreyButton'
 import FormInput from '../../FormInput'
 import {Link} from 'react-router-dom'
 import SnackbarComponent from '../../SnackbarComponent.js'
-import {axiosDeleteRequest} from '../../HelperFunctions/getAxiosConfig'
+import {deleteRequest} from '../../HelperFunctions/getAxiosConfig'
 
 function CloseModalButton (props) {
     return (
@@ -71,7 +71,7 @@ export default function ModalExcluirConta (props) {
     }
     const deleteAccount = () => {
         const url = `/auth`
-        axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        deleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
index 42809ba6..d43ce0da 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js
@@ -25,7 +25,7 @@ import Bolo from '../../../img/Bolo.png'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ActivityListItem from '../../ActivityListItem.js'
 import List from '@material-ui/core/List';
-import {axiosGetRequest} from '../../HelperFunctions/getAxiosConfig.js'
+import {getRequest} from '../../HelperFunctions/getAxiosConfig.js'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -49,7 +49,7 @@ export default function TabPanelAtividades (props) {
     useEffect( () => {
         const url = `/feed?offset=0&limit=30`
 
-        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        getRequest(url, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
index b14f5b94..796bee8a 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js
@@ -19,7 +19,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React, {useState, useEffect} from 'react'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
-import {axiosGetRequest} from '../../HelperFunctions/getAxiosConfig'
+import {getRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelCuradoria (props) {
     const [loading, handleLoading] = useState(true)
@@ -42,7 +42,7 @@ export default function TabPanelCuradoria (props) {
     useEffect( () => {
         const url = `/users/${props.id}/submissions?offset=0&status=submitted`
 
-        axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+        getRequest(url, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/UploadPageComponents/FileUploadStage.js b/src/Components/UploadPageComponents/FileUploadStage.js
index 9aa89aa2..880ff018 100644
--- a/src/Components/UploadPageComponents/FileUploadStage.js
+++ b/src/Components/UploadPageComponents/FileUploadStage.js
@@ -21,7 +21,7 @@ import styled from 'styled-components'
 import {WrapperBox} from './StyledComponents.js'
 import DoneIcon from '@material-ui/icons/Done';
 import DeleteIcon from '@material-ui/icons/Delete';
-import {axiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {deleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function FileUploadStage (props) {
     const [uploading, toggleUploading] = useState(true)
@@ -32,7 +32,7 @@ export default function FileUploadStage (props) {
     const handleDelete = () => {
         const url = `/learning_objects/${props.draftID}`
 
-        axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+        deleteRequest(url, handleSuccess, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Components/UploadPageComponents/ModalCancelar.js b/src/Components/UploadPageComponents/ModalCancelar.js
index 1bf82317..9616436b 100644
--- a/src/Components/UploadPageComponents/ModalCancelar.js
+++ b/src/Components/UploadPageComponents/ModalCancelar.js
@@ -23,7 +23,7 @@ import Backdrop from '@material-ui/core/Backdrop';
 import Fade from '@material-ui/core/Fade';
 import styled from 'styled-components'
 import {Link} from 'react-router-dom'
-import {axiosDeleteRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {deleteRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function ModalCancelar (props) {
 
@@ -37,7 +37,7 @@ export default function ModalCancelar (props) {
         if (props.draftID) {
             const url = `/learning_objects/${props.draftID}`
 
-            axiosDeleteRequest(url, handleSuccess, (error) => {console.log(error)})
+            deleteRequest(url, handleSuccess, (error) => {console.log(error)})
         }
     }
 
diff --git a/src/Components/UploadPageComponents/PartOne.js b/src/Components/UploadPageComponents/PartOne.js
index 2e4a1724..fbb47cb5 100644
--- a/src/Components/UploadPageComponents/PartOne.js
+++ b/src/Components/UploadPageComponents/PartOne.js
@@ -26,7 +26,7 @@ import Autor from './Forms/Autor.js'
 import TipoDeRecurso from './Forms/TipoDeRecurso.js'
 import Idioma from './Forms/Idioma.js'
 import {SendInfo} from './SendInfo.js'
-import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {getRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartOne (props) {
     // {/*const [subjects, setSubjects] = useState([])*/}
@@ -37,9 +37,9 @@ export default function PartOne (props) {
         setObjTypes(data.sort((a, b) => (a.name) > (b.name) ? 1 : -1))
     }
     useEffect( () => {
-            axiosGetRequest(`/object_types/`, handleSuccessGetObjTypes, (error) => {console.log(error)})
+            getRequest(`/object_types/`, handleSuccessGetObjTypes, (error) => {console.log(error)})
 
-            axiosGetRequest(`/languages/`, (data) => {setLanguages(data)}, (error) => {console.log(error)})
+            getRequest(`/languages/`, (data) => {setLanguages(data)}, (error) => {console.log(error)})
     }, [])
 
     const handleSubmit = () => {
diff --git a/src/Components/UploadPageComponents/PartThree.js b/src/Components/UploadPageComponents/PartThree.js
index 340c19bb..3b4b6b81 100644
--- a/src/Components/UploadPageComponents/PartThree.js
+++ b/src/Components/UploadPageComponents/PartThree.js
@@ -34,7 +34,7 @@ import AssignmentIcon from '@material-ui/icons/Assignment';
 import { GrayButton, OrangeButton} from './StyledComponents';
 import ModalCancelar from './ModalCancelar.js'
 import {getDefaultThumbnail} from '../HelperFunctions/getDefaultThumbnail'
-import {axiosGetRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {getRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export default function PartThree (props) {
     var moment = require('moment')
@@ -61,7 +61,7 @@ export default function PartThree (props) {
         if (state.currentUser.id !== "") {
             const url = `/learning_objects/${props.draftID}`
 
-            axiosGetRequest(url, handleSuccess, (error) => {console.log(error)})
+            getRequest(url, handleSuccess, (error) => {console.log(error)})
 
         }
     }, [state.currentUser.id])
diff --git a/src/Components/UploadPageComponents/PartTwo.js b/src/Components/UploadPageComponents/PartTwo.js
index 6d30d2b7..6ab05cee 100644
--- a/src/Components/UploadPageComponents/PartTwo.js
+++ b/src/Components/UploadPageComponents/PartTwo.js
@@ -32,7 +32,7 @@ import {SendInfo} from './SendInfo.js'
 import EditThumbnail from './PartTwoComponents/EditThumbnail.js'
 import DisplayThumbnail from './PartTwoComponents/DisplayThumbnail.js'
 import CustomCircularProgress from './PartTwoComponents/CustomCircularProgress';
-import {axiosGetRequest, axiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {getRequest, putRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 export function LoadingDiv () {
     return (
@@ -53,9 +53,9 @@ export default function PartTwo (props) {
     }
 
     useEffect(() => {
-        axiosGetRequest(`/educational_stages/`, (data) => {setEduStages(data)}, (error) => {console.log(error)})
+        getRequest(`/educational_stages/`, (data) => {setEduStages(data)}, (error) => {console.log(error)})
 
-        axiosGetRequest(`/subjects/`, handleSuccess, (error) => {console.log(error)})
+        getRequest(`/subjects/`, handleSuccess, (error) => {console.log(error)})
     }, [])
 
 
@@ -88,7 +88,7 @@ export default function PartTwo (props) {
          let fdThumb = new FormData()
          fdThumb.set('learning_object[thumbnail]', thumbnail)
 
-         axiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('done')}, (error) => {console.log(error)})
+         putRequest(url, fdThumb, (data) => {setThumbnailStage('done')}, (error) => {console.log(error)})
      }
 
      const [thumbnailStage, setThumbnailStage] = useState('default')
diff --git a/src/Components/UploadPageComponents/SendInfo.js b/src/Components/UploadPageComponents/SendInfo.js
index b9a8585a..8b5a4070 100644
--- a/src/Components/UploadPageComponents/SendInfo.js
+++ b/src/Components/UploadPageComponents/SendInfo.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import {axiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {putRequest} from '../HelperFunctions/getAxiosConfig.js'
 
 
 export function SendInfo (fieldName, payload, draftID) {
@@ -35,7 +35,10 @@ export function SendInfo (fieldName, payload, draftID) {
     }
     putObject.learning_object[key] = value
 
+    console.log("typeof putObject", typeof putObject)
+    console.log(putObject)
+
     const url = `/learning_objects/${draftID}`
 
-    axiosPutRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
+    putRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
 }
diff --git a/src/Components/UploadPageComponents/UploadFileWrapper.js b/src/Components/UploadPageComponents/UploadFileWrapper.js
index 0675f589..123512f2 100644
--- a/src/Components/UploadPageComponents/UploadFileWrapper.js
+++ b/src/Components/UploadPageComponents/UploadFileWrapper.js
@@ -21,7 +21,7 @@ import LinkIcon from '../../img/link_icon.svg'
 import ChooseLink from './ChooseLinkSection.js'
 import {WrapperBox, BlueButton, GrayButton} from './StyledComponents.js';
 import {DottedBox} from './StyledComponents.js';
-import {getAxiosConfigFromJSON, updateHeaders, axiosDeleteRequest, axiosPutRequest} from '../HelperFunctions/getAxiosConfig.js'
+import {getAxiosConfigFromJSON, updateHeaders, deleteRequest, putRequest} from '../HelperFunctions/getAxiosConfig.js'
 import AddAPhotoIcon from '@material-ui/icons/AddAPhoto';
 import axios from 'axios'
 import {apiUrl} from '../../env';
@@ -114,7 +114,7 @@ export default function UploadFileWrapper (props) {
         if (attachmentID != null) {
             const url = `/learning_objects/${props.draftID}/attachment/${attachmentID}`
 
-            axiosDeleteRequest(url, (data) => {handleNextStage("default")}, (error) => {console.log(error)})
+            deleteRequest(url, (data) => {handleNextStage("default")}, (error) => {console.log(error)})
         }
     }
 
@@ -151,7 +151,7 @@ export default function UploadFileWrapper (props) {
             }
         }
 
-        axiosPutRequest(url, payload, (data) => {toggleSnackbar(true)}, (error) => {console.log(error)})
+        putRequest(url, payload, (data) => {toggleSnackbar(true)}, (error) => {console.log(error)})
     }
 
     switch (stage) {
diff --git a/src/Pages/EditLearningObjectPage.js b/src/Pages/EditLearningObjectPage.js
index 141f83ff..5e04a247 100644
--- a/src/Pages/EditLearningObjectPage.js
+++ b/src/Pages/EditLearningObjectPage.js
@@ -40,7 +40,7 @@ import {LoadingDiv} from '../Components/UploadPageComponents/PartTwo.js'
 import EditThumbnail from '../Components/UploadPageComponents/PartTwoComponents/EditThumbnail.js'
 import DisplayThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DisplayThumbnail.js'
 import DragAndDropThumbnail from '../Components/UploadPageComponents/PartTwoComponents/DragAndDropThumbnail'
-import {axiosGetRequest, axiosDeleteRequest, axiosPutRequest, axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {getRequest, deleteRequest, putRequest, postRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function EditLearningObjectPage (props) {
     const recursoId = props.match.params.recursoId
@@ -63,7 +63,7 @@ export default function EditLearningObjectPage (props) {
 
     useEffect( () => {
         const url = `/learning_objects/${recursoId}`
-        axiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+        getRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
         axios.get(`${apiUrl}/object_types/`).then(
             (response) => {
@@ -113,7 +113,7 @@ export default function EditLearningObjectPage (props) {
     const handleDelete = () => {
         const url = `/learning_objects/${learningObject.id}`
 
-        axiosDeleteRequest(url, handleSuccessfulDelete, (error) => {console.log(error)})
+        deleteRequest(url, handleSuccessfulDelete, (error) => {console.log(error)})
     }
 
     const handleUpdateInfo = () => {
@@ -122,7 +122,7 @@ export default function EditLearningObjectPage (props) {
             "learning_object" : updatedInfo
         }
 
-        axiosPutRequest(url, payload, (data) => {props.history.goBack()}, (error) => {console.log(error)})
+        putRequest(url, payload, (data) => {props.history.goBack()}, (error) => {console.log(error)})
     }
 
     const handlePost = () => {
@@ -132,7 +132,7 @@ export default function EditLearningObjectPage (props) {
             "learning_object" : updatedInfo
         }
 
-        axiosPostRequest(url, payload,
+        postRequest(url, payload,
             (data) => {props.history.push( `/recurso/${learningObject.id}`)},
             (error) => {console.log(error)}
         )
@@ -171,7 +171,7 @@ export default function EditLearningObjectPage (props) {
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', thumbnail)
 
-        axiosPutRequest(url, fdThumb, handleFinalizeThumb, (error) => {setThumbnailStage('default')})
+        putRequest(url, fdThumb, handleFinalizeThumb, (error) => {setThumbnailStage('default')})
     }
 
     const handleDeleteThumbnail = () => {
@@ -180,7 +180,7 @@ export default function EditLearningObjectPage (props) {
         let fdThumb = new FormData()
         fdThumb.set('learning_object[thumbnail]', null)
 
-        axiosPutRequest(url, fdThumb, (data) => {setThumbnailStage('default')}, (error) => {console.log(error)})
+        putRequest(url, fdThumb, (data) => {setThumbnailStage('default')}, (error) => {console.log(error)})
     }
 
     const chooseRenderStageThumbnail = () => {
diff --git a/src/Pages/EditProfilePage.js b/src/Pages/EditProfilePage.js
index 6a33290b..381a2872 100644
--- a/src/Pages/EditProfilePage.js
+++ b/src/Pages/EditProfilePage.js
@@ -10,7 +10,7 @@ import Snackbar from '@material-ui/core/Snackbar';
 import {Alert} from '../Components/LoginModal.js'
 import Grid from '@material-ui/core/Grid'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import {axiosPutRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {putRequest} from '../Components/HelperFunctions/getAxiosConfig'
 import {Store} from '../Store.js'
 
 export default function EditProfilePage (props) {
@@ -38,7 +38,7 @@ export default function EditProfilePage (props) {
     const updateUserInfo = (newUserInfo) => {
         const url = `/users/${id}`
 
-        axiosPutRequest(url, newUserInfo,
+        putRequest(url, newUserInfo,
             (data) => {props.history.push('/perfil')},
             (error) => {console.log(error)}
         )
@@ -62,14 +62,14 @@ export default function EditProfilePage (props) {
     const updateUserEmail = (newUserInfo) => {
         const url = `/users/${id}`
 
-        axiosPutRequest(url, newUserInfo, handleSuccessUpdateEmail, (error) => {console.log(error)}
+        putRequest(url, newUserInfo, handleSuccessUpdateEmail, (error) => {console.log(error)}
         )
     }
 
     const updateUserPassword = (newUserInfo) => {
         const url = `/users/${id}`
 
-        axiosPutRequest(url, newUserInfo,
+        putRequest(url, newUserInfo,
             (data) => {handleSnackbar(true)},
             (error) => {console.log(error)}
         )
diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js
index 496ffdd4..6ee8588e 100644
--- a/src/Pages/PageProfessor.js
+++ b/src/Pages/PageProfessor.js
@@ -6,7 +6,7 @@ import PartTwo from '../Components/PageProfessorComponents/PartTwo.js'
 import PartThree from '../Components/PageProfessorComponents/PartThree.js'
 import SuccessfulRequest from '../Components/PageProfessorComponents/SuccessfulRequest.js'
 import ModalConfirmarProfessor from '../Components/PageProfessorComponents/ModalConfirmarProfessor.js'
-import {axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {postRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PageProfessor (props) {
     const {state} = useContext(Store)
@@ -105,7 +105,7 @@ export default function PageProfessor (props) {
             uf : registerInformation.school_uf.name
         }
 
-        axiosPostRequest(url, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
+        postRequest(url, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
     }
 
     return (
diff --git a/src/Pages/PasswordRecoveryPage.js b/src/Pages/PasswordRecoveryPage.js
index 78f289a0..010a164b 100644
--- a/src/Pages/PasswordRecoveryPage.js
+++ b/src/Pages/PasswordRecoveryPage.js
@@ -7,7 +7,7 @@ import Default from '../Components/PasswordRecoveryComponents/Default.js'
 import Success from '../Components/PasswordRecoveryComponents/Success.js'
 import CaseError from '../Components/PasswordRecoveryComponents/Error.js'
 import CustomizedBreadcrumbs from '../Components/TabPanels/Breadcrumbs.js'
-import {axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {postRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 export default function PasswordRecoveryPage (props) {
 
@@ -51,7 +51,7 @@ export default function PasswordRecoveryPage (props) {
             "redirect_url" : "https://plataformaintegrada.mec.gov.br/recuperar-senha#/alterar-senha"
         }
 
-        axiosPostRequest(url, payload, handleSuccessfulSubmit, (error) => {console.log(error)})
+        postRequest(url, payload, handleSuccessfulSubmit, (error) => {console.log(error)})
 
     }
 
diff --git a/src/Pages/ResourcePage.js b/src/Pages/ResourcePage.js
index d3a736ce..194807e6 100644
--- a/src/Pages/ResourcePage.js
+++ b/src/Pages/ResourcePage.js
@@ -35,7 +35,7 @@ import AppBar from '@material-ui/core/AppBar';
 import ButtonAvaliarRecurso from '../Components/ButtonAvaliarRecurso'
 import ModalAvaliarRecurso from '../Components/ModalAvaliarRecurso'
 import ModalConfirmarCuradoria from '../Components/ModalConfirmarCuradoria'
-import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {getRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 function urlVerify (url) {
     return (url ? url.indexOf("youtu") !== -1 || url.indexOf("vimeo") !== -1 : false)
@@ -54,7 +54,7 @@ export default function LearningObjectPage (props){
     useEffect( () => {
         const url = `/learning_objects/${id}`
 
-        axiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+        getRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
     }, [])
 
@@ -105,7 +105,7 @@ export default function LearningObjectPage (props){
     const finalizeCuratorshipFlow = () => {
         handleModalConfirmarCuradoria(false)
         const url = `/learning_objects/${id}`
-        axiosGetRequest(url, (data) => {setRecurso(data)}, (error) => {console.log(error)})
+        getRequest(url, (data) => {setRecurso(data)}, (error) => {console.log(error)})
     }
 
     return (
diff --git a/src/Pages/UploadPage.js b/src/Pages/UploadPage.js
index 0ddf5264..848b3b5b 100644
--- a/src/Pages/UploadPage.js
+++ b/src/Pages/UploadPage.js
@@ -22,7 +22,7 @@ import UploadFileWrapper from '../Components/UploadPageComponents/UploadFileWrap
 import {Store} from '../Store.js'
 import {InfoBox} from '../Components/UploadPageComponents/StyledComponents.js'
 import Stepper from '../Components/UploadPageComponents/Stepper.js'
-import {axiosPostRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {postRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 import PartOne from '../Components/UploadPageComponents/PartOne.js'
 import PartTwo from '../Components/UploadPageComponents/PartTwo.js'
 import PartThree from '../Components/UploadPageComponents/PartThree.js'
@@ -51,7 +51,7 @@ export default function UploadPage (props) {
 
             let payload = {}
 
-            axiosPostRequest(url, payload, handleSuccessfulGet, (error) => {console.log(error)})
+            postRequest(url, payload, handleSuccessfulGet, (error) => {console.log(error)})
 
         }
     }, [])
@@ -68,7 +68,7 @@ export default function UploadPage (props) {
 
             let payload = {}
 
-            axiosPostRequest(url, payload,
+            postRequest(url, payload,
                 (data) => {handleModal(true)},
                 (error) => {console.log(error)}
             )
@@ -86,7 +86,7 @@ export default function UploadPage (props) {
                 }
             }
 
-            axiosPostRequest(url, payload,
+            postRequest(url, payload,
                 (data) => {handleModal(true)},
                 (error) => {console.log(error)}
             )
diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js
index a1f4b928..c4b07550 100644
--- a/src/Pages/UserPage.js
+++ b/src/Pages/UserPage.js
@@ -36,7 +36,7 @@ import ProfileAvatar from '../Components/UserPageComponents/Avatar.js'
 import UserInfo from '../Components/UserPageComponents/UserInfo.js'
 import EditProfileButton from '../Components/UserPageComponents/EditProfileButton.js'
 import SubmitterStatus from '../Components/UserPageComponents/SubmitterStatus.js'
-import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
+import {getRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function UserPage (props){
     const {state, dispatch} = useContext(Store)
@@ -70,7 +70,7 @@ export default function UserPage (props){
         if (id !== '') {
             const url = `/users/${id}`
 
-            axiosGetRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+            getRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
         }
     }, [])
 
-- 
GitLab


From 8d3576b10c2386391a6d0bd6ce2333951f6a0115 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Fri, 5 Feb 2021 10:48:53 -0300
Subject: [PATCH 66/83] changed axios requests to fetch requests

---
 src/Components/CollectionReview.js            | 63 +++++--------------
 .../HelperFunctions/getAxiosConfig.js         |  2 +-
 .../TabPanels/PublicUserPageTabs/TabRede.js   |  4 +-
 .../TabPanels/UserPageTabs/PanelColecoes.js   |  4 +-
 .../TabPanels/UserPageTabs/PanelFavoritos.js  |  4 +-
 .../UserPageTabs/PanelMeusRecursos.js         |  4 +-
 .../TabPanels/UserPageTabs/PanelRede.js       |  4 +-
 .../UploadPageComponents/SendInfo.js          |  3 -
 src/Pages/CollectionPage.js                   | 21 +++----
 src/Pages/PublicUserPage.js                   |  4 +-
 10 files changed, 38 insertions(+), 75 deletions(-)

diff --git a/src/Components/CollectionReview.js b/src/Components/CollectionReview.js
index c1b2d4f0..10cc202c 100644
--- a/src/Components/CollectionReview.js
+++ b/src/Components/CollectionReview.js
@@ -23,12 +23,11 @@ import IconButton from '@material-ui/core/IconButton';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import FavoriteIcon from '@material-ui/icons/Favorite';
 import InfoIcon from '@material-ui/icons/Info';
-import axios from 'axios';
-import { apiUrl } from '../env';
 import { Store } from '../Store.js'
 import ReportModal from './ReportModal.js';
 import SignUpModal from './SignUpModal.js';
 import LoginModal from './LoginModal.js';
+import {putRequest, getRequest} from './HelperFunctions/getAxiosConfig.js'
 
 export default function CollectionReview(props) {
 	const [likes, setLikes] = useState(0);
@@ -39,61 +38,31 @@ export default function CollectionReview(props) {
 	const [log_in_open, setLoginOpen] = useState(false);
 	const { state } = useContext(Store);
 
+    function handleSuccessfulGet (data) {
+        setLikes(Number(data.likes_count));
+        setLiked(data.liked);
+    }
+
 	useEffect(() => {
-		axios.get(apiUrl + '/collections/' + props.id)
-			.then(res => {
-				setLikes(Number(res.data.likes_count));
-				setLiked(res.data.liked);
-			});
+        const url = `/collections/${props.id}`
+
+        getRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
+
 	}, [props.id]);
 
 	const handleClickReport = () => {
 		setReportOpen(true);
 	}
 
-	const SaveNewHeaders = (response) => {
-		if (
-			(response.headers['access-token'] === undefined || response.headers['access-token'] === null) &&
-			(response.headers.client === undefined || response.headers.client === null)
-		) {
-	
-		} else {
-			sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-			sessionStorage.setItem('@portalmec/clientToken', response.headers.client)
-			console.log('saved')
-		}
-	}
+    function handleSuccess (data) {
+        setLiked(!liked)
+        setLikes(data.count)
+    }
 
 	const handleLikeClick = () => {
 		if (state.currentUser.id) {
-			const url = apiUrl + '/collections/' + props.id + '/like';
-			if (!liked)
-				axios({
-					method: 'put',
-					url: url,
-					headers: {
-						'Accept': 'application/json',
-						'Content-Type': 'application/json; charset=utf-8',
-						'access-token': sessionStorage.getItem('@portalmec/accessToken'),
-						'client': sessionStorage.getItem('@portalmec/clientToken'),
-						'uid': sessionStorage.getItem('@portalmec/uid'),
-						'If-None-Match': null
-					},
-				}).then(response => {
-					if(response.status === 201)
-					{
-						setLiked(true)
-						setLikes(response.data.count);
-					}
-					else 
-					{
-						setLiked(false);
-						setLikes(response.data.count);
-					}
-					SaveNewHeaders(response)
-				})
-			else
-				setLiked(!liked);
+            const url = `/collections/${props.id}/like`
+            putRequest(url, {}, handleSuccess, (error) => {console.log(error)})
 		} else
 			setSignUpOpen(true);
 	}
diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index e88e370d..04dd3606 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -161,7 +161,7 @@ export const postRequest = (url, payload, onSuccess, onError) => {
         })
 }
 
-export const axiosAllRequest = (urls, onSuccess, onError) => {
+export const fetchAllRequest = (urls, onSuccess, onError) => {
     Promise.all( urls.map( url => fetch(`${apiUrl}${url}`,  {
         headers : fetchHeaders()
     }))).then( (responses) => {
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
index 75201d42..c173dc19 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRede.js
@@ -18,7 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, {useState, useEffect} from 'react'
 import PanelTemplateRede from '../PanelComponents/TemplateRede.js'
-import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
+import {fetchAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabRede (props) {
     const [followers, setFollowers] = useState([])
@@ -50,7 +50,7 @@ export default function TabRede (props) {
 
         const urls = [`/users/${props.id}/followers`, `/users/${props.id}/following/User`]
 
-        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+        fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
index 28dda245..da80d94d 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
@@ -29,7 +29,7 @@ import Title from '../PanelComponents/PanelTitle.js'
 import CollectionCardFunction from '../../CollectionCardFunction.js'
 import {ButtonsAreaColecao} from '../PanelComponents/ButtonsArea'
 import CriarColecaoModal from '../../CriarColecaoModal.js'
-import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
+import {fetchAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelColecoes (props) {
     const [loading, handleLoading] = useState(true)
@@ -51,7 +51,7 @@ export default function TabPanelColecoes (props) {
 
     const getInfo = () => {
         const urls = [`/users/${props.id}/collections`, `/users/${props.id}/following/Collection`]
-        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+        fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }
 
     useEffect( () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
index 350e2bc1..4edaf748 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js
@@ -20,7 +20,7 @@ import React, {useState, useEffect} from 'react'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import Template from '../PanelComponents/TemplateRecurso.js'
 import PanelTemplateColecao from '../PanelComponents/TemplateColecao.js'
-import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
+import {fetchAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelFavoritos (props) {
     const [loading, handleLoading] = useState(true)
@@ -44,7 +44,7 @@ export default function TabPanelFavoritos (props) {
     useEffect( () => {
         const urls = [ `/users/${props.id}/learning_objects/liked`, `/users/${props.id}/collections/liked`]
 
-        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+        fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)})
 
     }, [])
 
diff --git a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
index 0faa14af..05668209 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js
@@ -20,7 +20,7 @@ import React, {useState, useEffect} from 'react'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import Template from '../PanelComponents/TemplateRecurso.js'
 import TemplateCuradoria from '../PanelComponents/TemplateCuradoria.js'
-import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
+import {fetchAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelAtividades (props) {
     const [loading, handleLoading] = useState(true)
@@ -54,7 +54,7 @@ export default function TabPanelAtividades (props) {
             `/users/${props.id}/submissions?status=submitted`
         ]
 
-        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+        fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     const showMoreLearnObj = () => {
diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js
index 96940f9e..cf734021 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelRede.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js
@@ -20,7 +20,7 @@ import React, {useState, useEffect} from 'react'
 import LoadingSpinner from '../../LoadingSpinner.js'
 import ContainerRedeVazia from './ContainerRedeVazia.js'
 import PanelTemplateRede from '../PanelComponents/TemplateRede.js'
-import {axiosAllRequest} from '../../HelperFunctions/getAxiosConfig'
+import {fetchAllRequest} from '../../HelperFunctions/getAxiosConfig'
 
 export default function TabPanelRede (props) {
     const [loading, handleLoading] = useState(true)
@@ -61,7 +61,7 @@ export default function TabPanelRede (props) {
             `/users/${props.id}/followers`
         ]
 
-        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+        fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
 
     return (
diff --git a/src/Components/UploadPageComponents/SendInfo.js b/src/Components/UploadPageComponents/SendInfo.js
index 8b5a4070..ebcb1b95 100644
--- a/src/Components/UploadPageComponents/SendInfo.js
+++ b/src/Components/UploadPageComponents/SendInfo.js
@@ -35,9 +35,6 @@ export function SendInfo (fieldName, payload, draftID) {
     }
     putObject.learning_object[key] = value
 
-    console.log("typeof putObject", typeof putObject)
-    console.log(putObject)
-
     const url = `/learning_objects/${draftID}`
 
     putRequest(url, putObject, (data) => {console.log(data)}, (error) => {console.log(error)})
diff --git a/src/Pages/CollectionPage.js b/src/Pages/CollectionPage.js
index 123f6c6a..f064a674 100644
--- a/src/Pages/CollectionPage.js
+++ b/src/Pages/CollectionPage.js
@@ -16,20 +16,20 @@ You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
 import React, { useRef, useState, useEffect, useContext } from 'react';
-import axios from 'axios';
 import { Grid } from '@material-ui/core';
 import CollectionAuthor from '../Components/CollectionAuthor.js';
 import VerticalRuler from '../Components/VerticalRuler.js';
 import CollectionDescription from '../Components/CollectionDescription.js';
 import ResourceList from '../Components/ResourceList.js';
 import CollectionCommentSection from '../Components/CollectionCommentSection.js';
-import { apiUrl, apiDomain } from '../env';
+import { apiDomain } from '../env';
 import styled from 'styled-components';
 import DowloadButton from '../Components/CollectionDowloadButton.js';
 import Breadcrumbs from "@material-ui/core/Breadcrumbs";
 import { Link } from 'react-router-dom';
 import FollowCollectionButton from '../Components/FollowCollectionButton';
 import { Store } from '../Store.js'
+import {getRequest} from '../Components/HelperFunctions/getAxiosConfig.js'
 
 export default function CollectionPage(props) {
 	const { state } = useContext(Store);
@@ -42,10 +42,9 @@ export default function CollectionPage(props) {
 	const comment_ref = useRef(null);
 
 	useEffect(() => {
-		axios.get(apiUrl + '/collections/' + collection_id)
-			.then(res => {
-				setCollection(Object.assign({}, res.data));
-			});
+        const url = `/collections/${collection_id}`
+
+        getRequest(url, (data) => {setCollection(Object.assign({}, data))}, (error) => {console.log(error)})
 	}, []);
 
 	const handleScrollToComments = () => {
@@ -141,11 +140,11 @@ export default function CollectionPage(props) {
 		// 	style={mainContainerStyle}>
 
 		// 	<Grid item xs={10} md={3}>
-		// 		<CollectionAuthor 
+		// 		<CollectionAuthor
 		// 			author_id={collection.owner ? collection.owner.id : 0}
 		// 			name={collection.owner ? collection.owner.name : ""}
 		// 			imgsrc={collection.owner ? apiDomain+collection.owner.avatar : ''}/>
-		// 	</Grid> 
+		// 	</Grid>
 
 		// 	<VerticalRuler width={1} height={300} color="rgb(238, 238, 238)"/>
 
@@ -154,12 +153,12 @@ export default function CollectionPage(props) {
 		// 			scrollToComments={handleScrollToComments}
 		// 			title={collection.name ? collection.name : ""}
 		// 			collection_id={collection.id ? collection.id : 0}/>
-		// 	</Grid> 
+		// 	</Grid>
 
 		// 	<Grid container item xs={12} direction="row" justify="center" alignItems="center" style={{backgroundColor: '#f4f4f4'}}>
 		// 		<Grid item xs={10}>
 		// 			<ResourceList resources={
-		// 					collection.collection_items ? 
+		// 					collection.collection_items ?
 		// 					collection.collection_items.map(i => {
 		// 						return {
 		// 							type: i.collectionable.object_type,
@@ -204,5 +203,3 @@ const BreadCrumbsDiv = styled.div`
   padding: 10px;
   display: flex;
 `;
-
-
diff --git a/src/Pages/PublicUserPage.js b/src/Pages/PublicUserPage.js
index b197f082..2000c861 100644
--- a/src/Pages/PublicUserPage.js
+++ b/src/Pages/PublicUserPage.js
@@ -33,7 +33,7 @@ import TabRede from '../Components/TabPanels/PublicUserPageTabs/TabRede.js'
 import CheckDecagram from '../img/check-decagram-blue.svg'
 import ReportButton from '../Components/ReportButton.js'
 import {HeaderContainer, UserProfileContainer, CoverContainer, UserProfileInfoDiv, StyledTabs, CheckTeacherDiv, RodapeDiv, NavBarContentContainer, BackgroundDiv} from '../Components/TabPanels/StyledComponents.js'
-import {axiosAllRequest} from '../Components/HelperFunctions/getAxiosConfig'
+import {fetchAllRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 const RenderFollowContainer = (boolUserFollowed, id, followCount) => {
     return (
@@ -133,7 +133,7 @@ export default function PublicUserPage (props) {
     useEffect( () => {
         const urls = [`/users/${id}`, `/users/${id}/learning_objects`, `/users/${id}/collections`]
 
-        axiosAllRequest(urls, handleSuccess, (error) => {console.log(error)})
+        fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)})
     }, [])
     /*---------------------------------------------------------*/
 
-- 
GitLab


From 25e05b9e3880a581c25a5fcca1a39078ffe3b2eb Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 8 Feb 2021 10:13:58 -0300
Subject: [PATCH 67/83] Fixed the resourceCard

---
 src/Components/ResourceCardFunction.js | 95 ++++++++++++--------------
 1 file changed, 42 insertions(+), 53 deletions(-)

diff --git a/src/Components/ResourceCardFunction.js b/src/Components/ResourceCardFunction.js
index 52699418..a20cc866 100644
--- a/src/Components/ResourceCardFunction.js
+++ b/src/Components/ResourceCardFunction.js
@@ -109,24 +109,27 @@ export default function ResourceCardFunction(props) {
     const SlideAnimationContent = () => {
         return (
             <SlideContentDiv>
-                <HeaderContainer>{/*marginBottom:10px*/}
-                    <AvatarDiv>
-                        <img className="img" src={userAvatar} alt="user avatar" />
-                    </AvatarDiv>
-                    <EnviadoPor>
-                        Enviado por:
+                <div style={{padding : 7}}>
+                    <HeaderContainer container="row" justify="flex-start" alignItems="center" >{/*marginBottom:10px*/}
+                        <AvatarDiv item xs={2}>
+                            <img className="img" src={userAvatar} alt="user avatar" />
+                        </AvatarDiv>
+                        <EnviadoPor item xs={10}>
+                            Enviado por:
                         <br />
-                        <p>{props.author}</p>
-                    </EnviadoPor>
-                </HeaderContainer>
-                <TagContainer>
-                    {
-                        props.tags.map((tag) =>
-                            <span key={tag.id}>{tag.name}</span>
-
-                        )
-                    }
-                </TagContainer>
+                            <p>{props.author}</p>
+                        </EnviadoPor>
+                    </HeaderContainer>
+                    <TagContainer container direction="row">
+                        {
+                            props.tags.map((tag) =>
+                                <Grid item key={tag.id}>
+                                    <span >{tag.name}</span>
+                                </Grid>
+                            )
+                        }
+                    </TagContainer>
+                </div>
             </SlideContentDiv>
         )
     }
@@ -139,46 +142,40 @@ export default function ResourceCardFunction(props) {
                         {
                             props.published &&
                             <Slide direction="left" in={slideIn} timeout={1000}>
-                                <div className={`slideContentLinkAfterActive${slideIn}`} style={{ width: '100%' }}>
+                                <div className={`slideContentLinkAfterActive${slideIn}`}>
                                     <Link to={props.href} className="text" >
                                         {SlideAnimationContent()}
                                     </Link>
                                 </div>
                             </Slide >
                         }
-                        <div className={`slideContentLinkBeforeActive${slideIn}`} style={{width: '100%', height : '100%'}}>
-
+                        <div className={`slideContentLinkBeforeActive${slideIn}`} style={{ height: '100%' }}>
                             <Link to={props.href}>
-                                <img className="img-cover" src={thumbnail} alt="learning object thumbnail" />
+                                <img className="img-cover" src={thumbnail} alt="learning object thumbnail" style={{ width: "272.5px" }} />
                             </Link>
                         </div>
                     </Header>
-
                     <Description>
-                        <Link to={props.href} className="text" style={{height : '45px'}}> {/*add link to learningObject*/}
+                        <Link to={props.href} className="text" style={{ height: '45px' }}> {/*add link to learningObject*/}
                             <Title>
                                 {props.title}
                             </Title>
                         </Link>
-
                         {
                             props.published &&
                             <Rating
                                 name="customized-empty"
                                 value={props.rating}
-                                precision={0.5}
                                 readOnly
                                 style={{ color: "#666" }}
                                 emptyIcon={<StarBorderIcon fontSize="inherit" />}
                             />
                         }
-
                         <Footer>
                             <Type>
                                 {GetIconByName(label)}
                                 <span>{label}</span>
                             </Type>
-
                             {
                                 props.published &&
                                 <LikeCounter>
@@ -212,23 +209,15 @@ export default function ResourceCardFunction(props) {
     )
 }
 /*---------- USED IN SLIDE DIV ONLY -----------*/
-const HeaderContainer = styled.div`
-    display: flex; 
-    flex : 1;
+export const HeaderContainer = styled(Grid)`
+
 `
 
-export const TagContainer = styled.div`
+export const TagContainer = styled(Grid)`
     margin-top: 0.5em;
-    display : flex;
-    width : 90%;
-    overflow : auto;
-    ${'' /* flex : 2; */}
-    height : 120px;
-    max-height : 120px;
-    flex-wrap: wrap;
-    -webkit-box-direction: normal;
-    flex-direction: row; 
-    ${'' /* border : 5px solid red; */}
+    height : 120px ;
+    overflow-y : hidden;
+    ${'' /* border : 2px solid red; */}
     span {
         word-wrap: break-word;
         background-color : #fff;
@@ -247,7 +236,7 @@ export const TagContainer = styled.div`
     }
 `
 
-export const EnviadoPor = styled.div`
+export const EnviadoPor = styled(Grid)`
     display : inline-block;
     padding-left : 10px;
     overflow : hidden;
@@ -262,14 +251,14 @@ export const EnviadoPor = styled.div`
         overflow: hidden;
     }
 `
-const AvatarDiv = styled.div`
+export const AvatarDiv = styled(Grid)`
     vertical-align : middle;
     border : 0;
-    width : 45px;
+    width : 40px;
+    height : 40px;
     img {
-        width : 45px;
-        height : 40px !important;
-        width : 40px !important;
+        max-height: 100%;
+        max-width: 100%;
         border : 0;
         vertical-align : middle;
         border-radius : 50%;
@@ -278,9 +267,9 @@ const AvatarDiv = styled.div`
 
 const SlideContentDiv = styled.div`
     background-color : #ff9226;
-    padding : 10px;
-    width : 100%;
-    height : 100%;
+    ${'' /* padding : 10px; */}
+    width : 272.5px;
+    height : 189px;
 `
 /*--------------------------------------------*/
 
@@ -394,7 +383,7 @@ export const CardReaDiv = styled.div`
     display : flex;
     flex-direction : column;
     height : 320px;
-    width : 272.5px;
+    ${'' /* width : 272.5px; */}
     margin : 0 auto;
 
     .img-cover {
@@ -405,7 +394,7 @@ export const CardReaDiv = styled.div`
         display : block;
         background-position : center;
         background-size : cover;
-        width : 100%;
+        ${'' /* width : 100%; */}
     }
 `
 
@@ -421,7 +410,7 @@ export const StyledCard = styled(Card)`
     max-height : 380px;
     margin-top : 10px;
     margin-bottom : 10px;
-    max-width : 345px;
+    ${'' /* max-width : 345px; */}
     border-radius : 0;
     box-shadow : 0 0 5px 0 rgba(0,0,0,.25);
 `
-- 
GitLab


From a36b40f357aff16e41c5a845eaa562a7913edee4 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Mon, 8 Feb 2021 10:14:45 -0300
Subject: [PATCH 68/83] parameters were passed correctly to the resource card
 and collection card

---
 src/Components/AreasSubPages.js               |   1 -
 src/Components/CollectionCardFunction.js      | 143 +++---
 src/Components/ResourceList.js                |  64 +--
 .../PanelComponents/TemplateColecao.js        |  21 +-
 .../PanelComponents/TemplateCuradoria.js      |  84 ++--
 .../PanelComponents/TemplateRecurso.js        |  87 ++--
 .../PublicUserPageTabs/LastCollections.js     |   2 +-
 .../PublicUserPageTabs/LastLearnObj.js        |  87 ++--
 .../PublicUserPageTabs/TabColecoes.js         |   2 +-
 .../PublicUserPageTabs/TabRecursos.js         |  43 +-
 .../TabPanels/UserPageTabs/PanelColecoes.js   |   2 +-
 src/Pages/Search.js                           | 465 +++++++++---------
 12 files changed, 494 insertions(+), 507 deletions(-)

diff --git a/src/Components/AreasSubPages.js b/src/Components/AreasSubPages.js
index 00984b87..502eb6af 100644
--- a/src/Components/AreasSubPages.js
+++ b/src/Components/AreasSubPages.js
@@ -90,7 +90,6 @@ class ReqResources extends Component {
                     likeCount={card.likes_count}
                     liked={card.liked}
                     rating={card.review_average}
-                    // author={card.author}
                     author={card.publisher.name}
                     tags={card.tags}
                     href={"/recurso/" + card.id}
diff --git a/src/Components/CollectionCardFunction.js b/src/Components/CollectionCardFunction.js
index 5a61b287..5ebc078f 100644
--- a/src/Components/CollectionCardFunction.js
+++ b/src/Components/CollectionCardFunction.js
@@ -24,7 +24,7 @@ import Button from '@material-ui/core/Button';
 import styled from 'styled-components'
 import Slide from '@material-ui/core/Slide';
 import Grid from '@material-ui/core/Grid';
-import { StyledCard, CardDiv, CardReaDiv, Footer, LikeCounter, ButtonNoWidth, EnviadoPor, TagContainer } from './ResourceCardFunction.js'
+import { StyledCard, CardDiv, CardReaDiv, Footer, LikeCounter, ButtonNoWidth, EnviadoPor, TagContainer, HeaderContainer, AvatarDiv } from './ResourceCardFunction.js'
 import Rating from '@material-ui/lab/Rating';
 import StarBorderIcon from '@material-ui/icons/StarBorder';
 import FolderIcon from '@material-ui/icons/Folder';
@@ -136,7 +136,7 @@ export default function CollectionCardFunction(props) {
         //         toggleUserFollowingCol(false);
         //     }
         // }, 1000);
-        
+
         // setTimeout(function () {
         //     if (state.currentUser.id) {
         //         const config = getAxiosConfig();
@@ -158,8 +158,7 @@ export default function CollectionCardFunction(props) {
         //         toggleUserFollowingCol(false);
         //     }
         // }, 2000);
-        if(!state.currentUser.id)
-        {
+        if (!state.currentUser.id) {
             toggleLiked(false);
             toggleUserFollowingCol(false);
         }
@@ -191,47 +190,26 @@ export default function CollectionCardFunction(props) {
 
     const SlideAnimationContent = () => {
         return (
-            // <SlideContentDiv>
-            //     <HeaderContainer>{/*marginBottom:10px*/}
-            //         <AvatarDiv>
-            //             <img className="img" src={userAvatar} alt="user avatar" />
-            //         </AvatarDiv>
-            //         <EnviadoPor>
-            //             Enviado por:
-            //             <br />
-            //             <p>{props.author}</p>
-            //         </EnviadoPor>
-            //     </HeaderContainer>
-            //     <TagContainer>
-            //         {
-            //             props.tags.map((tag) =>
-            //                 <span key={tag.id}>{tag.name}</span>
-
-            //             )
-            //         }
-            //     </TagContainer>
-            // </SlideContentDiv>
             <SlideContentDiv>
-                <div style={{ display: "flex", flex: "1" }}>{/*marginBottom:10px*/}
-                    <SlideAvatarDiv>
+                <HeaderContainer container="row" justify="flex-start" alignItems="center">
+                    <AvatarDiv item xs={2}>
                         <img className="img" src={userAvatar} alt="user avatar" />
-                    </SlideAvatarDiv>
-                    <EnviadoPor>
+                    </AvatarDiv>
+                    <EnviadoPor item xs={10}>
                         Enviado por:
-                    <br />
+                        <br />
                         <p>{props.author}</p>
                     </EnviadoPor>
-                </div>
-                {
-                    props.tags &&
-                    <TagContainer>
-                        {
-                            props.tags.map((tag) =>
-                                <span key={tag.id}>{tag.name}</span>
-                            )
-                        }
-                    </TagContainer>
-                }
+                </HeaderContainer>
+                <TagContainer container direction="row">
+                    {
+                        props.tags.map((tag) =>
+                            <Grid item key={tag.id}>
+                                <span >{tag.name}</span>
+                            </Grid>
+                        )
+                    }
+                </TagContainer>
             </SlideContentDiv>
         )
     }
@@ -271,33 +249,36 @@ export default function CollectionCardFunction(props) {
                 <CardDiv>
                     <CardReaDiv>
                         <Header onMouseEnter={controlSlide} onMouseLeave={controlSlide}>
-                            {/*slide animation and content*/}
-                            <Slide direction="right" in={slideIn} timeout={1000}>
-                                <Link to={"/colecao-do-usuario/" + props.id} className="text">
-                                    {SlideAnimationContent()}
-                                </Link>
+                            <Slide direction="left" in={slideIn} timeout={1000}>
+                                <div className={`slideContentLinkAfterActive${slideIn}`} style={{ width: '100%', height: "100%" }}>
+                                    <Link to={"/colecao-do-usuario/" + props.id} className="text" style={{ textDecoration: "none" }} >
+                                        {SlideAnimationContent()}
+                                    </Link>
+                                </div>
                             </Slide>
                             <div className={`slideContentLinkBeforeActive${slideIn}`} style={{ width: '100%', height: '100%' }}>
-                                <a href={"/colecao-do-usuario/" + props.id}>
-                                    <UserInfo>
-                                        <AvatarDiv>
-                                            <img src={userAvatar} alt="user avatar" />
-                                        </AvatarDiv>
-                                        <UserAndTitle>
-                                            <span>{props.author}</span>
-                                            <span className={"col-name"}>{props.name}</span>
-                                        </UserAndTitle>
-                                    </UserInfo>
-                                    <StyledGrid container direction="row">
-                                        {
-                                            props.thumbnails.map((thumb) =>
-                                                <Grid item xs={props.thumbnails <= 4 && props.thumbnails > 0 ? 12 / props.thumbnails.length : 6}>
-                                                    <div style={{ backgroundImage: `url(${`${apiDomain}` + thumb})`, height: "100%", width: "100%", backgroundSize: "cover", backgroundPosition: "center" }} />
-                                                </Grid>
-                                            )
-                                        }
-                                    </StyledGrid>
-                                </a>
+                                <UserInfo>
+                                    {/* I(Luis) dont know why, but if i use styled components, sometimes the avatar will be deconfigured */}
+                                    <img src={userAvatar} alt="user avatar" style={{
+                                        height: "70px", width: "70px", borderRadius: "50%",
+                                        zIndex: 1, border: "2px solid white",
+                                        boxShadow: "0 1px 3px rgba(0,0,0,.45)"
+
+                                    }} />
+                                    <UserAndTitle>
+                                        <span>{props.author}</span>
+                                        <span className={"col-name"}>{props.name}</span>
+                                    </UserAndTitle>
+                                </UserInfo>
+                                <StyledGrid container direction="row">
+                                    {
+                                        props.thumbnails.map((thumb) =>
+                                            <Grid item xs={props.thumbnails <= 4 && props.thumbnails > 0 ? 12 / props.thumbnails.length : 6}>
+                                                <div style={{ backgroundImage: `url(${`${apiDomain}` + thumb})`, height: "100%", width: "100%", backgroundSize: "cover", backgroundPosition: "center" }} />
+                                            </Grid>
+                                        )
+                                    }
+                                </StyledGrid>
                             </div>
                         </Header>
 
@@ -306,8 +287,7 @@ export default function CollectionCardFunction(props) {
                                 props.authorID !== state.currentUser.id &&
                                 <Rating
                                     name="customized-empty"
-                                    value={props.rating * 10}
-                                    precision={0.5}
+                                    value={props.rating}
                                     readOnly
                                     style={{ color: "#666" }}
                                     emptyIcon={<StarBorderIcon fontSize="inherit" />}
@@ -398,9 +378,6 @@ const SlideContentDiv = styled.div`
     padding : 10px;
     width : 100%;
     height : 100%;
-    position : absolute;
-    display : flex;
-    flex-direction : column;
 `
 
 const UserAndTitle = styled.div`
@@ -431,19 +408,19 @@ const UserAndTitle = styled.div`
     }
 `
 
-const AvatarDiv = styled.div`
-    z-index : 5;
-    overflow : hidden;
-
-    img {
-        border-radius : 50%;
-        height : 70px;
-        width : 70px;
-        border : 2px solid #fff !important;
-        background-color : #fff;
-        box-shadow : 0 1px 3px rgba(0,0,0,.45);
-    }
-`
+// const AvatarDiv = styled.div`
+//     z-index : 5;
+//     overflow : hidden;
+
+//     img {
+//         border-radius : 50%;
+//         height : 70px;
+//         width : 70px;
+//         border : 2px solid #fff !important;
+//         background-color : #fff;
+//         box-shadow : 0 1px 3px rgba(0,0,0,.45);
+//     }
+// `
 
 const UserInfo = styled.div`
     position : absolute;
diff --git a/src/Components/ResourceList.js b/src/Components/ResourceList.js
index 77c3ce1d..8535534f 100644
--- a/src/Components/ResourceList.js
+++ b/src/Components/ResourceList.js
@@ -31,7 +31,7 @@ import MuiAlert from '@material-ui/lab/Alert';
 import { apiUrl } from '../env.js';
 
 function Alert(props) {
-  return <MuiAlert elevation={6} variant="filled" {...props} />;
+	return <MuiAlert elevation={6} variant="filled" {...props} />;
 }
 
 
@@ -39,7 +39,7 @@ export default function ResourceList(props) {
 	console.log(props);
 
 	const [selected, setSelected] = useState(Array.apply(
-		null, {length: props.resources.length}).map(i => false));
+		null, { length: props.resources.length }).map(i => false));
 	const [selectable, setSelectable] = useState(false);
 	const [download_url, setDownloadUrl] = useState('');
 	const [snackbar_open, setSnackbarOpen] = useState(false);
@@ -68,19 +68,20 @@ export default function ResourceList(props) {
 			let i = 0;
 			while (i < props.resources.length) {
 				if (selected[i])
-					resources.push({"type": "LearningObject", "id": props.resources[i].id});
+					resources.push({ "type": "LearningObject", "id": props.resources[i].id });
 				i++;
 			}
 			const body = {
 				"package": {
 					"object": resources
-				}};
+				}
+			};
 			if (resources.length)
 				axios
-					.post(apiUrl+'/package', body)
+					.post(apiUrl + '/package', body)
 					.catch(err => {
 						if (err.response && err.response.status === 302) {
-							setDownloadUrl(apiUrl.slice().replace('/v1', '')+'/'+err.response.data.url);
+							setDownloadUrl(apiUrl.slice().replace('/v1', '') + '/' + err.response.data.url);
 						}
 					});
 		}
@@ -91,8 +92,8 @@ export default function ResourceList(props) {
 			<Grid container direction="row" justify="space-around" alignItems="center">
 				<Grid item>
 					<Title>
-						{props.resources.length ? 
-							props.resources.length+" recurso"+(props.resources.length === 1 ? "" : "s")
+						{props.resources.length ?
+							props.resources.length + " recurso" + (props.resources.length === 1 ? "" : "s")
 							: "Carregando coleção"}
 					</Title>
 				</Grid>
@@ -105,10 +106,10 @@ export default function ResourceList(props) {
 				</Grid>
 				<Grid item>
 					<UnstyledAnchor href={download_url}>
-						<Button 
-							color="primary" 
+						<Button
+							color="primary"
 							variant="outlined"
-							startIcon={<GetAppIcon fontSize="large"/>}
+							startIcon={<GetAppIcon fontSize="large" />}
 							onClick={handleDownloadSelection}
 						>
 							<PanelButtonText>baixar seleção</PanelButtonText>
@@ -117,22 +118,25 @@ export default function ResourceList(props) {
 				</Grid>
 			</Grid>
 			<Grid container direction="row" justify="flex-start" alignItems="center">
-			{props.resources.map((r) => {
+				{props.resources.map((r) => {
 					return (
 						<ResourceGrid item key={r.title}>
 							<ResourceCardFunction
-								type={r.type}
-								author={r.author}
-								tags={r.tags}
-								published={r.published}
-								title={r.title}
-								rating={r.rating}
-								likeCount={r.likeCount}
-								liked={r.liked}
+								avatar={r.publisher.avatar}
+								id={r.id}
 								thumbnail={r.thumbnail}
+								type={r.object_type ? r.object_type : "Outros"}
+								title={r.name}
+								published={r.state === "published" ? true : false}
+								likeCount={r.likes_count}
+								liked={r.liked}
+								rating={r.review_average}
+								author={r.publisher.name}
+								tags={r.tags}
 								href={"/recurso/" + r.id}
+								downloadableLink={r.default_attachment_location}
 							/>
-							{selectable ? 
+							{selectable ?
 								(<SelectButton
 									variant="outline"
 									color="primary"
@@ -143,7 +147,7 @@ export default function ResourceList(props) {
 								</SelectButton>)
 								:
 								<span></span>}
-								
+
 						</ResourceGrid>
 					);
 				})}
@@ -152,35 +156,35 @@ export default function ResourceList(props) {
 				open={snackbar_open}
 				autoHideDuration={6000}
 				onClose={() => setSnackbarOpen(false)}
-				anchorOrigin={{vertical: 'top', horizontal: 'right'}}
+				anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
 			>
 				<Alert onClose={() => setSnackbarOpen(false)} severity="info">
 					Os recursos serão baixados
 				</Alert>
 			</Snackbar>
-			<FloatingDownloadButton url={download_url} empty={selected.indexOf(true) === -1}/>
+			<FloatingDownloadButton url={download_url} empty={selected.indexOf(true) === -1} />
 		</ResourceListContainer>
 	);
 }
 
-const ResourceListContainer=styled.div`
+const ResourceListContainer = styled.div`
 	margin-left: 20;
 	margin-right: 20;
 `
-const Title=styled.p`
+const Title = styled.p`
 	color: rgb(102, 102, 102);
 	font-size: 2em;
 	font-weigth: 300;
 `
-const SelectButton=styled(Button)`
+const SelectButton = styled(Button)`
 	width: 100%;
 `
-const PanelButtonText=styled.span` 
+const PanelButtonText = styled.span` 
 	font-weight: 900;
 `
-const ResourceGrid=styled(Grid)`
+const ResourceGrid = styled(Grid)`
 	padding-right: 7px;
 `
-const UnstyledAnchor=styled.a`
+const UnstyledAnchor = styled.a`
 	text-decoration: none !important;
 `
diff --git a/src/Components/TabPanels/PanelComponents/TemplateColecao.js b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
index 0aeff38c..24c98c02 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateColecao.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateColecao.js
@@ -32,7 +32,7 @@ export default function PanelTemplateColecao(props) {
                 <CollectionCardFunction
                     name={card.name}
                     collections={card.followable.collection_items}
-                    rating={card.followable.score}
+                    rating={card.followable.review_average}
                     type={card.followable.object_type}
                     description={card.followable.description}
                     author={card.followable.owner.name}
@@ -44,6 +44,7 @@ export default function PanelTemplateColecao(props) {
                     followed={card.followable.followed}
                     privacy={card.followable.privacy}
                     id={card.followable.id}
+                    tags={card.followable.tags}
                 />
             )
         }
@@ -51,20 +52,18 @@ export default function PanelTemplateColecao(props) {
             return (
                 <CollectionCardFunction
                     name={card.name}
-                    rating={card.score}
-                    type={card.object_type}
-                    collections={card.collection_items}
-                    description={card.description}
+                    tags={card.tags}
+                    rating={card.review_average}
+                    id={card.id}
                     author={card.owner.name}
-                    avatar={card.owner.avatar}
-                    authorID={card.owner.id}
+                    description={card.description}
                     thumbnails={card.items_thumbnails}
+                    avatar={card.owner.avatar}
                     likeCount={card.likes_count}
-                    privacy={card.privacy}
-                    liked={card.liked}
                     followed={card.followed}
-                    tags={card.tags}
-                    id={card.id}
+                    liked={card.liked}
+                    collections={card.collection_items}
+                    authorID={card.owner.id}
                 />
             )
         }
diff --git a/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js b/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js
index 132b96ef..f4e1a737 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js
@@ -21,10 +21,10 @@ import Grid from '@material-ui/core/Grid';
 import NoContent from './NoContent.js'
 import ResourceCardFunction from '../../ResourceCardFunction.js'
 import Title from './PanelTitle.js'
-import {WhiteContainer, StyledGrid} from '../StyledComponents.js'
-import {ButtonsAreaRecurso} from './ButtonsArea'
+import { WhiteContainer, StyledGrid } from '../StyledComponents.js'
+import { ButtonsAreaRecurso } from './ButtonsArea'
 
-export default function Template (props) {
+export default function Template(props) {
     return (
         <WhiteContainer>
             <Title
@@ -34,44 +34,48 @@ export default function Template (props) {
 
             {
                 props.length === 0 ?
-                (
-                    [
-                        <NoContent text={props.noContentText}/>
-                    ]
-                )
-                :
-                (
-                    [
-                        <React.Fragment>
-                            <StyledGrid container spacing={1} style={{paddingLeft : "30px", paddingRight : "15px"}}>
-                            {
-                                props.sliceArr.map( (card) =>
-                                <Grid item md={3} xs={12} key={card.id}>
-                                    <ResourceCardFunction
-                                        id={card.learning_object.id}
-                                        avatar = {card.submitter.avatar}
-                                        thumbnail = {card.learning_object.thumbnail}
-                                        type = {card.learning_object.object_type ? card.learning_object.object_type : "Outros"}
-                                        title={card.learning_object.name}
-                                        published={false}
-                                        tags={card.educational_stages}
-                                        href={"/recurso/" + card.learning_object.id}
-                                        downloadableLink={card.default_attachment_location}
-                                    />
-                                </Grid>
-                                )
-                            }
-                            </StyledGrid>
+                    (
+                        [
+                            <NoContent text={props.noContentText} />
+                        ]
+                    )
+                    :
+                    (
+                        [
+                            <React.Fragment>
+                                <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}>
+                                    {
+                                        props.sliceArr.map((card) =>
+                                            <Grid item md={3} xs={12} key={card.id}>
+                                                <ResourceCardFunction
+                                                    avatar={card.publisher.avatar}
+                                                    id={card.id}
+                                                    thumbnail={card.thumbnail}
+                                                    type={card.object_type ? card.object_type : "Outros"}
+                                                    title={card.name}
+                                                    published={false}
+                                                    likeCount={card.likes_count}
+                                                    liked={card.liked}
+                                                    rating={card.review_average}
+                                                    author={card.publisher.name}
+                                                    tags={card.tags}
+                                                    href={"/recurso/" + card.id}
+                                                    downloadableLink={card.default_attachment_location}
+                                                />
+                                            </Grid>
+                                        )
+                                    }
+                                </StyledGrid>
 
-                            <ButtonsAreaRecurso
-                                sliceLength={props.sliceArr.length}
-                                length={props.length}
-                                showMore={() => props.showMore()}
-                                showAll={() => props.showAll()}
-                            />
-                        </React.Fragment>
-                    ]
-                )
+                                <ButtonsAreaRecurso
+                                    sliceLength={props.sliceArr.length}
+                                    length={props.length}
+                                    showMore={() => props.showMore()}
+                                    showAll={() => props.showAll()}
+                                />
+                            </React.Fragment>
+                        ]
+                    )
             }
 
         </WhiteContainer>
diff --git a/src/Components/TabPanels/PanelComponents/TemplateRecurso.js b/src/Components/TabPanels/PanelComponents/TemplateRecurso.js
index 6d46e423..7fe23657 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateRecurso.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateRecurso.js
@@ -21,10 +21,10 @@ import Grid from '@material-ui/core/Grid';
 import NoContent from './NoContent.js'
 import ResourceCardFunction from '../../ResourceCardFunction.js'
 import Title from './PanelTitle.js'
-import {WhiteContainer, StyledGrid} from '../StyledComponents.js'
-import {ButtonsAreaRecurso} from './ButtonsArea'
+import { WhiteContainer, StyledGrid } from '../StyledComponents.js'
+import { ButtonsAreaRecurso } from './ButtonsArea'
 
-export default function Template (props) {
+export default function Template(props) {
     return (
         <WhiteContainer>
             <Title
@@ -34,48 +34,49 @@ export default function Template (props) {
 
             {
                 props.length === 0 ?
-                (
-                    [
-                        <NoContent text={props.noContentText}/>
-                    ]
-                )
-                :
-                (
-                    [
-                        <React.Fragment>
-                            <StyledGrid container spacing={1} style={{paddingLeft : "30px", paddingRight : "15px"}}>
-                            {
-                                props.slice.map( (card) =>
-                                <Grid item md={3} xs={12} key={card.id}>
-                                    <ResourceCardFunction
-                                        avatar = {card.publisher.avatar}
-                                        id={card.id}
-                                        thumbnail = {card.thumbnail}
-                                        type = {card.object_type !== null? card.object_type : "Outros"}
-                                        title={card.name}
-                                        published={card.state === "published" ? true : false}
-                                        likeCount={card.likes_count}
-                                        liked={card.liked}
-                                        rating={card.review_average}
-                                        tags={card.educational_stages}
-                                        href={"/recurso/" + card.id}
-                                        downloadableLink={card.default_attachment_location}
+                    (
+                        [
+                            <NoContent text={props.noContentText} />
+                        ]
+                    )
+                    :
+                    (
+                        [
+                            <React.Fragment>
+                                <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}>
+                                    {
+                                        props.slice.map((card) =>
+                                            <Grid item md={3} xs={12} key={card.id}>
+                                                <ResourceCardFunction
+                                                    avatar={card.publisher.avatar}
+                                                    id={card.id}
+                                                    thumbnail={card.thumbnail}
+                                                    type={card.object_type ? card.object_type : "Outros"}
+                                                    title={card.name}
+                                                    published={card.state === "published" ? true : false}
+                                                    likeCount={card.likes_count}
+                                                    liked={card.liked}
+                                                    rating={card.review_average}
+                                                    author={card.publisher.name}
+                                                    tags={card.tags}
+                                                    href={"/recurso/" + card.id}
+                                                    downloadableLink={card.default_attachment_location}
 
-                                    />
-                                </Grid>
-                                )
-                            }
-                            </StyledGrid>
+                                                />
+                                            </Grid>
+                                        )
+                                    }
+                                </StyledGrid>
 
-                            <ButtonsAreaRecurso
-                                sliceLength={props.slice.length}
-                                length={props.length}
-                                showMore={() => props.showMore()}
-                                showAll={() => props.showAll()}
-                            />
-                        </React.Fragment>
-                    ]
-                )
+                                <ButtonsAreaRecurso
+                                    sliceLength={props.slice.length}
+                                    length={props.length}
+                                    showMore={() => props.showMore()}
+                                    showAll={() => props.showAll()}
+                                />
+                            </React.Fragment>
+                        ]
+                    )
             }
 
         </WhiteContainer>
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
index 2b2148c3..a7c78a9a 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastCollections.js
@@ -40,7 +40,7 @@ export default function LastCols(props) {
                                             <CollectionCardFunction
                                                 name={card.name}
                                                 tags={card.tags}
-                                                rating={card.score}
+                                                rating={card.review_average}
                                                 id={card.id}
                                                 author={card.owner.name}
                                                 description={card.description}
diff --git a/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js b/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
index 044ebc5b..ff42a36a 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/LastLearnObj.js
@@ -2,17 +2,17 @@ import React from 'react'
 import Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
 import NoPub from '../../../img/Pagina_vazia_Sem_publicar.png'
-import {HeaderGrid, StyledGrid} from '../StyledComponents.js'
-import {NoContent} from './TabInicio.js'
+import { HeaderGrid, StyledGrid } from '../StyledComponents.js'
+import { NoContent } from './TabInicio.js'
 
-export default function LastLearnObjs (props) {
+export default function LastLearnObjs(props) {
     return (
         <React.Fragment>
             <HeaderGrid container>
                 <Grid item xs={9}>
                     <h3>Últimos Recursos Publicados</h3>
                 </Grid>
-                <Grid item xs={3} style={{textAlign : "end"}}>
+                <Grid item xs={3} style={{ textAlign: "end" }}>
                     {props.count > 4 &&
                         <span>
                             VER MAIS
@@ -23,47 +23,48 @@ export default function LastLearnObjs (props) {
 
             {
                 props.count === 0 ?
-                (
-                    [
-                        <Grid container>
-                            <Grid item xs={12}>
-                                <NoContent
-                                    image={NoPub}
-                                    text1={props.username + " ainda não disponibilizou nenhum recurso."}
-                                    text2={"Quando disponibilizar, eles aparecerão aqui."}
-                                />
+                    (
+                        [
+                            <Grid container>
+                                <Grid item xs={12}>
+                                    <NoContent
+                                        image={NoPub}
+                                        text1={props.username + " ainda não disponibilizou nenhum recurso."}
+                                        text2={"Quando disponibilizar, eles aparecerão aqui."}
+                                    />
+                                </Grid>
                             </Grid>
-                        </Grid>
-                    ]
-                )
-                :
-                (
-                    [
-                        <StyledGrid container spacing={1} style={{paddingLeft : "0.5em"}}>
-                            {
-                                props.learningObjs.slice(0,4).map( (card) =>
-                                    <Grid item md={3} xs={12} key={card.id}>
-                                        <ResourceCardFunction
-                                            avatar = {card.publisher.avatar}
-                                            id={card.id}
-                                            thumbnail = {card.thumbnail}
-                                            type = {card.object_type !== null? card.object_type : "Outros"}
-                                            title={card.name}
-                                            published={card.state === "published" ? true : false}
-                                            likeCount={card.likes_count}
-                                            liked={card.liked}
-                                            rating={card.review_average}
-                                            tags={card.educational_stages}
-                                            href={"/recurso/" + card.id}
-                                            downloadableLink={card.default_attachment_location}
+                        ]
+                    )
+                    :
+                    (
+                        [
+                            <StyledGrid container spacing={1} style={{ paddingLeft: "0.5em" }}>
+                                {
+                                    props.learningObjs.slice(0, 4).map((card) =>
+                                        <Grid item md={3} xs={12} key={card.id}>
+                                            <ResourceCardFunction
+                                                avatar={card.publisher.avatar}
+                                                id={card.id}
+                                                thumbnail={card.thumbnail}
+                                                type={card.object_type ? card.object_type : "Outros"}
+                                                title={card.name}
+                                                published={card.state === "published" ? true : false}
+                                                likeCount={card.likes_count}
+                                                liked={card.liked}
+                                                rating={card.review_average}
+                                                author={card.publisher.name}
+                                                tags={card.tags}
+                                                href={"/recurso/" + card.id}
+                                                downloadableLink={card.default_attachment_location}
 
-                                        />
-                                    </Grid>
-                                )
-                            }
-                        </StyledGrid>
-                    ]
-                )
+                                            />
+                                        </Grid>
+                                    )
+                                }
+                            </StyledGrid>
+                        ]
+                    )
             }
         </React.Fragment>
     )
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
index f2beba8f..79a3b3ca 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabColecoes.js
@@ -35,7 +35,7 @@ export default function TabRecursos(props) {
                             <CollectionCardFunction
                                 name={card.name}
                                 tags={card.tags}
-                                rating={card.score}
+                                rating={card.review_average}
                                 id={card.id}
                                 author={card.owner.name}
                                 description={card.description}
diff --git a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
index 6f2a08ba..b7431b12 100644
--- a/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
+++ b/src/Components/TabPanels/PublicUserPageTabs/TabRecursos.js
@@ -1,17 +1,17 @@
-import React, {useState, useEffect} from 'react'
-import {HeaderGrid, ContainerStyled, Carregados} from '../StyledComponents.js'
+import React, { useState, useEffect } from 'react'
+import { HeaderGrid, ContainerStyled, Carregados } from '../StyledComponents.js'
 import Grid from '@material-ui/core/Grid';
 import ResourceCardFunction from '../../ResourceCardFunction.js'
-import {ButtonMostrarMaisRecurso} from '../PanelComponents/ButtonsArea'
+import { ButtonMostrarMaisRecurso } from '../PanelComponents/ButtonsArea'
 
-export default function TabRecursos (props) {
+export default function TabRecursos(props) {
     const [arr, setArr] = useState([])
     const [objsSlice, setSlice] = useState([])
-    const handleSlice = (newArr) => {setSlice(newArr)}
+    const handleSlice = (newArr) => { setSlice(newArr) }
 
-    useEffect( () => {
+    useEffect(() => {
         setArr(props.learningObjs)
-        setSlice(props.learningObjs.slice(0,4))
+        setSlice(props.learningObjs.slice(0, 4))
     }, [])
 
     const showMore = (quantity) => {
@@ -20,31 +20,32 @@ export default function TabRecursos (props) {
     }
 
     return (
-        <ContainerStyled style={{flexDirection : "column"}}>
+        <ContainerStyled style={{ flexDirection: "column" }}>
 
             <HeaderGrid container>
                 <Grid item xs={12}>
-                    <h3>Recursos Publicados <b style={{fontWeight:"500"}}>({props.count})</b></h3>
+                    <h3>Recursos Publicados <b style={{ fontWeight: "500" }}>({props.count})</b></h3>
                 </Grid>
             </HeaderGrid>
 
-            <Grid container spacing={1} style={{paddingLeft : "0.5em"}}>
+            <Grid container spacing={1} style={{ paddingLeft: "0.5em" }}>
                 {
-                    objsSlice.map( (card) =>
+                    objsSlice.map((card) =>
                         <Grid item md={3} xs={12} key={card.id}>
                             <ResourceCardFunction
-                                avatar = {card.publisher.avatar}
+                                avatar={card.publisher.avatar}
                                 id={card.id}
-                                thumbnail = {card.thumbnail}
-                                type = {card.object_type ? card.object_type : "Outros"}
+                                thumbnail={card.thumbnail}
+                                type={card.object_type ? card.object_type : "Outros"}
                                 title={card.name}
                                 published={card.state === "published" ? true : false}
                                 likeCount={card.likes_count}
                                 liked={card.liked}
                                 rating={card.review_average}
-                                tags={card.educational_stages}
+                                author={card.publisher.name}
+                                tags={card.tags}
+                                href={"/recurso/" + card.id}
                                 downloadableLink={card.default_attachment_location}
-
                             />
                         </Grid>
                     )
@@ -52,19 +53,19 @@ export default function TabRecursos (props) {
             </Grid>
 
             <Carregados>
-                <p style={{margin:"0 0 10px", fontSize:"14px"}}>
+                <p style={{ margin: "0 0 10px", fontSize: "14px" }}>
                     Carregados {objsSlice.length} de {arr.length}
                 </p>
 
                 {
                     props.count > 5 &&
                     <React.Fragment>
-                        <ButtonMostrarMaisRecurso onClick={() => {showMore(4)}}>
-                            <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS 4</span>
+                        <ButtonMostrarMaisRecurso onClick={() => { showMore(4) }}>
+                            <span style={{ color: "#fff", fontSize: "14px", fontWeight: "500" }}>MOSTRAR MAIS 4</span>
                         </ButtonMostrarMaisRecurso>
 
-                        <ButtonMostrarMaisRecurso onClick={() => {showMore(20)}}>
-                            <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS 20</span>
+                        <ButtonMostrarMaisRecurso onClick={() => { showMore(20) }}>
+                            <span style={{ color: "#fff", fontSize: "14px", fontWeight: "500" }}>MOSTRAR MAIS 20</span>
                         </ButtonMostrarMaisRecurso>
                     </React.Fragment>
                 }
diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
index 1a397869..0e3654a5 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js
@@ -182,7 +182,7 @@ function Tentativa(props) {
                                                 <CollectionCardFunction
                                                     name={card.name}
                                                     tags={card.tags}
-                                                    rating={card.score}
+                                                    rating={card.review_average}
                                                     id={card.id}
                                                     author={card.owner.name}
                                                     description={card.description}
diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index 302dcf12..a443e21a 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -90,233 +90,171 @@ export default function Search(props) {
       url: `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`,
       headers: axiosConfig.headers
     }).then(res => {
-    if (tipoBusca === "LearningObject") setResultsResource(res.data);
-    else if (tipoBusca === "Collection") setResultsCollection(res.data);
-    else if (tipoBusca === "User") setResultsUser(res.data);
-    setOptionResult(tipoBusca);
-    dispatch({
-      type: "SAVE_SEARCH",
-      newSearch: {
-        query: state.search.query,
-        class: tipoBusca,
-      },
-    });
-    setTotalResults(res.headers["x-total-count"]);
-    setIsLoading(false);
-    setIsFiltering(false);
-    setLoadingMoreData(false);
-    saveHeaders(res);
-  })
-};
-
-useEffect(() => {
-  dispatch({
-    type: "HANDLE_SEARCH_BAR",
-    opened: false,
-  });
-
-  const urlParams = new URLSearchParams(window.location.search);
-  const query = urlParams.get("query");
-  const searchClass = urlParams.get("search_class");
-  if (state.search.query !== query || state.search.class !== searchClass) {
-    dispatch({
-      type: "SAVE_SEARCH",
-      newSearch: {
-        query: query,
-        class: searchClass,
-      },
-    });
-  }
+      if (tipoBusca === "LearningObject") setResultsResource(res.data);
+      else if (tipoBusca === "Collection") setResultsCollection(res.data);
+      else if (tipoBusca === "User") setResultsUser(res.data);
+      setOptionResult(tipoBusca);
+      dispatch({
+        type: "SAVE_SEARCH",
+        newSearch: {
+          query: state.search.query,
+          class: tipoBusca,
+        },
+      });
+      setTotalResults(res.headers["x-total-count"]);
+      setIsLoading(false);
+      setIsFiltering(false);
+      setLoadingMoreData(false);
+      saveHeaders(res);
+    })
+  };
 
-  return () =>
+  useEffect(() => {
     dispatch({
       type: "HANDLE_SEARCH_BAR",
       opened: false,
     });
-}, []);
 
-useEffect(() => {
-  collectStuff(option);
-}, [resultsPerPage]);
+    const urlParams = new URLSearchParams(window.location.search);
+    const query = urlParams.get("query");
+    const searchClass = urlParams.get("search_class");
+    if (state.search.query !== query || state.search.class !== searchClass) {
+      dispatch({
+        type: "SAVE_SEARCH",
+        newSearch: {
+          query: query,
+          class: searchClass,
+        },
+      });
+    }
+
+    return () =>
+      dispatch({
+        type: "HANDLE_SEARCH_BAR",
+        opened: false,
+      });
+  }, []);
 
-return (
-  <div style={{ backgroundColor: "#f4f4f4" }}>
-    <Principal>
-      <BreadCrumbsDiv>
-        <StyledBreadCrumbs>
-          <Link to="/">Página Inicial</Link>
-          <span>Busca</span>
-        </StyledBreadCrumbs>
-      </BreadCrumbsDiv>
-      <HeaderFilters elevation={4} square>
-        <Grid container spacing={0} style={{ height: "100%" }}>
-          <Grid
-            item
-            xs={4}
-            style={{
-              display: "flex",
-              flexDirection: "column",
-              justifyContent: "center",
-              paddingLeft: 20,
-            }}
-          >
-            <div style={{ display: "flex", flexDirection: "row" }}>
-              <span style={{ alignSelf: "center", marginRight: 10 }}>
-                MOSTRAR:
+  useEffect(() => {
+    collectStuff(option);
+  }, [resultsPerPage]);
+
+  return (
+    <div style={{ backgroundColor: "#f4f4f4" }}>
+      <Principal>
+        <BreadCrumbsDiv>
+          <StyledBreadCrumbs>
+            <Link to="/">Página Inicial</Link>
+            <span>Busca</span>
+          </StyledBreadCrumbs>
+        </BreadCrumbsDiv>
+        <HeaderFilters elevation={4} square>
+          <Grid container spacing={0} style={{ height: "100%" }}>
+            <Grid
+              item
+              xs={4}
+              style={{
+                display: "flex",
+                flexDirection: "column",
+                justifyContent: "center",
+                paddingLeft: 20,
+              }}
+            >
+              <div style={{ display: "flex", flexDirection: "row" }}>
+                <span style={{ alignSelf: "center", marginRight: 10 }}>
+                  MOSTRAR:
                 </span>
-              <Dropdown
-                options={options}
-                value={optionResult}
-                onChange={(e) => {
-                  setIsLoading(true);
-                  setOption(e.value);
-                  collectStuff(e.value, "");
-                }}
-                placeholder="Select an type"
-              />
-            </div>
-          </Grid>
-          <Grid
-            item
-            xs={4}
-            style={{
-              display: "flex",
-              flexDirection: "column",
-              justifyContent: "center",
-            }}
-          >
-            <div>
-              Resultados encontrados: {totalResults}
-            </div>
-          </Grid>
-          {
-            optionResult === "User" ? null :
-              <Grid
-                item
-                xs={4}
-                style={{
-                  display: "flex",
-                  flexDirection: "column",
-                  justifyContent: "center",
-                  paddingRight: 20,
-                }}
-              >
-                <div
-                  style={{
-                    display: "flex",
-                    flexDirection: "row",
-                    justifyContent: "end",
+                <Dropdown
+                  options={options}
+                  value={optionResult}
+                  onChange={(e) => {
+                    setIsLoading(true);
+                    setOption(e.value);
+                    collectStuff(e.value, "");
                   }}
-                >
-                  <span
-                    style={{
-                      textAlign: "right",
-                      alignSelf: "center",
-                      marginRight: 10,
-                    }}
-                  >
-                    ORDENAR POR:
-                </span>
-                  <Dropdown
-                    options={ordenar}
-                    value={currOrder}
-                    onChange={(e) => {
-                      order = e.value;
-                      setCurrOrder(e.label)
-                      collectStuff(optionResult, currFilter);
-                    }}
-                    placeholder="Select an order "
-                  />
-                </div>
-              </Grid>
-          }
-        </Grid>
-      </HeaderFilters>
-
-      {
-        isloading ? <LoadingSpinner text="Carregando..." /> :
-          optionResult === "Collection" ? (
-            <GridBuscaCollection container spacing={2}>
-              <Grid item md={12} xs={12}>
-                <Grid container spacing={2}>
-                  {resultsCollection.map((card) => (
-                    <Grid item md={4} xs={6} key={card.id}>
-                      <CollectionCardFunction
-                        name={card.name}
-                        tags={card.tags}
-                        rating={card.score}
-                        id={card.id}
-                        author={card.owner.name}
-                        description={card.description}
-                        thumbnails={card.items_thumbnails}
-                        avatar={card.owner.avatar}
-                        likeCount={card.likes_count}
-                        followed={card.followed}
-                        liked={card.liked}
-                        collections={card.collection_items}
-                        authorID={card.owner.id}
-                      />
-                    </Grid>
-                  ))}
-                </Grid>
-                <div
+                  placeholder="Select an type"
+                />
+              </div>
+            </Grid>
+            <Grid
+              item
+              xs={4}
+              style={{
+                display: "flex",
+                flexDirection: "column",
+                justifyContent: "center",
+              }}
+            >
+              <div>
+                Resultados encontrados: {totalResults}
+              </div>
+            </Grid>
+            {
+              optionResult === "User" ? null :
+                <Grid
+                  item
+                  xs={4}
                   style={{
                     display: "flex",
-                    flexDirection: "row",
+                    flexDirection: "column",
                     justifyContent: "center",
+                    paddingRight: 20,
                   }}
                 >
-                  <button
+                  <div
                     style={{
-                      height: 36,
-                      backgroundColor: "#ff7f00",
-                      marginBottom: 50,
-                      marginTop: 50,
-                      fontSize: 14,
-                      color: "white",
-                      borderRadius: 4,
-                      border: "none",
-                    }}
-                    onClick={() => {
-                      setLoadingMoreData(true);
-                      setResultsPerPage(resultsPerPage + 12)
-                      // collectStuff("Collection", "");
+                      display: "flex",
+                      flexDirection: "row",
+                      justifyContent: "end",
                     }}
                   >
-                    {
-                      loadingMoreData ? <CircularProgress size={24} color="inherit" /> : "Carregar mais 12"
-                    }
-                  </button>
-                </div>
-              </Grid>
-            </GridBuscaCollection>
-          ) :
-
-            optionResult === "LearningObject" ? (
-              <GridBuscaResource container spacing={2}>
-                <Grid item md={3} xs={12}>
-                  <Paper elevation={4} square>
-                    <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
-                  </Paper>
+                    <span
+                      style={{
+                        textAlign: "right",
+                        alignSelf: "center",
+                        marginRight: 10,
+                      }}
+                    >
+                      ORDENAR POR:
+                </span>
+                    <Dropdown
+                      options={ordenar}
+                      value={currOrder}
+                      onChange={(e) => {
+                        order = e.value;
+                        setCurrOrder(e.label)
+                        collectStuff(optionResult, currFilter);
+                      }}
+                      placeholder="Select an order "
+                    />
+                  </div>
                 </Grid>
-                <Grid item md={9} xs={12}>
+            }
+          </Grid>
+        </HeaderFilters>
+
+        {
+          isloading ? <LoadingSpinner text="Carregando..." /> :
+            optionResult === "Collection" ? (
+              <GridBuscaCollection container spacing={2}>
+                <Grid item md={12} xs={12}>
                   <Grid container spacing={2}>
-                    {resultsResource.map((card) => (
+                    {resultsCollection.map((card) => (
                       <Grid item md={4} xs={6} key={card.id}>
-                        <ResourceCardFunction
-                          avatar={card.publisher.avatar}
+                        <CollectionCardFunction
+                          name={card.name}
+                          tags={card.tags}
+                          rating={card.review_average}
                           id={card.id}
-                          thumbnail={card.thumbnail}
-                          type={card.object_type ? card.object_type : "Outros"}
-                          title={card.name}
-                          published={card.state === "published" ? true : false}
+                          author={card.owner.name}
+                          description={card.description}
+                          thumbnails={card.items_thumbnails}
+                          avatar={card.owner.avatar}
                           likeCount={card.likes_count}
+                          followed={card.followed}
                           liked={card.liked}
-                          rating={card.review_average}
-                          author={card.publisher.name}
-                          tags={card.tags}
-                          href={"/recurso/" + card.id}
-                          downloadableLink={card.default_attachment_location}
+                          collections={card.collection_items}
+                          authorID={card.owner.id}
                         />
                       </Grid>
                     ))}
@@ -342,7 +280,7 @@ return (
                       onClick={() => {
                         setLoadingMoreData(true);
                         setResultsPerPage(resultsPerPage + 12)
-                        // collectStuff("LearningObject", "");
+                        // collectStuff("Collection", "");
                       }}
                     >
                       {
@@ -351,27 +289,37 @@ return (
                     </button>
                   </div>
                 </Grid>
-              </GridBuscaResource>
+              </GridBuscaCollection>
             ) :
-              optionResult === "User" && (
-                <GridBuscaUser container spacing={2}>
-                  <Grid item md={12} xs={12}>
+
+              optionResult === "LearningObject" ? (
+                <GridBuscaResource container spacing={2}>
+                  <Grid item md={3} xs={12}>
+                    <Paper elevation={4} square>
+                      <SearchExpansionPanel onChange={collectStuff} onFiltering={isFiltering} />
+                    </Paper>
+                  </Grid>
+                  <Grid item md={9} xs={12}>
                     <Grid container spacing={2}>
-                      {resultsUser.map((card) => (
-                        <Grid item md={4} xs={6} key={card.id}>
-                          <ContactCard
-                            name={card.name}
-                            avatar={card.avatar ? apiDomain + card.avatar : null}
-                            cover={card.cover ? apiDomain + card.cover : null}
-                            numCollections={card.collections_count}
-                            numLearningObjects={card.learning_objects_count}
-                            follow_count={card.follows_count}
-                            followed={card.followed || null}
-                            followerID={card.id}
-                            href={'/usuario-publico/' + card.id}
-                          />
-                        </Grid>
-                      ))}
+                      {resultsResource.map((card) => (
+                      <Grid item md={4} xs={6} key={card.id}>
+                        <ResourceCardFunction
+                          avatar={card.publisher.avatar}
+                          id={card.id}
+                          thumbnail={card.thumbnail}
+                          type={card.object_type ? card.object_type : "Outros"}
+                          title={card.name}
+                          published={card.state === "published" ? true : false}
+                          likeCount={card.likes_count}
+                          liked={card.liked}
+                          rating={card.review_average}
+                          author={card.publisher.name}
+                          tags={card.tags}
+                          href={"/recurso/" + card.id}
+                          downloadableLink={card.default_attachment_location}
+                        />
+                      </Grid>
+                    ))}
                     </Grid>
                     <div
                       style={{
@@ -394,21 +342,74 @@ return (
                         onClick={() => {
                           setLoadingMoreData(true);
                           setResultsPerPage(resultsPerPage + 12)
-                          // collectStuff("User", "");
+                          // collectStuff("LearningObject", "");
                         }}
                       >
                         {
-                          loadingMoreData ? <CircularProgress color="inherit" size={24} /> : "Carregar mais 12"
+                          loadingMoreData ? <CircularProgress size={24} color="inherit" /> : "Carregar mais 12"
                         }
                       </button>
                     </div>
                   </Grid>
-                </GridBuscaUser>
-              )
-      }
-    </Principal>
-  </div>
-);
+
+                </GridBuscaResource>
+              ) :
+                optionResult === "User" && (
+                  <GridBuscaUser container spacing={2}>
+                    <Grid item md={12} xs={12}>
+                      <Grid container spacing={2}>
+                        {resultsUser.map((card) => (
+                          <Grid item md={4} xs={6} key={card.id}>
+                            <ContactCard
+                              name={card.name}
+                              avatar={card.avatar ? apiDomain + card.avatar : null}
+                              cover={card.cover ? apiDomain + card.cover : null}
+                              numCollections={card.collections_count}
+                              numLearningObjects={card.learning_objects_count}
+                              follow_count={card.follows_count}
+                              followed={card.followed || null}
+                              followerID={card.id}
+                              href={'/usuario-publico/' + card.id}
+                            />
+                          </Grid>
+                        ))}
+                      </Grid>
+                      <div
+                        style={{
+                          display: "flex",
+                          flexDirection: "row",
+                          justifyContent: "center",
+                        }}
+                      >
+                        <button
+                          style={{
+                            height: 36,
+                            backgroundColor: "#ff7f00",
+                            marginBottom: 50,
+                            marginTop: 50,
+                            fontSize: 14,
+                            color: "white",
+                            borderRadius: 4,
+                            border: "none",
+                          }}
+                          onClick={() => {
+                            setLoadingMoreData(true);
+                            setResultsPerPage(resultsPerPage + 12)
+                            // collectStuff("User", "");
+                          }}
+                        >
+                          {
+                            loadingMoreData ? <CircularProgress color="inherit" size={24} /> : "Carregar mais 12"
+                          }
+                        </button>
+                      </div>
+                    </Grid>
+                  </GridBuscaUser>
+                )
+        }
+      </Principal>
+    </div>
+  );
 }
 
 const GridBuscaCollection = styled(Grid)`
-- 
GitLab


From 16d97572f26deb0795635743ff6dab68ca6ff7a8 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 8 Feb 2021 21:21:15 -0300
Subject: [PATCH 69/83] centralized follow/unfollow logic in contact card to
 improve feedback when the user performs any of those actions

---
 src/Components/ContactCard.js                 | 28 ++++++++++++++-----
 src/Components/ContactCardOptions.js          | 12 ++++++--
 .../TabPanels/UserPageTabs/PanelRede.js       |  2 --
 3 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/src/Components/ContactCard.js b/src/Components/ContactCard.js
index b1c26823..b5719d71 100644
--- a/src/Components/ContactCard.js
+++ b/src/Components/ContactCard.js
@@ -71,18 +71,32 @@ export default function ImgMediaCard(props) {
                                 {
                                     followedBoolean ?
                                     (
-                                        [
-                                            <FollowingButton followedID={props.followerID} toggleFollowed={toggleFollowed}/>
-                                        ]
+                                        <React.Fragment>
+                                            <FollowingButton
+                                                followedID={props.followerID ? props.followerID : props.followedID}
+                                                toggleFollowed={toggleFollowed}/>
+
+                                            <Options
+                                                followableID={props.followerID ? props.followerID : props.followedID}
+                                                followed={followedBoolean}
+                                                toggleFollowed={toggleFollowed}/>
+                                        </React.Fragment>
                                     )
                                     :
                                     (
-                                        [
-                                            <FollowButton followerID={props.followerID} toggleFollowed={toggleFollowed}/>
-                                        ]
+                                        <React.Fragment>
+                                            <FollowButton
+                                                followerID={props.followedID ? props.followedID : props.followerID}
+                                                toggleFollowed={toggleFollowed}/>
+
+                                            <Options
+                                                followableID={props.followedID ? props.followedID : props.followerID}
+                                                followed={followedBoolean}
+                                                toggleFollowed={toggleFollowed}/>
+                                        </React.Fragment>
                                     )
                                 }
-                                <Options followableID={props.followerID} followed={followedBoolean}/>
+
                             </div>
                     </UserInfo>
                 </CardContent>
diff --git a/src/Components/ContactCardOptions.js b/src/Components/ContactCardOptions.js
index 24d16ab1..deb12ba4 100644
--- a/src/Components/ContactCardOptions.js
+++ b/src/Components/ContactCardOptions.js
@@ -41,9 +41,15 @@ export default function SimpleMenu(props) {
     function handleClose() {
         setAnchorEl(null);
     }
+
     const handleFollow = (followerID) => {
 
-        putRequest(`/users/${followerID}/follow`, {}, (data) => {console.log(data)}, (error) => {console.log(error)})
+        putRequest(`/users/${followerID}/follow`, {}, (data) => {
+            console.log(data);
+            props.toggleFollowed()
+        }, (error) => {console.log(error)})
+
+        handleClose();
     }
 
     const [reportModal, toggleReportModal] = useState(false)
@@ -80,13 +86,13 @@ export default function SimpleMenu(props) {
             {
                 props.followed ?
                 (
-                    <StyledMenuItem onClick={() => {handleFollow(props.followableID);handleClose()}}>
+                    <StyledMenuItem onClick={() => {handleFollow(props.followableID)}}>
                         <ListItemIcon><ReportIcon /></ListItemIcon>Deixar de Seguir
                     </StyledMenuItem>
                 )
                 :
                 (
-                    <StyledMenuItem onClick={() => {handleFollow(props.followableID);handleClose()}}>
+                    <StyledMenuItem onClick={() => {handleFollow(props.followableID)}}>
                         <ListItemIcon><PersonAddIcon /></ListItemIcon>Seguir
                     </StyledMenuItem>
                 )
diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js
index cf734021..fdebcbf9 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelRede.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js
@@ -88,7 +88,6 @@ export default function TabPanelRede (props) {
                         )
                         :
                         (
-                            [
                                 <React.Fragment>
                                     <PanelTemplateRede
                                         title={followersList.length === 1 ? "Seguidor" : "Seguidores"}
@@ -111,7 +110,6 @@ export default function TabPanelRede (props) {
                                     />
                                 </React.Fragment>
 
-                            ]
                         )
                     }
                     </>
-- 
GitLab


From cfba72d2ec8c9350d2524f5b87b5c63946b78eba Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 8 Feb 2021 21:22:12 -0300
Subject: [PATCH 70/83] fixed incorrect invalid avatar check; now should
 correctly display default avatar

---
 src/Components/MenuList.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js
index 0b2963f7..643b4b04 100644
--- a/src/Components/MenuList.js
+++ b/src/Components/MenuList.js
@@ -68,7 +68,7 @@ export default function MenuList(props) {
       >
         <div style={{borderRadius: "50%", border: "2px solid #fff", background: "#fff", overflow: "hidden", maxWidth : "50px", maxHeight : "50px"}}>
             {
-                state.currentUser.avatar === '' || state.currentUser.avatar === null ?
+                state.currentUser.avatar === '' || state.currentUser.avatar === null || state.currentUser.avatar === undefined ?
                 (
 
                     <img src={Profile} alt={'user avatar'} style={{width:"100%", height:"100%", verticalAlign : "middle", marginLeft : "0"}}/>
-- 
GitLab


From ea696ba044bb96c2b9a9342dc625c4a8c9aa0009 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 8 Feb 2021 21:22:48 -0300
Subject: [PATCH 71/83] fixed incorrect JSON parsing error

---
 .../HelperFunctions/getAxiosConfig.js         | 49 ++++++++++++++-----
 1 file changed, 38 insertions(+), 11 deletions(-)

diff --git a/src/Components/HelperFunctions/getAxiosConfig.js b/src/Components/HelperFunctions/getAxiosConfig.js
index 04dd3606..7841d441 100644
--- a/src/Components/HelperFunctions/getAxiosConfig.js
+++ b/src/Components/HelperFunctions/getAxiosConfig.js
@@ -33,7 +33,6 @@ function fetchHeaders () {
 
     if (auth_headers) {
         const myHeaders = new Headers(auth_headers)
-        myHeaders.append('Content-Type', 'application/json')
         return myHeaders
     }
     else {
@@ -88,7 +87,9 @@ export const getRequest = (url, onSuccess, onError) => {
             if (response.headers.has('access-token')) {
                 updateAccessToken(response.headers.get('access-token'))
             }
-            return response.json()
+            return response.json().catch(err => {
+                return {};
+            })
         })
         .then(data => {
             console.log(data)
@@ -108,7 +109,9 @@ export const deleteRequest = (url, onSuccess, onError) => {
             if (response.headers.has('access-token')) {
                 updateAccessToken(response.headers.get('access-token'))
             }
-            return response.json()
+            return response.json().catch(err => {
+                return {};
+            })
         })
         .then(data => {
             console.log(data)
@@ -120,16 +123,26 @@ export const deleteRequest = (url, onSuccess, onError) => {
 }
 
 export const putRequest = (url, payload, onSuccess, onError) => {
+    let newHeaders = fetchHeaders()
+    if (payload instanceof FormData) {
+        newHeaders.append('Content-Type', 'multipart/form-data')
+    }
+    else {
+        newHeaders.append('Content-Type', 'application/json')
+    }
+
     fetch((`${apiUrl}${url}`), {
         method : 'PUT',
-        headers : fetchHeaders(),
-        body: JSON.stringify(payload)
+        headers : newHeaders,
+        body: payload instanceof FormData ? payload : JSON.stringify(payload)
     })
         .then(response => {
             if (response.headers.has('access-token')) {
                 updateAccessToken(response.headers.get('access-token'))
             }
-            return response.json()
+            return response.json().catch(err => {
+                return {};
+            })
         })
         .then(data => {
             console.log(data)
@@ -141,16 +154,26 @@ export const putRequest = (url, payload, onSuccess, onError) => {
 }
 
 export const postRequest = (url, payload, onSuccess, onError) => {
+    let newHeaders = fetchHeaders()
+    if (payload instanceof FormData) {
+        newHeaders.append('Content-Type', 'multipart/form-data')
+    }
+    else {
+        newHeaders.append('Content-Type', 'application/json')
+    }
+
     fetch((`${apiUrl}${url}`), {
         method : 'POST',
-        headers : fetchHeaders(),
-        body: JSON.stringify(payload)
+        headers : newHeaders,
+        body: payload instanceof FormData ? payload : JSON.stringify(payload)
     })
         .then(response => {
             if (response.headers.has('access-token')) {
                 updateAccessToken(response.headers.get('access-token'))
             }
-            return response.json()
+            return response.json().catch(err => {
+                return {};
+            })
         })
         .then(data => {
             console.log(data)
@@ -172,7 +195,9 @@ export const fetchAllRequest = (urls, onSuccess, onError) => {
                 updateAccessToken(res.headers.get('access-token'))
             }
         }
-        return Promise.all(responses.map( (response) => response.json()))
+        return Promise.all(responses.map( (response) => response.json().catch(err => {
+            return {};
+        })))
     }).then( (data) => {
         onSuccess(data)
     }).catch((error) => {
@@ -217,7 +242,9 @@ export const authentication = (url, payload, onSuccess, onError) => {
 
             sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(auth_headers))
 
-            return response.json()
+            return response.json().catch(err => {
+                return {};
+            })
         })
         .then(data => {
             console.log(data)
-- 
GitLab


From 1801d7008cf31b0cdcad8b5818cc6bb2d6b59f36 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Mon, 8 Feb 2021 21:33:22 -0300
Subject: [PATCH 72/83] added snackbar to provide feedback

---
 src/Components/ReportModal.js | 85 +++++++++++++++++------------------
 1 file changed, 41 insertions(+), 44 deletions(-)

diff --git a/src/Components/ReportModal.js b/src/Components/ReportModal.js
index 736d00b2..079ca75f 100644
--- a/src/Components/ReportModal.js
+++ b/src/Components/ReportModal.js
@@ -16,7 +16,7 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>.*/
 
-import React, {useContext} from 'react';
+import React, {useContext, useState} from 'react';
 import { Button } from '@material-ui/core';
 import Modal from '@material-ui/core/Modal';
 import Backdrop from '@material-ui/core/Backdrop';
@@ -28,6 +28,7 @@ import ReportUserForm from './ReportUserForm.js'
 import ReportRecursoForm from './ReportRecursoForm.js'
 import ReportColecaoForm from './ReportColecaoForm.js'
 import {postRequest} from './HelperFunctions/getAxiosConfig'
+import SnackbarComponent from './SnackbarComponent.js'
 
 function CloseModalButton (props) {
     return (
@@ -39,6 +40,7 @@ function CloseModalButton (props) {
 
 export default function ReportModal (props) {
     const {state} = useContext(Store)
+    const [snackbarOpen, handleSnackbar] = useState(false)
 
     const handleSubmit  = (complaint_reason_id, description) => {
         const url = `/complaints/`
@@ -52,7 +54,11 @@ export default function ReportModal (props) {
             }
         }
 
-        postRequest(url, payload, (data) => {console.log(data)}, (error) => {console.log(error)})
+        postRequest(url, payload, (data) => {
+            console.log(data)
+            props.handleClose();
+            handleSnackbar(true);
+        }, (error) => {console.log(error)})
 
     }
 
@@ -73,49 +79,40 @@ export default function ReportModal (props) {
             }
     }
 
-    /* const renderForm = (formType) => {
-        switch (formType) {
-						case 'colecao':
-							return (
-								<ReportCollectionForm
-									handleClose={props.handleClose}
-									handleSubmit={handleSubmit}
-								/>
-							);
-							break;
-            }
-    } */
-
     return (
-        <StyledModal
-            aria-labelledby="transition-modal-title"
-            aria-describedby="transition-modal-description"
-            open={props.open}
-
-            centered="true"
-            onClose={props.handleClose}
-            closeAfterTransition
-            BackdropComponent={Backdrop}
-            BackdropProps={{
-                timeout: 500,
-            }}
-        >
-            <Fade in={props.open}>
-                <ReportContainer>
-                    <Header>
-                        <span style={{width:"32px"}}/>
-                        <h2>O que está acontecendo?</h2>
-                        <CloseModalButton handleClose={props.handleClose}/>
-                    </Header>
-
-                    <Content>
-                        {
-                            renderForm(props.form)
-                        }
-                    </Content>
-                </ReportContainer>
-            </Fade>
-        </StyledModal>
+        <React.Fragment>
+            <SnackbarComponent snackbarOpen={snackbarOpen} severity={"success"} handleClose={() => {handleSnackbar(false)}} text={"Sua reclamação foi recebida."}
+                />
+            <StyledModal
+                aria-labelledby="transition-modal-title"
+                aria-describedby="transition-modal-description"
+                open={props.open}
+
+                centered="true"
+                onClose={props.handleClose}
+                closeAfterTransition
+                BackdropComponent={Backdrop}
+                BackdropProps={{
+                    timeout: 500,
+                }}
+            >
+                <Fade in={props.open}>
+                    <ReportContainer>
+                        <Header>
+                            <span style={{width:"32px"}}/>
+                            <h2>O que está acontecendo?</h2>
+                            <CloseModalButton handleClose={props.handleClose}/>
+                        </Header>
+
+                        <Content>
+                            {
+                                renderForm(props.form)
+                            }
+                        </Content>
+                    </ReportContainer>
+                </Fade>
+            </StyledModal>
+        </React.Fragment>
     )
 }
 
-- 
GitLab


From 72094a0789af96f03e37f15542dcd85faff29b5d Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:20:29 -0300
Subject: [PATCH 73/83] Give the correct spacing between lines

---
 src/Components/Header.js | 282 +++++++++++++++++++--------------------
 1 file changed, 141 insertions(+), 141 deletions(-)

diff --git a/src/Components/Header.js b/src/Components/Header.js
index b607b201..f721a372 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -18,7 +18,7 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, { useContext, useState, useEffect } from 'react'
 import axios from 'axios'
-import {apiUrl} from '../env'
+import { apiUrl } from '../env'
 import MenuBar from './MenuBar'
 import SearchBar from './SearchBar'
 import SignUpModal from './SignUpModal'
@@ -27,7 +27,7 @@ import { Store } from '../Store';
 import ColaborarModal from './ColaborarModal.js'
 import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
-import {useLocation} from 'react-router-dom'
+import { useLocation } from 'react-router-dom'
 import MenuBarMobile from './MenuBarMobile.js'
 
 //const StyledButton = styled(Button)`
@@ -35,149 +35,149 @@ import MenuBarMobile from './MenuBarMobile.js'
 //    boxShadow :none;
 //`
 function Alert(props) {
-  return <MuiAlert elevation={6} variant="filled" {...props} />;
+    return <MuiAlert elevation={6} variant="filled" {...props} />;
 }
 
 
-export default function Header(props){
-  const { state, dispatch } = useContext(Store)
-  const [signUpOpen, setSignUp] = useState(false)
-  const [loginOpen, setLogin] = useState(false)
-  const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
-  const [modalColaborar, setModalColaborar] = useState(false)
-
-  const validateToken = (config) => {
-      axios.get(`${apiUrl}/auth/validate_token/`, config).then(
-           (response) => {
-              console.log(response.data)
-              if ( response.headers['access-token'] ) {
-                  sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
-              }
-              dispatch ({
-                  type: "USER_LOGGED_IN",
-                  userLoggedIn: !state.userIsLoggedIn,
-                  login: response.data.data
-                  }
-              )
-
-              sessionStorage.setItem('@portalmec/id', response.data.data.id)
-              sessionStorage.setItem('@portalmec/username', response.data.data.name)
-              sessionStorage.setItem('@portalmec/uid', response.data.data.uid)
-
-
-              let headers = {
-                  client:response.headers.client,
-                  "access-token":response.headers['access-token'],
-                  "token-type": "Bearer",
-                  expiry:response.headers.expiry,
-                  uid:response.data.data.uid
-              }
-              sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
-          },
-          (err) => {
-              console.log(err)
-          }
-       )
-  }
-
-  useEffect( () => {
-      if (sessionStorage.getItem('@portalmec/auth_headers')) {
-          let config = { headers : JSON.parse(sessionStorage.getItem('@portalmec/auth_headers'))}
-
-          validateToken(config)
-      }
-  }, [])
-
-  useEffect ( () => {
-      if (state.currentUser.askTeacherQuestion === true) {
-          dispatch({
-            type: "TOGGLE_MODAL_COLABORAR_PLATAFORMA",
-            modalColaborarPlataformaOpen: true
-          });
-      }
-  }, [state.currentUser.askTeacherQuestion])
-
-  const redirect = () => {
-      props.history.push('/')
-  }
-
-  let loc = useLocation()
-  useEffect(() => {
-      let query = new URLSearchParams(loc.search)
-
-      if(query.get("auth_token")) {
-  	       let config = {
-  		           headers : {
-  			                  "access-token" : query.get("auth_token"),
-  			                  "client" : query.get("client_id"),
-  			                  "uid" : query.get("uid"),
-  			                  "expiry" : query.get("expiry"),
-  			                  "token-type" : 'Bearer'
-  		           }
-                  }
-  	       validateToken(config)
-           redirect()
-      }
-      
-  }, [loc])
-
-  const toggleSnackbar = (event, reason) => {
-      if (reason === 'clickaway') {
-          return;
-      }
-
-      handleSuccessfulLogin(false);
-  }
-
-  const handleSignUp = () => {
-      setSignUp(!signUpOpen)
-  }
-
-  const handleLogin = () => {
-      setLogin(!loginOpen)
-  }
-
-  const handleClickSearch = (open) => {
-    dispatch({
-      type: "HANDLE_SEARCH_BAR",
-      opened: !state.searchOpen
-    })
-  }
-
-  let windowWidth = window.innerWidth
-
-  return (
-    <React.Fragment>
-       {/*
+export default function Header(props) {
+    const { state, dispatch } = useContext(Store)
+    const [signUpOpen, setSignUp] = useState(false)
+    const [loginOpen, setLogin] = useState(false)
+    const [successfulLoginOpen, handleSuccessfulLogin] = useState(false)
+    const [modalColaborar, setModalColaborar] = useState(false)
+
+    const validateToken = (config) => {
+        axios.get(`${apiUrl}/auth/validate_token/`, config).then(
+            (response) => {
+                console.log(response.data)
+                if (response.headers['access-token']) {
+                    sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+                }
+                dispatch({
+                    type: "USER_LOGGED_IN",
+                    userLoggedIn: !state.userIsLoggedIn,
+                    login: response.data.data
+                }
+                )
+
+                sessionStorage.setItem('@portalmec/id', response.data.data.id)
+                sessionStorage.setItem('@portalmec/username', response.data.data.name)
+                sessionStorage.setItem('@portalmec/uid', response.data.data.uid)
+
+
+                let headers = {
+                    client: response.headers.client,
+                    "access-token": response.headers['access-token'],
+                    "token-type": "Bearer",
+                    expiry: response.headers.expiry,
+                    uid: response.data.data.uid
+                }
+                sessionStorage.setItem('@portalmec/auth_headers', JSON.stringify(headers))
+            },
+            (err) => {
+                console.log(err)
+            }
+        )
+    }
+
+    useEffect(() => {
+        if (sessionStorage.getItem('@portalmec/auth_headers')) {
+            let config = { headers: JSON.parse(sessionStorage.getItem('@portalmec/auth_headers')) }
+
+            validateToken(config)
+        }
+    }, [])
+
+    useEffect(() => {
+        if (state.currentUser.askTeacherQuestion === true) {
+            dispatch({
+                type: "TOGGLE_MODAL_COLABORAR_PLATAFORMA",
+                modalColaborarPlataformaOpen: true
+            });
+        }
+    }, [state.currentUser.askTeacherQuestion])
+
+    const redirect = () => {
+        props.history.push('/')
+    }
+
+    let loc = useLocation()
+    useEffect(() => {
+        let query = new URLSearchParams(loc.search)
+
+        if (query.get("auth_token")) {
+            let config = {
+                headers: {
+                    "access-token": query.get("auth_token"),
+                    "client": query.get("client_id"),
+                    "uid": query.get("uid"),
+                    "expiry": query.get("expiry"),
+                    "token-type": 'Bearer'
+                }
+            }
+            validateToken(config)
+            redirect()
+        }
+
+    }, [loc])
+
+    const toggleSnackbar = (event, reason) => {
+        if (reason === 'clickaway') {
+            return;
+        }
+
+        handleSuccessfulLogin(false);
+    }
+
+    const handleSignUp = () => {
+        setSignUp(!signUpOpen)
+    }
+
+    const handleLogin = () => {
+        setLogin(!loginOpen)
+    }
+
+    const handleClickSearch = (open) => {
+        dispatch({
+            type: "HANDLE_SEARCH_BAR",
+            opened: !state.searchOpen
+        })
+    }
+
+    let windowWidth = window.innerWidth
+
+    return (
+        <React.Fragment>
+            {/*
            windowWidth > 990 &&
            <AcessibilityBar/>
        */}
-        <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleSnackbar}
-                  anchorOrigin = {{ vertical:'top', horizontal:'center' }}
-              >
-              <Alert severity="success" style={{backgroundColor:"#00acc1"}}>Você está conectado(a)!</Alert>
-        </Snackbar>
-        {
-            windowWidth > 990 ?
-            (
-                <React.Fragment>
-                    <MenuBar openSearchBar={handleClickSearch} openSignUp = {handleSignUp} openLogin = {handleLogin}/>
-                    {
-                    state.searchOpen &&
-                    <SearchBar/>
-                    }
-                </React.Fragment>
-
-            )
-            :
-            (
-                <MenuBarMobile openSignUp = {handleSignUp} openLogin = {handleLogin}/>
-            )
-        }
-      <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}/>
-      <LoginModal open={loginOpen} handleClose={() => setLogin(false)}      openSignUp={handleSignUp}
-                  openSnackbar={() => {handleSuccessfulLogin(true)}}/>
-      <ColaborarModal open={modalColaborar} handleClose={() => {setModalColaborar(!modalColaborar)}} />
-    </React.Fragment>
-  )
+            <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleSnackbar}
+                anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
+            >
+                <Alert severity="success" style={{ backgroundColor: "#00acc1" }}>Você está conectado(a)!</Alert>
+            </Snackbar>
+            {
+                windowWidth > 990 ?
+                    (
+                        <React.Fragment>
+                            <MenuBar openSearchBar={handleClickSearch} openSignUp={handleSignUp} openLogin={handleLogin} />
+                            {
+                                state.searchOpen &&
+                                <SearchBar />
+                            }
+                        </React.Fragment>
+
+                    )
+                    :
+                    (
+                        <MenuBarMobile openSignUp={handleSignUp} openLogin={handleLogin} />
+                    )
+            }
+            <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin} />
+            <LoginModal open={loginOpen} handleClose={() => setLogin(false)} openSignUp={handleSignUp}
+                openSnackbar={() => { handleSuccessfulLogin(true) }} />
+            <ColaborarModal open={modalColaborar} handleClose={() => { setModalColaborar(!modalColaborar) }} />
+        </React.Fragment>
+    )
 }
-- 
GitLab


From 6f8dbea7bbc0bc7d43e8c0ea59ecdedf0711cb17 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:21:20 -0300
Subject: [PATCH 74/83] Centered the logo

---
 src/Components/MenuBarMobile.js | 62 ++++++++++++++++-----------------
 1 file changed, 31 insertions(+), 31 deletions(-)

diff --git a/src/Components/MenuBarMobile.js b/src/Components/MenuBarMobile.js
index ea3196dd..4590e9dd 100644
--- a/src/Components/MenuBarMobile.js
+++ b/src/Components/MenuBarMobile.js
@@ -19,13 +19,13 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 import React from 'react'
 import MenuIcon from '@material-ui/icons/Menu';
 import styled from 'styled-components'
-import {Button} from '@material-ui/core'
+import { Button } from '@material-ui/core'
 import logo from '../img/logo_small.svg'
-import {Link} from 'react-router-dom'
+import { Link } from 'react-router-dom'
 import Grid from '@material-ui/core/Grid';
 import MobileDrawerMenu from './MobileDrawerMenu';
 
-export default function MenuBarMobile (props) {
+export default function MenuBarMobile(props) {
 
     const [drawerOpen, setDrawerStatus] = React.useState(false);
 
@@ -37,45 +37,40 @@ export default function MenuBarMobile (props) {
     };
 
     return (
-        <OuterDiv>
-            <Grid container>
-                <Grid item xs={3} style={{display : "flex"}}>
-                    <Button style={{color : "#00bcd4"}} onClick={toggleDrawer(true)}>
-                        <MenuIcon className="icon"/>
-                    </Button>
-                </Grid>
-
-                <Grid item xs={9} justify={'center'}>
-                    <div className="logo">
-                        <Link to="/">
-                            <img src={logo} alt={"Plataforma Integrada"}/>
-                        </Link>
-                    </div>
-                </Grid>
-            </Grid>
+        <>
             <MobileDrawerMenu anchor={'left'} open={drawerOpen}
                 onClose={toggleDrawer(false)}
-                openSignUp = {props.openSignUp} openLogin = {props.openLogin}
-                />
-        </OuterDiv>
+                openSignUp={props.openSignUp} openLogin={props.openLogin}
+            />
+            <OuterDiv>
+                <DrawerButtonDiv style={{justifySelf : "flex-start", position : "absolute", left : 0}}>
+                    <Button style={{ color: "#00bcd4" }} onClick={toggleDrawer(true)}>
+                        <MenuIcon className="icon" />
+                    </Button>
+                </DrawerButtonDiv>
+                <div className="logo">
+                    <Link to="/">
+                        <img src={logo} alt={"Plataforma Integrada"} />
+                    </Link>
+                </div>
+            </OuterDiv>
+        </>
     )
 }
 
-const OuterDiv = styled.div `
+const OuterDiv = styled.div`
     height : 48px;
-    margin : 5px 2px;
+    width : 100%;
     display : flex;
-    flex-direction : column;
-    align-content : stretch;
+    flex-direction : row;
+    align-items : center;
     justify-content : center;
+    position : relative; 
 
     .logo {
-        height : 50px;
-        width : 150px;
-        padding : 5px;
-        padding-top : 15px;
+        align-content : center;
+        justify-self : center;  
         text-align : center;
-
         img {
             height : 38px;
             overflow : hidden;
@@ -98,3 +93,8 @@ const OuterDiv = styled.div `
         color : inherit !important;
     }
 `
+const DrawerButtonDiv = styled.div`
+    justify-self : center; 
+    position : absolute; 
+    left : 0;
+`
\ No newline at end of file
-- 
GitLab


From 605e732f2b456365d1395715647473856522bef3 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:22:02 -0300
Subject: [PATCH 75/83] Added the search tab

---
 src/Components/MobileDrawerMenu.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js
index 2b159882..9670234e 100644
--- a/src/Components/MobileDrawerMenu.js
+++ b/src/Components/MobileDrawerMenu.js
@@ -36,7 +36,8 @@ import HistoryIcon from '@material-ui/icons/History';
 import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
 import FolderOpenIcon from '@material-ui/icons/FolderOpen';
 import SettingsIcon from '@material-ui/icons/Settings';
-import {apiDomain, apiUrl} from '../env.js'
+import {apiDomain, apiUrl} from '../env.js';
+import SearchIcon from '@material-ui/icons/Search';
 import {getAxiosConfig} from './HelperFunctions/getAxiosConfig'
 import axios from 'axios'
 
@@ -48,6 +49,7 @@ export default function MobileDrawerMenu (props) {
         { name : "Sobre a Plataforma", href : "sobre", icon : <InfoIcon/>},
         { name : "Contato", href : "contato", icon : <MailOutlineIcon/>},
         { name : "Central de Ajuda", href : "ajuda", icon : <HelpOutlineIcon/>},
+        { name: "Busca", href: `/busca?query=${state.search.query}&search_class=${state.search.class}`, icon : <SearchIcon/>},
         { name : "Termos de Uso", href : "termos", icon : <AssignmentIcon/>},
     ]
 
-- 
GitLab


From c4d03df4e1067645d0767c4562ab5a2b3a6d1104 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:23:02 -0300
Subject: [PATCH 76/83] Passed the correct params to resource card

---
 src/Components/ResourceList.js | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/Components/ResourceList.js b/src/Components/ResourceList.js
index 8535534f..3c953fc4 100644
--- a/src/Components/ResourceList.js
+++ b/src/Components/ResourceList.js
@@ -119,10 +119,11 @@ export default function ResourceList(props) {
 			</Grid>
 			<Grid container direction="row" justify="flex-start" alignItems="center">
 				{props.resources.map((r) => {
+					console.log(r);
 					return (
 						<ResourceGrid item key={r.title}>
 							<ResourceCardFunction
-								avatar={r.publisher.avatar}
+								avatar={r.avatar}
 								id={r.id}
 								thumbnail={r.thumbnail}
 								type={r.object_type ? r.object_type : "Outros"}
@@ -131,7 +132,7 @@ export default function ResourceList(props) {
 								likeCount={r.likes_count}
 								liked={r.liked}
 								rating={r.review_average}
-								author={r.publisher.name}
+								author={r.title}
 								tags={r.tags}
 								href={"/recurso/" + r.id}
 								downloadableLink={r.default_attachment_location}
-- 
GitLab


From 8d55c6d8eff199acb727cd35cafdfcc6720f5d44 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:25:10 -0300
Subject: [PATCH 77/83] modified the position of teacher div

---
 src/Components/TabPanels/StyledComponents.js | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/src/Components/TabPanels/StyledComponents.js b/src/Components/TabPanels/StyledComponents.js
index 9816407c..d77966a3 100644
--- a/src/Components/TabPanels/StyledComponents.js
+++ b/src/Components/TabPanels/StyledComponents.js
@@ -184,11 +184,11 @@ export const UserProfileInfoDiv = styled.div`
 `
 
 export const CheckTeacherDiv = styled.div`
-    @media screen and (min-width: 500px) {
-        padding-top : 10px;
-        padding-left : 250px;
-        margin-bottom : -10px;
-    }
+    padding-top : 10px;
+    padding-left : 250px;
+    margin-bottom : -10px;
+    display : absolute;
+
     p {
         margin : 0 0 10px;
         font-family: Roboto;
@@ -206,9 +206,6 @@ export const CheckTeacherDiv = styled.div`
             }
         }
     }
-    @media screen and (max-width: 499px) {
-        display : none;
-    }
 `
 
 export const StyledTabs = styled(Tabs)`
-- 
GitLab


From 9b6098fad3707c334ef59deabfa815d400a50895 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:26:23 -0300
Subject: [PATCH 78/83] Passed the correct params

---
 .../PanelComponents/TemplateCuradoria.js      | 23 ++++++++++---------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js b/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js
index f4e1a737..28390ab4 100644
--- a/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js
+++ b/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js
@@ -25,6 +25,7 @@ import { WhiteContainer, StyledGrid } from '../StyledComponents.js'
 import { ButtonsAreaRecurso } from './ButtonsArea'
 
 export default function Template(props) {
+    console.log(props.sliceArr);
     return (
         <WhiteContainer>
             <Title
@@ -48,18 +49,18 @@ export default function Template(props) {
                                         props.sliceArr.map((card) =>
                                             <Grid item md={3} xs={12} key={card.id}>
                                                 <ResourceCardFunction
-                                                    avatar={card.publisher.avatar}
-                                                    id={card.id}
-                                                    thumbnail={card.thumbnail}
-                                                    type={card.object_type ? card.object_type : "Outros"}
-                                                    title={card.name}
+                                                    avatar={card.submitter.avatar}
+                                                    id={card.learning_object.id}
+                                                    thumbnail={card.learning_object.thumbnail}
+                                                    type={card.learning_object.object_type ? card.learning_object.object_type : "Outros"}
+                                                    title={card.learning_object.name}
                                                     published={false}
-                                                    likeCount={card.likes_count}
-                                                    liked={card.liked}
-                                                    rating={card.review_average}
-                                                    author={card.publisher.name}
-                                                    tags={card.tags}
-                                                    href={"/recurso/" + card.id}
+                                                    likeCount={card.learning_object.likes_count}
+                                                    liked={card.learning_object.liked}
+                                                    rating={card.learning_object.review_average}
+                                                    author={card.submitter.name}
+                                                    tags={card.learning_object.tags}
+                                                    href={"/recurso/" + card.learning_object.id}
                                                     downloadableLink={card.default_attachment_location}
                                                 />
                                             </Grid>
-- 
GitLab


From 8c40c6a445e24a9a37bc4ddde6130b0077fc1592 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:29:13 -0300
Subject: [PATCH 79/83] change positions according width

---
 src/Components/UserPageComponents/Cover.js | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/Components/UserPageComponents/Cover.js b/src/Components/UserPageComponents/Cover.js
index 6fd3c539..d2ba43e9 100644
--- a/src/Components/UserPageComponents/Cover.js
+++ b/src/Components/UserPageComponents/Cover.js
@@ -27,6 +27,8 @@ import ModalAlterarCover from '../ModalAlterarCover/ModalAlterarCover.js'
 export default function Cover (props) {
     const {state} = useContext(Store)
 
+    const WIDTH = window.innerWidth; 
+
     const [currentCover, setCoverImg] = useState(state.currentUser.cover_file_name)
     const [tempCover, setTempCover] = useState('')
 
@@ -55,11 +57,21 @@ export default function Cover (props) {
                 {currentCover && <img src={apiDomain + currentCover} alt = '' style= {{width:"100%", height:"100%", objectFit : "cover" }}/>}
                 <input accept="image/*" style = {{display:"none"}} id="choose-cover-file" type="file" onChange={(e) => updateCover(e.target.files)}/>
                 <label htmlFor="choose-cover-file">
+                {
+                    WIDTH >= 545 ? 
+                    <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left">
+                        <IconButton style={{position:"absolute",right:"0",bottom: "0",color:"#fff"}}color="primary" aria-label="upload picture" component="span">
+                            <PhotoCamera />
+                        </IconButton>
+                    </Tooltip> 
+                    : 
                     <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left">
-                        <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span">
+                        <IconButton style={{position:"absolute",left:"0",top: "0",color:"#fff"}}color="primary" aria-label="upload picture" component="span">
                             <PhotoCamera />
                         </IconButton>
                     </Tooltip>
+                }
+                    
                 </label>
             </CoverContainer>
         </>
-- 
GitLab


From 0e0f0976d592d2f57099cf42cdd12376372d8e3d Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:30:49 -0300
Subject: [PATCH 80/83] give spacing between border and component

---
 src/Components/UserPageComponents/EditProfileButton.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/Components/UserPageComponents/EditProfileButton.js b/src/Components/UserPageComponents/EditProfileButton.js
index 4df7df2c..beaa7137 100644
--- a/src/Components/UserPageComponents/EditProfileButton.js
+++ b/src/Components/UserPageComponents/EditProfileButton.js
@@ -49,8 +49,8 @@ const EditProfileAnchor = styled(Link)`
       box-shadow : 0 2px 5px 0 rgba(0,0,0,.26);
       background-color : #fafafa;
       position : absolute;
-      right : 5px;
-      bottom : 0;
+      right : 10px;
+      top : 10px;
       margin-bottom : 20px;
       color : #666;
       padding : 0 10px;
-- 
GitLab


From 1a71df8b1f18153c530d21f979e923d1f338cd61 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Tue, 9 Feb 2021 10:45:05 -0300
Subject: [PATCH 81/83] fix updateCover

---
 src/Components/EditarColecaoForm.js           |   4 +-
 .../UserPageTabs/PanelEditarPerfil.js         | 145 ++++++++++--------
 2 files changed, 82 insertions(+), 67 deletions(-)

diff --git a/src/Components/EditarColecaoForm.js b/src/Components/EditarColecaoForm.js
index 4e127b9a..9191ee7d 100644
--- a/src/Components/EditarColecaoForm.js
+++ b/src/Components/EditarColecaoForm.js
@@ -43,10 +43,10 @@ export default function EditarColecaoForm (props) {
     const [value, setValue] = useState(-1);
 
     /*values are set according to backend complaint id*/
-    const [options] = useState([
+    const [options] = [
         {value : "pública", text :'Pública (Sua coleção estará disponível para todos)'},
         {value : "privada", text : 'Privada (Somente você poderá visualizar esta coleção)'}
-    ])
+    ]
 
     const handleChange = (event) => {
         setValue(event.target.value);
diff --git a/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js b/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
index a2a082d0..ce61ebca 100644
--- a/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
+++ b/src/Components/TabPanels/UserPageTabs/PanelEditarPerfil.js
@@ -27,11 +27,11 @@ import Tooltip from '@material-ui/core/Tooltip';
 import FormInput from "../../FormInput.js"
 import ValidateUserInput from '../../HelperFunctions/FormValidationFunction.js'
 import {apiDomain} from '../../../env.js'
-
+import ModalAlterarCover from '../../ModalAlterarCover/ModalAlterarCover.js'
 
 export default function TabPanelEditarPerfil (props) {
     // eslint-disable-next-line
-    const {state, dispatch} = useContext(Store)
+    const {state} = useContext(Store)
     const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false)
 
     const [formNome, setNome] = useState({
@@ -48,9 +48,16 @@ export default function TabPanelEditarPerfil (props) {
         handleAlterarFoto(!hoverAlterarFoto)
     }
 
+    const [tempCover, setTempCover] = useState('')
+
+    const [open, toggleOpen] = useState(false)
+    const controlModal = () => {toggleOpen(!open)}
+
     const updateCover = (selectorFiles) => {
-        console.log(selectorFiles)
-        console.log(selectorFiles[0].name)
+        const objectURL = URL.createObjectURL(selectorFiles[0])
+        console.log(objectURL)
+        setTempCover(objectURL)
+        controlModal()
     }
 
     const handleChange = (e, type) => {
@@ -98,69 +105,77 @@ export default function TabPanelEditarPerfil (props) {
     }
 
     return (
-        <div className="card-config">
-            <h1 style={{fontWeight:"300"}}>Editar Perfil </h1>
-                <div className='content-div'>
-                    <div style={{padding:"0", display:"flex", flexDirection:"column"}}>
-                        <HeaderContainer>
-                            <div style={{position:"relative", height:"100%"}}>
-                                <img src={`${apiDomain}` + state.currentUser.cover} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/>
-                                <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" onChange={(e) => updateCover(e.target.files)}/>
-                                <label htmlFor="icon-button-file">
-                                    <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left">
-                                        <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span">
-                                            <PhotoCamera />
-                                        </IconButton>
-                                    </Tooltip>
-                                </label>
-                            </div>
-                            <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}>
-                                <img src={`${apiDomain}` + state.currentUser.avatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/>
-                                <ChangeAvatarDiv  style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}>
-                                    <span>Alterar Foto</span>
-                                </ChangeAvatarDiv>
-                            </ProfileAvatarDiv>
-                        </HeaderContainer>
-                        <br/>
-                        <br/>
-                        <br/>
-                        <br/>
-                    </div>
+        <React.Fragment>
+            <ModalAlterarCover
+                open = {open}
+                handleClose={controlModal}
+                cover={tempCover}
+                id={state.currentUser.id}
+            />
+            <div className="card-config">
+                <h1 style={{fontWeight:"300"}}>Editar Perfil </h1>
+                    <div className='content-div'>
+                        <div style={{padding:"0", display:"flex", flexDirection:"column"}}>
+                            <HeaderContainer>
+                                <div style={{position:"relative", height:"100%"}}>
+                                    <img src={`${apiDomain}` + state.currentUser.cover} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/>
+                                    <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" onChange={(e) => updateCover(e.target.files)}/>
+                                    <label htmlFor="icon-button-file">
+                                        <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left">
+                                            <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span">
+                                                <PhotoCamera />
+                                            </IconButton>
+                                        </Tooltip>
+                                    </label>
+                                </div>
+                                <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}>
+                                    <img src={`${apiDomain}` + state.currentUser.avatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/>
+                                    <ChangeAvatarDiv  style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}>
+                                        <span>Alterar Foto</span>
+                                    </ChangeAvatarDiv>
+                                </ProfileAvatarDiv>
+                            </HeaderContainer>
+                            <br/>
+                            <br/>
+                            <br/>
+                            <br/>
+                        </div>
 
-                    <div style={{paddingTop:"90px"}}>
-                        <div style={{display:"flex", flexDirection:"row"}}>
-                            <form onSubmit={e => handleSubmit(e)}>
-                                <FormInput
-                                    inputType={"text"}
-                                    name={"Nome Completo"}
-                                    value={formNome.value}
-                                    placeholder={"Nome Completo"}
-                                    handleChange={e => handleChange(e, 'username')}
-                                    required={true}
-                                    error={formNome.key}
-                                />
-                                <FormInput
-                                    inputType={"text"}
-                                    name={"Sobre Mim"}
-                                    value={formAboutMe.value}
-                                    multi = {true}
-                                    rows="3"
-                                    rowsMax = "3"
-                                    error={formAboutMe.key}
-                                    placeholder={"Sobre Mim"}
-                                    handleChange={e => handleChange(e, 'aboutMe')}
-                                    required={false}
-                                    help = {formAboutMe.value.length + '/160'}
-                                />
-                            </form>
+                        <div style={{paddingTop:"90px"}}>
+                            <div style={{display:"flex", flexDirection:"row"}}>
+                                <form onSubmit={e => handleSubmit(e)}>
+                                    <FormInput
+                                        inputType={"text"}
+                                        name={"Nome Completo"}
+                                        value={formNome.value}
+                                        placeholder={"Nome Completo"}
+                                        handleChange={e => handleChange(e, 'username')}
+                                        required={true}
+                                        error={formNome.key}
+                                    />
+                                    <FormInput
+                                        inputType={"text"}
+                                        name={"Sobre Mim"}
+                                        value={formAboutMe.value}
+                                        multi = {true}
+                                        rows="3"
+                                        rowsMax = "3"
+                                        error={formAboutMe.key}
+                                        placeholder={"Sobre Mim"}
+                                        handleChange={e => handleChange(e, 'aboutMe')}
+                                        required={false}
+                                        help = {formAboutMe.value.length + '/160'}
+                                    />
+                                </form>
+                            </div>
+                            <ButtonsDiv>
+                                <Link to="perfil" ><ButtonCancelar ><span>CANCELAR</span></ButtonCancelar></Link>
+                                <ButtonConfirmar onClick={e => handleSubmit(e)}><span>SALVAR ALTERAÇÕES</span></ButtonConfirmar>
+                            </ButtonsDiv>
                         </div>
-                        <ButtonsDiv>
-                            <Link to="perfil" ><ButtonCancelar ><span>CANCELAR</span></ButtonCancelar></Link>
-                            <ButtonConfirmar onClick={e => handleSubmit(e)}><span>SALVAR ALTERAÇÕES</span></ButtonConfirmar>
-                        </ButtonsDiv>
-                    </div>
-                </div >
-        </div>
+                    </div >
+            </div>
+        </React.Fragment>
     )
 }
 
-- 
GitLab


From 82b1aaacf5fed67fbf0c9b646eb4c3e3938a6124 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Tue, 9 Feb 2021 11:14:18 -0300
Subject: [PATCH 82/83] removed axios call

---
 src/Pages/Search.js | 42 ++++++++++++++++++++----------------------
 1 file changed, 20 insertions(+), 22 deletions(-)

diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index 6d88bed0..63018200 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -40,7 +40,7 @@ import CollectionCardFunction from "../Components/CollectionCardFunction";
 import ContactCard from "../Components/ContactCard";
 import CircularProgress from '@material-ui/core/CircularProgress';
 import { saveHeaders } from '../Components/HelperFunctions/saveTokens';
-
+import getRequest from './HelperFunctions/getAxiosConfig'
 
 
 let order = "review_average";
@@ -77,22 +77,10 @@ export default function Search(props) {
   );
   const [optionResult, setOptionResult] = useState(option);
 
-  const collectStuff = (tipoBusca, filtro) => {
-    if (!loadingMoreData) // this line prevents resetting filter when loading more data
-      currFilter = filtro;
-    if (filtro)
-      setIsFiltering(true);
-
-    /// TODO: FIX this axios call
-    const axiosConfig = getAxiosConfig();
-    axios({
-      method: 'get',
-      url: `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`,
-      headers: axiosConfig.headers
-    }).then(res => {
-      if (tipoBusca === "LearningObject") setResultsResource(res.data);
-      else if (tipoBusca === "Collection") setResultsCollection(res.data);
-      else if (tipoBusca === "User") setResultsUser(res.data);
+  function handleSuccessfulGet (data) {
+      if (tipoBusca === "LearningObject") setResultsResource(data);
+      else if (tipoBusca === "Collection") setResultsCollection(data);
+      else if (tipoBusca === "User") setResultsUser(data);
       setOptionResult(tipoBusca);
       dispatch({
         type: "SAVE_SEARCH",
@@ -101,12 +89,22 @@ export default function Search(props) {
           class: tipoBusca,
         },
       });
-      setTotalResults(res.headers["x-total-count"]);
+      setTotalResults(data.headers["x-total-count"]);
       setIsLoading(false);
       setIsFiltering(false);
       setLoadingMoreData(false);
-      saveHeaders(res);
-    })
+  }
+
+  const collectStuff = (tipoBusca, filtro) => {
+    if (!loadingMoreData) // this line prevents resetting filter when loading more data
+      currFilter = filtro;
+    if (filtro)
+      setIsFiltering(true);
+
+    const url = `/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`
+
+    getRequest(url, handleSuccessfulGet, (error) => {console.console.log(error)})
+
   };
 
   useEffect(() => {
@@ -197,7 +195,7 @@ export default function Search(props) {
               </Grid>
             </Grid>
           </HeaderFilters>
-        
+
           {
             isloading ? <LoadingSpinner text="Carregando..." /> :
               optionResult === "Collection" ? (
@@ -228,7 +226,7 @@ export default function Search(props) {
                     <div style={{ display: "flex", flexDirection: "row", justifyContent: "center", }}>
                       <button
                         style={{ height: 36, backgroundColor: "#ff7f00", marginBottom: 50, marginTop: 50, fontSize: 14,
-                          color: "white", borderRadius: 4,border: "none", 
+                          color: "white", borderRadius: 4,border: "none",
                         }}
                         onClick={() => {
                           setLoadingMoreData(true);
-- 
GitLab


From f2daf07cf54cbb61c9084a33e2e090c32ddf4a15 Mon Sep 17 00:00:00 2001
From: "Henrique V. Ehrenfried" <hvehrenfried@inf.ufpr.br>
Date: Tue, 9 Feb 2021 11:29:22 -0300
Subject: [PATCH 83/83] Fix Search file

Signed-off-by: Henrique V. Ehrenfried <hvehrenfried@inf.ufpr.br>
---
 src/Pages/Search.js | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index 63018200..8648fbaf 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -40,7 +40,7 @@ import CollectionCardFunction from "../Components/CollectionCardFunction";
 import ContactCard from "../Components/ContactCard";
 import CircularProgress from '@material-ui/core/CircularProgress';
 import { saveHeaders } from '../Components/HelperFunctions/saveTokens';
-import getRequest from './HelperFunctions/getAxiosConfig'
+import {getRequest} from '../Components/HelperFunctions/getAxiosConfig'
 
 
 let order = "review_average";
@@ -78,18 +78,18 @@ export default function Search(props) {
   const [optionResult, setOptionResult] = useState(option);
 
   function handleSuccessfulGet (data) {
-      if (tipoBusca === "LearningObject") setResultsResource(data);
-      else if (tipoBusca === "Collection") setResultsCollection(data);
-      else if (tipoBusca === "User") setResultsUser(data);
-      setOptionResult(tipoBusca);
+      if (option === "LearningObject") setResultsResource(data);
+      else if (option === "Collection") setResultsCollection(data);
+      else if (option === "User") setResultsUser(data);
+      setOptionResult(option);
       dispatch({
         type: "SAVE_SEARCH",
         newSearch: {
           query: state.search.query,
-          class: tipoBusca,
+          class: option,
         },
       });
-      setTotalResults(data.headers["x-total-count"]);
+      setTotalResults(data.length);
       setIsLoading(false);
       setIsFiltering(false);
       setLoadingMoreData(false);
@@ -103,7 +103,7 @@ export default function Search(props) {
 
     const url = `/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`
 
-    getRequest(url, handleSuccessfulGet, (error) => {console.console.log(error)})
+    getRequest(url, handleSuccessfulGet, (error) => {console.log(error)})
 
   };
 
@@ -189,7 +189,8 @@ export default function Search(props) {
               <Grid item xs={12}>
                 <div style={{display: "flex", flexDirection: "column", justifyContent: "center" }}>
                   <div style={{textAlign: "center", paddingTop: 10, fontWeight:"bolder"}}>
-                    Exibindo {totalResults === 0 ? 0 : resultsPerPage} resultados de {totalResults} encontrados
+                    {/* Exibindo {totalResults === 0 ? 0 : resultsPerPage} resultados de {totalResults} encontrados */}
+                    Exibindo {totalResults === 0 ? 0 : resultsPerPage} resultados
                   </div>
                 </div>
               </Grid>
-- 
GitLab