Comparing version
@@ -10,3 +10,3 @@ (function webpackUniversalModuleDefinition(root, factory) { | ||
root["GyreJS"] = factory(root["Immutable"]); | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_13__) { | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) { | ||
return /******/ (function(modules) { // webpackBootstrap | ||
@@ -58,5 +58,3 @@ /******/ // The module cache | ||
/** | ||
* Import libs | ||
*/ | ||
// Import sub libraries | ||
"use strict"; | ||
@@ -68,21 +66,21 @@ | ||
var _store = __webpack_require__(12); | ||
var _store = __webpack_require__(15); | ||
var _store2 = _interopRequireDefault(_store); | ||
var _gyresLocalFactory = __webpack_require__(3); | ||
var _gyresLocalFactory = __webpack_require__(5); | ||
var _gyresLocalFactory2 = _interopRequireDefault(_gyresLocalFactory); | ||
var _gyresSimpleRestFactory = __webpack_require__(7); | ||
var _gyresSmartRestFactory = __webpack_require__(9); | ||
var _gyresSimpleRestFactory2 = _interopRequireDefault(_gyresSimpleRestFactory); | ||
var _gyresSmartRestFactory2 = _interopRequireDefault(_gyresSmartRestFactory); | ||
// Middleware | ||
var _middleWareDispatchLogger = __webpack_require__(10); | ||
var _middleWareDispatchLogger = __webpack_require__(13); | ||
var _middleWareDispatchLogger2 = _interopRequireDefault(_middleWareDispatchLogger); | ||
var _middleWareInjectDispatch = __webpack_require__(11); | ||
var _middleWareInjectDispatch = __webpack_require__(14); | ||
@@ -99,3 +97,2 @@ var _middleWareInjectDispatch2 = _interopRequireDefault(_middleWareInjectDispatch); | ||
var store = _store2["default"](); | ||
var usedNameSpaces = []; | ||
@@ -107,14 +104,11 @@ // Public functions | ||
* @param {String} id Id of a registered gyre factory. | ||
* @param {String} [nameSpace] Namespace of new gyre. | ||
* @param {Object} [options] Options object for gyre. | ||
* @returns {Object} Gyre instance. | ||
*/ | ||
var createGyre = function createGyre(id, nameSpace) { | ||
var createGyre = function createGyre(id, options) { | ||
if (!gyres.has(id)) { | ||
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered."); | ||
} | ||
if (usedNameSpaces.indexOf(nameSpace) !== -1) { | ||
throw new Error(">> GyreJS ('" + id + "'): A gyre using the namespace '" + nameSpace + "' not registered."); | ||
} | ||
usedNameSpaces.push(nameSpace); | ||
return gyres.get(id)(store, nameSpace); | ||
return gyres.get(id)(store, Object.assign({}, { NS: id + "-" + Date.now() }, options)); | ||
}; | ||
@@ -135,3 +129,3 @@ | ||
registerGyreFactory("local", _gyresLocalFactory2["default"]); | ||
registerGyreFactory("simpleRest", _gyresSimpleRestFactory2["default"]); | ||
registerGyreFactory("smartRest", _gyresSmartRestFactory2["default"]); | ||
@@ -144,2 +138,8 @@ exports.createGyre = createGyre; | ||
/* 1 */ | ||
/***/ function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_1__; | ||
/***/ }, | ||
/* 2 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
@@ -153,3 +153,3 @@ | ||
var _actionHandler = __webpack_require__(2); | ||
var _actionHandler = __webpack_require__(4); | ||
@@ -161,15 +161,14 @@ var _actionHandler2 = _interopRequireDefault(_actionHandler); | ||
* | ||
* @param {String} defaultNS Default namespace name. | ||
* @param {Function} Reducer Reducer factory. | ||
* @param {Function} ReactHoC React HoC factory. | ||
* @param {Object} [actions] Default actions object. | ||
* @param {Function} [actions] Default actions object. | ||
* @param {Immutable.Map|Object} [state] Initial state object. | ||
* @returns {Function} Gyre factory function. | ||
*/ | ||
var gyreFactory = function gyreFactory(defaultNS, Reducer, ReactHoC, actions) { | ||
return function (store, NS) { | ||
var nameSpace = NS || defaultNS; | ||
var AH = _actionHandler2["default"](store, nameSpace); | ||
if (actions) { | ||
AH.addActions(actions); | ||
} | ||
var gyreFactory = function gyreFactory(Reducer, ReactHoC) { | ||
var actions = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2]; | ||
var state = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; | ||
return function (store, options) { | ||
// Private variables | ||
var AH = _actionHandler2["default"](store, options); | ||
@@ -185,3 +184,3 @@ // Public functions | ||
var getReducer = function getReducer(matcher, cb) { | ||
return Reducer(store, matcher, cb, nameSpace); | ||
return Reducer(store, AH.dispatch, matcher, cb, options); | ||
}; | ||
@@ -196,6 +195,15 @@ | ||
var setState = function setState(tState) { | ||
return store.setState(tState, nameSpace); | ||
return store.setState(tState, options.NS); | ||
}; | ||
/** | ||
* getState() | ||
* | ||
* @returns {Immutable.Map} Current store state. | ||
*/ | ||
var getState = function getState() { | ||
return store.getState.get(options.NS); | ||
}; | ||
/** | ||
* reactHoC() | ||
@@ -208,2 +216,6 @@ * | ||
// Setup | ||
AH.addActions(actions(options)); | ||
setState(state); | ||
// API | ||
@@ -214,2 +226,3 @@ return { | ||
dispatch: AH.dispatch, | ||
getState: getState, | ||
getReducer: getReducer, | ||
@@ -227,10 +240,299 @@ reactHoC: reactHoC, | ||
/***/ }, | ||
/* 2 */ | ||
/* 3 */ | ||
/***/ function(module, exports) { | ||
/** | ||
* localAH() | ||
* extractEndpoints() | ||
* | ||
* @param {Object} query Query object. | ||
* @returns {Object[]} Array of endpoints. | ||
*/ | ||
"use strict"; | ||
exports.__esModule = true; | ||
var extractEndpoints = function extractEndpoints(query) { | ||
var marked1$0 = [processQuery].map(regeneratorRuntime.mark); | ||
function processQuery(q, root, branch) { | ||
var _iterator, _isArray, _i, _ref, i, val, tBranch, rV, _iterator2, _isArray2, _i2, _ref2, idVal; | ||
return regeneratorRuntime.wrap(function processQuery$(context$2$0) { | ||
while (1) switch (context$2$0.prev = context$2$0.next) { | ||
case 0: | ||
_iterator = Object.keys(q), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); | ||
case 1: | ||
if (!_isArray) { | ||
context$2$0.next = 7; | ||
break; | ||
} | ||
if (!(_i >= _iterator.length)) { | ||
context$2$0.next = 4; | ||
break; | ||
} | ||
return context$2$0.abrupt("break", 36); | ||
case 4: | ||
_ref = _iterator[_i++]; | ||
context$2$0.next = 11; | ||
break; | ||
case 7: | ||
_i = _iterator.next(); | ||
if (!_i.done) { | ||
context$2$0.next = 10; | ||
break; | ||
} | ||
return context$2$0.abrupt("break", 36); | ||
case 10: | ||
_ref = _i.value; | ||
case 11: | ||
i = _ref; | ||
val = q[i]; | ||
tBranch = branch ? branch.concat([i]) : [i]; | ||
rV = { | ||
name: root ? root + "/" + i : i, | ||
branch: tBranch, | ||
id: val.id ? val.id : null, | ||
fields: val.fields ? val.fields : null | ||
}; | ||
if (!(rV.fields || rV.id && !val.children)) { | ||
context$2$0.next = 18; | ||
break; | ||
} | ||
context$2$0.next = 18; | ||
return rV; | ||
case 18: | ||
if (!val.children) { | ||
context$2$0.next = 34; | ||
break; | ||
} | ||
_iterator2 = Array.isArray(val.id) ? val.id : [val.id], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); | ||
case 20: | ||
if (!_isArray2) { | ||
context$2$0.next = 26; | ||
break; | ||
} | ||
if (!(_i2 >= _iterator2.length)) { | ||
context$2$0.next = 23; | ||
break; | ||
} | ||
return context$2$0.abrupt("break", 34); | ||
case 23: | ||
_ref2 = _iterator2[_i2++]; | ||
context$2$0.next = 30; | ||
break; | ||
case 26: | ||
_i2 = _iterator2.next(); | ||
if (!_i2.done) { | ||
context$2$0.next = 29; | ||
break; | ||
} | ||
return context$2$0.abrupt("break", 34); | ||
case 29: | ||
_ref2 = _i2.value; | ||
case 30: | ||
idVal = _ref2; | ||
return context$2$0.delegateYield(processQuery(val.children, idVal ? i + "/" + idVal : i, tBranch), "t0", 32); | ||
case 32: | ||
context$2$0.next = 20; | ||
break; | ||
case 34: | ||
context$2$0.next = 1; | ||
break; | ||
case 36: | ||
case "end": | ||
return context$2$0.stop(); | ||
} | ||
}, marked1$0[0], this); | ||
} | ||
var it = processQuery(query); | ||
var res = it.next(); | ||
var urlDefs = []; | ||
while (!res.done) { | ||
urlDefs.push(res.value); | ||
res = it.next(); | ||
} | ||
return urlDefs; | ||
}; | ||
/** | ||
* createUrls() | ||
* Creates urls from query | ||
* | ||
* @param {Object}query Query object. | ||
* @returns {String[]} Array of urls. | ||
*/ | ||
var createUrls = function createUrls(query) { | ||
var urlDefs = extractEndpoints(query); | ||
return urlDefs.map(function (urlDef) { | ||
var urlString = urlDef.name; | ||
if (urlDef.hasOwnProperty("id") && urlDef.id !== null) { | ||
urlString = urlString + "/" + urlDef.id; | ||
} | ||
if (Array.isArray(urlDef.fields) && urlDef.fields.length > 0) { | ||
urlString = urlString + "?fields=" + urlDef.fields.toString(); | ||
} | ||
return { | ||
path: urlString, | ||
type: urlDef.branch[urlDef.branch.length - 1], | ||
root: urlDef.name | ||
}; | ||
}); | ||
}; | ||
/** | ||
* checkStatusAndParse() | ||
* | ||
* @param {Object} response Fetch response. | ||
* @returns {Object} Parsed response. | ||
*/ | ||
var checkStatusAndParse = function checkStatusAndParse(response) { | ||
if (response.status >= 200 && response.status < 300) { | ||
return response.json().then(function (data) { | ||
return { | ||
success: true, | ||
data: data | ||
}; | ||
}); | ||
} | ||
return new Promise(function (resolve) { | ||
return resolve({ | ||
success: false, | ||
msg: response, | ||
code: response.status | ||
}); | ||
}); | ||
}; | ||
/** | ||
* parse() | ||
* | ||
* @param {Immutable.Map} endpoint | ||
* @returns {*} | ||
*/ | ||
var transform = function transform(endpoint) { | ||
return function (response) { | ||
if (response.success) { | ||
var _ret = (function () { | ||
var rData = Array.isArray(response.data) ? response.data : [response.data]; | ||
// Get idList and map data | ||
var idList = {}; | ||
var data = {}; | ||
idList[endpoint.get("root")] = []; | ||
data[endpoint.get("type")] = {}; | ||
rData.forEach(function (entry) { | ||
idList[endpoint.get("root")].push(entry.id.toString()); | ||
data[endpoint.get("type")][entry.id.toString()] = entry; | ||
}); | ||
return { | ||
v: { | ||
success: true, | ||
data: data, | ||
idList: idList | ||
} | ||
}; | ||
})(); | ||
if (typeof _ret === "object") return _ret.v; | ||
} | ||
return response; | ||
}; | ||
}; | ||
/** | ||
* fetchUrl() | ||
* | ||
* @param {String} host Endpoint host. | ||
* @param {Immutable.Map} endpoint Endpoint options. | ||
* @returns {Promise} Promise of fetch. | ||
*/ | ||
var fetchUrl = function fetchUrl(host, endpoint) { | ||
var hostName = host || location.protocol + "//" + location.hostname + (location.port ? ":" + location.port : ""); | ||
// Fetch data | ||
return fetch(hostName + "/" + endpoint.get("path")).then(checkStatusAndParse).then(transform(endpoint)); | ||
}; | ||
/** | ||
* hash() | ||
* Simple hash from string | ||
* | ||
* @param {String} str string | ||
* @returns {Number} hash Hash of string. | ||
*/ | ||
var hash = function hash(str) { | ||
var len = str.length; | ||
var h = 0; | ||
if (str.length === 0) { | ||
return h; | ||
} | ||
for (var i = 0; i < len; i++) { | ||
var chr = str.charCodeAt(i); | ||
h = (h << 5) - h + chr; | ||
h |= 0; | ||
} | ||
return h; | ||
}; | ||
/** | ||
* hashQueryObject() | ||
* Simple query hash from object | ||
* | ||
* @param {Object} obj Query object | ||
* @returns {Number} hash Hash of query. | ||
*/ | ||
var hashQueryObject = function hashQueryObject(obj) { | ||
return hash(JSON.stringify(obj)); | ||
}; | ||
// Helper functions | ||
var helpers = { | ||
createUrls: createUrls, | ||
fetchUrl: fetchUrl, | ||
hashQueryObject: hashQueryObject | ||
}; | ||
exports["default"] = helpers; | ||
module.exports = exports["default"]; | ||
// If it has fields, OR an id and no children, return as endpoint. | ||
/***/ }, | ||
/* 4 */ | ||
/***/ function(module, exports) { | ||
/** | ||
* actionHandler() | ||
* | ||
* @param {Object} store instance. | ||
* @param {String} nameSpace state key. | ||
* @param {Object} options Options object. | ||
* @returns {{addAction: Function, dispatch: Function}} API. | ||
@@ -241,3 +543,3 @@ */ | ||
exports.__esModule = true; | ||
var localAH = function localAH(store, nameSpace) { | ||
var actionHandler = function actionHandler(store, options) { | ||
// Private variables | ||
@@ -264,3 +566,3 @@ var actionMap = new Map(); | ||
return function () { | ||
return next(nameSpace, id, args, prev, dispatch); | ||
return next(options.NS, id, args, prev, dispatch); | ||
}; | ||
@@ -271,3 +573,3 @@ }, function () { | ||
} else { | ||
console.warn(">> GyreJS-'" + nameSpace + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)"); | ||
console.warn(">> GyreJS-'" + options.NS + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)"); | ||
} | ||
@@ -281,9 +583,8 @@ }; | ||
* @param {Function} func Reducer function. | ||
* @param {Boolean} passDispatch Whether to pass the dispatch method to | ||
* the actions. | ||
* @returns {void} | ||
*/ | ||
var addAction = function addAction(id, func, passDispatch) { | ||
var addAction = function addAction(id, func) { | ||
return actionMap.set(id, function (args) { | ||
store.updateState(nameSpace, func, args, passDispatch ? dispatch : null); | ||
store.updateState(options.NS, func, args); | ||
}); | ||
@@ -296,9 +597,8 @@ }; | ||
* @param {Object} actions Key/func object of actions. | ||
* @param {Boolean} passDispatch Whether to pass the dispatch method to | ||
* the actions. | ||
* @returns {void} | ||
*/ | ||
var addActions = function addActions(actions, passDispatch) { | ||
var addActions = function addActions(actions) { | ||
Object.keys(actions).forEach(function (action) { | ||
addAction(action, actions[action], passDispatch); | ||
addAction(action, actions[action]); | ||
}); | ||
@@ -326,7 +626,7 @@ }; | ||
exports["default"] = localAH; | ||
exports["default"] = actionHandler; | ||
module.exports = exports["default"]; | ||
/***/ }, | ||
/* 3 */ | ||
/* 5 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
@@ -340,19 +640,19 @@ | ||
var _gyreFactory = __webpack_require__(1); | ||
var _gyreFactory = __webpack_require__(2); | ||
var _gyreFactory2 = _interopRequireDefault(_gyreFactory); | ||
var _reducer = __webpack_require__(5); | ||
var _reducer = __webpack_require__(7); | ||
var _reducer2 = _interopRequireDefault(_reducer); | ||
var _reactHoC = __webpack_require__(4); | ||
var _reactHoC = __webpack_require__(6); | ||
var _reactHoC2 = _interopRequireDefault(_reactHoC); | ||
exports["default"] = _gyreFactory2["default"]("local", _reducer2["default"], _reactHoC2["default"]); | ||
exports["default"] = _gyreFactory2["default"](_reducer2["default"], _reactHoC2["default"]); | ||
module.exports = exports["default"]; | ||
/***/ }, | ||
/* 4 */ | ||
/* 6 */ | ||
/***/ function(module, exports) { | ||
@@ -404,3 +704,3 @@ | ||
render: function render() { | ||
return typeof this.state.data !== "undefined" ? React.createElement(DefaultComponent, _extends({}, this.props, this.state)) : false; | ||
return typeof this.state.data !== "undefined" ? React.createElement(DefaultComponent, _extends({}, this.props, this.state.data)) : false; | ||
} | ||
@@ -415,3 +715,3 @@ }); | ||
/***/ }, | ||
/* 5 */ | ||
/* 7 */ | ||
/***/ function(module, exports) { | ||
@@ -423,5 +723,6 @@ | ||
* @param {Object} store Store instance | ||
* @param {Function} dispatch Dispatch | ||
* @param {Array|String} matcher Matcher | ||
* @param {Function} cb Callback | ||
* @param {String} nameSpace Namespace | ||
* @param {Object} options Options object. | ||
* @returns {Function} Un-register function | ||
@@ -432,6 +733,6 @@ */ | ||
exports.__esModule = true; | ||
var reducer = function reducer(store, matcher, cb, nameSpace) { | ||
var reducer = function reducer(store, dispatch, matcher, cb, options) { | ||
// Private functions | ||
var update = function update(stateVar) { | ||
var state = stateVar.get(nameSpace); | ||
var state = stateVar.get(options.NS); | ||
var matchValue = Array.isArray(matcher) ? matcher : [matcher]; | ||
@@ -457,4 +758,4 @@ | ||
/***/ }, | ||
/* 6 */ | ||
/***/ function(module, exports) { | ||
/* 8 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
@@ -464,17 +765,198 @@ "use strict"; | ||
exports.__esModule = true; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
var _helpers = __webpack_require__(3); | ||
var _immutable = __webpack_require__(1); | ||
var _immutable2 = _interopRequireDefault(_immutable); | ||
var IMap = _immutable2["default"].Map; | ||
var IList = _immutable2["default"].List; | ||
// Status constants | ||
var STATUS_COMPLETED = "COMPLETED"; | ||
var STATUS_LOADING = "LOADING"; | ||
// const STATUS_CREATING = "CREATING"; | ||
var STATUS_UPDATING = "UPDATING"; | ||
// const STATUS_REMOVING = "REMOVING"; | ||
var STATUS_ERROR = "ERROR"; | ||
// Actions | ||
var actions = {}; | ||
var ADD_QUERY = "ADD_QUERY"; | ||
var FETCH_QUERY = "FETCH_QUERY"; | ||
var COMPLETE_QUERY = "COMPLETE_QUERY"; | ||
var FAIL_QUERY = "FAIL_QUERY"; | ||
var CREATE = "CREATE"; | ||
var ADD_QUERY = "ADD_QUERY"; | ||
actions[ADD_QUERY] = function (state, dispatcher, query) { | ||
return state.get("queries").set(query, query); | ||
/* | ||
const UPDATE = "UPDATE"; | ||
const DELETE = "DELETE"; | ||
*/ | ||
// Misc | ||
var newQuery = IMap({ | ||
status: null, | ||
count: 0 | ||
}); | ||
exports["default"] = function (_ref) { | ||
var hostname = _ref.hostname; | ||
/** | ||
* Action: ADD_QUERY | ||
* | ||
* @param state | ||
* @param query | ||
* @param hash | ||
* @param dispatch | ||
*/ | ||
actions[ADD_QUERY] = function (state, query, hash, dispatch) { | ||
return state.reduce(function (memo, value, key) { | ||
if (key === "queries") { | ||
memo = memo.set("queries", value.set(hash, newQuery.merge(value.get(hash)).merge({ | ||
hash: hash, | ||
urls: _helpers.createUrls(query) | ||
}).map(function (qvVal, qvKey) { | ||
switch (qvKey) { | ||
case "count": | ||
{ | ||
return qvVal + 1; | ||
} | ||
case "status": | ||
{ | ||
return qvVal === STATUS_COMPLETED ? STATUS_UPDATING : qvVal; | ||
} | ||
default: | ||
return qvVal; | ||
} | ||
})).map(function (qVal, qKey) { | ||
if (qKey === hash) { | ||
if ([STATUS_LOADING, STATUS_UPDATING].indexOf(qVal.get("status")) === -1) { | ||
dispatch(FETCH_QUERY, qVal); | ||
} | ||
} | ||
return qVal.set("status", qVal.get("status") || STATUS_LOADING); | ||
})); | ||
} | ||
return memo; | ||
}, state); | ||
}; | ||
/** | ||
* Action: FETCH_QUERY | ||
* | ||
* @param state | ||
* @param query | ||
* @param dispatch | ||
*/ | ||
actions[FETCH_QUERY] = function (state, query, dispatch) { | ||
// Fetch urls | ||
var promiseArray = query.get("urls").map(function (endpoint) { | ||
return _helpers.fetchUrl(hostname, endpoint); | ||
}); | ||
Promise.all(promiseArray).then(function (resultArray) { | ||
var fetchResult = resultArray.reduce(function (memo, _ref2) { | ||
var success = _ref2.success; | ||
var msg = _ref2.msg; | ||
if (!success) { | ||
memo.success = false; | ||
memo.msgList = memo.msgList.push(msg); | ||
} | ||
return memo; | ||
}, { success: true, msgList: IList([]) }); | ||
if (fetchResult.success) { | ||
dispatch(COMPLETE_QUERY, resultArray, query); | ||
} else { | ||
dispatch(FAIL_QUERY, fetchResult.msgList, query); | ||
} | ||
})["catch"](function (error) { | ||
dispatch(FAIL_QUERY, [error], query); | ||
}); | ||
}; | ||
/** | ||
* Action: COMPLETE_QUERY | ||
* | ||
* @param state | ||
* @param resultArray | ||
* @param query | ||
*/ | ||
actions[COMPLETE_QUERY] = function (state, resultArray, query) { | ||
return state.reduce(function (memo, value, key) { | ||
if (key === "queries") { | ||
memo = memo.set("queries", value.map(function (qr, ky) { | ||
var qry = qr; | ||
if (ky === query.get("hash")) { | ||
qry = qry.merge({ | ||
"status": STATUS_COMPLETED, | ||
"idList": resultArray.reduce(function (prev, next) { | ||
return prev.merge(next.idList); | ||
}, IMap({})) | ||
}); | ||
} | ||
return qry; | ||
})); | ||
} | ||
if (key === "data") { | ||
memo = memo.set("data", resultArray.reduce(function (prev, result) { | ||
return prev.mergeDeep(result.data); | ||
}, memo.get("data"))); | ||
} | ||
return memo; | ||
}, state); | ||
}; | ||
/** | ||
* Action: FAIL_QUERY | ||
* | ||
* @param state | ||
* @param msgList | ||
* @param query | ||
*/ | ||
actions[FAIL_QUERY] = function (state, msgList, query) { | ||
return state.reduce(function (memo, value, key) { | ||
if (key === "queries") { | ||
memo = memo.set("queries", value.map(function (qr, ky) { | ||
var qry = qr; | ||
if (ky === query.get("hash")) { | ||
qry = qry.merge({ | ||
"status": STATUS_ERROR, | ||
"msg": msgList | ||
}); | ||
} | ||
return qry; | ||
})); | ||
} | ||
return memo; | ||
}, state); | ||
}; | ||
actions[CREATE] = function (state, type, data) { | ||
return state.reduce(function (memo, value, key) { | ||
if (key === "data") { | ||
var id = Date.now(); | ||
memo = memo.setIn(["data", type, id], _immutable2["default"].fromJS(data)); | ||
} | ||
return memo; | ||
}, state); | ||
}; | ||
return actions; | ||
}; | ||
exports["default"] = { | ||
passDispatch: true, | ||
actions: actions | ||
}; | ||
module.exports = exports["default"]; | ||
/***/ }, | ||
/* 7 */ | ||
/* 9 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
@@ -488,25 +970,41 @@ | ||
var _gyreFactory = __webpack_require__(1); | ||
var _gyreFactory = __webpack_require__(2); | ||
var _gyreFactory2 = _interopRequireDefault(_gyreFactory); | ||
var _reducer = __webpack_require__(9); | ||
var _reducer = __webpack_require__(11); | ||
var _reducer2 = _interopRequireDefault(_reducer); | ||
var _reactHoC = __webpack_require__(8); | ||
var _reactHoC = __webpack_require__(10); | ||
var _reactHoC2 = _interopRequireDefault(_reactHoC); | ||
var _actions = __webpack_require__(6); | ||
var _actions = __webpack_require__(8); | ||
var _actions2 = _interopRequireDefault(_actions); | ||
exports["default"] = _gyreFactory2["default"]("simpleRest", _reducer2["default"], _reactHoC2["default"], _actions2["default"]); | ||
var _state = __webpack_require__(12); | ||
var _state2 = _interopRequireDefault(_state); | ||
exports["default"] = _gyreFactory2["default"](_reducer2["default"], _reactHoC2["default"], _actions2["default"], _state2["default"]); | ||
module.exports = exports["default"]; | ||
/***/ }, | ||
/* 8 */ | ||
/***/ function(module, exports) { | ||
/* 10 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
exports.__esModule = true; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
var _immutable = __webpack_require__(1); | ||
var _immutable2 = _interopRequireDefault(_immutable); | ||
/** | ||
@@ -518,18 +1016,13 @@ * Higher order Component factory for local gyre. | ||
*/ | ||
"use strict"; | ||
exports.__esModule = true; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var localHoCFactory = function localHoCFactory(reducer) { | ||
var reactHoCFactory = function reactHoCFactory(reducer) { | ||
/** | ||
* localHoC() | ||
* reactHoC() | ||
* | ||
* @param {String} matcher Matcher. | ||
* @param {Object} DefaultComponent Default component. | ||
* @param {*} initialData Initial state. | ||
* @param {Object} LoadingComponent Loading component. | ||
* @param {Object} ErrorComponent Error component. | ||
* @returns {Object} React class | ||
*/ | ||
return function (matcher, DefaultComponent) { | ||
return function (matcher, DefaultComponent, LoadingComponent, ErrorComponent) { | ||
return React.createClass({ | ||
@@ -545,4 +1038,11 @@ displayName: "GyreJS-localHoC", | ||
}, | ||
shouldComponentUpdate: function shouldComponentUpdate(nextState) { | ||
return this.state.data !== nextState.data; | ||
shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) { | ||
if (this.state.status !== nextState.status) { | ||
return true; | ||
} | ||
if (nextState.data) { | ||
return !_immutable2["default"].is(nextState.data, this.state.data); | ||
} | ||
return true; | ||
}, | ||
@@ -552,9 +1052,32 @@ componentWillUnmount: function componentWillUnmount() { | ||
}, | ||
handleNewData: function handleNewData(data) { | ||
handleNewData: function handleNewData(status, data) { | ||
this.setState({ | ||
data: data | ||
data: data, | ||
status: status | ||
}); | ||
}, | ||
render: function render() { | ||
return typeof this.state.data !== "undefined" ? React.createElement(DefaultComponent, _extends({}, this.props, this.state)) : false; | ||
// Render wrapped component with current props and state as props. | ||
if (!this.state || !this.state.status) { | ||
return false; | ||
} | ||
var Component = undefined; | ||
switch (this.state.status) { | ||
case "LOADING": | ||
{ | ||
Component = LoadingComponent; | ||
break; | ||
} | ||
case "ERROR": | ||
{ | ||
Component = ErrorComponent; | ||
break; | ||
} | ||
default: | ||
{ | ||
Component = DefaultComponent; | ||
} | ||
} | ||
return Component ? React.createElement(Component, _extends({}, this.props, this.state)) : false; | ||
} | ||
@@ -565,9 +1088,23 @@ }); | ||
exports["default"] = localHoCFactory; | ||
exports["default"] = reactHoCFactory; | ||
module.exports = exports["default"]; | ||
/***/ }, | ||
/* 9 */ | ||
/***/ function(module, exports) { | ||
/* 11 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
exports.__esModule = true; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
var _immutable = __webpack_require__(1); | ||
var _immutable2 = _interopRequireDefault(_immutable); | ||
var _helpers = __webpack_require__(3); | ||
var IMap = _immutable2["default"].Map; | ||
/** | ||
@@ -577,26 +1114,47 @@ * reducer() | ||
* @param {Object} store Store instance | ||
* @param {Function} dispatch Dispatch | ||
* @param {Array|String} matcher Matcher | ||
* @param {Function} cb Callback | ||
* @param {String} nameSpace Namespace | ||
* @param {Object} NS NameSpace from Options object. | ||
* @returns {Function} Un-register function | ||
*/ | ||
"use strict"; | ||
var reducer = function reducer(store, dispatch, matcher, cb, _ref) { | ||
var NS = _ref.NS; | ||
exports.__esModule = true; | ||
var reducer = function reducer(store, matcher, cb, nameSpace) { | ||
// Private functions | ||
var update = function update(stateVar) { | ||
var state = stateVar.get(nameSpace); | ||
var matchValue = Array.isArray(matcher) ? matcher : [matcher]; | ||
var queryHash = _helpers.hashQueryObject(matcher); | ||
if (state) { | ||
cb(matchValue.reduce(function (memo, val) { | ||
memo[val] = state.get(val); | ||
var update = function update(state) { | ||
var queryResult = state.getIn([NS, "queries", queryHash, "idList"]); | ||
var queryInfo = state.getIn([NS, "queries", queryHash]); | ||
if (queryResult) { | ||
cb(queryInfo.get("status"), queryResult.reduce(function (mm, value, key) { | ||
var memo = mm; | ||
// Create path | ||
var path = key.split("/").reduce(function (mem, val, index) { | ||
if (index % 2 === 0 && index) { | ||
mem.push("children"); | ||
} | ||
mem.push(val); | ||
return mem; | ||
}, []); | ||
// Add to reducer result | ||
var type = key.split("/"); | ||
type = type[type.length - 1]; | ||
value.forEach(function (val) { | ||
memo = memo.mergeDeepIn(path.concat(val), state.getIn([NS, "data", type, val])); | ||
}); | ||
return memo; | ||
}, {})); | ||
}, IMap({}))); | ||
} else { | ||
cb(void 0); | ||
cb(queryInfo.get("status")); | ||
} | ||
}; | ||
// Emit action to add query | ||
dispatch("ADD_QUERY", matcher, queryHash); | ||
// Return the un-register function right away. | ||
@@ -610,3 +1168,25 @@ return store.addReducer(update); | ||
/***/ }, | ||
/* 10 */ | ||
/* 12 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
exports.__esModule = true; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | ||
var _immutable = __webpack_require__(1); | ||
var _immutable2 = _interopRequireDefault(_immutable); | ||
var IMap = _immutable2["default"].Map; | ||
exports["default"] = IMap({ | ||
queries: IMap({}), | ||
data: IMap({}) | ||
}); | ||
module.exports = exports["default"]; | ||
/***/ }, | ||
/* 13 */ | ||
/***/ function(module, exports) { | ||
@@ -635,3 +1215,3 @@ | ||
/***/ }, | ||
/* 11 */ | ||
/* 14 */ | ||
/***/ function(module, exports) { | ||
@@ -661,3 +1241,3 @@ | ||
/***/ }, | ||
/* 12 */ | ||
/* 15 */ | ||
/***/ function(module, exports, __webpack_require__) { | ||
@@ -671,3 +1251,3 @@ | ||
var _immutable = __webpack_require__(13); | ||
var _immutable = __webpack_require__(1); | ||
@@ -724,4 +1304,6 @@ var _immutable2 = _interopRequireDefault(_immutable); | ||
var setNewState = function setNewState(newState, nameSpace) { | ||
state = state.set(nameSpace, newState); | ||
sendUpdate(); | ||
if (state.get(nameSpace) !== newState) { | ||
state = state.set(nameSpace, newState); | ||
sendUpdate(); | ||
} | ||
return state; | ||
@@ -775,11 +1357,6 @@ }; | ||
* @param {Array} args Reducer function arguments. | ||
* @param {Function} [dispatch] Dispatcher function. | ||
* @returns {Immutable.Map} state New state. | ||
*/ | ||
var updateState = function updateState(nameSpace, func, args, dispatch) { | ||
var farg = [state.get(nameSpace) || IMap({})]; | ||
if (dispatch) { | ||
farg.concat(dispatch); | ||
} | ||
setNewState(func.apply(undefined, farg.concat(args)) || state.get(nameSpace), nameSpace); | ||
var updateState = function updateState(nameSpace, func, args) { | ||
setNewState(func.apply(undefined, [state.get(nameSpace)].concat(args)) || state.get(nameSpace), nameSpace); | ||
return state; | ||
@@ -800,8 +1377,2 @@ }; | ||
/***/ }, | ||
/* 13 */ | ||
/***/ function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_13__; | ||
/***/ } | ||
@@ -808,0 +1379,0 @@ /******/ ]) |
@@ -1,1 +0,1 @@ | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("Immutable")):"function"==typeof define&&define.amd?define(["Immutable"],e):"object"==typeof exports?exports.GyreJS=e(require("Immutable")):t.GyreJS=e(t.Immutable)}(this,function(t){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(12),a=r(u),o=n(3),i=r(o),s=n(7),c=r(s),d=n(10),f=r(d),l=n(11),p=r(l),h={dispatchLogger:f.default,injectDispatch:p.default},g=new Map,_=a.default(),m=[],y=function(t,e){if(g.has(t)||console.warn(">> GyreJS: Gyre factory '"+t+"' not registered."),-1!==m.indexOf(e))throw new Error(">> GyreJS ('"+t+"'): A gyre using the namespace '"+e+"' not registered.");return m.push(e),g.get(t)(_,e)},v=function(t,e){g.set(t,e)};v("local",i.default),v("simpleRest",c.default),e.createGyre=y,e.middleWare=h,e.registerGyreFactory=v},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(2),a=r(u),o=function(t,e,n,r){return function(u,o){var i=o||t,s=a.default(u,i);r&&s.addActions(r);var c=function(t,n){return e(u,t,n,i)},d=function(t){return u.setState(t,i)},f=n(c);return{addAction:s.addAction,addActions:s.addActions,dispatch:s.dispatch,getReducer:c,reactHoC:f,setState:d,use:s.use}}};e.default=o,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e){var n=new Map,r=[],u=function s(t){for(var u=arguments.length,a=Array(u>1?u-1:0),o=1;u>o;o++)a[o-1]=arguments[o];n.has(t)?r.reduce(function(n,r){return function(){return r(e,t,a,n,s)}},function(){return n.get(t)(a)})():console.warn(">> GyreJS-'"+e+"'-gyre: Unregistered action dispatched: '"+t+"' with arguments:",a,". (This is a no-op)")},a=function(r,a,o){return n.set(r,function(n){t.updateState(e,a,n,o?u:null)})},o=function(t,e){Object.keys(t).forEach(function(n){a(n,t[n],e)})},i=function(t){r.unshift(t)};return{addAction:a,addActions:o,dispatch:u,use:i}};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),o=n(5),i=r(o),s=n(4),c=r(s);e.default=a.default("local",i.default,c.default),t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},r=function(t){return function(e,r){return React.createClass({displayName:"GyreJS-localHoC",getInitialState:function(){return{data:null}},componentWillMount:function(){this.unRegisterReducer=t(e,this.handleNewData)},shouldComponentUpdate:function(t){return this.state.data!==t.data},componentWillUnmount:function(){this.unRegisterReducer()},handleNewData:function(t){this.setState({data:t})},render:function(){return"undefined"!=typeof this.state.data?React.createElement(r,n({},this.props,this.state)):!1}})}};e.default=r,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r){var u=function(t){var u=t.get(r),a=Array.isArray(e)?e:[e];n(u?a.reduce(function(t,e){return t[e]=u.get(e),t},{}):void 0)};return t.addReducer(u)};e.default=n,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n={},r="ADD_QUERY";n[r]=function(t,e,n){return t.get("queries").set(n,n)},e.default={passDispatch:!0,actions:n},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),o=n(9),i=r(o),s=n(8),c=r(s),d=n(6),f=r(d);e.default=a.default("simpleRest",i.default,c.default,f.default),t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},r=function(t){return function(e,r){return React.createClass({displayName:"GyreJS-localHoC",getInitialState:function(){return{data:null}},componentWillMount:function(){this.unRegisterReducer=t(e,this.handleNewData)},shouldComponentUpdate:function(t){return this.state.data!==t.data},componentWillUnmount:function(){this.unRegisterReducer()},handleNewData:function(t){this.setState({data:t})},render:function(){return"undefined"!=typeof this.state.data?React.createElement(r,n({},this.props,this.state)):!1}})}};e.default=r,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r){var u=function(t){var u=t.get(r),a=Array.isArray(e)?e:[e];n(u?a.reduce(function(t,e){return t[e]=u.get(e),t},{}):void 0)};return t.addReducer(u)};e.default=n,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r){console.log(">> GyreJS-'"+t+"'-gyre: Applying action '"+e+"' with arguments: ",n),r()};e.default=n,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r,u){n.push(u),r()};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(13),a=r(u),o=a.default.Map,i=function(){var t=o({}),e=[],n=function(){return e.forEach(function(e){return e(t)})},r=function(t){return function(){return e=e.filter(function(e){return e!==t})}},u=function(e,r){return t=t.set(r,e),n(),t},a=function(n){return e.push(n),n(t),r(n)},i=function(){return t},s=function(t,e){return u(o.isMap(t)?t:o(t),e)},c=function(e,n,r,a){var i=[t.get(e)||o({})];return a&&i.concat(a),u(n.apply(void 0,i.concat(r))||t.get(e),e),t};return{addReducer:a,getState:i,setState:s,updateState:c}};e.default=i,t.exports=e.default},function(e,n){e.exports=t}])}); | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("Immutable")):"function"==typeof define&&define.amd?define(["Immutable"],e):"object"==typeof exports?exports.GyreJS=e(require("Immutable")):t.GyreJS=e(t.Immutable)}(this,function(t){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(15),a=r(u),s=n(5),i=r(s),o=n(9),c=r(o),f=n(13),d=r(f),l=n(14),p=r(l),h={dispatchLogger:d.default,injectDispatch:p.default},g=new Map,m=a.default(),v=function(t,e){return g.has(t)||console.warn(">> GyreJS: Gyre factory '"+t+"' not registered."),g.get(t)(m,Object.assign({},{NS:t+"-"+Date.now()},e))},_=function(t,e){g.set(t,e)};_("local",i.default),_("smartRest",c.default),e.createGyre=v,e.middleWare=h,e.registerGyreFactory=_},function(e,n){e.exports=t},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(4),a=r(u),s=function(t,e){var n=arguments.length<=2||void 0===arguments[2]?function(){}:arguments[2],r=arguments.length<=3||void 0===arguments[3]?{}:arguments[3];return function(u,s){var i=a.default(u,s),o=function(e,n){return t(u,i.dispatch,e,n,s)},c=function(t){return u.setState(t,s.NS)},f=function(){return u.getState.get(s.NS)},d=e(o);return i.addActions(n(s)),c(r),{addAction:i.addAction,addActions:i.addActions,dispatch:i.dispatch,getState:f,getReducer:o,reactHoC:d,setState:c,use:i.use}}};e.default=s,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t){function e(t,r,u){var a,s,i,o,c,f,d,l,p,h,g,m,v;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:a=Object.keys(t),s=Array.isArray(a),i=0,a=s?a:a[Symbol.iterator]();case 1:if(!s){n.next=7;break}if(!(i>=a.length)){n.next=4;break}return n.abrupt("break",36);case 4:o=a[i++],n.next=11;break;case 7:if(i=a.next(),!i.done){n.next=10;break}return n.abrupt("break",36);case 10:o=i.value;case 11:if(c=o,f=t[c],d=u?u.concat([c]):[c],l={name:r?r+"/"+c:c,branch:d,id:f.id?f.id:null,fields:f.fields?f.fields:null},!(l.fields||l.id&&!f.children)){n.next=18;break}return n.next=18,l;case 18:if(!f.children){n.next=34;break}p=Array.isArray(f.id)?f.id:[f.id],h=Array.isArray(p),g=0,p=h?p:p[Symbol.iterator]();case 20:if(!h){n.next=26;break}if(!(g>=p.length)){n.next=23;break}return n.abrupt("break",34);case 23:m=p[g++],n.next=30;break;case 26:if(g=p.next(),!g.done){n.next=29;break}return n.abrupt("break",34);case 29:m=g.value;case 30:return v=m,n.delegateYield(e(f.children,v?c+"/"+v:c,d),"t0",32);case 32:n.next=20;break;case 34:n.next=1;break;case 36:case"end":return n.stop()}},n[0],this)}for(var n=[e].map(regeneratorRuntime.mark),r=e(t),u=r.next(),a=[];!u.done;)a.push(u.value),u=r.next();return a},r=function(t){var e=n(t);return e.map(function(t){var e=t.name;return t.hasOwnProperty("id")&&null!==t.id&&(e=e+"/"+t.id),Array.isArray(t.fields)&&t.fields.length>0&&(e=e+"?fields="+t.fields.toString()),{path:e,type:t.branch[t.branch.length-1],root:t.name}})},u=function(t){return t.status>=200&&t.status<300?t.json().then(function(t){return{success:!0,data:t}}):new Promise(function(e){return e({success:!1,msg:t,code:t.status})})},a=function(t){return function(e){if(e.success){var n=function(){var n=Array.isArray(e.data)?e.data:[e.data],r={},u={};return r[t.get("root")]=[],u[t.get("type")]={},n.forEach(function(e){r[t.get("root")].push(e.id.toString()),u[t.get("type")][e.id.toString()]=e}),{v:{success:!0,data:u,idList:r}}}();if("object"==typeof n)return n.v}return e}},s=function(t,e){var n=t||location.protocol+"//"+location.hostname+(location.port?":"+location.port:"");return fetch(n+"/"+e.get("path")).then(u).then(a(e))},i=function(t){var e=t.length,n=0;if(0===t.length)return n;for(var r=0;e>r;r++){var u=t.charCodeAt(r);n=(n<<5)-n+u,n|=0}return n},o=function(t){return i(JSON.stringify(t))},c={createUrls:r,fetchUrl:s,hashQueryObject:o};e.default=c,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e){var n=new Map,r=[],u=function o(t){for(var u=arguments.length,a=Array(u>1?u-1:0),s=1;u>s;s++)a[s-1]=arguments[s];n.has(t)?r.reduce(function(n,r){return function(){return r(e.NS,t,a,n,o)}},function(){return n.get(t)(a)})():console.warn(">> GyreJS-'"+e.NS+"'-gyre: Unregistered action dispatched: '"+t+"' with arguments:",a,". (This is a no-op)")},a=function(r,u){return n.set(r,function(n){t.updateState(e.NS,u,n)})},s=function(t){Object.keys(t).forEach(function(e){a(e,t[e])})},i=function(t){r.unshift(t)};return{addAction:a,addActions:s,dispatch:u,use:i}};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(2),a=r(u),s=n(7),i=r(s),o=n(6),c=r(o);e.default=a.default(i.default,c.default),t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},r=function(t){return function(e,r){return React.createClass({displayName:"GyreJS-localHoC",getInitialState:function(){return{data:null}},componentWillMount:function(){this.unRegisterReducer=t(e,this.handleNewData)},shouldComponentUpdate:function(t){return this.state.data!==t.data},componentWillUnmount:function(){this.unRegisterReducer()},handleNewData:function(t){this.setState({data:t})},render:function(){return"undefined"!=typeof this.state.data?React.createElement(r,n({},this.props,this.state.data)):!1}})}};e.default=r,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r,u){var a=function(t){var e=t.get(u.NS),a=Array.isArray(n)?n:[n];r(e?a.reduce(function(t,n){return t[n]=e.get(n),t},{}):void 0)};return t.addReducer(a)};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(3),a=n(1),s=r(a),i=s.default.Map,o=s.default.List,c="COMPLETED",f="LOADING",d="UPDATING",l="ERROR",p={},h="ADD_QUERY",g="FETCH_QUERY",m="COMPLETE_QUERY",v="FAIL_QUERY",_="CREATE",y=i({status:null,count:0});e.default=function(t){var e=t.hostname;return p[h]=function(t,e,n,r){return t.reduce(function(t,a,s){return"queries"===s&&(t=t.set("queries",a.set(n,y.merge(a.get(n)).merge({hash:n,urls:u.createUrls(e)}).map(function(t,e){switch(e){case"count":return t+1;case"status":return t===c?d:t;default:return t}})).map(function(t,e){return e===n&&-1===[f,d].indexOf(t.get("status"))&&r(g,t),t.set("status",t.get("status")||f)}))),t},t)},p[g]=function(t,n,r){var a=n.get("urls").map(function(t){return u.fetchUrl(e,t)});Promise.all(a).then(function(t){var e=t.reduce(function(t,e){var n=e.success,r=e.msg;return n||(t.success=!1,t.msgList=t.msgList.push(r)),t},{success:!0,msgList:o([])});e.success?r(m,t,n):r(v,e.msgList,n)}).catch(function(t){r(v,[t],n)})},p[m]=function(t,e,n){return t.reduce(function(t,r,u){return"queries"===u&&(t=t.set("queries",r.map(function(t,r){var u=t;return r===n.get("hash")&&(u=u.merge({status:c,idList:e.reduce(function(t,e){return t.merge(e.idList)},i({}))})),u}))),"data"===u&&(t=t.set("data",e.reduce(function(t,e){return t.mergeDeep(e.data)},t.get("data")))),t},t)},p[v]=function(t,e,n){return t.reduce(function(t,r,u){return"queries"===u&&(t=t.set("queries",r.map(function(t,r){var u=t;return r===n.get("hash")&&(u=u.merge({status:l,msg:e})),u}))),t},t)},p[_]=function(t,e,n){return t.reduce(function(t,r,u){if("data"===u){var a=Date.now();t=t.setIn(["data",e,a],s.default.fromJS(n))}return t},t)},p},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(2),a=r(u),s=n(11),i=r(s),o=n(10),c=r(o),f=n(8),d=r(f),l=n(12),p=r(l);e.default=a.default(i.default,c.default,d.default,p.default),t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},a=n(1),s=r(a),i=function(t){return function(e,n,r,a){return React.createClass({displayName:"GyreJS-localHoC",getInitialState:function(){return{data:null}},componentWillMount:function(){this.unRegisterReducer=t(e,this.handleNewData)},shouldComponentUpdate:function(t,e){return this.state.status!==e.status?!0:e.data?!s.default.is(e.data,this.state.data):!0},componentWillUnmount:function(){this.unRegisterReducer()},handleNewData:function(t,e){this.setState({data:e,status:t})},render:function(){if(!this.state||!this.state.status)return!1;var t=void 0;switch(this.state.status){case"LOADING":t=r;break;case"ERROR":t=a;break;default:t=n}return t?React.createElement(t,u({},this.props,this.state)):!1}})}};e.default=i,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),s=n(3),i=a.default.Map,o=function(t,e,n,r,u){var a=u.NS,o=s.hashQueryObject(n),c=function(t){var e=t.getIn([a,"queries",o,"idList"]),n=t.getIn([a,"queries",o]);e?r(n.get("status"),e.reduce(function(e,n,r){var u=e,s=r.split("/").reduce(function(t,e,n){return n%2===0&&n&&t.push("children"),t.push(e),t},[]),i=r.split("/");return i=i[i.length-1],n.forEach(function(e){u=u.mergeDeepIn(s.concat(e),t.getIn([a,"data",i,e]))}),u},i({}))):r(n.get("status"))};return e("ADD_QUERY",n,o),t.addReducer(c)};e.default=o,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),s=a.default.Map;e.default=s({queries:s({}),data:s({})}),t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r){console.log(">> GyreJS-'"+t+"'-gyre: Applying action '"+e+"' with arguments: ",n),r()};e.default=n,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r,u){n.push(u),r()};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),s=a.default.Map,i=function(){var t=s({}),e=[],n=function(){return e.forEach(function(e){return e(t)})},r=function(t){return function(){return e=e.filter(function(e){return e!==t})}},u=function(e,r){return t.get(r)!==e&&(t=t.set(r,e),n()),t},a=function(n){return e.push(n),n(t),r(n)},i=function(){return t},o=function(t,e){return u(s.isMap(t)?t:s(t),e)},c=function(e,n,r){return u(n.apply(void 0,[t.get(e)].concat(r))||t.get(e),e),t};return{addReducer:a,getState:i,setState:o,updateState:c}};e.default=i,t.exports=e.default}])}); |
/** | ||
* localAH() | ||
* actionHandler() | ||
* | ||
* @param {Object} store instance. | ||
* @param {String} nameSpace state key. | ||
* @param {Object} options Options object. | ||
* @returns {{addAction: Function, dispatch: Function}} API. | ||
@@ -11,3 +11,3 @@ */ | ||
exports.__esModule = true; | ||
var localAH = function localAH(store, nameSpace) { | ||
var actionHandler = function actionHandler(store, options) { | ||
// Private variables | ||
@@ -34,3 +34,3 @@ var actionMap = new Map(); | ||
return function () { | ||
return next(nameSpace, id, args, prev, dispatch); | ||
return next(options.NS, id, args, prev, dispatch); | ||
}; | ||
@@ -41,3 +41,3 @@ }, function () { | ||
} else { | ||
console.warn(">> GyreJS-'" + nameSpace + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)"); | ||
console.warn(">> GyreJS-'" + options.NS + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)"); | ||
} | ||
@@ -51,9 +51,8 @@ }; | ||
* @param {Function} func Reducer function. | ||
* @param {Boolean} passDispatch Whether to pass the dispatch method to | ||
* the actions. | ||
* @returns {void} | ||
*/ | ||
var addAction = function addAction(id, func, passDispatch) { | ||
var addAction = function addAction(id, func) { | ||
return actionMap.set(id, function (args) { | ||
store.updateState(nameSpace, func, args, passDispatch ? dispatch : null); | ||
store.updateState(options.NS, func, args); | ||
}); | ||
@@ -66,9 +65,8 @@ }; | ||
* @param {Object} actions Key/func object of actions. | ||
* @param {Boolean} passDispatch Whether to pass the dispatch method to | ||
* the actions. | ||
* @returns {void} | ||
*/ | ||
var addActions = function addActions(actions, passDispatch) { | ||
var addActions = function addActions(actions) { | ||
Object.keys(actions).forEach(function (action) { | ||
addAction(action, actions[action], passDispatch); | ||
addAction(action, actions[action]); | ||
}); | ||
@@ -96,3 +94,3 @@ }; | ||
exports["default"] = localAH; | ||
exports["default"] = actionHandler; | ||
module.exports = exports["default"]; |
@@ -14,15 +14,14 @@ "use strict"; | ||
* | ||
* @param {String} defaultNS Default namespace name. | ||
* @param {Function} Reducer Reducer factory. | ||
* @param {Function} ReactHoC React HoC factory. | ||
* @param {Object} [actions] Default actions object. | ||
* @param {Function} [actions] Default actions object. | ||
* @param {Immutable.Map|Object} [state] Initial state object. | ||
* @returns {Function} Gyre factory function. | ||
*/ | ||
var gyreFactory = function gyreFactory(defaultNS, Reducer, ReactHoC, actions) { | ||
return function (store, NS) { | ||
var nameSpace = NS || defaultNS; | ||
var AH = _actionHandler2["default"](store, nameSpace); | ||
if (actions) { | ||
AH.addActions(actions); | ||
} | ||
var gyreFactory = function gyreFactory(Reducer, ReactHoC) { | ||
var actions = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2]; | ||
var state = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; | ||
return function (store, options) { | ||
// Private variables | ||
var AH = _actionHandler2["default"](store, options); | ||
@@ -38,3 +37,3 @@ // Public functions | ||
var getReducer = function getReducer(matcher, cb) { | ||
return Reducer(store, matcher, cb, nameSpace); | ||
return Reducer(store, AH.dispatch, matcher, cb, options); | ||
}; | ||
@@ -49,6 +48,15 @@ | ||
var setState = function setState(tState) { | ||
return store.setState(tState, nameSpace); | ||
return store.setState(tState, options.NS); | ||
}; | ||
/** | ||
* getState() | ||
* | ||
* @returns {Immutable.Map} Current store state. | ||
*/ | ||
var getState = function getState() { | ||
return store.getState.get(options.NS); | ||
}; | ||
/** | ||
* reactHoC() | ||
@@ -61,2 +69,6 @@ * | ||
// Setup | ||
AH.addActions(actions(options)); | ||
setState(state); | ||
// API | ||
@@ -67,2 +79,3 @@ return { | ||
dispatch: AH.dispatch, | ||
getState: getState, | ||
getReducer: getReducer, | ||
@@ -69,0 +82,0 @@ reactHoC: reactHoC, |
@@ -19,3 +19,3 @@ "use strict"; | ||
exports["default"] = _gyreFactory2["default"]("local", _reducer2["default"], _reactHoC2["default"]); | ||
exports["default"] = _gyreFactory2["default"](_reducer2["default"], _reactHoC2["default"]); | ||
module.exports = exports["default"]; |
@@ -45,3 +45,3 @@ /** | ||
render: function render() { | ||
return typeof this.state.data !== "undefined" ? React.createElement(DefaultComponent, _extends({}, this.props, this.state)) : false; | ||
return typeof this.state.data !== "undefined" ? React.createElement(DefaultComponent, _extends({}, this.props, this.state.data)) : false; | ||
} | ||
@@ -48,0 +48,0 @@ }); |
@@ -5,5 +5,6 @@ /** | ||
* @param {Object} store Store instance | ||
* @param {Function} dispatch Dispatch | ||
* @param {Array|String} matcher Matcher | ||
* @param {Function} cb Callback | ||
* @param {String} nameSpace Namespace | ||
* @param {Object} options Options object. | ||
* @returns {Function} Un-register function | ||
@@ -14,6 +15,6 @@ */ | ||
exports.__esModule = true; | ||
var reducer = function reducer(store, matcher, cb, nameSpace) { | ||
var reducer = function reducer(store, dispatch, matcher, cb, options) { | ||
// Private functions | ||
var update = function update(stateVar) { | ||
var state = stateVar.get(nameSpace); | ||
var state = stateVar.get(options.NS); | ||
var matchValue = Array.isArray(matcher) ? matcher : [matcher]; | ||
@@ -20,0 +21,0 @@ |
@@ -1,4 +0,2 @@ | ||
/** | ||
* Import libs | ||
*/ | ||
// Import sub libraries | ||
"use strict"; | ||
@@ -18,5 +16,5 @@ | ||
var _gyresSimpleRestFactory = require("./gyres/simpleRest/factory"); | ||
var _gyresSmartRestFactory = require("./gyres/smartRest/factory"); | ||
var _gyresSimpleRestFactory2 = _interopRequireDefault(_gyresSimpleRestFactory); | ||
var _gyresSmartRestFactory2 = _interopRequireDefault(_gyresSmartRestFactory); | ||
@@ -41,3 +39,2 @@ // Middleware | ||
var store = _store2["default"](); | ||
var usedNameSpaces = []; | ||
@@ -49,14 +46,11 @@ // Public functions | ||
* @param {String} id Id of a registered gyre factory. | ||
* @param {String} [nameSpace] Namespace of new gyre. | ||
* @param {Object} [options] Options object for gyre. | ||
* @returns {Object} Gyre instance. | ||
*/ | ||
var createGyre = function createGyre(id, nameSpace) { | ||
var createGyre = function createGyre(id, options) { | ||
if (!gyres.has(id)) { | ||
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered."); | ||
} | ||
if (usedNameSpaces.indexOf(nameSpace) !== -1) { | ||
throw new Error(">> GyreJS ('" + id + "'): A gyre using the namespace '" + nameSpace + "' not registered."); | ||
} | ||
usedNameSpaces.push(nameSpace); | ||
return gyres.get(id)(store, nameSpace); | ||
return gyres.get(id)(store, Object.assign({}, { NS: id + "-" + Date.now() }, options)); | ||
}; | ||
@@ -77,3 +71,3 @@ | ||
registerGyreFactory("local", _gyresLocalFactory2["default"]); | ||
registerGyreFactory("simpleRest", _gyresSimpleRestFactory2["default"]); | ||
registerGyreFactory("smartRest", _gyresSmartRestFactory2["default"]); | ||
@@ -80,0 +74,0 @@ exports.createGyre = createGyre; |
@@ -59,4 +59,6 @@ "use strict"; | ||
var setNewState = function setNewState(newState, nameSpace) { | ||
state = state.set(nameSpace, newState); | ||
sendUpdate(); | ||
if (state.get(nameSpace) !== newState) { | ||
state = state.set(nameSpace, newState); | ||
sendUpdate(); | ||
} | ||
return state; | ||
@@ -110,11 +112,6 @@ }; | ||
* @param {Array} args Reducer function arguments. | ||
* @param {Function} [dispatch] Dispatcher function. | ||
* @returns {Immutable.Map} state New state. | ||
*/ | ||
var updateState = function updateState(nameSpace, func, args, dispatch) { | ||
var farg = [state.get(nameSpace) || IMap({})]; | ||
if (dispatch) { | ||
farg.concat(dispatch); | ||
} | ||
setNewState(func.apply(undefined, farg.concat(args)) || state.get(nameSpace), nameSpace); | ||
var updateState = function updateState(nameSpace, func, args) { | ||
setNewState(func.apply(undefined, [state.get(nameSpace)].concat(args)) || state.get(nameSpace), nameSpace); | ||
return state; | ||
@@ -121,0 +118,0 @@ }; |
{ | ||
"name": "gyrejs", | ||
"version": "0.0.13", | ||
"version": "0.0.14", | ||
"description": "Experimental data fetching and state library geared towards ReactJS", | ||
@@ -21,3 +21,3 @@ "main": "lib/gyrejs-min.js", | ||
"watch": "watch 'npm run check' src tests", | ||
"watch:build": "watch 'npm run build' src" | ||
"watch:build": "watch 'npm run build:umd' src" | ||
}, | ||
@@ -50,2 +50,3 @@ "repository": { | ||
"eslint-plugin-react": "^3.5.1", | ||
"isomorphic-fetch": "^2.1.1", | ||
"react": "0.14.0", | ||
@@ -52,0 +53,0 @@ "react-dom": "^0.14.0", |
/** | ||
* localAH() | ||
* actionHandler() | ||
* | ||
* @param {Object} store instance. | ||
* @param {String} nameSpace state key. | ||
* @param {Object} options Options object. | ||
* @returns {{addAction: Function, dispatch: Function}} API. | ||
*/ | ||
const localAH = (store, nameSpace) => { | ||
const actionHandler = (store, options) => { | ||
// Private variables | ||
@@ -25,7 +25,7 @@ const actionMap = new Map(); | ||
middleWare.reduce((prev, next) => | ||
() => next(nameSpace, id, args, prev, dispatch), | ||
() => next(options.NS, id, args, prev, dispatch), | ||
() => actionMap.get(id)(args))(); | ||
} | ||
else { | ||
console.warn(`>> GyreJS-'${nameSpace}'-gyre: Unregistered action dispatched: '${id}' with arguments:`, | ||
console.warn(`>> GyreJS-'${options.NS}'-gyre: Unregistered action dispatched: '${id}' with arguments:`, | ||
args, ". (This is a no-op)"); | ||
@@ -40,9 +40,8 @@ } | ||
* @param {Function} func Reducer function. | ||
* @param {Boolean} passDispatch Whether to pass the dispatch method to | ||
* the actions. | ||
* @returns {void} | ||
*/ | ||
const addAction = (id, func, passDispatch) => | ||
const addAction = (id, func) => | ||
actionMap.set(id, (args) => { | ||
store.updateState(nameSpace, func, args, passDispatch ? dispatch : null); | ||
store.updateState(options.NS, func, args); | ||
}); | ||
@@ -54,9 +53,8 @@ | ||
* @param {Object} actions Key/func object of actions. | ||
* @param {Boolean} passDispatch Whether to pass the dispatch method to | ||
* the actions. | ||
* @returns {void} | ||
*/ | ||
const addActions = (actions, passDispatch) => { | ||
const addActions = (actions) => { | ||
Object.keys(actions).forEach(action => { | ||
addAction(action, actions[action], passDispatch); | ||
addAction(action, actions[action]); | ||
}); | ||
@@ -84,2 +82,2 @@ }; | ||
export default localAH; | ||
export default actionHandler; |
@@ -6,55 +6,66 @@ import ActionHandler from "./actionHandler"; | ||
* | ||
* @param {String} defaultNS Default namespace name. | ||
* @param {Function} Reducer Reducer factory. | ||
* @param {Function} ReactHoC React HoC factory. | ||
* @param {Object} [actions] Default actions object. | ||
* @param {Function} [actions] Default actions object. | ||
* @param {Immutable.Map|Object} [state] Initial state object. | ||
* @returns {Function} Gyre factory function. | ||
*/ | ||
const gyreFactory = (defaultNS, Reducer, ReactHoC, actions) => (store, NS) => { | ||
const nameSpace = NS || defaultNS; | ||
const AH = ActionHandler(store, nameSpace); | ||
if (actions) { | ||
AH.addActions(actions); | ||
} | ||
const gyreFactory = (Reducer, ReactHoC, actions = () => {}, state = {}) => | ||
(store, options) => { | ||
// Private variables | ||
const AH = ActionHandler(store, options); | ||
// Public functions | ||
/** | ||
* getReducer() Getter for reducer | ||
* | ||
* @param {String} matcher Matcher | ||
* @param {Function} cb Callback | ||
* @returns {Function} Reducer factory | ||
*/ | ||
const getReducer = (matcher, cb) => | ||
Reducer(store, matcher, cb, nameSpace); | ||
// Public functions | ||
/** | ||
* getReducer() Getter for reducer | ||
* | ||
* @param {String} matcher Matcher | ||
* @param {Function} cb Callback | ||
* @returns {Function} Reducer factory | ||
*/ | ||
const getReducer = (matcher, cb) => | ||
Reducer(store, AH.dispatch, matcher, cb, options); | ||
/** | ||
* setState() | ||
* | ||
* @param {Object|Immutable.Map} tState The state to set to this gyre. | ||
* @returns {Immutable.Map} Current store state. | ||
*/ | ||
const setState = (tState) => | ||
store.setState(tState, nameSpace); | ||
/** | ||
* setState() | ||
* | ||
* @param {Object|Immutable.Map} tState The state to set to this gyre. | ||
* @returns {Immutable.Map} Current store state. | ||
*/ | ||
const setState = (tState) => | ||
store.setState(tState, options.NS); | ||
/** | ||
* reactHoC() | ||
* | ||
* @param {Object} react React instance. | ||
* @return {Function} HoC factory function. | ||
*/ | ||
const reactHoC = ReactHoC(getReducer); | ||
/** | ||
* getState() | ||
* | ||
* @returns {Immutable.Map} Current store state. | ||
*/ | ||
const getState = () => | ||
store.getState.get(options.NS); | ||
// API | ||
return { | ||
addAction: AH.addAction, | ||
addActions: AH.addActions, | ||
dispatch: AH.dispatch, | ||
getReducer, | ||
reactHoC, | ||
setState, | ||
use: AH.use | ||
/** | ||
* reactHoC() | ||
* | ||
* @param {Object} react React instance. | ||
* @return {Function} HoC factory function. | ||
*/ | ||
const reactHoC = ReactHoC(getReducer); | ||
// Setup | ||
AH.addActions(actions(options)); | ||
setState(state); | ||
// API | ||
return { | ||
addAction: AH.addAction, | ||
addActions: AH.addActions, | ||
dispatch: AH.dispatch, | ||
getState, | ||
getReducer, | ||
reactHoC, | ||
setState, | ||
use: AH.use | ||
}; | ||
}; | ||
}; | ||
export default gyreFactory; |
import GyreFactory from "../../gyreFactory"; | ||
import Reducer from "./reducer"; | ||
import ReactHoC from "./reactHoC"; | ||
export default GyreFactory("local", Reducer, ReactHoC); | ||
export default GyreFactory(Reducer, ReactHoC); |
@@ -40,3 +40,3 @@ /** | ||
return typeof this.state.data !== "undefined" | ||
? <DefaultComponent {...this.props} {...this.state}/> | ||
? <DefaultComponent {...this.props} {...this.state.data}/> | ||
: false; | ||
@@ -43,0 +43,0 @@ } |
@@ -5,11 +5,12 @@ /** | ||
* @param {Object} store Store instance | ||
* @param {Function} dispatch Dispatch | ||
* @param {Array|String} matcher Matcher | ||
* @param {Function} cb Callback | ||
* @param {String} nameSpace Namespace | ||
* @param {Object} options Options object. | ||
* @returns {Function} Un-register function | ||
*/ | ||
const reducer = (store, matcher, cb, nameSpace) => { | ||
const reducer = (store, dispatch, matcher, cb, options) => { | ||
// Private functions | ||
const update = (stateVar) => { | ||
const state = stateVar.get(nameSpace); | ||
const state = stateVar.get(options.NS); | ||
const matchValue = Array.isArray(matcher) ? matcher : [matcher]; | ||
@@ -16,0 +17,0 @@ |
@@ -1,7 +0,5 @@ | ||
/** | ||
* Import libs | ||
*/ | ||
// Import sub libraries | ||
import Store from "./store"; | ||
import LocalGyre from "./gyres/local/factory"; | ||
import SimpleRestGyre from "./gyres/simpleRest/factory"; | ||
import SmartRestGyre from "./gyres/smartRest/factory"; | ||
@@ -19,3 +17,2 @@ // Middleware | ||
const store = Store(); | ||
const usedNameSpaces = []; | ||
@@ -27,14 +24,11 @@ // Public functions | ||
* @param {String} id Id of a registered gyre factory. | ||
* @param {String} [nameSpace] Namespace of new gyre. | ||
* @param {Object} [options] Options object for gyre. | ||
* @returns {Object} Gyre instance. | ||
*/ | ||
const createGyre = (id, nameSpace) => { | ||
const createGyre = (id, options) => { | ||
if (!gyres.has(id)) { | ||
console.warn(`>> GyreJS: Gyre factory '${id}' not registered.`); | ||
} | ||
if (usedNameSpaces.indexOf(nameSpace) !== -1) { | ||
throw new Error(`>> GyreJS ('${id}'): A gyre using the namespace '${nameSpace}' not registered.`); | ||
} | ||
usedNameSpaces.push(nameSpace); | ||
return gyres.get(id)(store, nameSpace); | ||
return gyres.get(id)(store, Object.assign({}, {NS: `${id}-${Date.now()}`}, options)); | ||
}; | ||
@@ -55,3 +49,3 @@ | ||
registerGyreFactory("local", LocalGyre); | ||
registerGyreFactory("simpleRest", SimpleRestGyre); | ||
registerGyreFactory("smartRest", SmartRestGyre); | ||
@@ -58,0 +52,0 @@ export { |
@@ -43,4 +43,6 @@ import Immutable from "immutable"; | ||
const setNewState = (newState, nameSpace) => { | ||
state = state.set(nameSpace, newState); | ||
sendUpdate(); | ||
if (state.get(nameSpace) !== newState) { | ||
state = state.set(nameSpace, newState); | ||
sendUpdate(); | ||
} | ||
return state; | ||
@@ -91,11 +93,6 @@ }; | ||
* @param {Array} args Reducer function arguments. | ||
* @param {Function} [dispatch] Dispatcher function. | ||
* @returns {Immutable.Map} state New state. | ||
*/ | ||
const updateState = (nameSpace, func, args, dispatch) => { | ||
var farg = [state.get(nameSpace) || IMap({})]; | ||
if (dispatch) { | ||
farg.concat(dispatch); | ||
} | ||
setNewState(func(...farg.concat(args)) || state.get(nameSpace), nameSpace); | ||
const updateState = (nameSpace, func, args) => { | ||
setNewState(func(...[state.get(nameSpace)].concat(args)) || state.get(nameSpace), nameSpace); | ||
return state; | ||
@@ -102,0 +99,0 @@ }; |
Sorry, the diff of this file is not supported yet
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
146280
127.76%42
16.67%3145
87.54%15
7.14%4
Infinity%