|
@@ -0,0 +1,101 @@
|
|
|
+
|
|
|
+function reducer(state, {type, ШО, СКОКА, БАБЛО}){
|
|
|
+ if (!state){
|
|
|
+ return {
|
|
|
+ пиво: {
|
|
|
+ колличество: 100,
|
|
|
+ цена: 52
|
|
|
+ },
|
|
|
+ сиги: {
|
|
|
+ колличество: 200,
|
|
|
+ цена: 86
|
|
|
+ },
|
|
|
+ чипсы: {
|
|
|
+ колличество: 50,
|
|
|
+ цена: 43
|
|
|
+ },
|
|
|
+ ЧЕК: 0,
|
|
|
+ СДАЧА: 0,
|
|
|
+ КАССА: 0,
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ switch({type, ШО, СКОКА, БАБЛО}.type) {
|
|
|
+ case 'КУПИТЬ':
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ [ШО]: {...state[ШО], колличество: state[ШО].колличество >= СКОКА ? state[ШО].колличество - СКОКА : (state.ЧЕК = 0) || state[ШО].колличество},
|
|
|
+ КАССА: state.ЧЕК <= БАБЛО ? state.ЧЕК : 0,
|
|
|
+ СДАЧА: (БАБЛО >= state.ЧЕК) ? БАБЛО - state.ЧЕК : turningIn.value = 'Не хватает БАБЛА!'
|
|
|
+ }
|
|
|
+ case 'СУММА ПОКУПКИ':
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ ЧЕК: state[ШО].цена * СКОКА,
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return state
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function createStore(reducer){
|
|
|
+ let state = reducer(undefined, {})
|
|
|
+ let cbs = []
|
|
|
+
|
|
|
+ const getState = () => state
|
|
|
+ const subscribe = cb => (cbs.push(cb), () => cbs = cbs.filter(c => c !== cb))
|
|
|
+ const dispatch = action => {
|
|
|
+ const newState = reducer(state, action)
|
|
|
+ if (newState !== state){
|
|
|
+ state = newState
|
|
|
+ for (let cb of cbs) cb()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ getState,
|
|
|
+ dispatch,
|
|
|
+ subscribe
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function createAction (){
|
|
|
+ return {
|
|
|
+ type: 'КУПИТЬ',
|
|
|
+ ШО: selectProduct.value,
|
|
|
+ СКОКА: +countGoods.value,
|
|
|
+ БАБЛО: +moneys.value,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const kiosk = reducer(undefined, {})
|
|
|
+const store = createStore(reducer)
|
|
|
+
|
|
|
+for (let i = 0; i < Object.keys(kiosk).length; i ++) {
|
|
|
+ if (typeof Object.values(kiosk)[i] === 'object') {
|
|
|
+ selectProduct.appendChild(document.createElement('option')).innerHTML = Object.keys(kiosk)[i]
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+beerCount.value = kiosk.пиво.колличество
|
|
|
+sigiCount.value = kiosk.сиги.колличество
|
|
|
+chipsCount.value = kiosk.чипсы.колличество
|
|
|
+
|
|
|
+
|
|
|
+store.subscribe( () => beerCount.value = store.getState().пиво.колличество, beer.innerHTML += ` ${store.getState().пиво.цена} UAH/бут.` )
|
|
|
+store.subscribe( () => sigiCount.value = store.getState().сиги.колличество, sigi.innerHTML += ` ${store.getState().сиги.цена} UAH/пачку`)
|
|
|
+store.subscribe( () => chipsCount.value = store.getState().чипсы.колличество, chips.innerHTML += ` ${store.getState().чипсы.цена} UAH/пачку`)
|
|
|
+store.subscribe( () => giveMoney.value = store.getState().ЧЕК)
|
|
|
+store.subscribe( () => turningIn.value = store.getState().СДАЧА)
|
|
|
+
|
|
|
+countGoods.oninput = () => {
|
|
|
+ store.dispatch({...createAction(), type: 'СУММА ПОКУПКИ'})
|
|
|
+}
|
|
|
+
|
|
|
+buy.onclick = () => {
|
|
|
+ store.dispatch(createAction())
|
|
|
+ console.log(store.getState())
|
|
|
+}
|