Browse Source

HW13 done

Volddemar4ik 2 years ago
parent
commit
f9341cbc68
1 changed files with 73 additions and 27 deletions
  1. 73 27
      js/13/HW13.js

+ 73 - 27
js/13/HW13.js

@@ -27,6 +27,7 @@ function reducer(state, { type, ШО, СКОКА, БАБЛО, ШО_ДОБАВИ
     if (!state) {
         return {
             касса: 200,
+            чай: 0,
             пиво: {
                 amount: 110,
                 price: 20
@@ -42,7 +43,7 @@ function reducer(state, { type, ШО, СКОКА, БАБЛО, ШО_ДОБАВИ
         }
     }
 
-    if (type === 'КУПИТЬ' && СКОКА <= state[ШО].amount && БАБЛО >= (СКОКА * state[ШО].price)) {
+    if (type === 'КУПИТЬ' && СКОКА <= state[ШО].amount && БАБЛО === (СКОКА * state[ШО].price)) {
         return {
             ...state,
             [ШО]: {
@@ -53,13 +54,37 @@ function reducer(state, { type, ШО, СКОКА, БАБЛО, ШО_ДОБАВИ
         }
     }
 
-    if (type === 'ДОБАВИТЬ') {
+    if (type === 'КУПИТЬ' && СКОКА <= state[ШО].amount && БАБЛО > (СКОКА * state[ШО].price)) {
+        return {
+            ...state,
+            [ШО]: {
+                amount: state[ШО].amount - СКОКА,
+                price: state[ШО].price
+            },
+            касса: state.касса + (СКОКА * state[ШО].price),
+            чай: state.чай + (БАБЛО - (СКОКА * state[ШО].price))
+        }
+    }
+
+    if (type === 'ДОБАВИТЬ' && !(ШО_ДОБАВИТЬ in state) && state.касса >= (СКОКА_ДОБАВИТЬ * ЦЕНА_ДОБАВИТЬ)) {
         return {
             ...state,
             [ШО_ДОБАВИТЬ]: {
                 amount: СКОКА_ДОБАВИТЬ,
                 price: ЦЕНА_ДОБАВИТЬ
-            }
+            },
+            касса: state.касса - (СКОКА_ДОБАВИТЬ * ЦЕНА_ДОБАВИТЬ)
+        }
+    }
+
+    if (type === 'ДОБАВИТЬ' && ШО_ДОБАВИТЬ in state && state.касса >= (СКОКА_ДОБАВИТЬ * ЦЕНА_ДОБАВИТЬ)) {
+        return {
+            ...state,
+            [ШО_ДОБАВИТЬ]: {
+                amount: state[ШО_ДОБАВИТЬ].amount + СКОКА_ДОБАВИТЬ,
+                price: ЦЕНА_ДОБАВИТЬ
+            },
+            касса: state.касса - (СКОКА_ДОБАВИТЬ * ЦЕНА_ДОБАВИТЬ)
         }
     }
 
@@ -127,12 +152,10 @@ const createTable = () => {
 
     for (const [key, values] of Object.entries(store.getState())) {
 
-        if (key !== 'касса') {
-            // рисуем строку заголовков
+        if (key === 'касса') {
             row = document.createElement('tr')
             table.append(row)
 
-
             col = document.createElement('td')
             col.innerText = `${key.toUpperCase()}`
             col.style.cssText = `
@@ -142,24 +165,21 @@ const createTable = () => {
                 text-align: left`
             row.append(col)
 
-            // рисуем строки значений для товаров
-            for (const name of params) {
-                col = document.createElement('td')
-                col.innerText = `${(Object.keys(values)).includes(name) ? values[name] : ''}`
-                col.style.cssText = `
-                    font-size: 1.5em;
-                    text-align: center`
-                row.append(col)
-            }
-        } else {
+            col = document.createElement('td')
+            col.innerText = `${values}`
+            col.style.cssText = `
+                font-size: 2em;
+                text-align: center;`
+            row.append(col)
+        } else if (key === 'чай') {
             row = document.createElement('tr')
             table.append(row)
 
             col = document.createElement('td')
-            col.innerText = `${key.toUpperCase()}`
+            col.innerText = `На ${key.toUpperCase()} редюсеру-трудяге`
             col.style.cssText = `
                 min-width: 150px;
-                font-size: 2em;
+                font-size: 1.5em;
                 padding: 5px 10px;
                 text-align: left`
             row.append(col)
@@ -167,9 +187,32 @@ const createTable = () => {
             col = document.createElement('td')
             col.innerText = `${values}`
             col.style.cssText = `
-                font-size: 2em;
+                font-size: 1.5em;
                 text-align: center;`
             row.append(col)
+        } else {
+            // рисуем строку заголовков
+            row = document.createElement('tr')
+            table.append(row)
+
+            col = document.createElement('td')
+            col.innerText = `${key.toUpperCase()}`
+            col.style.cssText = `
+                min-width: 150px;
+                font-size: 2em;
+                padding: 5px 10px;
+                text-align: left`
+            row.append(col)
+
+            // рисуем строки значений для товаров
+            for (const name of params) {
+                col = document.createElement('td')
+                col.innerText = `${(Object.keys(values)).includes(name) ? values[name] : ''}`
+                col.style.cssText = `
+                    font-size: 1.5em;
+                    text-align: center`
+                row.append(col)
+            }
         }
     }
     return table
@@ -195,6 +238,7 @@ divWindowitle.style.cssText = `
     text-align: center;`
 divWindow.append(divWindowitle)
 
+
 // create inputAmount
 const inputAmount = document.createElement('input')
 inputAmount.type = 'number'
@@ -209,20 +253,19 @@ inputMoney.min = 0
 inputMoney.placeholder = 'Сумма, которую отдаете'
 divWindow.append(inputMoney)
 
-// create selectProduct
 let selectProduct
-const createListProduct = () => {
+createListProduct = () => {
+    // create selectProduct
     selectProduct = document.createElement('select')
     divWindow.insertBefore(selectProduct, inputMoney)
 
     for (let key of Object.keys(store.getState())) {
-        if (key !== 'касса') {
+        if (key !== 'касса' && key !== 'чай') {
             let optionInput = document.createElement('option')
             optionInput.innerText = `${key}`
             selectProduct.append(optionInput)
         }
     }
-
     return selectProduct
 }
 createListProduct()
@@ -272,6 +315,13 @@ const addProductButton = document.createElement('button')
 addProductButton.innerText = 'Добавить продукт'
 divAdd.append(addProductButton)
 
+// mistake alert
+addProductButton.onclick = () => {
+    if ((+inputAddAmount.value * +inputAddPrice.value) > store.getState().касса) {
+        alert('В кассе нет столько денег! Давай торговаться?')
+    }
+}
+
 // start addProductButton
 addProductButton.addEventListener('click', () => store.dispatch({ type: 'ДОБАВИТЬ', ШО_ДОБАВИТЬ: inputAddProduct.value, СКОКА_ДОБАВИТЬ: +inputAddAmount.value, ЦЕНА_ДОБАВИТЬ: +inputAddPrice.value }))
 
@@ -294,8 +344,4 @@ store.subscribe(() => {
         createTable(),
         createListProduct()
 
-})
-
-store.subscribe(() => {
-    console.log(store.getState())
 })