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== |