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] 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