Просмотр исходного кода

error display functionality implemented

miskson 2 лет назад
Родитель
Сommit
451601b476
1 измененных файлов с 42 добавлено и 6 удалено
  1. 42 6
      hw10-redux/Change Me_files/index.js

+ 42 - 6
hw10-redux/Change Me_files/index.js

@@ -34,7 +34,7 @@ function reducer(state, {type, ШО, СКОКА, БАБОС}){ //объект ac
     }
     if (type === 'КУПИТЬ' && 
         state[ШО] && СКОКА > 0 &&
-        СКОКА <= state[ШО].count && БАБОС >= state[ШО].price){ //если тип action - КУПИТЬ, то:
+        СКОКА <= state[ШО].count && БАБОС >= state[ШО].price * СКОКА){ //если тип action - КУПИТЬ, то:
         //проверить на:
         //наличие товара как такового (есть ли ключ в объекте)
         //количество денег в action
@@ -42,13 +42,14 @@ function reducer(state, {type, ШО, СКОКА, БАБОС}){ //объект ac
         //и только при соблюдении этих условий обновлять state.
         console.log('bang')
         console.log(store.getState())
-        state.касса += +БАБОС
+        state.касса += truncateFraction(+БАБОС)
+        display_hide_error(arguments[1])
         return {
             ...state, //берем все что было из ассортимента
             [ШО]: {count: state[ШО].count - Math.floor(СКОКА), price: state[ШО].price },//и уменьшаем то, что покупается на количество
-            //[касса]: state[касса] + БАБОС,
         }
     }
+    display_hide_error(arguments[1])
     return state //если мы не поняли, что от нас просят в `action` - оставляем все как есть
 }
 
@@ -75,7 +76,6 @@ buy.onclick = () => {
     //достает выбранный товар и количество из DOM
 //    store.dispatch(купи(....,....))
     store.dispatch(купи(select.value, quantity.value, cash.value))
-    console.log('steit', store.getState())
 }
 
 //запомнит функцию во внутреннем массиве cbs. 
@@ -86,6 +86,43 @@ const unsubscribe = store.subscribe(() => console.log(store.getState()))
 
 //происходит запуск редьюсера, который создает новый state. 
 //dispatch запускает всех подписчиков из массива cbs
+let errorP = document.createElement('p')
+errorP.style.color = 'red'
+errorP.style.textAlign = 'center'
+shop.append(errorP)
+
+function truncateFraction (number) {
+    try {
+        let strNum = String(number).split('.')
+        if(strNum[1].length > 2) {
+            strNum[1] = strNum[1].slice(0, 2)
+        }
+        return Number(strNum.join('.'))
+    } catch (e) {
+        return number
+    }
+}
+
+function display_hide_error(obj) {
+    errorP.innerText = ''
+    if (obj.СКОКА === '' && obj.БАБОС === '') {
+        errorP.innerText = 'Мысли я читать не умeю >:^['
+        return;
+    } else if(obj.СКОКА === '' || obj.СКОКА < 0) {
+        errorP.innerText = 'А единиц товара сколько брать будете?'
+        return;
+    }
+
+    if (obj.СКОКА > store.getState()[obj.ШО].count) {
+        errorP.innerText = `У нас нет столько ${obj.ШО}. ${obj.ШО} осталось ${store.getState()[obj.ШО].count}`
+        return;
+    } else if (obj.БАБОС < store.getState()[obj.ШО].price * obj.СКОКА) {
+        errorP.innerText = `Недостаточно денег для покупки ${obj.СКОКА} ед. ${obj.ШО}.
+        ${obj.ШО} стоит ${store.getState()[obj.ШО].price} денег за 1 ед. товара
+        Стоимость вашего заказа ${store.getState()[obj.ШО].price * obj.СКОКА}`
+        return;
+    }
+}
 
 let table = document.createElement('table')
 function drawTable(){
@@ -113,12 +150,11 @@ function drawTable(){
     table.insertAdjacentHTML('beforeend', `
         <tr>
             <th>Касса</th>
-            <td>${store.getState().касса}</td>
+            <td>${store.getState().касса} денег</td>
         </tr>
     `)
     shop.append(table)
 }
 drawTable()
 store.subscribe(drawTable)
-//setTimeout(() => store.dispatch({type: 'КУПИТЬ', ШО: 'пиво', СКОКА: 3}), 5000)
 console.log(store.getState())