UNPKG

@ortoo/angular-resource

Version:

Magical CRUD resource management for angular

57 lines 7.87 kB
// 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==