| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157 |
2
2
2
3
3
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
| "use strict";
var _defineProperty = function (obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); };
var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); Iif (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else Eif ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _prototypeProperties = function (child, staticProps, instanceProps) { Iif (staticProps) Object.defineProperties(child, staticProps); Eif (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
var _inherits = function (subClass, superClass) { Iif (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) subClass.__proto__ = superClass; };
var _classCallCheck = function (instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
var _Flux = require("../Flux");
var Flummox = _Flux.Flummox;
var Store = _Flux.Store;
var Actions = _Flux.Actions;
describe("Examples:", function () {
/**
* A simple Flummox example
*/
describe("Messages", function () {
/**
* To create some actions, create a new class that extends from the base
* Actions class. Methods on the class's prototype will be converted into
* actions, each with its own action id.
*
* In this example, calling `newMessage` will fire the dispatcher, with
* a payload containing the passed message content. Easy!
*/
var MessageActions = (function (Actions) {
function MessageActions() {
_classCallCheck(this, MessageActions);
Eif (Actions != null) {
Actions.apply(this, arguments);
}
}
_inherits(MessageActions, Actions);
_prototypeProperties(MessageActions, null, {
newMessage: {
value: function newMessage(content) {
// The return value from the action is sent to the dispatcher.
return content;
},
writable: true,
configurable: true
}
});
return MessageActions;
})(Actions);
/**
* Now we need to a Store that will receive payloads from the dispatcher
* and update itself accordingly. Like before, create a new class that
* extends from the Store class.
*
* Stores are automatically registered with the dispatcher, but rather than
* using a giant `switch` statement to check for specific action types, we
* register handlers with action ids, or with a reference to the action
* itself.
*
* Stores have a React-inspired API for managing state. Use `this.setState`
* to update state within your handlers. Multiple calls to `this.setState`
* within the same handler will be batched. A change event will fire after
* the batched updates are applied. Your view controllers can listen
* for change events using the EventEmitter API.
*/
var MessageStore = (function (Store) {
// Note that passing a flux instance to the constructor is not required;
// we do it here so we have access to any action ids we're interested in.
function MessageStore(flux) {
_classCallCheck(this, MessageStore);
// Don't forget to call the super constructor
_get(Object.getPrototypeOf(MessageStore.prototype), "constructor", this).call(this);
var messageActions = flux.getActions("messages");
this.register(messageActions.newMessage, this.handleNewMessage);
this.messageCounter = 0;
this.state = {};
}
_inherits(MessageStore, Store);
_prototypeProperties(MessageStore, null, {
handleNewMessage: {
value: function handleNewMessage(content) {
var id = this.messageCounter++;
this.setState(_defineProperty({}, id, {
content: content,
id: id }));
},
writable: true,
configurable: true
}
});
return MessageStore;
})(Store);
/**
* Here's where it all comes together. Extend from the base Flummox class
* to create a class that encapsulates your entire flux set-up.
*/
var Flux = (function (Flummox) {
function Flux() {
_classCallCheck(this, Flux);
_get(Object.getPrototypeOf(Flux.prototype), "constructor", this).call(this);
// Create actions first so our store can reference them in
// its constructor
this.createActions("messages", MessageActions);
// Extra arguments are sent to the store's constructor. Here, we're
// padding a reference to this flux instance
this.createStore("messages", MessageStore, this);
}
_inherits(Flux, Flummox);
return Flux;
})(Flummox);
/**
* And that's it! No need for singletons or global references -- just create
* a new instance.
*
* Now let's test it.
*/
it("creates new messages", function () {
var flux = new Flux();
var messageStore = flux.getStore("messages");
var messageActions = flux.getActions("messages");
expect(messageStore.state).to.deep.equal({});
messageActions.newMessage("Hello, world!");
expect(messageStore.state).to.deep.equal(_defineProperty({}, 0, {
content: "Hello, world!",
id: 0 }));
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZXhhbXBsZUZsdXgtdGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7b0JBQXdDLFNBQVM7O0lBQXhDLE9BQU8sU0FBUCxPQUFPO0lBQUUsS0FBSyxTQUFMLEtBQUs7SUFBRSxPQUFPLFNBQVAsT0FBTzs7O0FBRWhDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsWUFBTTs7OztBQUsxQixVQUFRLENBQUMsVUFBVSxFQUFFLFlBQU07Ozs7Ozs7OztRQVVuQixjQUFjLGNBQVMsT0FBTztlQUE5QixjQUFjOzhCQUFkLGNBQWM7O1lBQVMsT0FBTztBQUFQLGlCQUFPOzs7O2dCQUE5QixjQUFjLEVBQVMsT0FBTzs7MkJBQTlCLGNBQWM7QUFDbEIsa0JBQVU7aUJBQUEsb0JBQUMsT0FBTyxFQUFFOztBQUdsQixtQkFBTyxPQUFPLENBQUM7V0FDaEI7Ozs7OzthQUxHLGNBQWM7T0FBUyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7UUF3QjlCLFlBQVksY0FBUyxLQUFLOzs7QUFJbkIsZUFKUCxZQUFZLENBSUosSUFBSTs4QkFKWixZQUFZOzs7QUFPZCxtQ0FQRSxZQUFZLDZDQU9OOztBQUVSLFlBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakQsWUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hFLFlBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDOztBQUV4QixZQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztPQUNqQjs7Z0JBZEcsWUFBWSxFQUFTLEtBQUs7OzJCQUExQixZQUFZO0FBZ0JoQix3QkFBZ0I7aUJBQUEsMEJBQUMsT0FBTyxFQUFFO0FBQ3hCLGdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7O0FBRS9CLGdCQUFJLENBQUMsUUFBUSxxQkFDVixFQUFFLEVBQUc7QUFDSixxQkFBTyxFQUFQLE9BQU87QUFDUCxnQkFBRSxFQUFGLEVBQUUsRUFDSCxFQUNELENBQUM7V0FDSjs7Ozs7O2FBekJHLFlBQVk7T0FBUyxLQUFLOzs7Ozs7Ozs7UUFpQzFCLElBQUksY0FBUyxPQUFPO0FBQ2IsZUFEUCxJQUFJOzhCQUFKLElBQUk7O0FBRU4sbUNBRkUsSUFBSSw2Q0FFRTs7OztBQUlSLFlBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDOzs7O0FBSS9DLFlBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNsRDs7Z0JBWEcsSUFBSSxFQUFTLE9BQU87O2FBQXBCLElBQUk7T0FBUyxPQUFPOzs7Ozs7Ozs7QUFxQjFCLE1BQUUsQ0FBQyxzQkFBc0IsRUFBRSxZQUFNO0FBQy9CLFVBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDdEIsVUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3QyxVQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztBQUVqRCxZQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUU3QyxvQkFBYyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMzQyxZQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxxQkFDckMsQ0FBQyxFQUFHO0FBQ0gsZUFBTyxFQUFFLGVBQWU7QUFDeEIsVUFBRSxFQUFFLENBQUMsRUFDTixFQUNELENBQUM7S0FDSixDQUFDLENBQUM7R0FDSixDQUFDLENBQUM7Q0FFSixDQUFDLENBQUMiLCJmaWxlIjoic3JjL19fdGVzdHNfXy9leGFtcGxlRmx1eC10ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmx1bW1veCwgU3RvcmUsIEFjdGlvbnMgfSBmcm9tICcuLi9GbHV4JztcblxuZGVzY3JpYmUoJ0V4YW1wbGVzOicsICgpID0+IHtcblxuICAvKipcbiAgICogQSBzaW1wbGUgRmx1bW1veCBleGFtcGxlXG4gICAqL1xuICBkZXNjcmliZSgnTWVzc2FnZXMnLCAoKSA9PiB7XG5cbiAgICAvKipcbiAgICAgKiBUbyBjcmVhdGUgc29tZSBhY3Rpb25zLCBjcmVhdGUgYSBuZXcgY2xhc3MgdGhhdCBleHRlbmRzIGZyb20gdGhlIGJhc2VcbiAgICAgKiBBY3Rpb25zIGNsYXNzLiBNZXRob2RzIG9uIHRoZSBjbGFzcydzIHByb3RvdHlwZSB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvXG4gICAgICogYWN0aW9ucywgZWFjaCB3aXRoIGl0cyBvd24gYWN0aW9uIGlkLlxuICAgICAqXG4gICAgICogSW4gdGhpcyBleGFtcGxlLCBjYWxsaW5nIGBuZXdNZXNzYWdlYCB3aWxsIGZpcmUgdGhlIGRpc3BhdGNoZXIsIHdpdGhcbiAgICAgKiBhIHBheWxvYWQgY29udGFpbmluZyB0aGUgcGFzc2VkIG1lc3NhZ2UgY29udGVudC4gRWFzeSFcbiAgICAgKi9cbiAgICBjbGFzcyBNZXNzYWdlQWN0aW9ucyBleHRlbmRzIEFjdGlvbnMge1xuICAgICAgbmV3TWVzc2FnZShjb250ZW50KSB7XG5cbiAgICAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBhY3Rpb24gaXMgc2VudCB0byB0aGUgZGlzcGF0Y2hlci5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm93IHdlIG5lZWQgdG8gYSBTdG9yZSB0aGF0IHdpbGwgcmVjZWl2ZSBwYXlsb2FkcyBmcm9tIHRoZSBkaXNwYXRjaGVyXG4gICAgICogYW5kIHVwZGF0ZSBpdHNlbGYgYWNjb3JkaW5nbHkuIExpa2UgYmVmb3JlLCBjcmVhdGUgYSBuZXcgY2xhc3MgdGhhdFxuICAgICAqIGV4dGVuZHMgZnJvbSB0aGUgU3RvcmUgY2xhc3MuXG4gICAgICpcbiAgICAgKiBTdG9yZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkaXNwYXRjaGVyLCBidXQgcmF0aGVyIHRoYW5cbiAgICAgKiB1c2luZyBhIGdpYW50IGBzd2l0Y2hgIHN0YXRlbWVudCB0byBjaGVjayBmb3Igc3BlY2lmaWMgYWN0aW9uIHR5cGVzLCB3ZVxuICAgICAqIHJlZ2lzdGVyIGhhbmRsZXJzIHdpdGggYWN0aW9uIGlkcywgb3Igd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgYWN0aW9uXG4gICAgICogaXRzZWxmLlxuICAgICAqXG4gICAgICogU3RvcmVzIGhhdmUgYSBSZWFjdC1pbnNwaXJlZCBBUEkgZm9yIG1hbmFnaW5nIHN0YXRlLiBVc2UgYHRoaXMuc2V0U3RhdGVgXG4gICAgICogdG8gdXBkYXRlIHN0YXRlIHdpdGhpbiB5b3VyIGhhbmRsZXJzLiBNdWx0aXBsZSBjYWxscyB0byBgdGhpcy5zZXRTdGF0ZWBcbiAgICAgKiB3aXRoaW4gdGhlIHNhbWUgaGFuZGxlciB3aWxsIGJlIGJhdGNoZWQuIEEgY2hhbmdlIGV2ZW50IHdpbGwgZmlyZSBhZnRlclxuICAgICAqIHRoZSBiYXRjaGVkIHVwZGF0ZXMgYXJlIGFwcGxpZWQuIFlvdXIgdmlldyBjb250cm9sbGVycyBjYW4gbGlzdGVuXG4gICAgICogZm9yIGNoYW5nZSBldmVudHMgdXNpbmcgdGhlIEV2ZW50RW1pdHRlciBBUEkuXG4gICAgICovXG4gICAgY2xhc3MgTWVzc2FnZVN0b3JlIGV4dGVuZHMgU3RvcmUge1xuXG4gICAgICAvLyBOb3RlIHRoYXQgcGFzc2luZyBhIGZsdXggaW5zdGFuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCByZXF1aXJlZDtcbiAgICAgIC8vIHdlIGRvIGl0IGhlcmUgc28gd2UgaGF2ZSBhY2Nlc3MgdG8gYW55IGFjdGlvbiBpZHMgd2UncmUgaW50ZXJlc3RlZCBpbi5cbiAgICAgIGNvbnN0cnVjdG9yKGZsdXgpIHtcblxuICAgICAgICAvLyBEb24ndCBmb3JnZXQgdG8gY2FsbCB0aGUgc3VwZXIgY29uc3RydWN0b3JcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICBsZXQgbWVzc2FnZUFjdGlvbnMgPSBmbHV4LmdldEFjdGlvbnMoJ21lc3NhZ2VzJyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXIobWVzc2FnZUFjdGlvbnMubmV3TWVzc2FnZSwgdGhpcy5oYW5kbGVOZXdNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlQ291bnRlciA9IDA7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVOZXdNZXNzYWdlKGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IGlkID0gdGhpcy5tZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIFtpZF06IHtcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEhlcmUncyB3aGVyZSBpdCBhbGwgY29tZXMgdG9nZXRoZXIuIEV4dGVuZCBmcm9tIHRoZSBiYXNlIEZsdW1tb3ggY2xhc3NcbiAgICAgKiB0byBjcmVhdGUgYSBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyB5b3VyIGVudGlyZSBmbHV4IHNldC11cC5cbiAgICAgKi9cbiAgICBjbGFzcyBGbHV4IGV4dGVuZHMgRmx1bW1veCB7XG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICAvLyBDcmVhdGUgYWN0aW9ucyBmaXJzdCBzbyBvdXIgc3RvcmUgY2FuIHJlZmVyZW5jZSB0aGVtIGluXG4gICAgICAgIC8vIGl0cyBjb25zdHJ1Y3RvclxuICAgICAgICB0aGlzLmNyZWF0ZUFjdGlvbnMoJ21lc3NhZ2VzJywgTWVzc2FnZUFjdGlvbnMpO1xuXG4gICAgICAgIC8vIEV4dHJhIGFyZ3VtZW50cyBhcmUgc2VudCB0byB0aGUgc3RvcmUncyBjb25zdHJ1Y3Rvci4gSGVyZSwgd2UncmVcbiAgICAgICAgLy8gcGFkZGluZyBhIHJlZmVyZW5jZSB0byB0aGlzIGZsdXggaW5zdGFuY2VcbiAgICAgICAgdGhpcy5jcmVhdGVTdG9yZSgnbWVzc2FnZXMnLCBNZXNzYWdlU3RvcmUsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuZCB0aGF0J3MgaXQhIE5vIG5lZWQgZm9yIHNpbmdsZXRvbnMgb3IgZ2xvYmFsIHJlZmVyZW5jZXMgLS0ganVzdCBjcmVhdGVcbiAgICAgKiBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIE5vdyBsZXQncyB0ZXN0IGl0LlxuICAgICAqL1xuXG4gICAgaXQoJ2NyZWF0ZXMgbmV3IG1lc3NhZ2VzJywgKCkgPT4ge1xuICAgICAgbGV0IGZsdXggPSBuZXcgRmx1eCgpO1xuICAgICAgbGV0IG1lc3NhZ2VTdG9yZSA9IGZsdXguZ2V0U3RvcmUoJ21lc3NhZ2VzJyk7XG4gICAgICBsZXQgbWVzc2FnZUFjdGlvbnMgPSBmbHV4LmdldEFjdGlvbnMoJ21lc3NhZ2VzJyk7XG5cbiAgICAgIGV4cGVjdChtZXNzYWdlU3RvcmUuc3RhdGUpLnRvLmRlZXAuZXF1YWwoe30pO1xuXG4gICAgICBtZXNzYWdlQWN0aW9ucy5uZXdNZXNzYWdlKCdIZWxsbywgd29ybGQhJyk7XG4gICAgICBleHBlY3QobWVzc2FnZVN0b3JlLnN0YXRlKS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgWzBdOiB7XG4gICAgICAgICAgY29udGVudDogJ0hlbGxvLCB3b3JsZCEnLFxuICAgICAgICAgIGlkOiAwLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG59KTtcbiJdfQ== |