12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- function reducer(state, { type, ШО, СКОКА, БАБЛО }) {
- if (!state) {
- return {
- пиво: {
- count: 100,
- price: 10
- },
- чипсы: {
- count: 100,
- price: 10
- },
- сиги: {
- count: 100,
- price: 10
- },
- касса: 0
- }
- }
- if (type === 'КУПИТЬ' && СКОКА <= state[ШО].count && БАБЛО >= state[ШО].price * СКОКА) {
- return {
- ...state,
- касса: state.касса + state[ШО].price * СКОКА,
- [ШО]: { ...state[ШО], count: state[ШО].count - СКОКА }
- }
- }
- 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 createTable(obj) {
- table.innerText = ''
- for (let [key, value] of Object.entries(obj)) {
- let tr = document.createElement('tr');
- let td = document.createElement('td');
- td.innerText = key
- tr.append(td);
- table.append(tr);
- if (typeof value === 'object') {
- for (let [key1, value1] of Object.entries(value)) {
- let td = document.createElement('td');
- td.innerText = key1 + ' : ' + value1;
- tr.append(td);
- }
- } else {
- let td = document.createElement('td');
- td.innerText = value;
- tr.append(td);
- }
- }
- }
- const store = createStore(reducer);
- createTable(store.getState())
- store.subscribe(() => createTable(store.getState()));
- btn.onclick = (() => store.dispatch({ type: 'КУПИТЬ', ШО: select.value, СКОКА: sum.value, БАБЛО: money.value }))
|