Skip to content

Commit 4f191c6

Browse files
committed
to fix: Cart, glasses,About bottom figures, vert long tablet overflow
1 parent 43ab35c commit 4f191c6

File tree

1 file changed

+27
-43
lines changed

1 file changed

+27
-43
lines changed

Classes/Cart.js

+27-43
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,29 @@ export class Cart{
22
cartBox = this.getFromLS() || []; //объекты {item:{item}, S:3}
33
//надо в объекты {item:{item}, sizes:{S:3, M:2}}
44

5-
addToCart(item = {name:'defName',price:999}, sizes = {XL:1, XS:2}){
6-
let incomKeys = Object.keys(sizes);
7-
console.log('item = ',item)
8-
console.log('sizes = ', sizes)
9-
if(this.cartBox.length === 0){//массив пуст - смело пушим!! 1 товар - 1 строка. item, sizes
5+
addToCart(item = {name:'defName',price:999}, sizes = {XXL:1}){
6+
7+
if(this.cartBox.length === 0){ //массив пуст - смело пушим!! 1 товар - 1 строка. item, sizes
108
this.cartBox.push({item,sizes})
11-
console.log('last:', this.cartBox[this.cartBox.length-1])
129
}
10+
else{ //массив не пуст
11+
let matchItem = this.cartBox.find(el => el.item.name === item.name) //предполагаемое совпадение
1312

13+
if(!matchItem){ //совпадения по имени нет - пушим
14+
this.cartBox.push({item,sizes})
15+
}
16+
else { //есть совпадение по имени. Сращиваем объекты размеров у входящего item и match
1417

15-
16-
if (this.cartBox.length === 0) {//массив пуст - смело пушим!! для каждого размера по отдельности
17-
incomKeys.forEach(incomSize => {
18-
this.cartBox.push({item,[incomSize]:sizes[incomSize]}) //для каждого размера по отдельности
19-
console.log(' \n pushed {item,[incomSize]:sizes[incomSize]} :', {item,[incomSize]:sizes[incomSize]})
20-
})
21-
} else {
22-
//проверить, есть ли совпадения по имени. Да - проверяем ключи. Нет - пушим
23-
let allMatches = this.cartBox.filter(cartEl => cartEl.item.id === item.id);
24-
25-
if (!allMatches.length) { //по имени не совпало - пушим!!
26-
incomKeys.forEach(size => {
27-
this.cartBox.push({item,[size]:sizes[size]}) //для каждого размера по отдельности
28-
})
29-
} else { //по имени cовпало - проверяем ключи.
30-
// allMatches - это все совпавшие по имени с входящим элементы массива корзины
31-
incomKeys.forEach(incomSize => {
32-
let match = false;
33-
34-
allMatches.forEach(idMatchElem => {
35-
36-
if (idMatchElem[incomSize]){
37-
38-
idMatchElem[incomSize] += sizes[incomSize];
39-
match = true;
40-
}
41-
})
42-
if(!match){
43-
44-
this.cartBox.push({item,[incomSize]:sizes[incomSize]})
18+
Object.keys(sizes).forEach(incomSize => { //для каждого входящего размера
19+
if (matchItem.sizes[incomSize]){ //...если в размерах совпавшего есть такой ключ, то...
20+
matchItem.sizes[incomSize] += sizes[incomSize] //..плюсуем! и выходим досрачно
21+
return
4522
}
23+
matchItem.sizes[incomSize] = sizes[incomSize] //а раз не вышли, то ключа не было - присваиваем новый ключ
4624
})
4725
}
4826
}
49-
//console.log('this CartBox = ',this.cartBox)
27+
console.log('this CartBox = ',this.cartBox)
5028
}
5129

5230
//убавить на 1 позицию данного товара - продумать, как быть с галками
@@ -56,17 +34,23 @@ export class Cart{
5634

5735
//сложить счётчики у всех товаров в корзине
5836
totalItems(){
59-
return this.cartBox.reduce((initial,object) => {
60-
return initial + Object.values(object)[1]
61-
// из-за путаницы с размерами у новых товаров пришлось делать "костыль", чтобы не переписывать все методы с нуля
37+
return this.cartBox.reduce((initial,cartString) => {
38+
let amountForString = 0;
39+
Object.values(cartString.sizes).forEach(amountOfSize => {
40+
amountForString += amountOfSize
41+
})
42+
return initial + amountForString;
6243
},0);
6344
};
6445

6546
//сложить цены у всех товаров в корзине, перемножив сумму размеров в ordered на цену товара
6647
totalPrice(){
67-
return this.cartBox.reduce((initial,object) => {
68-
return initial + Object.values(object)[1] * object.item.price
69-
// из-за путаницы с размерами у новых товаров пришлось делать "костыль", чтобы не переписывать все методы с нуля
48+
return this.cartBox.reduce((initial,cartString) => {
49+
let amountForString = 0;
50+
Object.values(cartString.sizes).forEach(amountOfSize => {
51+
amountForString += amountOfSize
52+
})
53+
return initial + amountForString * cartString.item.price;
7054
},0)
7155
};
7256

0 commit comments

Comments
 (0)