From 409f049fc519c045d6045f64f55fbcca0091df83 Mon Sep 17 00:00:00 2001
From: edsheebran <damien.armillon@student-cs.fr>
Date: Mon, 18 Nov 2019 19:43:52 +0100
Subject: [PATCH] Refactor front

---
 front/src/App.js                              |  9 ++--
 front/src/{view => utils}/LogoutButton.js     |  0
 .../showToucan => utils}/ModalSuppression.js  |  2 +-
 front/src/utils/yearSelector.js               | 17 ++++---
 front/src/view/AdminPage/AdminPage.js         | 17 ++-----
 .../view/AdminPage/showToucan/ToucanLine.js   | 47 -------------------
 .../view/AdminPage/showToucan/ToucanTable.js  | 44 -----------------
 front/src/view/AllToucanPage/AllToucanPage.js | 14 ++----
 front/src/view/AllToucanPage/ToucanCard.js    | 32 ++++++++++---
 front/src/view/PageHeader.js                  | 14 ++++--
 10 files changed, 58 insertions(+), 138 deletions(-)
 rename front/src/{view => utils}/LogoutButton.js (100%)
 rename front/src/{view/AdminPage/showToucan => utils}/ModalSuppression.js (97%)
 delete mode 100644 front/src/view/AdminPage/showToucan/ToucanLine.js
 delete mode 100644 front/src/view/AdminPage/showToucan/ToucanTable.js

diff --git a/front/src/App.js b/front/src/App.js
index 080821a..6e9e209 100644
--- a/front/src/App.js
+++ b/front/src/App.js
@@ -9,12 +9,13 @@ import env from './.env';
 import isLogged from './utils/Oauth';
 
 function App() {
-  return (
+	const logged = isLogged();
+  	return (
     <Router >
-      <PageHeader />
-      <Route exact path='/' component={AllToucanPage} />
-      <Route exact path='/admin' render={()=>isLogged() ? <AdminPage/> : window.location=`${env.backURL}/oauth/login`}/>
+      <PageHeader isLogged={logged} />
+      <Route exact path='/admin' render={()=>logged ? <AdminPage/> : window.location=`${env.backURL}/oauth/login`}/>
       <Route exact path='/login/:token' component={Login} />
+	  <AllToucanPage isAdmin={logged}/>
     </Router>
   );
 }
diff --git a/front/src/view/LogoutButton.js b/front/src/utils/LogoutButton.js
similarity index 100%
rename from front/src/view/LogoutButton.js
rename to front/src/utils/LogoutButton.js
diff --git a/front/src/view/AdminPage/showToucan/ModalSuppression.js b/front/src/utils/ModalSuppression.js
similarity index 97%
rename from front/src/view/AdminPage/showToucan/ModalSuppression.js
rename to front/src/utils/ModalSuppression.js
index 95ae2b8..6a225cb 100644
--- a/front/src/view/AdminPage/showToucan/ModalSuppression.js
+++ b/front/src/utils/ModalSuppression.js
@@ -1,6 +1,6 @@
 import React, {Component} from 'react'
 import {Modal, Button, Image,Message} from 'semantic-ui-react'
-import env from '../../../.env'
+import env from '../.env'
 
 class ModalSupression extends Component {
     state = {error:''};
diff --git a/front/src/utils/yearSelector.js b/front/src/utils/yearSelector.js
index 368117e..11754b8 100644
--- a/front/src/utils/yearSelector.js
+++ b/front/src/utils/yearSelector.js
@@ -16,13 +16,16 @@ function SelectYear(props) {
 		});
 	}
 	return(
-		<Dropdown
-		selection
-		placeholder="value"
-		options = {years}
-		defaultValue = {props.beginYear}
-		onChange = {(_,dropdown) => props.updateFrame(dropdown.value)}
-		/>
+		<div style={props.style}>
+			<span style={{marginRight:'1em'}}>Année de parution :</span> 
+			<Dropdown
+			selection
+			placeholder="value"
+			options = {years}
+			defaultValue = {props.beginYear}
+			onChange = {(_,dropdown) => props.updateFrame(dropdown.value)}
+			/>
+		</div>
 	)
 }
 
diff --git a/front/src/view/AdminPage/AdminPage.js b/front/src/view/AdminPage/AdminPage.js
index 744bc65..87e4cfc 100644
--- a/front/src/view/AdminPage/AdminPage.js
+++ b/front/src/view/AdminPage/AdminPage.js
@@ -1,29 +1,18 @@
 import React, {Component} from 'react';
 import {Segment} from 'semantic-ui-react';
-import ToucanTable from './showToucan/ToucanTable';
+//import ToucanTable from './showToucan/ToucanTable';
 import FormToucan from './FormToucan';
-import LogoutButton from '../LogoutButton';
+//import LogoutButton from '../LogoutButton';
 
 
 class MainPage extends Component {
 
     render(){
         return (
-            <Segment.Group >
-            <Segment padded style={{margin:"3%"}}>
-            <div style={{textAlign:"right"}}>
-                <LogoutButton />
-            </div>
-            <div>
+            <Segment style={{margin:"3em",padding:"2em"}}>
                 <h2 style={{textAlign:"center"}}>Rajout de Toucan</h2>
                 <FormToucan />
-            </div>
             </Segment>
-            <Segment textAlign="center" padded style={{margin:"3%"}} >
-            <h2>Les Toucans</h2>
-                <ToucanTable style={{margin:"50px"}}/>
-            </Segment>
-            </Segment.Group>
         );
     }
 
diff --git a/front/src/view/AdminPage/showToucan/ToucanLine.js b/front/src/view/AdminPage/showToucan/ToucanLine.js
deleted file mode 100644
index 6e6d038..0000000
--- a/front/src/view/AdminPage/showToucan/ToucanLine.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import React, {Component} from 'react'
-import {Table, Image, Button} from 'semantic-ui-react'
-import ModalSuppression from './ModalSuppression'
-import env from '../../../.env'
-
-class ToucanLine extends Component {
-    constructor(props) {
-        super(props)
-        this.state = {isModalOpen: false}
-        this.closeModal = this.closeModal.bind(this)
-    }
-
-    closeModal() {
-        this.setState({ isModalOpen: false })
-    }
-
-    render(){
-        return (
-            <Table.Row>
-                <Table.Cell >
-                    <a href={`${env.backURL}/toucan/pdf/${this.props.toucan["_id"]}.pdf`}>
-                    <Image
-                    src={`${env.backURL}/toucan/img/${this.props.toucan["_id"]}`}
-                    size="small"
-                    />
-                    </a>
-                </Table.Cell>
-                <Table.Cell  >
-                    {this.props.toucan.title}
-                </Table.Cell>
-                <Table.Cell  >
-                    {(new Date(this.props.toucan.date).toLocaleDateString())}
-                </Table.Cell>
-                <Table.Cell style={{width:"fit-content"}}>
-                    <Button negative icon="cancel" onClick={() => this.setState({isModalOpen: true})}/>
-                    <ModalSuppression
-                    open={this.state.isModalOpen}
-                    toucanId={this.props.toucan["_id"]}
-                    closeModal={this.closeModal}
-                    />
-                </Table.Cell>
-            </Table.Row>
-        )
-    }
-}
-
-export default ToucanLine
\ No newline at end of file
diff --git a/front/src/view/AdminPage/showToucan/ToucanTable.js b/front/src/view/AdminPage/showToucan/ToucanTable.js
deleted file mode 100644
index 24ff85a..0000000
--- a/front/src/view/AdminPage/showToucan/ToucanTable.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import React, {Component} from 'react'
-import {Table} from 'semantic-ui-react'
-import ToucanLine from './ToucanLine'
-import env from '../../../.env'
-
-class ToucanTable extends Component{
-    constructor(){
-        super();
-        this.state = {
-            toucans: [],
-        }
-    }
-
-    componentDidMount(){
-        fetch(`${env.backURL}/toucan/toucans`)
-        .then(result => {
-            return result.json()
-        })
-        .then(toucans => {
-            this.setState({toucans})
-            })
-       .catch(err => console.log(err))
-    }
-
-    render() {
-        return(
-            <Table style={{margin:"auto"}} celled padded collapsing size="small" textAlign="center">
-            <Table.Header>
-              <Table.Row>
-                <Table.HeaderCell>Cover</Table.HeaderCell>
-                <Table.HeaderCell>Thème</Table.HeaderCell>
-                <Table.HeaderCell>Date</Table.HeaderCell>
-                <Table.HeaderCell>Supprimer</Table.HeaderCell>
-              </Table.Row>
-            </Table.Header>
-              {this.state.toucans.map(toucan => {
-              return <ToucanLine key={toucan["_id"]} toucan={toucan}/>
-              })}
-          </Table>
-        )
-    }
-}
-
-export default ToucanTable
\ No newline at end of file
diff --git a/front/src/view/AllToucanPage/AllToucanPage.js b/front/src/view/AllToucanPage/AllToucanPage.js
index 0fd0ba5..3f3de7f 100644
--- a/front/src/view/AllToucanPage/AllToucanPage.js
+++ b/front/src/view/AllToucanPage/AllToucanPage.js
@@ -41,26 +41,20 @@ class AllToucan extends Component {
     render(){
         return (
             <Segment style={{textAlign:"center", margin:"3em",padding:"2em"}} >
+
 				<SelectYear
+					style={{marginBottom:"2em"}}
 					beginYear={beginYear}
 					updateFrame = {this.updateFrame.bind(this)}
 				/>
-				{/* <Dropdown
-					selection
-					placeholder="value"
-					options = {years}
-					defaultValue = {beginYear}
-					onChange = {(_,props) => this.setState({
-						before : (new Date(props.value+1,7,31)).getTime(),
-						after : (new  Date(props.value,8,1)).getTime()
-					}, () => this.updateToucan())}
-				/> */}
 				<Card.Group centered >
 					{this.state.toucans.map( toucan => {
 						return <ToucanCard
 						image={`${env.backURL}/toucan/img/${toucan["_id"]}`}
 						link={`${env.backURL}/toucan/pdf/${toucan["_id"]}.pdf`}
 						header={toucan.title}
+						toucanId={toucan._id}
+						isAdmin={this.props.isAdmin}
 						date={(new Date(toucan.date).toLocaleDateString())}
 						key={toucan._id}
 						/>
diff --git a/front/src/view/AllToucanPage/ToucanCard.js b/front/src/view/AllToucanPage/ToucanCard.js
index d13d80e..a4422c3 100644
--- a/front/src/view/AllToucanPage/ToucanCard.js
+++ b/front/src/view/AllToucanPage/ToucanCard.js
@@ -1,18 +1,38 @@
-import React from 'react'
-import {Card, Image} from 'semantic-ui-react'
+import React,  {useState} from 'react'
+import {Card, Image, Button} from 'semantic-ui-react'
+import ModalSuppression from './../../utils//ModalSuppression'
 
 const ToucanCard = ({...props}) => {
+	const [isModalOpen, setIsModalOpen] = useState(false)
+	let supressModal,suppressButton = undefined
+
+	if (props.isAdmin){
+		supressModal = <ModalSuppression
+		open= {isModalOpen}
+		toucanId={props.toucanId}
+		closeModal={()=> {setIsModalOpen(!isModalOpen); console.log(props.toucanId)}} />
+
+		suppressButton = <Button
+		style={{position:"absolute",left:"5px",top:"5px"}}
+		negative
+		icon="cancel"
+		onClick={(e) => {e.preventDefault();  setIsModalOpen(!isModalOpen)}}/>
+	}
+
     return (
             <Card
-                href={props.link}
                 link
                 style={{margin:"1em"}}
             >
-                <Card.Content>
-                <Card.Header content={props.header}/>
+                <Card.Content href={props.link} >
+                <Card.Header>
+					{suppressButton}
+					{props.header}
+				</Card.Header>
                 <Card.Meta content={props.date} textAlign="right"/>
                 </Card.Content>
-                <Image src={props.image}/>
+                <Image href={props.link} src={props.image}/>
+				{supressModal}
             </Card>
     )
 }
diff --git a/front/src/view/PageHeader.js b/front/src/view/PageHeader.js
index 6e5c4d0..fdb525e 100644
--- a/front/src/view/PageHeader.js
+++ b/front/src/view/PageHeader.js
@@ -1,19 +1,23 @@
 import React from 'react';
 import {Image, Button} from 'semantic-ui-react'
+import LogoutButton from '../utils/LogoutButton'
 import {Link} from 'react-router-dom'
 import logo from '../image/logo.png'
 
 
 
-const PageHeader = () => {
+const PageHeader = (props) => {
     return (
         [
             // Si le format est celui d'un Pc
-            <div class="desktopItem" style={{textAlign:"center"}}>
+            <div class="desktopItem" style={{textAlign:"center"}}> {console.log(props.isLogged)}
                 <Image src={logo} alt="Logo" href="/" style={{ width:'40%'}} />
-                <Link to="/admin" style={{position:"absolute",top:'2em' ,right:"2em"}} >
-                    <Button icon="male" content="Espace admin"/>
-                </Link>
+				{props.isLogged ? <LogoutButton style={{position:"absolute",top:'2em' ,right:"2em"}}/>:
+					<Link to="/admin" style={{position:"absolute",top:'2em' ,right:"2em"}} >
+						<Button icon="male" content="Espace admin"/>
+					</Link> 
+
+				}
             </div>,
             // Si le format est celui d'un téléphone
             <div class="phoneItem" style={{textAlign:"center"}}>
-- 
GitLab