script.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. function reducer(state, {type, ШО, СКОКА, касса, ДЕНЕГ }){
  2. if (!state){
  3. return {
  4. пиво: {
  5. count: 100,
  6. СКОКА: 20
  7. },
  8. чипсы: 100,
  9. сиги: 100,
  10. касса: 0,
  11. ДЕНЕГ: 80
  12. }
  13. }
  14. if (type === 'КУПИТЬ'){
  15. if (СКОКА < 0){
  16. return state;
  17. } else if ( ДЕНЕГ == 0){
  18. return state;
  19. } else {
  20. if (typeof state[ШО] === 'object' && СКОКА){
  21. let {пиво} = state;
  22. return {
  23. ...state, пиво:{...пиво, count: пиво.count - СКОКА} ,
  24. ДЕНЕГ : ДЕНЕГ - пиво.count,
  25. касса : state[касса] + пиво.price
  26. }
  27. }
  28. console.log(ШО);
  29. return {
  30. ...state,
  31. [ШО]: state[ШО] - СКОКА,
  32. }
  33. }
  34. }
  35. return state
  36. }
  37. function createStore(reducer){
  38. let state = reducer(undefined, {})
  39. let cbs = []
  40. const getState = () => state
  41. const subscribe = cb => (cbs.push(cb),
  42. () => cbs = cbs.filter(c => c !== cb))
  43. const dispatch = action => {
  44. const newState = reducer(state, action)
  45. if (newState !== state){
  46. state = newState
  47. for (let cb of cbs) cb()
  48. }
  49. }
  50. return {
  51. getState,
  52. dispatch,
  53. subscribe
  54. }
  55. }
  56. const store = createStore(reducer);
  57. let select = document.querySelector('#goods');
  58. function createSelectItems(selectId, store){
  59. for (let key of Object.keys(store.getState())){
  60. if ( key === 'касса'){
  61. return;
  62. } else {
  63. let option = document.createElement('option');
  64. option.value = key;
  65. option.innerText = key;
  66. select.append(option);
  67. }
  68. }
  69. }
  70. createSelectItems('goods', store);
  71. btn.addEventListener('click',() => {
  72. store.dispatch({type: 'КУПИТЬ', 'ШО': select.value, 'СКОКА': input.value})
  73. console.log(store.getState());
  74. });
  75. function drawTable(root, store) {
  76. root.innerHTML = ''
  77. for (let [item, pcs] of Object.entries(store.getState())) {
  78. let tr = document.createElement('tr');
  79. let td = document.createElement('td');
  80. let th = document.createElement('th');
  81. if (typeof pcs === 'object'){
  82. let th = document.createElement('th');
  83. let tr = document.createElement('td');
  84. th.innerText = item;
  85. tr.append(th);
  86. for (let [el, price] of Object.entries(pcs)){
  87. let td = document.createElement('td');
  88. let td1 = document.createElement('td');
  89. console.log(el, price)
  90. td.innerText = el;
  91. td1.innerText = price;
  92. tr.append(td, td1);
  93. root.append(th, tr);
  94. }
  95. } else {
  96. th.innerText = item;
  97. td.innerText = pcs;
  98. tr.append(th, td);
  99. root.append(tr);
  100. }
  101. }
  102. }
  103. drawTable(table,store);
  104. store.subscribe(() =>drawTable(table,store))