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