Site du proximo, utilisé pour gérer le stock.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.0dfbbb5b.chunk.js.map 92KB

1
  1. {"version":3,"sources":["js/Components/Header.js","js/Components/ArticleDetails.js","js/Components/Articles.js","js/Components/Navbar.js","js/Components/CreateCategory.js","js/Components/CreateArticle.js","js/Components/EditArticle.js","js/Components/Footer.js","js/Components/SearchBar.js","js/Components/AppLoader.js","js/Components/Categories.js","js/Components/EditCategory.js","js/Components/Sort.js","js/Views/Stock.js","js/Components/Button.js","js/Components/Connection.js","js/Views/Home.js","js/Components/AppRouter.js","index.js"],"names":["Header","props","state","className","this","title","React","Component","ArticleDetails","handleDesc","setState","currentArticle","id","handlePhoto","handleRedCross","redcrossPressed","handleNoDelete","deleteArticle","axios","delete","then","res","console","log","data","redirect","catch","error","response","updateArticle","put","name","desc","quantity","price","code","category","plusQuantity","minusQuantity","to","onMouseEnter","onMouseLeave","onClick","editArticle","icon","editSolid","style","color","fontSize","rotate","plusIcon","transform","handleCategories","alt","src","img","minusIcon","cursor","Articles","mouseEnter","articles","map","article","editionArticle","key","image","description","Navbar","handleDisplay","mouseOn","handleNormal","handleNewArticle","handleNewCategory","CreateCategory","handleNameChange","event","target","value","handleIconChange","files","handleSubmit","preventDefault","bodyFormData","FormData","set","post","errors","reload","window","location","handleCloseAbove","status","method","onSubmit","htmlFor","onChange","type","Tooltip","TransitionComponent","Zoom","aria-label","interactive","CreateArticle","handleCategoryChange","category_id","handleDescriptionChange","handleQuantityChange","handlePriceChange","handleCodeChange","handleImageChange","onNewCategory","handleCloseNewCategory","alreadyDone","get","categories","categoryName","defaultValue","categorie","rows","min","step","EditArticle","articleUpdated","formData","Footer","handleDisplayMeans","onMeans","date","Date","href","getFullYear","SearchBar","placeholder","AppLoader","height","width","timeout","Categories","getCategories","handleSwitchCategory","redCrossPressed","categoryFocused","handleDeleteCategory","handleDisplayConfirmation","currentCategory","handleEditCategory","EditCategory","categoryUpdated","Sort","handleChangeSortType","Stock","getArticles","sortType","onNewArticle","handleCloseNewArticle","handleArticleEdition","onEditArticle","handleCloseEditArticle","handleSearchChange","search","searchArticles","onCategories","handleCloseCategories","categoryToModify","onEditCategory","handleCloseEditCategory","e","imageFile","sessionStorage","getItem","keepNewArticle","Button","handleConnection","label","Connection","handleIdentifyerChange","identifyer","handlePasswordChange","password","setItem","api_token","Home","onConnection","handleCloseConnection","AppRouter","exact","path","component","App","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.0dfbbb5b.chunk.js","sourcesContent":["import React from 'react';\r\nimport '../../css/Components/header.css'\r\n\r\nexport default class Header extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state={\r\n\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"header\">\r\n {this.props.title}\r\n </div>\r\n );\r\n }\r\n }","import React from 'react'\r\nimport { Icon} from '@iconify/react';\r\nimport minusIcon from '@iconify/icons-fa-solid/minus';\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport editSolid from '@iconify/icons-clarity/edit-solid';\r\nimport '../../css/Components/articledetails.css'\r\nimport axios from 'axios'\r\nimport { Redirect } from 'react-router';\r\n\r\nclass ArticleDetails extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n currentArticle:'',\r\n redirect:false,\r\n redcrossPressed:false,\r\n quantity:this.props.quantity\r\n }\r\n \r\n }\r\n\r\n\r\n handleDesc = () => {\r\n this.setState({currentArticle:this.props.id})\r\n }\r\n\r\n handlePhoto = () => {\r\n this.setState({currentArticle:''})\r\n }\r\n\r\n handleRedCross = () => {\r\n this.setState({redcrossPressed:true})\r\n }\r\n\r\n handleNoDelete = () => {\r\n this.setState({redcrossPressed:false})\r\n }\r\n\r\n deleteArticle = () => {\r\n axios.delete(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.id}`)\r\n .then(res => {\r\n console.log(res.data)\r\n this.setState({redirect:true})\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n updateArticle = () => {\r\n axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.id}`,\r\n {\r\n 'name':this.props.name,\r\n 'description':this.props.desc,\r\n 'quantity':this.state.quantity,\r\n 'price':this.props.price,\r\n 'code':this.props.code,\r\n 'category_id':this.props.category.id\r\n }\r\n )\r\n .then(res => {\r\n console.log(res.data)\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n plusQuantity = () => {\r\n this.setState({quantity:this.state.quantity+1},()=>{\r\n this.updateArticle();\r\n })\r\n }\r\n\r\n minusQuantity = () => {\r\n if(this.state.quantity > 0){\r\n this.setState({quantity:this.state.quantity-1},()=>{\r\n this.updateArticle();\r\n })\r\n }\r\n }\r\n\r\n\r\n\r\n render(){\r\n if (this.state.redirect) {\r\n return (<Redirect to='/stock'/>)\r\n }\r\n return(\r\n <div id=\"bulle\" onMouseEnter={this.handleDesc} onMouseLeave={this.handlePhoto}> \r\n {this.state.redcrossPressed ?\r\n <div id=\"confirmation\">\r\n <div id=\"confirmationTxt\">Tu veux vraiment supprimer cet article ?</div>\r\n <div id=\"choice\">\r\n <div id=\"yes\" onClick={this.deleteArticle}>Oui</div>\r\n <div id=\"no\" onClick={this.handleNoDelete}>Non</div>\r\n </div>\r\n </div> \r\n : \r\n <>\r\n <div id=\"imageordescblock\">\r\n {this.state.currentArticle === this.props.id ? \r\n <>\r\n <div id=\"icons\">\r\n <div id=\"bluepen\" onClick={() => this.props.editArticle(this.props)}>\r\n <Icon icon={editSolid} style={{color: '#ffffff', fontSize: '25px'}} rotate=\"270deg\" />\r\n </div>\r\n <div id=\"redcross\" onClick={this.handleRedCross}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '25px'}} />\r\n </div>\r\n </div>\r\n <div id=\"categoryDiv\">\r\n <img onClick={() => this.props.handleCategories(this.props.category)} id=\"categoryIcon\" alt=\"bonjour\" src={`https://etud.insa-toulouse.fr/~proximo/api_proximo/storage/app/public/icon/${this.props.category.icon}`}/>\r\n </div>\r\n <div id=\"descandprice\">\r\n <h1 id=\"desc\">{this.props.desc}</h1>\r\n <p id =\"price\">{this.props.price} €</p>\r\n </div>\r\n </>\r\n : <img id=\"image\" src={`https://etud.insa-toulouse.fr/~proximo/api_proximo/storage/app/public/img/${this.props.img}`} alt='bonjour'/>\r\n }\r\n </div>\r\n <h1 id=\"name\">{this.props.name}</h1>\r\n <div id=\"count\">\r\n <Icon onClick={this.minusQuantity} icon={minusIcon} style={{color: '#ffffff', fontSize: '18.558874130249023px',cursor:'pointer'}} />\r\n <div id=\"countNumber\">\r\n <p id=\"countNumberTxt\">{this.state.quantity}</p>\r\n </div>\r\n <Icon onClick={this.plusQuantity} icon={plusIcon} style={{color: '#ffffff', fontSize: '18.558874130249023px',cursor:'pointer'}} />\r\n </div>\r\n </> \r\n }\r\n </div>\r\n )\r\n }\r\n\r\n}\r\n\r\nexport default ArticleDetails\r\n","import React from 'react';\r\nimport '../../css/Components/articles.css'\r\nimport ArticleDetails from './ArticleDetails'\r\n\r\nclass Articles extends React.Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n mouseEnter:false\r\n }\r\n }\r\n\r\n\r\n \r\n\r\n\r\n \r\n render() {\r\n return (\r\n <div id=\"articleContainer\">\r\n <div id=\"articles\">\r\n {\r\n this.props.articles.map((article) => \r\n <ArticleDetails handleCategories={this.props.handleCategories} editArticle={this.props.editionArticle} key={article.id} id={article.id} name={article.name} img={article.image} desc={article.description} price={article.price} quantity={article.quantity} code={article.code} category={article.category}/> \r\n )}\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n\r\n export default Articles","import React from 'react'\r\nimport '../../css/Components/navbar.css';\r\n\r\n\r\nclass Navbar extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n mouseOn:false\r\n }\r\n }\r\n\r\n handleDisplay = () =>{\r\n this.setState({mouseOn:true})\r\n }\r\n\r\n handleNormal = () => {\r\n this.setState({mouseOn:false})\r\n }\r\n\r\n render(){\r\n return (\r\n <div id=\"navbar\">\r\n <div id=\"createedit\" onClick={this.handleDisplay} onMouseLeave={this.handleNormal}>\r\n {!this.state.mouseOn && <p>Créer</p>}\r\n {this.state.mouseOn && <div id=\"choice\"><p onClick={this.props.handleNewArticle}>Article</p><p>|</p><p onClick={this.props.handleNewCategory}>Catégorie</p></div>}\r\n </div>\r\n <div id=\"blank\">\r\n OK\r\n </div>\r\n <div id=\"update\">\r\n <p>Mettre à jour</p>\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default Navbar","import React from 'react';\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport { Icon} from '@iconify/react';\r\nimport '../../css/Components/createcategory.css';\r\nimport axios from 'axios';\r\nimport { Tooltip, Zoom } from '@material-ui/core';\r\n\r\nclass CreateCategory extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n name: '',\r\n icon: '',\r\n errors : []\r\n }\r\n }\r\n\r\n handleNameChange = event => {\r\n this.setState({name : event.target.value},() => {\r\n console.log(this.state.name)\r\n })\r\n }\r\n\r\n handleIconChange = event => {\r\n this.setState({icon : event.target.files[0]},() => {\r\n console.log(this.state.icon)\r\n })\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault()\r\n\r\n let bodyFormData = new FormData()\r\n bodyFormData.set('name',this.state.name)\r\n bodyFormData.set('icon',this.state.icon)\r\n axios.post('https://etud.insa-toulouse.fr/~proximo/v2/api/categories',bodyFormData)\r\n .then(res => {\r\n console.log(res)\r\n this.setState({errors : []})\r\n if (this.props.reload){\r\n window.location.reload()\r\n }\r\n this.props.handleCloseAbove()\r\n })\r\n .catch(error => {\r\n if(error.response.status === 401){\r\n this.setState({errors : error.response.data.errors})\r\n }\r\n console.log(error.response.data.errors)\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div id=\"transp\">\r\n <div id=\"formBody\">\r\n <div id=\"formHead\">\r\n <div id=\"formHeadTxt\">Nouvelle Catégorie</div>\r\n <div id=\"crossClose\" onClick={this.props.handleCloseAbove}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '3vw'}} />\r\n </div>\r\n </div>\r\n <div id=\"formMainContent\">\r\n <form method='POST' onSubmit={this.handleSubmit}>\r\n <div id=\"nameBlock\">\r\n <div id=\"nameBlockInput\">\r\n <label htmlFor='nameBox'>Nom</label>\r\n <input id=\"nameBox\" onChange={this.handleNameChange} type='text'/>\r\n </div>\r\n <div id=\"errorNameBlock\">\r\n <p id=\"errorName\">{!this.state.name && this.state.errors.name}</p>\r\n </div>\r\n </div>\r\n <div id=\"iconBlock\">\r\n <div id=\"iconBlockInput\">\r\n <Tooltip title=\"Télécharger la bonne icône surr www.flaticon.com en 512px et l'enregistrer dans le dossier Icônes\" TransitionComponent={Zoom} aria-label=\"Aller sur www.flaticon.com\" interactive>\r\n <label htmlFor=\"iconBox\" id=\"customIconBox\">Télécharger une Icône</label>\r\n </Tooltip>\r\n <input id=\"iconBox\" onChange={this.handleIconChange} type='file'/>\r\n </div>\r\n <div id=\"errorIconBlock\">\r\n {!this.state.icon.name ?\r\n <p id=\"errorIcon\">{this.state.errors.icon}</p>\r\n : <p id=\"iconName\">{this.state.icon.name}</p>}\r\n </div>\r\n </div>\r\n <button id=\"button\" type='submit'>Ajouter</button>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default CreateCategory;","import axios from 'axios'\r\nimport React from 'react'\r\nimport '../../css/Components/createarticle.css'\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport { Icon} from '@iconify/react';\r\nimport CreateCategory from './CreateCategory';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Zoom from '@material-ui/core/Zoom';\r\n\r\nclass CreateArticle extends React.Component {\r\n\r\n constructor(){\r\n super()\r\n this.state = {\r\n name: '',\r\n description:'',\r\n quantity : '',\r\n price : '',\r\n code : '',\r\n image: '',\r\n category_id:'',\r\n errors : [],\r\n categories : [],\r\n categoryName:'',\r\n onNewCategory:false,\r\n alreadyDone:false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/categories')\r\n .then(res => {\r\n this.setState({categories : res.data}, () => {\r\n console.log(this.state.categories)\r\n this.setState({categoryName:res.data[0].name})\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n handleNameChange = event => {\r\n this.setState({name : event.target.value},() => {\r\n console.log(this.state.name)\r\n })\r\n }\r\n handleCategoryChange = event => {\r\n this.setState({category_id : event.target.value},() => {\r\n console.log(this.state.category_id);\r\n })\r\n }\r\n handleDescriptionChange = event => {\r\n this.setState({description : event.target.value},() => {\r\n console.log(this.state.description)\r\n })\r\n }\r\n handleQuantityChange = event => {\r\n this.setState({quantity : event.target.value},() => {\r\n console.log(this.state.quantity)\r\n })\r\n }\r\n handlePriceChange = event => {\r\n this.setState({price : event.target.value},() => {\r\n console.log(this.state.price)\r\n })\r\n }\r\n handleCodeChange = event => {\r\n this.setState({code : event.target.value},() => {\r\n console.log(this.state.code)\r\n })\r\n }\r\n handleImageChange = event => {\r\n this.setState({image : event.target.files[0]},() => {\r\n console.log(this.state.image)\r\n })\r\n }\r\n handleSubmit = event => {\r\n event.preventDefault()\r\n\r\n let bodyFormData = new FormData()\r\n bodyFormData.set('name',this.state.name)\r\n bodyFormData.set('description',this.state.description)\r\n bodyFormData.set('quantity',this.state.quantity)\r\n bodyFormData.set('price',this.state.price)\r\n bodyFormData.set('code',this.state.code)\r\n bodyFormData.set('image',this.state.image)\r\n bodyFormData.set('category_id',this.state.category_id)\r\n axios.post('https://etud.insa-toulouse.fr/~proximo/v2/api/articles/store',bodyFormData)\r\n .then(res => {\r\n console.log(res)\r\n window.location.reload()\r\n this.props.handleCloseAbove();\r\n })\r\n .catch(error => {\r\n if(error.response.status === 401){\r\n this.setState({errors : error.response.data.errors})\r\n }\r\n console.log(error.response.data.errors)\r\n });\r\n }\r\n\r\n handleNewCategory = () => {\r\n this.setState({onNewCategory:true})\r\n }\r\n\r\n handleCloseNewCategory = () => {\r\n this.setState({onNewCategory:false})\r\n }\r\n\r\n reload = () => {\r\n if (!this.state.alreadyDone){\r\n axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/categories')\r\n .then(res => {\r\n this.setState({categories : res.data}, () => {\r\n console.log(this.state.categories)\r\n this.setState({categoryName:res.data[0].name})\r\n this.setState({alreadyDone:true})\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n }\r\n\r\n\r\n render(){\r\n if (this.state.onNewCategory){\r\n return <CreateCategory reload={false} handleCloseAbove={this.handleCloseNewCategory}/>\r\n } else {\r\n return(\r\n <div id=\"transp\">\r\n <div id=\"formBody\">\r\n <div id=\"formHead\">\r\n <div id=\"formHeadTxt\">Nouvel Article</div>\r\n <div id=\"crossClose\" onClick={this.props.handleCloseAbove}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '3vw'}} />\r\n </div>\r\n </div>\r\n <div id=\"formMainContent\">\r\n <form method='POST' onSubmit={this.handleSubmit}>\r\n <div id=\"nameandcatBox\">\r\n <div id=\"nameBlock\">\r\n <div id=\"nameBlockInput\">\r\n <label htmlFor='nameBox'>Nom</label>\r\n <input id=\"nameBox\" onChange={this.handleNameChange} type='text'/>\r\n </div>\r\n <div id=\"errorNameBlock\">\r\n <p id=\"errorName\">{!this.state.name && this.state.errors.name}</p>\r\n </div>\r\n </div>\r\n <div id=\"categoryBlock\">\r\n <div id=\"categoryAndAddBlock\">\r\n <div id=\"categoryBlockInput\">\r\n <label htmlFor='categoryBox'>Categorie</label>\r\n <select onClick={this.reload} id='categoryBox' onChange={this.handleCategoryChange} defaultValue={this.state.categoryName}>\r\n <option value=\"Aucune\">Aucune</option>\r\n {this.state.categories.map((categorie) => \r\n <option key={categorie.id} value={categorie.id}>{categorie.name}</option> \r\n )}\r\n </select>\r\n </div>\r\n {/* Affichage de l'icone correspondant à la catégorie\r\n <div id=\"littleIcon\">\r\n eslint-disable-next-line\r\n {this.state.categories.map((categorie)=>\r\n {if (this.state.category_id === categorie.id){\r\n return <img id=\"littleIconImg\" src={`https://etud.insa-toulouse.fr/~proximo/v2/storage/icon/${categorie.icon}`} alt='bonjour'/>\r\n }}\r\n )}\r\n </div> */}\r\n <div id=\"addCategoryBlock\">\r\n <Tooltip title=\"Ajouter une catégorie\" TransitionComponent={Zoom} aria-label=\"Ajouter une catégorie\">\r\n <div id=\"addCategoryBox\" onClick={this.handleNewCategory}>\r\n <Icon icon={plusIcon} style={{ color: '#ffffff', fontSize: '2vw'}} />\r\n </div>\r\n </Tooltip>\r\n </div>\r\n </div>\r\n <div id=\"errorCategoryBlock\">\r\n <p id=\"errorCategory\">{!this.state.category_id && this.state.errors.category_id}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"descriptionBlock\">\r\n <div id=\"descriptionBlockInput\">\r\n <label htmlFor='descriptionBox'>Description</label>\r\n <textarea rows=\"5\" id=\"descriptionBox\" onChange={this.handleDescriptionChange} type='textarea'/>\r\n </div>\r\n <div id=\"errorDescriptionBlock\">\r\n <p id=\"errorDescription\">{!this.state.description && this.state.errors.description}</p>\r\n </div>\r\n </div>\r\n <div id=\"quantandpriBox\">\r\n <div id=\"quantityBlock\">\r\n <div id=\"quantityBlockInput\">\r\n <label htmlFor='quantityBox'>Quantité</label>\r\n <input id=\"quantityBox\" onChange={this.handleQuantityChange} type='number' min='0' step='1'/>\r\n </div>\r\n <div id=\"errorQuantityBlock\">\r\n <p id=\"errorQuantity\">{!this.state.quantity && this.state.errors.quantity}</p>\r\n </div>\r\n </div>\r\n <div id=\"priceBlock\">\r\n <div id=\"priceBlockInput\">\r\n <label htmlFor='priceBox'>Prix</label>\r\n <input id=\"priceBox\" onChange={this.handlePriceChange} type='number' min='0' step='0.01'/>\r\n </div>\r\n <div id=\"errorPriceBlock\">\r\n <p id=\"errorPrice\">{!this.state.price && this.state.errors.price}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"codeBlock\">\r\n <div id=\"codeBlockInput\">\r\n <label htmlFor='codeBox'>Code</label>\r\n <input id='codeBox' onChange={this.handleCodeChange} type='text'/>\r\n </div>\r\n <div id=\"errorCodeBlock\">\r\n <p id=\"errorCode\">{!this.state.code && this.state.errors.code}</p> \r\n </div>\r\n </div>\r\n <div id=\"imageBlock\">\r\n <div id=\"imageBlockInput\"> \r\n <Tooltip style={{'text-align':'center'}} title=\"Télécharger la bonne image, si besoin, enelever le contour avec removebg.com et enregistrer la photo dans le dossier Images\" TransitionComponent={Zoom} aria-label=\"Aller sur www.flaticon.com\" interactive>\r\n <label htmlFor=\"imageBox\" id=\"customImageBox\">Télécharger une Image</label>\r\n </Tooltip>\r\n <input id=\"imageBox\" onChange={this.handleImageChange} type='file'/>\r\n </div>\r\n <div id=\"errorImageBlock\">\r\n {!this.state.image.name ?\r\n <p id=\"errorImage\">{this.state.errors.image}</p>\r\n : <p id=\"imageName\">{this.state.image.name}</p>}\r\n </div>\r\n </div>\r\n <button id=\"button\" type='submit'>Ajouter</button>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n }\r\n\r\n}\r\n\r\nexport default CreateArticle","import axios from 'axios'\r\nimport React from 'react'\r\nimport '../../css/Components/editarticle.css'\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport { Icon} from '@iconify/react';\r\nimport CreateCategory from './CreateCategory';\r\nimport { Tooltip, Zoom } from '@material-ui/core';\r\n\r\nclass EditArticle extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n name: this.props.article.name,\r\n description:this.props.article.desc,\r\n quantity : this.props.article.quantity,\r\n price : this.props.article.price,\r\n code : this.props.article.code,\r\n image: '',\r\n categories:[],\r\n category_id:this.props.article.category.id,\r\n categoryName:this.props.article.category.name,\r\n errors : [],\r\n onNewCategory:false,\r\n alreadyDone:false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/categories')\r\n .then(res => {\r\n this.setState({categories : res.data}, () => {\r\n console.log(this.state.categories)\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n handleCategoryChange = event => {\r\n this.setState({category_id : event.target.value},() => {\r\n console.log(this.state.category_id);\r\n })\r\n }\r\n\r\n handleNameChange = event => {\r\n\r\n this.setState({name : event.target.value},() => {\r\n console.log(this.state.name)\r\n })\r\n }\r\n handleDescriptionChange = event => {\r\n this.setState({description : event.target.value},() => {\r\n console.log(this.state.description)\r\n })\r\n }\r\n handleQuantityChange = event => {\r\n this.setState({quantity : event.target.value},() => {\r\n console.log(this.state.quantity)\r\n })\r\n }\r\n handlePriceChange = event => {\r\n this.setState({price : event.target.value},() => {\r\n console.log(this.state.price)\r\n })\r\n }\r\n handleCodeChange = event => {\r\n this.setState({code : event.target.value},() => {\r\n console.log(this.state.code)\r\n })\r\n }\r\n handleImageChange = event => {\r\n console.log('ok');\r\n this.setState({image : event.target.files[0]},() => {\r\n console.log(this.state.image)\r\n })\r\n }\r\n handleSubmit = event => {\r\n event.preventDefault()\r\n \r\n \r\n let articleUpdated = {}\r\n articleUpdated.name = this.state.name;\r\n articleUpdated.description = this.state.description;\r\n articleUpdated.quantity = this.state.quantity;\r\n articleUpdated.price = this.state.price;\r\n articleUpdated.code = this.state.code;\r\n articleUpdated.category_id = this.state.category_id;\r\n let formData = new FormData();\r\n if (this.state.image) {\r\n formData.set('image',this.state.image)\r\n axios.post(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.article.id}`,formData)\r\n .then(res => {\r\n console.log(res)\r\n this.setState({errors : []})\r\n })\r\n .catch(error => {\r\n \r\n if(error.response.status === 401){\r\n this.setState({errors : error.response.data.errors})\r\n }\r\n \r\n });\r\n }\r\n\r\n axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.article.id}`,articleUpdated)\r\n .then(res => {\r\n console.log(res)\r\n this.setState({errors : []})\r\n window.location.reload()\r\n this.props.handleCloseAbove();\r\n })\r\n .catch(error => {\r\n console.log(error)\r\n if(error.response.status === 401){\r\n this.setState({errors : error.response.data.errors})\r\n }\r\n });\r\n }\r\n\r\n reload = () => {\r\n console.log(\"reload\");\r\n if (!this.state.alreadyDone ){\r\n axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/categories')\r\n .then(res => {\r\n this.setState({categories : res.data}, () => {\r\n console.log(this.state.categories)\r\n this.setState({alreadyDone:true})\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n }\r\n\r\n handleNewCategory = () => {\r\n this.setState({onNewCategory:true})\r\n }\r\n\r\n handleCloseNewCategory = () => {\r\n this.setState({onNewCategory:false})\r\n }\r\n\r\n\r\n render(){\r\n console.log(this.props.article);\r\n console.log(this.state);\r\n if (this.state.onNewCategory){\r\n return <CreateCategory reload={false} handleCloseAbove={this.handleCloseNewCategory}/>\r\n } else {\r\n return(\r\n <div id=\"transp\">\r\n <div id=\"formBody\">\r\n <div id=\"formHead\">\r\n <div id=\"formHeadTxt\">Editer Article</div>\r\n <div id=\"crossClose\" onClick={this.props.handleCloseAbove}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '3vw'}} />\r\n </div>\r\n </div>\r\n <div id=\"formMainContent\">\r\n <form method='POST' onSubmit={this.handleSubmit}>\r\n <div id=\"nameandcatBox\">\r\n <div id=\"nameBlock\">\r\n <div id=\"nameBlockInput\">\r\n <label htmlFor='nameBox'>Nom</label>\r\n <input id=\"nameBox\" onChange={this.handleNameChange} type='text' value={this.state.name}/>\r\n </div>\r\n <div id=\"errorNameBlock\">\r\n <p id=\"errorName\">{!this.state.name && this.state.errors.name}</p>\r\n </div>\r\n </div>\r\n <div id=\"categoryBlock\" >\r\n <div id=\"categoryAndAddBlock\">\r\n <div id=\"categoryBlockInput\">\r\n <label htmlFor='categoryBox'>Categorie</label>\r\n <select onClick={this.reload} id='categoryBox' onChange={this.handleCategoryChange}>\r\n <option value={this.state.categoryName}>{this.state.categoryName}</option>\r\n {this.state.categories.map((categorie) => \r\n {if (this.state.categoryName !== categorie.name){\r\n return(<option key={categorie.id} value={categorie.id}>{categorie.name}</option>) \r\n }else{return(null)}}\r\n )}\r\n </select>\r\n </div>\r\n <div id=\"addCategoryBlock\">\r\n <Tooltip title=\"Ajouter une catégorie\" TransitionComponent={Zoom} aria-label=\"Ajouter une catégorie\">\r\n <div id=\"addCategoryBox\" onClick={this.handleNewCategory}>\r\n <Icon icon={plusIcon} style={{ color: '#ffffff', fontSize: '2vw'}} />\r\n </div>\r\n </Tooltip>\r\n </div>\r\n </div>\r\n <div id=\"errorCategoryBlock\">\r\n <p id=\"errorCategory\">{!this.state.category_id && this.state.errors.category_id}</p>\r\n </div> \r\n </div> \r\n </div>\r\n <div id=\"descriptionBlock\">\r\n <div id=\"descriptionBlockInput\">\r\n <label htmlFor='descriptionBox'>Description</label>\r\n <textarea rows=\"5\" id=\"descriptionBox\" onChange={this.handleDescriptionChange} value={this.state.description}/>\r\n </div>\r\n <div id=\"errorDescriptionBlock\">\r\n <p id=\"errorDescription\">{!this.state.description && this.state.errors.description}</p>\r\n </div>\r\n </div>\r\n <div id=\"quantandpriBox\">\r\n <div id=\"quantityBlock\">\r\n <div id=\"quantityBlockInput\">\r\n <label htmlFor='quantityBox'>Quantité</label>\r\n <input id=\"quantityBox\" onChange={this.handleQuantityChange} type='number' min='0' step='1' value={this.state.quantity}/>\r\n </div>\r\n <div id=\"errorQuantityBlock\">\r\n <p id=\"errorQuantity\">{!this.state.quantity && this.state.errors.quantity}</p>\r\n </div>\r\n </div>\r\n <div id=\"priceBlock\">\r\n <div id=\"priceBlockInput\">\r\n <label htmlFor='priceBox'>Prix</label>\r\n <input id=\"priceBox\" onChange={this.handlePriceChange} type='number' min='0' step='0.01' value={this.state.price}/>\r\n </div>\r\n <div id=\"errorPriceBlock\">\r\n <p id=\"errorPrice\">{!this.state.price && this.state.errors.price}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"codeBlock\">\r\n <div id=\"codeBlockInput\">\r\n <label htmlFor='codeBox'>Code</label>\r\n <input id=\"codeBox\" onChange={this.handleCodeChange} type='text' value={this.state.code}/>\r\n </div>\r\n <div id=\"errorCodeBlock\">\r\n <p id=\"errorCode\">{!this.state.code && this.state.errors.code}</p>\r\n </div>\r\n </div>\r\n <div id=\"imageBlock\">\r\n <div id=\"imageBlockInput\">\r\n <Tooltip title=\"Télécharger la bonne image, si besoin, enelever le contour avec removebg.com et enregistrer la photo dans le dossier Images\" TransitionComponent={Zoom} aria-label=\"Aller sur www.flaticon.com\" interactive>\r\n <label htmlFor=\"imageBox\" id=\"customImageBox\">Télécharger une Image</label>\r\n </Tooltip>\r\n <input id=\"imageBox\" onChange={this.handleImageChange} type='file'/>\r\n </div>\r\n <div id=\"errorImageBlock\">\r\n {!this.state.image ?\r\n <p id=\"errorImage\">{this.state.errors.image}</p>\r\n : <p id=\"imageName\">{this.state.image.name}</p>}\r\n {!this.state.image &&\r\n <p id=\"imageName\">{this.props.article.img}</p>\r\n }\r\n </div>\r\n </div>\r\n <button id=\"button\" type='submit'>Modifier</button>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n }\r\n\r\n}\r\n\r\nexport default EditArticle","import React from 'react';\r\nimport '../../css/Components/footer.css'\r\n\r\nclass Footer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n onMeans:false\r\n }\r\n }\r\n\r\n handleDisplayMeans = () => {\r\n this.setState({onMeans:true})\r\n }\r\n \r\n handleNormal = () => {\r\n this.setState({onMeans:false})\r\n }\r\n\r\n render() {\r\n const date = new Date();\r\n return (\r\n <div className=\"footer\">\r\n <div id=\"contactAndMeans\">\r\n {this.state.onMeans ?\r\n <div id=\"means\" onMouseLeave={this.handleNormal}>\r\n {/* eslint-disable-next-line */}\r\n <a href=\"https://m.me/100008584754501\" target=\"_blank\"><img id=\"mess\" src='img\\logo_messenger.png' alt='bonjour'/></a>\r\n {/* eslint-disable-next-line */}\r\n <a href=\"https://mail.google.com/mail/?view=cm&fs=1&to=baptiste1296@gmail.com&su=Proximo\" target=\"_blank\"><img id=\"gmail\" src='img\\logo_gmail.png' alt='bonjour'/></a>\r\n </div>\r\n : <div onClick={this.handleDisplayMeans} id=\"contact\">Contacter le développeur</div>\r\n }\r\n </div>\r\n <div id=\"copyright\">Copyright © {date.getFullYear()} Baptiste MARTY. Tous droits réservés</div>\r\n <div id=\"proxiBlock\">\r\n <div id=\"proxiLogoBlock\">\r\n <img id=\"proxiLogo\" src='img\\logo_proximo.png' alt=\"bonjour\"/> \r\n </div>\r\n <div id=\"proxiTxt\">\r\n Le Proxigang\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\n\r\nexport default Footer;","import React from 'react';\r\nimport '../../css/Components/searchbar.css';\r\n\r\nclass SearchBar extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state ={\r\n\r\n }\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n <div>\r\n <form method=\"POST\" onSubmit={this.props.onSubmit}>\r\n <input onChange={this.props.onChange} id=\"searchInput\" type='search' placeholder='Rechercher'/>\r\n </form>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default SearchBar;","import React from 'react';\r\nimport \"react-loader-spinner/dist/loader/css/react-spinner-loader.css\"\r\nimport Loader from 'react-loader-spinner'\r\n\r\nclass AppLoader extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state={\r\n \r\n }\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n <div>\r\n <Loader\r\n type=\"RevolvingDot\"\r\n color=\"white\"\r\n height={100}\r\n width={100}\r\n timeout={5000} //3 secs\r\n \r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default AppLoader;","import Icon from '@iconify/react';\r\nimport React, { Component } from 'react';\r\nimport '../../css/Components/categories.css'\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport editSolid from '@iconify/icons-clarity/edit-solid';\r\nimport axios from 'axios';\r\nimport AppLoader from './AppLoader';\r\n\r\nclass Categories extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state={\r\n categories:[],\r\n categoryFocused:this.props.currentCategory,\r\n redCrossPressed:false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.getCategories()\r\n }\r\n\r\n getCategories = () => {\r\n axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/categories')\r\n .then(res => {\r\n this.setState({categories : res.data}, () => {\r\n console.log(this.state.categories)\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n handleSwitchCategory = category => {\r\n if (!this.state.redCrossPressed){\r\n this.setState({categoryFocused:category})\r\n }\r\n }\r\n\r\n handleDeleteCategory = () => {\r\n axios.delete(`https://etud.insa-toulouse.fr/~proximo/v2/api/categories/${this.state.categoryFocused.id}`)\r\n .then(res => {\r\n this.getCategories()\r\n this.setState({categoryFocused:this.state.categories[0]})\r\n this.handleNoDelete()\r\n console.log(res.data)\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n handleDisplayConfirmation = () => {\r\n this.setState({redCrossPressed:true})\r\n }\r\n\r\n handleNoDelete = () => {\r\n this.setState({redCrossPressed:false})\r\n }\r\n\r\n render() {\r\n return (\r\n <div id=\"transp\">\r\n <div id=\"formBody\">\r\n <div id=\"formHead\">\r\n <div id=\"formHeadTxt\">Catégories</div>\r\n <div id=\"crossClose\" onClick={this.props.handleCloseAbove}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '3vw'}} />\r\n </div>\r\n </div>\r\n <div id=\"mainContent\">\r\n {this.state.redCrossPressed ?\r\n <div id=\"confirmationBlock\">\r\n <div id=\"confirmationBlockTxt\">Tu veux vraiment supprimer cet article ?</div>\r\n <div id=\"choiceBlock\">\r\n <div id=\"yesBlock\" onClick={this.handleDeleteCategory}>Oui</div>\r\n <div id=\"noBlock\" onClick={this.handleNoDelete}>Non</div>\r\n </div>\r\n </div> \r\n :\r\n <>\r\n <div id=\"categoryFocused\">\r\n <div id=\"bluePenBlock\">\r\n <div onClick={() => this.props.handleEditCategory(this.state.categoryFocused)} id=\"bluePen\">\r\n <Icon icon={editSolid} style={{color: '#ffffff', fontSize: '2vw'}} rotate=\"270deg\" />\r\n </div>\r\n </div>\r\n <div id=\"catBigIconBlock\">\r\n <img id=\"catBigIcon\" src={`https://etud.insa-toulouse.fr/~proximo/v2/storage/icon/${this.state.categoryFocused.icon}`} alt=\"bonjour\"/>\r\n </div>\r\n <div id=\"redCrossBlock\">\r\n <div onClick={this.handleDisplayConfirmation} id=\"redCross\">\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)',color: '#ffffff', fontSize: '2vw'}}/>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"currentCategoryName\">\r\n {this.state.categoryFocused.name}\r\n </div>\r\n </>}\r\n \r\n <div id=\"categoryList\">\r\n {this.state.categories && this.state.categories[0] ?\r\n this.state.categories.map((category)=>\r\n {if (category.id !== this.state.categoryFocused.id){\r\n return(<div onClick={() => this.handleSwitchCategory(category)} key={category.id} id=\"categoryItem\">\r\n <div id=\"categoryItemIcon\">\r\n <img id=\"categoryItemIconImg\" src={`https://etud.insa-toulouse.fr/~proximo/v2/storage/icon/${category.icon}`} alt='bonjour'/>\r\n </div>\r\n <div id=\"categoryItemName\">\r\n {category.name}\r\n </div>\r\n </div>)\r\n } else{\r\n return(null)\r\n }}\r\n )\r\n : <AppLoader/>}\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n\r\nexport default Categories;","import React from 'react';\r\nimport Icon from '@iconify/react';\r\nimport '../../css/Components/editcategory.css'\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport { Tooltip, Zoom } from '@material-ui/core';\r\nimport axios from 'axios';\r\n\r\nclass EditCategory extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state={\r\n name: this.props.category.name,\r\n icon: '',\r\n errors : []\r\n }\r\n }\r\n\r\n handleNameChange = event => {\r\n this.setState({name : event.target.value},() => {\r\n console.log(this.state.name)\r\n })\r\n }\r\n\r\n handleIconChange = event => {\r\n this.setState({icon : event.target.files[0]},() => {\r\n console.log(this.state.icon)\r\n })\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault()\r\n\r\n let formData = new FormData();\r\n if (this.state.icon) {\r\n formData.set('icon',this.state.icon)\r\n axios.post(`https://etud.insa-toulouse.fr/~proximo/v2/api/categories/${this.props.category.id}`,formData)\r\n .then(res => {\r\n console.log(res)\r\n this.setState({errors : []})\r\n })\r\n .catch(error => {\r\n if(error.response.status === 401){\r\n this.setState({errors : error.response.data.errors})\r\n }\r\n console.log(error.response.data.errors)\r\n });\r\n }\r\n\r\n let categoryUpdated = {}\r\n categoryUpdated.name = this.state.name;\r\n axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/categories/${this.props.category.id}`,categoryUpdated)\r\n .then(res => {\r\n console.log(res)\r\n this.setState({errors : []})\r\n window.location.reload()\r\n this.props.handleCloseAbove()\r\n })\r\n .catch(error => {\r\n if(error.response.status === 401){\r\n this.setState({errors : error.response.data.errors})\r\n }\r\n console.log(error.response.data.errors)\r\n });\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n <div id=\"transp\">\r\n <div id=\"formBody\">\r\n <div id=\"formHead\">\r\n <div id=\"formHeadTxt\">Editer Catégorie</div>\r\n <div id=\"crossClose\" onClick={this.props.handleCloseAbove}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '3vw'}} />\r\n </div>\r\n </div>\r\n <div id=\"formMainContent\">\r\n <form method='POST' onSubmit={this.handleSubmit}>\r\n <div id=\"nameBlock\">\r\n <div id=\"nameBlockInput\">\r\n <label htmlFor='nameBox'>Nom</label>\r\n <input id=\"nameBox\" onChange={this.handleNameChange} type='text' value={this.state.name}/>\r\n </div>\r\n <div id=\"errorNameBlock\">\r\n <p id=\"errorName\">{!this.state.name && this.state.errors.name}</p>\r\n </div> \r\n </div>\r\n <div id=\"iconBlock\">\r\n <div id=\"iconBlockInput\">\r\n <Tooltip title=\"Télécharger la bonne icône surr www.flaticon.com en 512px et l'enregistrer dans le dossier Icônes\" TransitionComponent={Zoom} aria-label=\"Aller sur www.flaticon.com\" interactive>\r\n <label htmlFor=\"iconBox\" id=\"customIconBox\">Télécharger une Icône</label>\r\n </Tooltip>\r\n <input id=\"iconBox\" onChange={this.handleIconChange} type='file'/>\r\n </div>\r\n <div id=\"errorIconBlock\">\r\n {!this.state.icon ?\r\n <p id=\"errorIcon\">{this.state.errors.icon}</p>\r\n : <p id=\"iconName\">{this.state.icon.name}</p>}\r\n {!this.state.icon &&\r\n <p id=\"iconName\">{this.props.category.icon}</p>\r\n }\r\n </div> \r\n </div>\r\n <button id=\"button\" type='submit'>Modifier</button>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default EditCategory;","import React, { Component } from 'react';\r\nimport '../../css/Components/sort.css'\r\n\r\nclass Sort extends Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div id=\"sortBox\">\r\n <div id=\"sortTxt\">\r\n Trier par \r\n </div>\r\n <div id=\"selectBlock\">\r\n <div id=\"selectBox\">\r\n <select id=\"sortSelect\" onChange={this.props.handleChangeSortType}>\r\n <option className=\"optionSort\" value=\"Ordre Alphabétique\">Ordre Alphabétique</option>\r\n <option className=\"optionSort\" value=\"Catégorie\">Catégorie</option>\r\n <option className=\"optionSort\" value=\"Quantité\">Quantité</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default Sort;","import React from 'react';\r\nimport '../../css/Views/stock.css';\r\nimport Header from '../Components/Header';\r\nimport Articles from '../Components/Articles';\r\nimport Navbar from '../Components/Navbar';\r\nimport CreateArticle from '../Components/CreateArticle';\r\nimport 'react-perfect-scrollbar/dist/css/styles.css';\r\nimport EditArticle from '../Components/EditArticle';\r\nimport CreateCategory from '../Components/CreateCategory';\r\nimport Footer from '../Components/Footer';\r\nimport SearchBar from '../Components/SearchBar';\r\nimport axios from 'axios';\r\nimport AppLoader from '../Components/AppLoader';\r\nimport Categories from '../Components/Categories';\r\nimport EditCategory from '../Components/EditCategory';\r\nimport Sort from '../Components/Sort';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport default class Stock extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n onNewArticle:false,\r\n onEditArticle:false,\r\n onNewCategory:false,\r\n onCategories:false,\r\n onEditCategory:false,\r\n article:{},\r\n imageFile:{},\r\n search:'',\r\n articles:[],\r\n categoryToModify:'',\r\n sortType:''\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.getArticles(\"name\")\r\n}\r\n\r\n getArticles = sortType => {\r\n let bodyFormData = new FormData();\r\n bodyFormData.set('sortType', sortType)\r\n axios.post('https://etud.insa-toulouse.fr/~proximo/v2/api/articles/sort',bodyFormData)\r\n .then(res => {\r\n this.setState({articles : res.data}, () => {\r\n console.log(this.state.articles)\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n handleNewArticle = () => {\r\n this.setState({onNewArticle:true},()=>{\r\n console.log(this.state.onNewArticle)\r\n })\r\n }\r\n\r\n handleCloseNewArticle = () => {\r\n this.setState({onNewArticle:false})\r\n }\r\n\r\n handleArticleEdition = (article) => {\r\n this.setState({article:article})\r\n this.setState({onEditArticle:true});\r\n }\r\n\r\n handleCloseEditArticle = () => {\r\n this.setState({onEditArticle:false})\r\n }\r\n\r\n handleNewCategory = () => {\r\n this.setState({onNewCategory:true})\r\n }\r\n\r\n handleCloseNewCategory = () => {\r\n this.setState({onNewCategory:false})\r\n }\r\n\r\n handleSearchChange = event => {\r\n this.setState({search : event.target.value},()=>\r\n {\r\n console.log(this.state.search);\r\n this.searchArticles();\r\n })\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault()\r\n this.searchArticles();\r\n\r\n }\r\n\r\n searchArticles = () => {\r\n let bodyFormData = new FormData()\r\n bodyFormData.set('search',this.state.search)\r\n axios.post('https://etud.insa-toulouse.fr/~proximo/v2/api/articles',bodyFormData)\r\n .then(res => {\r\n this.setState({articles : res.data}, () => {\r\n console.log(this.state)\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.response)\r\n })\r\n }\r\n\r\n handleCategories = category => {\r\n this.setState({currentCategory:category})\r\n this.setState({onCategories:true})\r\n }\r\n\r\n handleCloseCategories = () => {\r\n this.setState({onCategories:false})\r\n }\r\n\r\n handleEditCategory = category => {\r\n this.handleCloseCategories()\r\n this.setState({categoryToModify:category})\r\n this.setState({onEditCategory:true})\r\n }\r\n\r\n handleCloseEditCategory = () => {\r\n this.setState({onEditCategory:false})\r\n }\r\n\r\n handleChangeSortType = e => {\r\n this.setState({sortType:e.target.value},()=>{\r\n if (this.state.sortType === \"Ordre Alphabétique\"){\r\n this.getArticles(\"name\")\r\n } else if(this.state.sortType === \"Catégorie\"){\r\n this.getArticles(\"category_id\")\r\n } else if(this.state.sortType === \"Quantité\"){\r\n this.getArticles(\"quantity\")\r\n } \r\n\r\n })\r\n }\r\n\r\n\r\n render() {\r\n if (!sessionStorage.getItem('token')){\r\n return (<div id=\"errorRouteBlock\"><div id=\"errorRouteTitle\">ERREUR </div><br/><div id=\"errorRouteTxt\">Vous n'êtes pas connecté</div><br/><Link id=\"link\" to='/'>Retourner à l'Accueil</Link></div>)\r\n } else {\r\n return (\r\n <div id=\"stock\">\r\n <Header title='Le Stock'/>\r\n <Navbar handleNewArticle={this.handleNewArticle} handleNewCategory={this.handleNewCategory}/>\r\n {this.state.onNewArticle ?\r\n <CreateArticle keepNewArticle={this.handleNewArticle} handleCloseAbove={this.handleCloseNewArticle}/>\r\n : null}\r\n <div id=\"searchBarBlock\">\r\n <SearchBar onSubmit={this.handleSubmit} onChange={this.handleSearchChange}/>\r\n </div>\r\n <div id=\"sortBlock\">\r\n <Sort handleChangeSortType={this.handleChangeSortType}/>\r\n </div>\r\n <div id=\"articleBlock\">\r\n {this.state.articles && this.state.articles[0]? \r\n <Articles handleCategories={this.handleCategories} articles={this.state.articles} editionArticle={this.handleArticleEdition}/>\r\n : <AppLoader/>\r\n }\r\n </div>\r\n {this.state.onEditArticle ?\r\n <EditArticle handleCloseAbove={this.handleCloseEditArticle} article={this.state.article}/>\r\n : null}\r\n {this.state.onNewCategory ?\r\n <CreateCategory reload={true} handleCloseAbove={this.handleCloseNewCategory}/>\r\n : null }\r\n {this.state.onCategories ?\r\n <Categories handleEditCategory={this.handleEditCategory} currentCategory={this.state.currentCategory} handleCloseAbove={this.handleCloseCategories}/>\r\n : null}\r\n {this.state.onEditCategory ?\r\n <EditCategory category={this.state.categoryToModify} handleCloseAbove={this.handleCloseEditCategory}/>\r\n : null}\r\n <Footer/>\r\n </div>\r\n )}\r\n }\r\n }","import React from 'react';\r\nimport '../../css/Components/button.css';\r\n\r\nexport default class Button extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n \r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"button\" onClick={this.props.handleConnection}>\r\n <p className=\"buttonTxt\">{this.props.label}</p>\r\n </div>\r\n );\r\n }\r\n }","import React, { Component } from 'react';\r\nimport Icon from '@iconify/react';\r\nimport plusIcon from '@iconify/icons-fa-solid/plus';\r\nimport '../../css/Components/connection.css'\r\nimport axios from 'axios';\r\nimport { Redirect } from 'react-router';\r\n\r\nclass Connection extends Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state={\r\n identifyer:'',\r\n password:'',\r\n redirect:false,\r\n errors:[]\r\n }\r\n }\r\n\r\n handleIdentifyerChange = event => {\r\n this.setState({identifyer : event.target.value})\r\n }\r\n\r\n handlePasswordChange = event => {\r\n this.setState({password : event.target.value})\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault()\r\n console.log(this.state.password);\r\n\r\n let bodyFormData = new FormData();\r\n bodyFormData.set('identifyer',this.state.identifyer);\r\n bodyFormData.set('password',this.state.password)\r\n\r\n axios.post('https://etud.insa-toulouse.fr/~proximo/v2/api/login',bodyFormData)\r\n .then(res => {\r\n sessionStorage.setItem('token',res.data.api_token)\r\n this.setState({redirect:true})\r\n console.log(res.data.api_token);\r\n })\r\n .catch(error => {\r\n if(error.response.status === 401){\r\n this.setState({errors:error.response.data.errors})\r\n } \r\n console.log(error.response);\r\n })\r\n }\r\n\r\n render() {\r\n if (this.state.redirect){\r\n return (<Redirect to=\"/stock\"/>)\r\n }\r\n return (\r\n <div id=\"transp\">\r\n <div id=\"formBody\">\r\n <div id=\"formHead\">\r\n <div id=\"formHeadTxt\">Connexion</div>\r\n <div id=\"crossClose\" onClick={this.props.handleCloseAbove}>\r\n <Icon icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '3vw'}} />\r\n </div>\r\n </div>\r\n <div id=\"formMainContent\">\r\n <form method='POST' onSubmit={this.handleSubmit}>\r\n <div id=\"identifyerBlock\">\r\n <div id=\"identifyerBlockInput\">\r\n <label htmlFor=\"identifyerBox\">Identifiant</label>\r\n <input id=\"identifyerBox\" onChange={this.handleIdentifyerChange} type=\"text\"/>\r\n </div>\r\n <div id=\"errorIdentifyerBlock\">\r\n <p id=\"errorIdentifyer\">{this.state.errors.identifyer}</p>\r\n </div>\r\n </div>\r\n <div id=\"passwordBlock\">\r\n <div id=\"passwordBlockInput\">\r\n <label htmlFor=\"passwordBox\">Mot de Passe</label>\r\n <input id=\"passwordBox\" onChange={this.handlePasswordChange} type=\"password\"/>\r\n </div>\r\n <div id=\"errorPasswordBlock\">\r\n {this.state.errors === 'bad_pwd'? \r\n <p id=\"errorPassword\">Mot de passe incorrect</p>\r\n :\r\n <p id=\"errorPassword\">{this.state.errors.password}</p>}\r\n </div>\r\n </div>\r\n <button id=\"button\" type='submit'>Se connecter</button>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default Connection;","import React from 'react';\r\nimport '../../css/Views/home.css';\r\nimport Header from '../Components/Header';\r\nimport Button from '../Components/Button';\r\nimport Connection from '../Components/Connection';\r\nimport Footer from '../Components/Footer';\r\n\r\nclass Home extends React.Component {\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n onConnection:false\r\n }\r\n }\r\n\r\n // Gère l'affichage de l'interface de connexion\r\n handleConnection = () => {\r\n this.setState({onConnection:true})\r\n }\r\n\r\n // Gère la femeture de l'interface de connexion\r\n handleCloseConnection = () => {\r\n this.setState({onConnection:false})\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"home\">\r\n {/* Affiche par dessus la page d'accueil une interface de connexion */}\r\n {this.state.onConnection &&\r\n /* Appel du composant Connection qui affiche l'interface de connexion\r\n Paramètres : \r\n handleCloseAbove : gère la fermeture du composant */\r\n <Connection handleCloseAbove={this.handleCloseConnection}/>\r\n }\r\n {/* Appel du composant Header qui affiche le Header du site\r\n Paramètre : title : texte intérieur */}\r\n <Header title='Proximo'/>\r\n <div className=\"content\">\r\n <div className=\"contentTxt\">Bienvenue sur le site de la supérette de l'INSA !</div>\r\n <div className=\"buttonBlock\">\r\n {/* Appel du composant Button\r\n Paramètres : \r\n - handleConnection : gérer l'affichage de l'interface de connexion\r\n - label : texte interne */}\r\n <Button handleConnection={this.handleConnection} label=\"Connexion\"/>\r\n </div>\r\n </div>\r\n {/* Appel du composant Footer qui affiche le Footer du site */}\r\n <Footer/>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n export default Home","import React from 'react';\r\nimport {Switch, Route} from \"react-router-dom\";\r\nimport Stock from '../Views/Stock';\r\nimport Home from '../Views/Home';\r\n\r\n class AppRouter extends React.Component {\r\n render() {\r\n return (\r\n <>\r\n <Switch>\r\n <Route exact path=\"/stock\" component={Stock}/>\r\n <Route exact path=\"/\" component={Home}/>\r\n </Switch>\r\n </>\r\n )\r\n }\r\n }\r\n\r\n export default AppRouter","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {HashRouter as Router} from \"react-router-dom\";\r\nimport AppRouter from './js/Components/AppRouter';\r\n\r\nclass App extends React.Component {\r\n render() {\r\n return (\r\n <Router>\r\n <AppRouter/>\r\n </Router>\r\n )\r\n }\r\n}\r\n\r\n// On rend dans le DOM notre component App créé plus haut et on le place dans la div dont l'id est root\r\n ReactDOM.render(\r\n <React.StrictMode>\r\n <App />\r\n </React.StrictMode>,\r\n document.getElementById('root')\r\n );"],"sourceRoot":""}