UNPKG

mysql-live-client

Version:
161 lines (160 loc) 7.44 kB
var ObservableCollection_1 = require("../ObservableCollection"); var Helper_1 = require("../Helper"); var _ = require("lodash"); var Joiner = (function () { function Joiner(params) { this.collectionNames = []; this.params = params; this.collectionNames.push(params.primaryCollection.name); this.collectionNames.push(params.joinedCollection.name); } Joiner.prototype.doReceive = function (nextTask) { var _this = this; var skipReceiveCheck = false; if (this.params.joinedCollection.hasReceived) { this.doJoinedReceive(undefined, nextTask); skipReceiveCheck = true; } else { nextTask(); } this.params.joinedCollection.onChange(function (evt, nextChange) { switch (evt.name) { case ObservableCollection_1.default.ON_RECEIVE: if (skipReceiveCheck) { } else { _this.doJoinedReceive(nextChange, nextTask); } break; case ObservableCollection_1.default.ON_INSERT: _this.doJoinedInsert(evt["newItem"], nextChange, nextTask); break; case ObservableCollection_1.default.ON_UPDATE: _this.doJoinedUpdate(evt["newItem"], evt["selector"], nextChange, nextTask); break; case ObservableCollection_1.default.ON_REMOVE: _this.doJoinedRemove(evt["selector"], nextChange, nextTask); break; } }, "ON_CHANGE_" + this.params.primaryCollection.name + "_" + this.params.joinedCollection.name); }; Joiner.prototype.doJoinedReceive = function (nextJoinedEvent, nextTask) { var _this = this; var primaryCollection = this.params.primaryCollection; var joinedCollection = this.params.joinedCollection; primaryCollection.items.forEach(function (primary) { var criteriaForeignToThisKey = {}; criteriaForeignToThisKey[_this.params.foreignKey] = primary[_this.params.thisKey]; if (_this.params.isArray) { primary[_this.params.as] = joinedCollection.find(criteriaForeignToThisKey) || []; } else { primary[_this.params.as] = joinedCollection.findSingle(criteriaForeignToThisKey) || {}; } }); nextTask(); if (nextJoinedEvent !== undefined) nextJoinedEvent(); }; Joiner.prototype.doJoinedInsert = function (newJoined, nextJoinedEvent, nextTask) { var _this = this; var criteriaForPrimariesWhichContainsThisJoined = {}; criteriaForPrimariesWhichContainsThisJoined[this.params.thisKey] = newJoined[this.params.foreignKey]; var primaries = this.params.primaryCollection.find(criteriaForPrimariesWhichContainsThisJoined); if (primaries && primaries.length > 0) { primaries.forEach(function (primary) { if (_this.params.isArray) { primary[_this.params.as]["push"](newJoined); } else { primary[_this.params.as] = newJoined; } }); this.params.joinedCollection.fireJoinedEvent({ name: ObservableCollection_1.default.ON_INSERT, newItem: newJoined }); } nextJoinedEvent(); }; Joiner.prototype.doJoinedUpdate = function (newJoined, selector, nextJoinedEvent, nextTask) { var _this = this; var criteriaForPrimariesWhichContainsThisJoined = {}; criteriaForPrimariesWhichContainsThisJoined[this.params.thisKey] = newJoined[this.params.foreignKey]; var primaries = this.params.primaryCollection.find(criteriaForPrimariesWhichContainsThisJoined); if (primaries && primaries.length > 0) { primaries.forEach(function (primary) { if (_this.params.isArray) { Helper_1.default._findAndUpdate(primary[_this.params.as], selector, newJoined); } else { primary[_this.params.as] = newJoined; } }); this.params.joinedCollection.fireJoinedEvent({ name: ObservableCollection_1.default.ON_UPDATE, newItem: newJoined, selector: selector }); } nextJoinedEvent(); }; Joiner.prototype.doJoinedRemove = function (selector, nextJoinedEvent, nextTask) { var _this = this; var joinedPrimaryKeyCol = this.params.joinedCollection.primaryKeyColumn; var criteriaForJoined = {}; criteriaForJoined[joinedPrimaryKeyCol] = selector[joinedPrimaryKeyCol]; var primaries = this.params.primaryCollection.items; var somethingChanged = false; primaries.forEach(function (primary) { if (_this.params.isArray) { var removed = _.remove(primary[_this.params.as], function (joined) { return joined[joinedPrimaryKeyCol] === selector[joinedPrimaryKeyCol]; }); if (removed.length > 0) { somethingChanged = true; } } else { if (primary[_this.params.as][joinedPrimaryKeyCol] === selector[joinedPrimaryKeyCol]) { primary[_this.params.as] = {}; somethingChanged = true; } } }); if (somethingChanged) { this.params.joinedCollection.fireJoinedEvent({ name: ObservableCollection_1.default.ON_REMOVE, selector: selector }); } nextJoinedEvent(); }; Joiner.prototype.doInsert = function (newPrimary, nextTask) { var criteriaForeignToThisKey = {}; criteriaForeignToThisKey[this.params.foreignKey] = newPrimary[this.params.thisKey]; if (this.params.isArray) { newPrimary[this.params.as] = this.params.joinedCollection.find(criteriaForeignToThisKey) || []; } else { newPrimary[this.params.as] = this.params.joinedCollection.findSingle(criteriaForeignToThisKey) || {}; } nextTask(); }; Joiner.prototype.doUpdate = function (newPrimary, selector, nextTask) { nextTask(); }; Joiner.prototype.doRemove = function (selector, nextTask) { nextTask(); }; Joiner.prototype.run = function (caller, next) { //oxi swsta doulevei console.log(caller.collectionName+ ' : '+ caller.event.name+' wtf ??? nextTask? o eautos tou? lets call it'); if (caller.collectionName === this.params.primaryCollection.name) { switch (caller.event.name) { case ObservableCollection_1.default.ON_RECEIVE: this.doReceive(next); break; case ObservableCollection_1.default.ON_INSERT: this.doInsert(caller.event["newItem"], next); break; case ObservableCollection_1.default.ON_UPDATE: this.doUpdate(caller.event["newItem"], caller.event["selector"], next); break; case ObservableCollection_1.default.ON_REMOVE: this.doRemove(caller.event["selector"], next); break; } } }; return Joiner; })(); exports.Joiner = Joiner;