falcor
Version:
A JavaScript library for efficient data fetching.
37 lines (34 loc) • 1.2 kB
JavaScript
var jsong = require("falcor-json-graph");
var ModelResponse = require("./../response/ModelResponse");
var isPathValue = require("./../support/isPathValue");
module.exports = function setValue(pathArg, valueArg) {
var value = isPathValue(pathArg) ? pathArg : jsong.pathValue(pathArg, valueArg);
var pathIdx = 0;
var path = value.path;
var pathLen = path.length;
while (++pathIdx < pathLen) {
if (typeof path[pathIdx] === "object") {
/* eslint-disable no-loop-func */
return new ModelResponse(function(o) {
o.onError(new Error("Paths must be simple paths"));
});
/* eslint-enable no-loop-func */
}
}
var self = this;
return new ModelResponse(function(obs) {
return self.set(value).subscribe(function(data) {
var curr = data.json;
var depth = -1;
var length = path.length;
while (curr && ++depth < length) {
curr = curr[path[depth]];
}
obs.onNext(curr);
}, function(err) {
obs.onError(err);
}, function() {
obs.onCompleted();
});
});
};