react-diode
Advanced tools
Comparing version 0.2.0-beta.3 to 0.2.0-beta.4
@@ -39,3 +39,4 @@ 'use strict'; | ||
waitForQuery: _DiodeQueryRequest.createPendingQueryRequest, | ||
useBatchQueries: _DiodeStore2.default.useBatchQueries.bind(_DiodeStore2.default), | ||
useBatchQuery: _DiodeStore2.default.useBatchQuery.bind(_DiodeStore2.default), | ||
useMockQueries: _DiodeStore2.default.useMockQueries.bind(_DiodeStore2.default), | ||
injectNetworkLayer: _DiodeStore2.default.injectNetworkLayer.bind(_DiodeStore2.default) | ||
@@ -42,0 +43,0 @@ }; |
@@ -65,3 +65,11 @@ 'use strict'; | ||
return Promise.all(requests); | ||
return Promise.all(requests).then(function (responses) { | ||
// Convert array of response into Map<QueryType, QueryResponse> | ||
return responses.reduce(function (responseMap, response, id) { | ||
var type = queryRequests[id].type; | ||
responseMap[type] = response; | ||
return responseMap; | ||
}, {}); | ||
}); | ||
} | ||
@@ -68,0 +76,0 @@ }]); |
@@ -5,2 +5,8 @@ 'use strict'; | ||
var _objectAssign = require('object-assign'); | ||
var _objectAssign2 = _interopRequireDefault(_objectAssign); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -11,16 +17,24 @@ | ||
_classCallCheck(this, DiodeNetworkLayer); | ||
this._queryMockEnabled = false; | ||
} | ||
/** | ||
* @internal | ||
* | ||
* Supply your own network layer | ||
*/ | ||
_createClass(DiodeNetworkLayer, [{ | ||
key: 'injectNetworkLayer', | ||
/** | ||
* @internal | ||
* | ||
* Supply your own network layer | ||
*/ | ||
value: function injectNetworkLayer(networkLayer) { | ||
this._injectedNetworkLayer = networkLayer; | ||
} | ||
}, { | ||
key: 'injectQueryMockResolver', | ||
value: function injectQueryMockResolver(queryMockResolver) { | ||
this._queryMockEnabled = true; | ||
this._queryMockResolver = queryMockResolver; | ||
} | ||
@@ -35,5 +49,30 @@ /** | ||
key: 'sendQueries', | ||
value: function sendQueries(queryRequests, options) { | ||
value: function sendQueries(queries, options) { | ||
var _this = this; | ||
var queryRequests = queries; | ||
var mockedQueryResponse = {}; | ||
var networkLayer = this._getCurrentNetworkLayer(); | ||
return networkLayer.sendQueries(queryRequests, options); | ||
if (this._queryMockEnabled) { | ||
queryRequests = queries.filter(function (query) { | ||
// check whether a query as a mocked response | ||
var queryMockResolver = _this._queryMockResolver[query.type]; | ||
if (queryMockResolver && typeof queryMockResolver === 'function') { | ||
var mockedResponse = queryMockResolver(query); | ||
if (mockedResponse) { | ||
mockedQueryResponse[query.type] = mockedResponse; | ||
return false; | ||
}{ | ||
return true; | ||
} | ||
} else { | ||
return true; | ||
} | ||
}); | ||
} | ||
return networkLayer.sendQueries(queryRequests, options).then(function (response) { | ||
return (0, _objectAssign2.default)(mockedQueryResponse, response); | ||
}); | ||
} | ||
@@ -40,0 +79,0 @@ }, { |
@@ -7,5 +7,5 @@ 'use strict'; | ||
var DiodeQueryTypes = { | ||
BATCHED: 'batch-query' | ||
BATCH: 'batch-query' | ||
}; | ||
exports.default = DiodeQueryTypes; |
@@ -9,2 +9,6 @@ 'use strict'; | ||
var _lodash = require('lodash.find'); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
var _DiodeNetworkLayer = require('../network/DiodeNetworkLayer'); | ||
@@ -22,5 +26,5 @@ | ||
var _filterBatchQueries = require('../query/filterBatchQueries'); | ||
var _filterBatchQuery = require('../query/filterBatchQuery'); | ||
var _filterBatchQueries2 = _interopRequireDefault(_filterBatchQueries); | ||
var _filterBatchQuery2 = _interopRequireDefault(_filterBatchQuery); | ||
@@ -61,8 +65,18 @@ var _resolveBatchQuery = require('../query/resolveBatchQuery'); | ||
}, { | ||
key: 'useBatchQueries', | ||
value: function useBatchQueries(batchQueries) { | ||
key: 'useMockQueries', | ||
value: function useMockQueries(queryMockResolver) { | ||
this._networkLayer.injectQueryMockResolver(queryMockResolver); | ||
} | ||
/** | ||
* @public | ||
*/ | ||
}, { | ||
key: 'useBatchQuery', | ||
value: function useBatchQuery(batchQuery) { | ||
/* istanbul ignore else */ | ||
if (batchQueries && batchQueries.length) { | ||
this._batchQueriesEnabled = true; | ||
this._batchQueries = batchQueries; | ||
if (batchQuery) { | ||
this._batchQueryEnabled = true; | ||
this._batchQuery = batchQuery; | ||
} | ||
@@ -126,14 +140,11 @@ } | ||
if (this._batchQueriesEnabled) { | ||
queries = (0, _filterBatchQueries2.default)(queries, this._batchQueries); | ||
if (this._batchQueryEnabled) { | ||
queries = (0, _filterBatchQuery2.default)(queries, this._batchQuery); | ||
} | ||
return this._networkLayer.sendQueries(queries, options).then(function (responses) { | ||
// Convert array of response into Map<QueryType, QueryResponse> | ||
var responseMap = responses.reduce(function (responseMap, response, id) { | ||
var query = queries[id]; | ||
var type = query.type; | ||
var fragment = query.fragment; | ||
return this._networkLayer.sendQueries(queries, options).then(function (queryResponseMap) { | ||
var responseMap = Object.keys(queryResponseMap).reduce(function (map, type) { | ||
var queryResponse = queryResponseMap[type]; | ||
var query = (0, _lodash2.default)(queries, { type: type }); | ||
if (type === _DiodeQueryTypes2.default.BATCH) { | ||
@@ -143,9 +154,9 @@ // BatchQuery returns multiple response at once as single object, | ||
// batch query response resolution | ||
var batchQueryResponseMap = (0, _resolveBatchQuery2.default)(query.resolve(response, options), initialQueries, options); | ||
(0, _objectAssign2.default)(responseMap, batchQueryResponseMap); | ||
var batchQueryResponseMap = (0, _resolveBatchQuery2.default)(query.resolve(queryResponse, options), initialQueries, options); | ||
(0, _objectAssign2.default)(map, batchQueryResponseMap); | ||
} else { | ||
responseMap[type] = query.resolve(response, fragment, options); | ||
map[type] = query.resolve(queryResponse, query.fragment, options); | ||
} | ||
return responseMap; | ||
return map; | ||
}, {}); | ||
@@ -152,0 +163,0 @@ |
{ | ||
"name": "react-diode", | ||
"version": "0.2.0-beta.3", | ||
"version": "0.2.0-beta.4", | ||
"description": "Endpoint agnostic, unidirectional data fetching for React applications", | ||
@@ -5,0 +5,0 @@ "main": "lib/DiodePublic.js", |
38212
765