2 Commits

Author SHA1 Message Date
  Kongzibapt fed8548f05 Merge branch 'master' of https://git.etud.insa-toulouse.fr/bamarty/Site-Proximo 3 years ago
  Kongzibapt 0dc8328425 Delete Selection Ok 3 years ago
4 changed files with 201 additions and 178 deletions
  1. 3
    92
      src/js/Components/ArticleDetails.js
  2. 3
    19
      src/js/Components/Articles.js
  3. 3
    44
      src/js/Components/Selected.js
  4. 192
    23
      src/js/Views/Stock.js

+ 3
- 92
src/js/Components/ArticleDetails.js View File

@@ -52,96 +52,9 @@ class ArticleDetails extends React.Component {
52 52
         })
53 53
     }
54 54
 
55
-    updateArticle = () => {
56
-        axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.id}`,
57
-        {
58
-            'name':this.props.name,
59
-            'description':this.props.desc,
60
-            'quantity':this.state.quantity,
61
-            'price':this.props.price,
62
-            'code':this.props.code,
63
-            'category_id':this.props.category.id
64
-        }
65
-        )
66
-        .then(res => {
67
-            console.log(res.data)
68
-        })
69
-        .catch(error => {
70
-            console.log(error.response)
71
-        })
72
-    }
73 55
 
74
-    plusQuantity = (element) => {
75
-        this.setState({quantity:this.state.quantity+1},()=>{
76
-            this.updateArticle();
77
-            if (this.state.quantity > 0 ){
78
-                if (this.state.selected){
79
-                    this.props.colorArticle("white",element)
80
-                } else {
81
-                    this.props.colorArticle("grey",element)
82
-                }
83
-            }
84
-    })
85
-    }
86 56
 
87
-    minusQuantity = (element) => {
88
-        if(this.state.quantity > 0){
89
-            this.setState({quantity:this.state.quantity-1},()=>{
90
-                this.updateArticle();
91
-                if (this.state.quantity === 0){
92
-                    if (this.state.selected){
93
-                        this.props.colorArticle("red&white",element)
94
-                    } else {
95
-                        this.props.colorArticle("red",element)
96
-                    }
97
-                }
98
-        })
99
-        } 
100
-    }
101
-
102
-    // OnClick : selon si on clique sur tel ou tel element : on va colorer en blanc et selectionner 
103
-    // on va minus ou plus quantity et colorer en rouge
104
-
105
-    selectArticles = (e) => {
106
-        let currentElement = e.target;
107
-        let iconElement;
108
-        if (e.target.tagName === "path"){
109
-            currentElement = e.target.parentElement
110
-            iconElement = currentElement
111
-        }
112
-        if ((e.target.id === "minusIcon") || (e.target.id === "plusIcon")){
113
-            iconElement = currentElement
114
-        }
115
-        while (currentElement.id !== "bulle"){
116
-            currentElement = currentElement.parentElement
117
-        }
118
-        
119
-        console.log(currentElement); 
120
-        if ((e.target.id !==  "categoryIcon") && (e.target.id !== "penblue") && (e.target.id !== "crossred") && (e.target.id !== "") && (e.target.id !== "bluepen") && (e.target.id !== "redcross")  && (e.target.id !== "no") && (e.target.id !== "minusIcon") && (e.target.id !== "plusIcon")){
121
-        this.setState({selected:!this.state.selected},()=>{
122
-            console.log(this.state.selected)
123
-            if (this.state.selected){
124
-                this.props.select(this.props.id)
125
-                if (this.state.quantity === 0){
126
-                    this.props.colorArticle("red&white",currentElement)
127
-                } else {
128
-                    this.props.colorArticle("white",currentElement)
129
-                }
130
-            } else {
131
-                this.props.deselect(this.props.id)
132
-                if (this.state.quantity === 0){
133
-                    this.props.colorArticle("red",currentElement)
134
-                } else {
135
-                this.props.colorArticle("grey",currentElement)
136
-                }
137
-            }
138
-        })   
139
-        } else if (iconElement.id === "minusIcon"){
140
-            this.minusQuantity(currentElement)
141
-        } else if (iconElement.id === "plusIcon"){
142
-            this.plusQuantity(currentElement)
143
-        }
144
-    }   
57
+  
145 58
 
146 59
     render(){
147 60
         if (this.state.redirect) {
@@ -152,7 +65,7 @@ class ArticleDetails extends React.Component {
152 65
 
153 66
             // SQUARE
154 67
 
155
-            <div onClick={this.selectArticles} id="bulle" onMouseEnter={this.handleDesc} onMouseLeave={this.handlePhoto}> 
68
+            <div onClick={(e) => this.props.selectArticles(e,this.props.id)} id="bulle" onMouseEnter={this.handleDesc} onMouseLeave={this.handlePhoto}> 
156 69
                 {this.state.redcrossPressed ?
157 70
                 <div id="confirmation">
158 71
                     <div id="confirmationTxt">Tu veux vraiment supprimer cet article ?</div>
@@ -189,7 +102,7 @@ class ArticleDetails extends React.Component {
189 102
                     <div id="count">
190 103
                             <Icon id="minusIcon" icon={minusIcon} style={{color: '#ffffff', fontSize: '18.558874130249023px',cursor:'pointer'}} />
191 104
                             <div id="countNumber">
192
-                                <p id="countNumberTxt">{this.state.quantity}</p>
105
+                                <p id="countNumberTxt">{this.props.quantity}</p>
193 106
                             </div>
194 107
                             <Icon id="plusIcon" icon={plusIcon} style={{color: '#ffffff', fontSize: '18.558874130249023px',cursor:'pointer'}} />
195 108
                         </div>
@@ -200,8 +113,6 @@ class ArticleDetails extends React.Component {
200 113
             :
201 114
 
202 115
             // INLINE
203
-
204
-                // NOT SELECTED
205 116
                 
206 117
                 <div id="line">
207 118
                     <div id="imgLine">

+ 3
- 19
src/js/Components/Articles.js View File

@@ -15,28 +15,12 @@ class Articles extends React.Component {
15 15
         console.log(articles);
16 16
         for (let i = 0; i<articles.childElementCount; i++){
17 17
           if (this.props.articles[i].quantity === 0){
18
-            this.colorArticle("red",articles.children[i])
18
+            this.props.colorArticle("red",articles.children[i])
19 19
           }
20 20
         }
21 21
     } 
22 22
 
23
-    colorArticle = (color,element) => {
24
-      
25
-      switch (color) {
26
-          case "white":
27
-              element.style.cssText = "background-color:rgba(255, 255, 255, 0.75);"
28
-              break;
29
-          case "grey" :
30
-              element.style.cssText = "background-color:rgba(105, 105, 105, 0.28);"
31
-              break;
32
-          case "red" :
33
-              element.style.cssText = "background-color:rgba(255, 21, 21, 0.28);"
34
-              break;
35
-          case "red&white" :
36
-            element.style.cssText = "background-color:rgba(255, 107, 107, 0.28);"
37
-            break;
38
-      }
39
-  }
23
+
40 24
 
41 25
   
42 26
 
@@ -46,7 +30,7 @@ class Articles extends React.Component {
46 30
             <div id="articles">
47 31
               {
48 32
                 this.props.articles.map((article) => 
49
-                <ArticleDetails colorArticle={this.colorArticle} squaredBubble={true} deselect={this.props.deselect} select={this.props.select} 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}/>    
33
+                <ArticleDetails selectArticles={this.props.selectArticles} colorArticle={this.props.colorArticle} plus={this.props.plus} minus={this.props.minus} colorArticle={this.colorArticle} squaredBubble={true} deselect={this.props.deselect} select={this.props.select} 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}/>    
50 34
             )}
51 35
             </div>
52 36
           </div>

+ 3
- 44
src/js/Components/Selected.js View File

@@ -16,52 +16,11 @@ class Selected extends Component {
16 16
     }
17 17
 
18 18
     minusQuantitySelected = () => {
19
-        this.updateArticle(-1)
19
+        this.props.updateArticles(-1)
20 20
     }
21 21
 
22 22
     plusQuantitySelected = () => {
23
-        this.updateArticle(1)
24
-    }
25
-
26
-    updateArticle = (value) => {
27
-
28
-        for (let i = 0 ; i < this.props.selectedArticles.length ; i++) {
29
-
30
-            axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.selectedArticles[i].id}`,
31
-            {
32
-                'name':this.props.selectedArticles[i].name,
33
-                'description':this.props.selectedArticles[i].description,
34
-                'quantity':this.props.selectedArticles[i].quantity+value,
35
-                'price':this.props.selectedArticles[i].price,
36
-                'code':this.props.selectedArticles[i].code,
37
-                'category_id':this.props.selectedArticles[i].category.id
38
-            }
39
-            )
40
-            .then(res => {
41
-                console.log(res.data)
42
-            })
43
-            .catch(error => {
44
-                console.log(error.response)
45
-            })
46
-        
47
-        }
48
-        
49
-
50
-    }
51
-
52
-    deleteSelectedArticles = () => {
53
-
54
-        for (let i = 0 ; i < this.props.selectedArticles.length ; i++) {
55
-
56
-            axios.delete(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.selectedArticles[i].id}`)
57
-            .then(res => {
58
-                    console.log(res.data)
59
-            })
60
-            .catch(error => {
61
-                console.log(error.response)
62
-            })
63
-
64
-        }
23
+        this.props.updateArticles(1)
65 24
     }
66 25
 
67 26
 
@@ -84,7 +43,7 @@ class Selected extends Component {
84 43
                         </Tooltip>
85 44
                         <Tooltip title="Supprimer" TransitionComponent={Zoom} aria-label="Supprimer">
86 45
                             <div>
87
-                            <Icon onClick={this.deleteSelectedArticles} icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '2vw',cursor:'pointer',margin:'0 1vw 0 1vw'}} />
46
+                            <Icon onClick={this.props.delete} icon={plusIcon} style={{transform : 'rotate(-45deg)', color: '#ffffff', fontSize: '2vw',cursor:'pointer',margin:'0 1vw 0 1vw'}} />
88 47
                             </div>
89 48
                         </Tooltip>
90 49
                     </div>

+ 192
- 23
src/js/Views/Stock.js View File

@@ -15,7 +15,7 @@ import AppLoader from '../Components/AppLoader';
15 15
 import Categories from '../Components/Categories';
16 16
 import EditCategory from '../Components/EditCategory';
17 17
 import Sort from '../Components/Sort';
18
-import { Link } from 'react-router-dom';
18
+import { Link, Redirect } from 'react-router-dom';
19 19
 import Selected from '../Components/Selected';
20 20
 
21 21
 export default class Stock extends React.Component {
@@ -38,7 +38,8 @@ export default class Stock extends React.Component {
38 38
       lowToHigh: true,
39 39
       selectedArticles:[],
40 40
       counter:0,
41
-      code:''
41
+      code:'',
42
+
42 43
     }
43 44
   }
44 45
 
@@ -47,11 +48,190 @@ export default class Stock extends React.Component {
47 48
   }
48 49
 
49 50
 
51
+
52
+
53
+  deleteSelectedArticles = () => {
54
+    for (let i = 0 ; i < this.state.selectedArticles.length ; i++) {
55
+
56
+            axios.delete(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.state.selectedArticles[i].id}`)
57
+            .then(res => {
58
+                    console.log(res.data)
59
+                    if (i === this.state.selectedArticles.length-1){
60
+                      this.setState({counter:0,selectedArticles:[]},()=>{
61
+                        this.getArticles()
62
+                      })
63
+                    }
64
+            })
65
+            .catch(error => {
66
+                console.log(error.response)
67
+            })
68
+          }
69
+}
70
+
71
+      // OnClick : selon si on clique sur tel ou tel element : on va colorer en blanc et selectionner 
72
+    // on va minus ou plus quantity et colorer en rouge
73
+
74
+    selectArticles = (e,id) => {
75
+      let currentElement = e.target;
76
+      let iconElement;
77
+      if (e.target.tagName === "path"){
78
+          currentElement = e.target.parentElement
79
+          iconElement = currentElement
80
+      }
81
+      if ((e.target.id === "minusIcon") || (e.target.id === "plusIcon")){
82
+          iconElement = currentElement
83
+      }
84
+      while (currentElement.id !== "bulle"){
85
+          currentElement = currentElement.parentElement
86
+      }
87
+      
88
+      if ((e.target.id !==  "categoryIcon") && (e.target.id !== "penblue") && (e.target.id !== "crossred") && (e.target.id !== "") && (e.target.id !== "bluepen") && (e.target.id !== "redcross")  && (e.target.id !== "no") && (e.target.id !== "minusIcon") && (e.target.id !== "plusIcon")){
89
+        let index = this.getArticleById(id).i;
90
+        let articles = this.state.articles;
91
+        articles[index].selected = !this.state.articles[index].selected;
92
+        console.log(articles[index].selected);
93
+        this.setState({articles:articles},()=>{
94
+            if (this.state.articles[index].selected){
95
+              this.select(id)
96
+              if (this.state.articles[index].quantity === 0){
97
+                this.colorArticle("red&white",currentElement)
98
+              } else {
99
+                this.colorArticle("white",currentElement)
100
+              }
101
+            } else {
102
+              this.deselect(id)
103
+              if (this.state.articles[index].quantity === 0){
104
+                this.colorArticle("red",currentElement)
105
+              } else {
106
+                this.colorArticle("grey",currentElement)
107
+              }
108
+            }
109
+        })   
110
+        } else if (iconElement.id === "minusIcon"){
111
+            this.minusQuantity(currentElement,id)
112
+        } else if (iconElement.id === "plusIcon"){
113
+            this.plusQuantity(currentElement,id)
114
+        }
115
+  } 
116
+
117
+  colorArticle = (color,element) => {
118
+      
119
+    switch (color) {
120
+        case "white":
121
+            element.style.cssText = "background-color:rgba(255, 255, 255, 0.75);"
122
+            break;
123
+        case "grey" :
124
+            element.style.cssText = "background-color:rgba(105, 105, 105, 0.28);"
125
+            break;
126
+        case "red" :
127
+            element.style.cssText = "background-color:rgba(255, 21, 21, 0.28);"
128
+            break;
129
+        case "red&white" :
130
+            element.style.cssText = "background-color:rgba(255, 107, 107, 0.28);"
131
+            break;
132
+    }
133
+}
134
+
135
+  plusQuantity = (element,id) => {
136
+    let index = this.getArticleById(id).i;
137
+    let articles = this.state.articles;
138
+    articles[index].quantity++;
139
+    console.log(articles[index]);
140
+    this.setState({articles:articles},()=>{
141
+      this.updateArticle(index,id);
142
+        if (this.state.articles[index].quantity > 0 ){
143
+            if (this.state.articles[index].selected){
144
+                this.colorArticle("white",element)
145
+            } else {
146
+                this.colorArticle("grey",element)
147
+            }
148
+        }
149
+    })
150
+}
151
+
152
+minusQuantity = (element,id) => {
153
+  let index = this.getArticleById(id).i;
154
+
155
+  if (this.state.articles[index].quantity > 0){
156
+    let articles = this.state.articles;
157
+    articles[index].quantity--;
158
+    console.log(articles[index]);
159
+    this.setState({articles:articles},()=>{
160
+      this.updateArticle(index,id);
161
+        if (this.state.articles[index].quantity === 0 ){
162
+            if (this.state.articles[index].selected){
163
+                this.colorArticle("red&white",element)
164
+            } else {
165
+                this.colorArticle("red",element)
166
+            }
167
+        }
168
+    })
169
+  }
170
+}
171
+
172
+updateSelectedArticles = (value) => {
173
+
174
+  let articles = this.state.selectedArticles;
175
+
176
+  for (let i = 0 ; i < this.state.selectedArticles.length ; i++) {
177
+    
178
+      
179
+      if (articles[i].quantity >= 0){
180
+        articles[i].quantity+=value;
181
+      } 
182
+        // implémenter une fonction pour récupérer l'élément correspondant à l'id
183
+        
184
+      this.setState({selectedArticles:articles},() => {
185
+        axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.state.selectedArticles[i].id}`,
186
+        {
187
+            'name':this.state.selectedArticles[i].name,
188
+            'description':this.state.selectedArticles[i].description,
189
+            'quantity':this.state.selectedArticles[i].quantity,
190
+            'price':this.state.selectedArticles[i].price,
191
+            'code':this.state.selectedArticles[i].code,
192
+            'category_id':this.state.selectedArticles[i].category.id
193
+        }
194
+        )
195
+        
196
+        .then(res => {
197
+            console.log(res.data)
198
+        })
199
+        .catch(error => {
200
+            console.log(error.response)
201
+        })
202
+  
203
+
204
+      })
205
+      
206
+  }
207
+  
208
+
209
+}
210
+
211
+updateArticle = (index,id) => {
212
+  axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${id}`,
213
+  {
214
+      'name':this.state.articles[index].name,
215
+      'description':this.state.articles[index].description,
216
+      'quantity':this.state.articles[index].quantity,
217
+      'price':this.state.articles[index].price,
218
+      'code':this.state.articles[index].code,
219
+      'category_id':this.state.articles[index].category.id
220
+  }
221
+  )
222
+  .then(res => {
223
+      console.log(res.data)
224
+  })
225
+  .catch(error => {
226
+      console.log(error.response)
227
+  })
228
+}
229
+
50 230
   select = (id) => {
51 231
     console.log(id)
52 232
     this.setState({counter:this.state.counter+1},()=>{
53 233
       console.log(this.state.counter)
54
-      this.state.selectedArticles.push(this.getArticleById(id))
234
+      this.state.selectedArticles.push(this.getArticleById(id).current)
55 235
       console.log(this.state.selectedArticles)
56 236
     })
57 237
   }
@@ -68,14 +248,14 @@ export default class Stock extends React.Component {
68 248
           trouve = !trouve;
69 249
         }
70 250
       }
71
-      return(current);
251
+      return({current,i});
72 252
     }
73 253
 
74 254
   deselect = (id) => {
75 255
 
76 256
     this.setState({counter:this.state.counter-1},()=>{
77 257
       console.log(this.state.counter)
78
-      this.setState({selectedArticles: this.state.selectedArticles.filter((item) => item !== this.getArticleById(id))},()=>{
258
+      this.setState({selectedArticles: this.state.selectedArticles.filter((item) => item !== this.getArticleById(id).current)},()=>{
79 259
         console.log(this.state.selectedArticles)
80 260
       })
81 261
       
@@ -131,6 +311,9 @@ export default class Stock extends React.Component {
131 311
   getArticles = () => {
132 312
     axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/articles')
133 313
         .then(res => {
314
+            for (let i = 0; i<res.data.length;i++){
315
+              res.data[i].selected = false;
316
+            }
134 317
             this.setState({articles : res.data}, () => {
135 318
                 console.log(this.state.articles)
136 319
                 this.setState({sortType: "name"})
@@ -187,21 +370,7 @@ export default class Stock extends React.Component {
187 370
     this.setState({onEditCategory:false})
188 371
   }
189 372
 
190
-  // handleChangeSortType = (e) => {
191
-  //   console.log(e.target.value)
192
-  //   this.setState({sortType:e.target.value},()=>{
193
-  //     if (this.state.sortType === "Ordre Alphabétique"){
194
-  //       this.sortArticles("name")
195
-  //     } else if(this.state.sortType === "Catégorie"){
196
-  //       this.sortArticles("category_id")
197
-  //     } else if(this.state.sortType === "Quantité"){
198
-  //       this.sortArticles("quantity")
199
-  //     } else if(this.state.sortType === "Prix"){
200
-  //       this.sortArticles("price");
201
-  //     } 
202
-
203
-  //   })
204
-  // }
373
+
205 374
 
206 375
   //ATTENTION ça a changé, on passe directement le string en argument (j'avais besoin d'utiliser cette fonction autrement, voir dans Sort.js)
207 376
   handleChangeSortType = (type) => {
@@ -277,13 +446,13 @@ export default class Stock extends React.Component {
277 446
                 <Sort handleChangeSortType={this.handleChangeSortType} handleChangeSortOrder={this.handleChangeSortOrder} orderIsHidden={this.state.orderIsHidden} lowToHigh={this.state.lowToHigh}/>
278 447
               </div>
279 448
               <div id="selectedBlock">
280
-                <Selected selectedArticles={this.state.selectedArticles} counter={this.state.counter}/>
449
+                <Selected delete={this.deleteSelectedArticles} updateArticles={this.updateSelectedArticles} counter={this.state.counter}/>
281 450
               </div>
282 451
               <div id="articleBlock">
283 452
               {this.state.articles && this.state.articles[0] ? 
284 453
                 this.state.onSortedCategories ?
285
-                  <ArticlesByCategory onSearch={this.state.onSearch} handleCategories={this.handleCategories} articles={this.state.articles} editionArticle={this.handleArticleEdition}/>
286
-                : <Articles deselect={this.deselect} select={this.select} handleCategories={this.handleCategories} articles={this.state.articles} editionArticle={this.handleArticleEdition}/>
454
+                  <ArticlesByCategory  onSearch={this.state.onSearch} handleCategories={this.handleCategories} articles={this.state.articles} editionArticle={this.handleArticleEdition}/>
455
+                : <Articles selectArticles={this.selectArticles} colorArticle={this.colorArticle} plus={this.plusQuantity} minus={this.minusQuantity} deselect={this.deselect} select={this.select} handleCategories={this.handleCategories} articles={this.state.articles} editionArticle={this.handleArticleEdition}/>
287 456
               : <AppLoader/>
288 457
               }
289 458
               </div>

Loading…
Cancel
Save