@ortoo/angular-resource
Version:
Magical CRUD resource management for angular
57 lines • 7.87 kB
JavaScript
// Chain a query into a new one (when the query updates so does the new query)
export const Chain = chainConstructor;
function chainConstructor(origQry, modelOrQryFn, qryFn) {
let initialSync = false;
let ResToQry;
if (!qryFn) {
ResToQry = origQry.$Model;
qryFn = modelOrQryFn;
}
else {
ResToQry = modelOrQryFn;
}
// Make sure we have at least finished an initial load before generating the
// query object
const _qry = origQry.$promise.then(() => {
initialSync = true;
// We copy the array here so that we can do things like .map without auto-updating repercussions.
return qryFn.call(newqry, [...origQry]);
});
const newqry = ResToQry.query(_qry);
// Watch our results. If they change then reattempt the query
origQry.$emitter.on('update', (newRes) => {
// Only do this if we have initially synced
if (initialSync) {
// We copy the array here so that we can do things like .map without auto-updating repercussions.
newqry.replace(qryFn.call(newqry, [...newRes]));
}
});
return newqry;
}
Chain.all = all;
function all(origQueries, Model, qryFn) {
let newqry;
const proms = [];
let initialSync;
let allqries;
for (let ii = 0; ii < origQueries.length; ii++) {
const origQry = origQueries[ii];
proms.push(origQry.$promise);
origQry.$emitter.on('update', (newRes) => {
if (initialSync) {
allqries[ii] = [...newRes];
newqry.replace(qryFn.call(newqry, allqries));
}
});
}
newqry = Model.query(Promise.all(proms).then(res => {
initialSync = true;
allqries = [];
for (const result of res) {
allqries.push([...result]);
}
return qryFn.call(newqry, allqries);
}));
return newqry;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiL0BvcnRvby9hbmd1bGFyLXJlc291cmNlLyIsInNvdXJjZXMiOlsiY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBa0IsZ0JBQWdCLENBQUM7QUFFckQsMEJBQTBCLE9BQXVCLEVBQ3ZCLFlBQStDLEVBQy9DLEtBQXFCO0lBQzdDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN4QixJQUFJLFFBQXlCLENBQUM7SUFDOUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ1gsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxHQUFHLFlBQTZCLENBQUM7SUFDeEMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sUUFBUSxHQUFHLFlBQStCLENBQUM7SUFDN0MsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxlQUFlO0lBQ2YsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNuQixpR0FBaUc7UUFDakcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQWlCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEQsNkRBQTZEO0lBQzdELE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQVc7UUFDeEMsMkNBQTJDO1FBQzNDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEIsaUdBQWlHO1lBQ2pHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFDRCxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUVoQixhQUFhLFdBQWdDLEVBQUUsS0FBc0IsRUFBRSxLQUF5QjtJQUM5RixJQUFJLE1BQW9CLENBQUM7SUFDekIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksV0FBZ0IsQ0FBQztJQUNyQixJQUFJLFFBQWUsQ0FBQztJQUVwQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBVztZQUN4QyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUc7UUFDOUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNuQixRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsTUFBTSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYWluIGFzIENoYWluRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgQ2hhaW5hYmxlUXVlcnkgYXMgSUNoYWluYWJsZVF1ZXJ5LCBNb2RlbCwgTXVsdGlRdWVyeUZ1bmN0aW9uLCBRdWVyeSwgUXVlcnlGdW5jdGlvbiwgUmVzb3VyY2UgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIENoYWluYWJsZVF1ZXJ5IGV4dGVuZHMgSUNoYWluYWJsZVF1ZXJ5PE1vZGVsPiB7XG4gICRNb2RlbD86IFJlc291cmNlPE1vZGVsPjtcbn1cblxuLy8gQ2hhaW4gYSBxdWVyeSBpbnRvIGEgbmV3IG9uZSAod2hlbiB0aGUgcXVlcnkgdXBkYXRlcyBzbyBkb2VzIHRoZSBuZXcgcXVlcnkpXG5leHBvcnQgY29uc3QgQ2hhaW46IENoYWluRnVuY3Rpb24gPSBjaGFpbkNvbnN0cnVjdG9yO1xuXG5mdW5jdGlvbiBjaGFpbkNvbnN0cnVjdG9yKG9yaWdRcnk6IENoYWluYWJsZVF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbE9yUXJ5Rm46IChSZXNvdXJjZTxNb2RlbD4gfCBRdWVyeUZ1bmN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXJ5Rm4/OiBRdWVyeUZ1bmN0aW9uKTogUXVlcnk8TW9kZWw+IHtcbiAgbGV0IGluaXRpYWxTeW5jID0gZmFsc2U7XG4gIGxldCBSZXNUb1FyeTogUmVzb3VyY2U8TW9kZWw+O1xuICBpZiAoIXFyeUZuKSB7XG4gICAgUmVzVG9RcnkgPSBvcmlnUXJ5LiRNb2RlbDtcbiAgICBxcnlGbiA9IG1vZGVsT3JRcnlGbiBhcyBRdWVyeUZ1bmN0aW9uO1xuICB9IGVsc2Uge1xuICAgIFJlc1RvUXJ5ID0gbW9kZWxPclFyeUZuIGFzIFJlc291cmNlPE1vZGVsPjtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGZpbmlzaGVkIGFuIGluaXRpYWwgbG9hZCBiZWZvcmUgZ2VuZXJhdGluZyB0aGVcbiAgLy8gcXVlcnkgb2JqZWN0XG4gIGNvbnN0IF9xcnkgPSBvcmlnUXJ5LiRwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGluaXRpYWxTeW5jID0gdHJ1ZTtcbiAgICAvLyBXZSBjb3B5IHRoZSBhcnJheSBoZXJlIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlIC5tYXAgd2l0aG91dCBhdXRvLXVwZGF0aW5nIHJlcGVyY3Vzc2lvbnMuXG4gICAgcmV0dXJuIHFyeUZuLmNhbGwobmV3cXJ5LCBbLi4ub3JpZ1FyeV0pO1xuICB9KTtcbiAgY29uc3QgbmV3cXJ5OiBRdWVyeTxNb2RlbD4gPSBSZXNUb1FyeS5xdWVyeShfcXJ5KTtcblxuICAvLyBXYXRjaCBvdXIgcmVzdWx0cy4gSWYgdGhleSBjaGFuZ2UgdGhlbiByZWF0dGVtcHQgdGhlIHF1ZXJ5XG4gIG9yaWdRcnkuJGVtaXR0ZXIub24oJ3VwZGF0ZScsIChuZXdSZXM6IGFueSkgPT4ge1xuICAgIC8vIE9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGluaXRpYWxseSBzeW5jZWRcbiAgICBpZiAoaW5pdGlhbFN5bmMpIHtcbiAgICAgIC8vIFdlIGNvcHkgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB3ZSBjYW4gZG8gdGhpbmdzIGxpa2UgLm1hcCB3aXRob3V0IGF1dG8tdXBkYXRpbmcgcmVwZXJjdXNzaW9ucy5cbiAgICAgIG5ld3FyeS5yZXBsYWNlKHFyeUZuLmNhbGwobmV3cXJ5LCBbLi4ubmV3UmVzXSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5ld3FyeTtcbn1cbkNoYWluLmFsbCA9IGFsbDtcblxuZnVuY3Rpb24gYWxsKG9yaWdRdWVyaWVzOiBBcnJheTxRdWVyeTxNb2RlbD4+LCBNb2RlbDogUmVzb3VyY2U8TW9kZWw+LCBxcnlGbjogTXVsdGlRdWVyeUZ1bmN0aW9uKSB7XG4gIGxldCBuZXdxcnk6IFF1ZXJ5PE1vZGVsPjtcbiAgY29uc3QgcHJvbXMgPSBbXTtcbiAgbGV0IGluaXRpYWxTeW5jOiBhbnk7XG4gIGxldCBhbGxxcmllczogYW55W107XG5cbiAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IG9yaWdRdWVyaWVzLmxlbmd0aDsgaWkrKykge1xuICAgIGNvbnN0IG9yaWdRcnkgPSBvcmlnUXVlcmllc1tpaV07XG4gICAgcHJvbXMucHVzaChvcmlnUXJ5LiRwcm9taXNlKTtcbiAgICBvcmlnUXJ5LiRlbWl0dGVyLm9uKCd1cGRhdGUnLCAobmV3UmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChpbml0aWFsU3luYykge1xuICAgICAgICBhbGxxcmllc1tpaV0gPSBbLi4ubmV3UmVzXTtcbiAgICAgICAgbmV3cXJ5LnJlcGxhY2UocXJ5Rm4uY2FsbChuZXdxcnksIGFsbHFyaWVzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZXdxcnkgPSBNb2RlbC5xdWVyeShQcm9taXNlLmFsbChwcm9tcykudGhlbihyZXMgPT4ge1xuICAgIGluaXRpYWxTeW5jID0gdHJ1ZTtcbiAgICBhbGxxcmllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlcykge1xuICAgICAgYWxscXJpZXMucHVzaChbLi4ucmVzdWx0XSk7XG4gICAgfVxuICAgIHJldHVybiBxcnlGbi5jYWxsKG5ld3FyeSwgYWxscXJpZXMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIG5ld3FyeTtcbn1cbiJdfQ==