Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. import Ember from 'ember';
  2. import hbs from 'htmlbars-inline-precompile';
  3.  
  4. const createStore = (reducer) => {
  5. var pointer = 0;
  6. var state = [];
  7. var listeners = [];
  8. var firstState = reducer();
  9. state.push(firstState);
  10. var store = {
  11. getState() {
  12. return state[pointer];
  13. },
  14. dispatch(action) {
  15. var nextState = reducer(state[pointer], action);
  16. pointer++;
  17. state.push(nextState);
  18. listeners.forEach((callback) => {
  19. callback();
  20. });
  21. },
  22. subscribe(callback) {
  23. listeners.push(callback);
  24. },
  25. goBack() {
  26. pointer--;
  27. listeners.forEach((callback) => {
  28. callback();
  29. });
  30. },
  31. goForward() {
  32. pointer++;
  33. listeners.forEach((callback) => {
  34. callback();
  35. });
  36. }
  37. }
  38. return store;
  39. };
  40.  
  41. const reducer = (state = 0, action) => {
  42. if (action && action.type === 'ADD') {
  43. console.log('ADDING!');
  44. return state + 1;
  45. }
  46. return state;
  47. };
  48.  
  49. const store = createStore(reducer);
  50.  
  51. export default Ember.Component.extend({
  52. init() {
  53. this._super(...arguments);
  54. store.subscribe(() => {
  55. this.notifyPropertyChange('number');
  56. });
  57. },
  58. number: Ember.computed(function() {
  59. return store.getState();
  60. }),
  61. actions: {
  62. add() {
  63. store.dispatch({type: 'ADD'});
  64. },
  65. back() {
  66. store.goBack();
  67. },
  68. forward() {
  69. store.goForward();
  70. }
  71. },
  72. layout: hbs`
  73. <h1>{{number}}</h1>
  74. <button onclick={{action "add"}}>ADD</button>
  75. <button onclick={{action "back"}}>Back</button>
  76. <button onclick={{action "forward"}}>Forward</button>
  77. `
  78. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement