From 7643d2cb6d1c970e95160b5f726a7f1e24116a9c Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Fri, 18 Dec 2020 09:38:40 -0300
Subject: [PATCH] fixed follow logical

---
 src/Components/FollowCollectionButton.js | 124 ++++++++++++++++-------
 1 file changed, 90 insertions(+), 34 deletions(-)

diff --git a/src/Components/FollowCollectionButton.js b/src/Components/FollowCollectionButton.js
index 5e3fd33c..cbabd884 100644
--- a/src/Components/FollowCollectionButton.js
+++ b/src/Components/FollowCollectionButton.js
@@ -23,23 +23,44 @@ 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 { apiUrl } from '../env';
 
 export default function FollowCollectionButton(props) {
-	const [icon, setIcon] = useState(<AddIcon fontSize="large"/>);
+	const [icon, setIcon] = useState(<AddIcon fontSize="large" />);
 	const [button_text, setButtonText] = useState("Seguir Coleção");
 	const [variant, setVariant] = useState("outlined");
 	const [sign_up_open, setSignUpOpen] = useState(false);
 	const [following, setFollowing] = useState(false); //user following collection
 
 	useEffect(() => {
-		axios.get(apiUrl+'/users/'+props.user_id+'/following/Collection')
-		.then(res => {
-			for (const element in res.body)
-				if (element.id == props.collection_id)
-					setFollowing(true);
-		});
-	}, [])
+		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);
+					}
+						
+				})
+			SaveNewHeaders(response)
+		})
+	}, []);
 
 	//handleMouse{Enter, Leave} only do anything when user follows given collection:
 	const handleMouseEnter = () => {
@@ -49,7 +70,7 @@ export default function FollowCollectionButton(props) {
 			setIcon(null);
 		}
 	}
-	
+
 	const handleMouseLeave = () => {
 		if (following) {
 			setVariant("contained");
@@ -58,35 +79,70 @@ 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')
+		}
+	}
+
 	const handleClick = () => {
 		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"/>)
+			setIcon(<CheckIcon fontSize="large" />)
 			setFollowing(true);
-			axios.post(apiUrl+'/collections/'+props.collection_id+'/follow')
-				.then(res => {
-					if (Number(res.status) != 201)
-						setFollowing(false);
-						setIcon(<AddIcon fontSize="large"/>);
-						setButtonText("Seguindo");
-						setVariant("contained");
-				});
+			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)
+			})
 		} else {
+			const url = apiUrl + '/collections/' + props.collection_id + '/follow';
 			setVariant("outlined");
-			setButtonText("Deixar de seguir");
-			setIcon(<AddIcon fontSize="large"/>);
+			setButtonText("Seguir Coleção");
+			setIcon(<AddIcon fontSize="large" />);
 			setFollowing(false);
-			axios.delete(apiUrl+'/collections/'+props.collection_id+'/follow')
-				.then(res => {
-					if (Number(res.status) == 200)
-						setFollowing(true);
-						setIcon(<CheckIcon fontSize="large"/>);
-						setButtonText("Deixar de seguir");
-						setVariant("outlined");
-				});
+			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)
+			})
 		}
 	};
 
@@ -97,7 +153,7 @@ export default function FollowCollectionButton(props) {
 					variant={variant}
 					color="primary"
 					startIcon={icon}
-					size="large"
+					size="small"
 					onMouseEnter={handleMouseEnter}
 					onMouseLeave={handleMouseLeave}
 					onClick={handleClick}
@@ -107,19 +163,19 @@ export default function FollowCollectionButton(props) {
 				<SignUpModal open={sign_up_open} handleClose={() => setSignUpOpen(false)} />
 			</div>
 		);
-		else return (<div></div>);
+	else return (<div></div>);
 }
 
-const Title=styled.h1`
+const Title = styled.h1`
 	font-size: 3em;
 	color: rgb(102, 102, 102);
 	float: left;
 `
-const ButtonText=styled.span`
+const ButtonText = styled.span`
 	font-weight: bolder;
 	font-size: 1.2em;
 `
-const FollowButton=styled(Button)`
+const FollowButton = styled(Button)`
 	padding-left: 10;
 	padding-right: 10;
 	width: 250px;
-- 
GitLab