Skip to content

Commit 2b9a64b

Browse files
committed
Add flux-chat example
1 parent b3fd493 commit 2b9a64b

25 files changed

+21975
-32
lines changed

README.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ Getters can take 2 forms:
130130
##### `getters.js`
131131

132132
```js
133+
var toImmutable = require('nuclear-js').toImmutable
134+
133135
// it is idiomatic to facade all data access through getters, that way a component only has to subscribe to a getter making it agnostic
134136
// to the underyling stores / data transformation that is taking place
135137
exports.messages = ['messages']
@@ -451,7 +453,7 @@ var Map = require('immutable').Map
451453
var List = require('immutable').List
452454
var Nuclear = require('nuclear-js')
453455

454-
var itemStore = Nuclear.Store({
456+
var itemStore = new Nuclear.Store({
455457
// the parameter is optional, if not supplied will default to an `Immutable.Map({})`
456458
// Store state must be an ImmutableJS data structure or an immutable javascript primitive
457459
// like Number or String
@@ -474,7 +476,7 @@ var itemStore = Nuclear.Store({
474476
}
475477
})
476478

477-
var taxPercentStore = Nuclear.Store({
479+
var taxPercentStore = new Nuclear.Store({
478480
getInitialState: function() {
479481
return 0
480482
},
@@ -488,7 +490,7 @@ var taxPercentStore = Nuclear.Store({
488490
}
489491
})
490492

491-
var reactor = Reactor()
493+
var reactor = new Nuclear.Reactor()
492494
reactor.registerStores({
493495
items: itemStore,
494496
taxPercent: taxPercentStore,
@@ -766,17 +768,26 @@ Dispatches a message to all registered Stores. This process is done syncronously
766768
767769
ex: `reactor.dispatch('addUser', { name: 'jordan' })`
768770
769-
#### `Reactor#evaluate(...keyPath, [transformFn])`
771+
#### `Reactor#evaluate(Getter | KeyPath)`
770772
771773
Returns the immutable value for some KeyPath or Getter in the reactor state. Returns `undefined` if a keyPath doesn't have a value.
772774
773775
```js
774776
reactor.evaluate(['users', 'active'])
775-
reactor.evaluate('users.active', 'usernameFilter', function(activeUsers, filter) {
776-
return activeUsers.filter(function(user) {
777-
return user.get('username').indexOf(filter) !== -1
778-
}
779-
})
777+
reactor.evaluate([
778+
['users', 'active'],
779+
['filters', 'username'],
780+
/**
781+
* @param {Immutable.List} activeUsers
782+
* @param {String} usernameFilter
783+
* @return {Immutable.List}
784+
*/
785+
function(activeUsers, usernameFilter) {
786+
return activeUsers.filter(function(user) {
787+
return user.get('username').indexOf(usernameFilter) !== -1
788+
}
789+
},
790+
])
780791
```
781792
782793
#### `Reactor#evaluateToJS(...keyPath, [transformFn])`

dist/nuclear.js

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ return /******/ (function(modules) { // webpackBootstrap
6767
exports.Store = __webpack_require__(3)
6868

6969
// export the immutable library
70-
exports.Immutable = __webpack_require__(10)
70+
exports.Immutable = __webpack_require__(11)
7171

7272
/**
7373
* @return {boolean}
@@ -89,7 +89,7 @@ return /******/ (function(modules) { // webpackBootstrap
8989
/* 1 */
9090
/***/ function(module, exports, __webpack_require__) {
9191

92-
var Immutable = __webpack_require__(10)
92+
var Immutable = __webpack_require__(11)
9393
var isObject = __webpack_require__(6).isObject
9494

9595
/**
@@ -148,12 +148,13 @@ return /******/ (function(modules) { // webpackBootstrap
148148
/* 2 */
149149
/***/ function(module, exports, __webpack_require__) {
150150

151-
var Immutable = __webpack_require__(10)
151+
var Immutable = __webpack_require__(11)
152152
var logging = __webpack_require__(7)
153153
var ChangeObserver = __webpack_require__(8)
154154
var Getter = __webpack_require__(5)
155155
var KeyPath = __webpack_require__(4)
156156
var Evaluator = __webpack_require__(9)
157+
var createReactMixin = __webpack_require__(10)
157158

158159
// helper fns
159160
var toJS = __webpack_require__(1).toJS
@@ -180,6 +181,7 @@ return /******/ (function(modules) { // webpackBootstrap
180181

181182
this.debug = !!config.debug
182183

184+
this.ReactMixin = createReactMixin(this)
183185
/**
184186
* The state for the whole cluster
185187
*/
@@ -354,7 +356,7 @@ return /******/ (function(modules) { // webpackBootstrap
354356
/* 3 */
355357
/***/ function(module, exports, __webpack_require__) {
356358

357-
var Map = __webpack_require__(10).Map
359+
var Map = __webpack_require__(11).Map
358360
var extend = __webpack_require__(6).extend
359361

360362
/**
@@ -458,7 +460,7 @@ return /******/ (function(modules) { // webpackBootstrap
458460
/* 5 */
459461
/***/ function(module, exports, __webpack_require__) {
460462

461-
var Immutable = __webpack_require__(10)
463+
var Immutable = __webpack_require__(11)
462464
var isFunction = __webpack_require__(6).isFunction
463465
var isArray = __webpack_require__(6).isArray
464466
var isKeyPath = __webpack_require__(4).isKeyPath
@@ -543,7 +545,7 @@ return /******/ (function(modules) { // webpackBootstrap
543545
/* 6 */
544546
/***/ function(module, exports, __webpack_require__) {
545547

546-
var _ = __webpack_require__(13);
548+
var _ = __webpack_require__(14);
547549

548550
exports.clone = _.clone
549551

@@ -614,9 +616,9 @@ return /******/ (function(modules) { // webpackBootstrap
614616
/* 8 */
615617
/***/ function(module, exports, __webpack_require__) {
616618

617-
var Immutable = __webpack_require__(10)
618-
var hashCode = __webpack_require__(11)
619-
var isEqual = __webpack_require__(12)
619+
var Immutable = __webpack_require__(11)
620+
var hashCode = __webpack_require__(12)
621+
var isEqual = __webpack_require__(13)
620622

621623
/**
622624
* ChangeObserver is an object that contains a set of subscriptions
@@ -710,12 +712,12 @@ return /******/ (function(modules) { // webpackBootstrap
710712
/* 9 */
711713
/***/ function(module, exports, __webpack_require__) {
712714

713-
var Immutable = __webpack_require__(10)
715+
var Immutable = __webpack_require__(11)
714716
var helpers = __webpack_require__(1)
715717
var isImmutable = helpers.isImmutable
716718
var toImmutable = helpers.toImmutable
717-
var hashCode = __webpack_require__(11)
718-
var isEqual = __webpack_require__(12)
719+
var hashCode = __webpack_require__(12)
720+
var isEqual = __webpack_require__(13)
719721
var getComputeFn = __webpack_require__(5).getComputeFn
720722
var getDeps = __webpack_require__(5).getDeps
721723
var isKeyPath = __webpack_require__(4).isKeyPath
@@ -882,6 +884,56 @@ return /******/ (function(modules) { // webpackBootstrap
882884

883885
/***/ },
884886
/* 10 */
887+
/***/ function(module, exports, __webpack_require__) {
888+
889+
var each = __webpack_require__(6).each
890+
/**
891+
* @param {Reactor} reactor
892+
*/
893+
module.exports = function(reactor) {
894+
return {
895+
getInitialState: function() {
896+
return getState(reactor, this.getDataBindings())
897+
},
898+
899+
componentDidMount: function() {
900+
var component = this
901+
var dataBindings = this.getDataBindings()
902+
component.__unwatchFns = []
903+
each(this.getDataBindings(), function(getter, key) {
904+
var unwatchFn = reactor.observe(getter, function(val) {
905+
var newState = {};
906+
newState[key] = val;
907+
component.setState(newState)
908+
})
909+
910+
component.__unwatchFns.push(unwatchFn)
911+
})
912+
},
913+
914+
componentWillUnmount: function() {
915+
while (this.__unwatchFns.length) {
916+
this.__unwatchFns.shift()()
917+
}
918+
}
919+
}
920+
}
921+
922+
/**
923+
* Returns a mapping of the getDataBinding keys to
924+
* the reactor values
925+
*/
926+
function getState(reactor, data) {
927+
var state = {}
928+
for (var key in data) {
929+
state[key] = reactor.evaluate(data[key])
930+
}
931+
return state
932+
}
933+
934+
935+
/***/ },
936+
/* 11 */
885937
/***/ function(module, exports, __webpack_require__) {
886938

887939
/**
@@ -4799,10 +4851,10 @@ return /******/ (function(modules) { // webpackBootstrap
47994851

48004852

48014853
/***/ },
4802-
/* 11 */
4854+
/* 12 */
48034855
/***/ function(module, exports, __webpack_require__) {
48044856

4805-
var Immutable = __webpack_require__(10)
4857+
var Immutable = __webpack_require__(11)
48064858
var isGetter = __webpack_require__(5).isGetter
48074859

48084860
/**
@@ -4842,10 +4894,10 @@ return /******/ (function(modules) { // webpackBootstrap
48424894

48434895

48444896
/***/ },
4845-
/* 12 */
4897+
/* 13 */
48464898
/***/ function(module, exports, __webpack_require__) {
48474899

4848-
var Immutable = __webpack_require__(10)
4900+
var Immutable = __webpack_require__(11)
48494901
/**
48504902
* Is equal by value check
48514903
*/
@@ -4855,7 +4907,7 @@ return /******/ (function(modules) { // webpackBootstrap
48554907

48564908

48574909
/***/ },
4858-
/* 13 */
4910+
/* 14 */
48594911
/***/ function(module, exports, __webpack_require__) {
48604912

48614913
var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**
@@ -12016,10 +12068,10 @@ return /******/ (function(modules) { // webpackBootstrap
1201612068
}
1201712069
}.call(this));
1201812070

12019-
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(14)(module), (function() { return this; }())))
12071+
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(15)(module), (function() { return this; }())))
1202012072

1202112073
/***/ },
12022-
/* 14 */
12074+
/* 15 */
1202312075
/***/ function(module, exports, __webpack_require__) {
1202412076

1202512077
module.exports = function(module) {

dist/nuclear.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)