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