|
@@ -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())
|
|
|
})
|