script.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. function reducer(state, {type, ШО, СКОКА}){
  2. if (!state){
  3. return {
  4. пиво: {
  5. count: 10,
  6. price: 20
  7. },
  8. чипсы: 100,
  9. сиги: 100,
  10. касса: 0
  11. }
  12. }
  13. if (type === 'КУПИТЬ'){
  14. //if (){} if enoth money
  15. return {
  16. ...state,
  17. [ШО]: state[ШО] - СКОКА
  18. }
  19. }
  20. return state
  21. }
  22. function createStore(reducer){
  23. let state = reducer(undefined, {})
  24. let cbs = []
  25. const getState = () => state
  26. const subscribe = cb => (cbs.push(cb),
  27. () => cbs = cbs.filter(c => c !== cb))
  28. const dispatch = action => {
  29. const newState = reducer(state, action)
  30. if (newState !== state){
  31. state = newState
  32. for (let cb of cbs) cb()
  33. }
  34. }
  35. return {
  36. getState,
  37. dispatch,
  38. subscribe
  39. }
  40. }
  41. const store = createStore(reducer);
  42. let select = document.querySelector('#goods');
  43. function createSelectItems(selectId, store){
  44. for (let key of Object.keys(store.getState())){
  45. let option = document.createElement('option');
  46. option.value = key;
  47. option.innerText = key;
  48. select.append(option);
  49. }
  50. }
  51. createSelectItems('goods', store);
  52. btn.addEventListener('click',() => {
  53. store.dispatch({type: 'КУПИТЬ', 'ШО': select.value, 'СКОКА': input.value})
  54. console.log(store.getState());
  55. });
  56. function drawTable(root, store) {
  57. root.innerHTML = ''
  58. for (let [item, pcs] of Object.entries(store.getState())) {
  59. let tr = document.createElement('tr');
  60. let td = document.createElement('td');
  61. let th = document.createElement('th');
  62. th.innerText = item;
  63. td.innerText = pcs;
  64. tr.append(th, td);
  65. root.append(tr);
  66. }
  67. }
  68. drawTable(table,store);
  69. store.subscribe(() =>drawTable(table,store))