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