UNPKG

ngx-dynamic-dashboard

Version:
87 lines 10.4 kB
/** * Created by jayhamilton on 1/28/17. */ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; /** * todo - the name of this service does not represent the file name. This should be refactored. Consider moving this service to the gadget module instead. */ export class GadgetInstanceService { constructor() { this.concreteGadgetInstances = []; this.subject = new Subject(); this.subscribers = []; } addInstance(gadget) { const gadgetFound = this.concreteGadgetInstances.findIndex((instance) => { return gadget.instanceId === instance['instance']['instanceId']; }) >= 0; if (gadgetFound === false) { this.concreteGadgetInstances.push(gadget); } } enableConfigureMode() { this.concreteGadgetInstances.forEach(function (gadget) { gadget.instance.toggleConfigMode(); }); } removeInstance(id) { console.log('REMOVING GADGET'); // remove instance representation from model this.model.rows.forEach(function (row) { row.columns.forEach(function (column) { if (column.gadgets) { for (let i = column.gadgets.length - 1; i >= 0; i--) { if (column.gadgets[i].instanceId === id) { column.gadgets.splice(i, 1); break; } } } }); }); // removes concrete instance from service for (let x = this.concreteGadgetInstances.length - 1; x >= 0; x--) { if (this.concreteGadgetInstances[x].instance.instanceId === id) { const _gadget = this.concreteGadgetInstances.splice(x, 1); _gadget[0].destroy(); break; } } // raise an event indicating a gadget was removed this.subject.next('gadget id: ' + id); } getInstanceCount() { return this.concreteGadgetInstances.length; } /* this allows this service to update the board when a delete operation occurs */ setCurrentModel(model) { this.model = model; } /* raise an event that the grid.component is listening for when a gadget is removed. */ listenForInstanceRemovedEventsFromGadgets() { return this.subject.asObservable(); } addSubscriber(subscriber) { this.subscribers.push(subscriber); } unSubscribeAll() { this.subscribers.forEach(subscription => { subscription.unsubscribe(); }); this.subscribers.length = 0; this.clearAllInstances(); } clearAllInstances() { this.concreteGadgetInstances.length = 0; } } GadgetInstanceService.decorators = [ { type: Injectable } ]; GadgetInstanceService.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9iZW5saS93b3Jrc3BhY2VzL25neC1keW5hbWljLWRhc2hib2FyZC1mcmFtZXdvcmsvcHJvamVjdHMvbmd4LWR5bmFtaWMtZGFzaGJvYXJkL3NyYy8iLCJzb3VyY2VzIjpbImRhc2hib2FyZC9ncmlkL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUd6Qzs7R0FFRztBQUdILE1BQU0sT0FBTyxxQkFBcUI7SUFPOUI7UUFMUSw0QkFBdUIsR0FBVSxFQUFFLENBQUM7UUFFcEMsWUFBTyxHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ2pELGdCQUFXLEdBQTJCLEVBQUUsQ0FBQztJQUdqRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BFLE9BQU8sTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1IsSUFBSSxXQUFXLEtBQUssS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FFN0M7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBRWYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU07WUFDakQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFVO1FBRXJCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRztZQUNqQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU07Z0JBQ2hDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFFakQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUU7NEJBRXJDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFFNUIsTUFBTTt5QkFDVDtxQkFDSjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBRS9ELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFO2dCQUU1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFMUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUVyQixNQUFNO2FBQ1Q7U0FDSjtRQUVELGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsS0FBVTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCx5Q0FBeUM7UUFDckMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBZTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsY0FBYztRQUVWLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3BDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUU3QixDQUFDO0lBRUQsaUJBQWlCO1FBRWIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7O1lBckdKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgamF5aGFtaWx0b24gb24gMS8yOC8xNy5cbiAqL1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0JvYXJkfSBmcm9tICcuL0JvYXJkJztcblxuLyoqXG4gKiB0b2RvIC0gdGhlIG5hbWUgb2YgdGhpcyBzZXJ2aWNlIGRvZXMgbm90IHJlcHJlc2VudCB0aGUgZmlsZSBuYW1lLiBUaGlzIHNob3VsZCBiZSByZWZhY3RvcmVkLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBzZXJ2aWNlIHRvIHRoZSBnYWRnZXQgbW9kdWxlIGluc3RlYWQuXG4gKi9cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdhZGdldEluc3RhbmNlU2VydmljZSB7XG5cbiAgICBwcml2YXRlIGNvbmNyZXRlR2FkZ2V0SW5zdGFuY2VzOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgbW9kZWw6IEJvYXJkO1xuICAgIHByaXZhdGUgc3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgc3Vic2NyaWJlcnM6IEFycmF5PFN1YmplY3Q8c3RyaW5nPj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIGFkZEluc3RhbmNlKGdhZGdldDogYW55KSB7XG4gICAgICAgIGNvbnN0IGdhZGdldEZvdW5kID0gdGhpcy5jb25jcmV0ZUdhZGdldEluc3RhbmNlcy5maW5kSW5kZXgoKGluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ2FkZ2V0Lmluc3RhbmNlSWQgPT09IGluc3RhbmNlWydpbnN0YW5jZSddWydpbnN0YW5jZUlkJ107XG4gICAgICAgIH0pID49IDA7XG4gICAgICAgIGlmIChnYWRnZXRGb3VuZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29uY3JldGVHYWRnZXRJbnN0YW5jZXMucHVzaChnYWRnZXQpO1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmFibGVDb25maWd1cmVNb2RlKCkge1xuXG4gICAgICAgIHRoaXMuY29uY3JldGVHYWRnZXRJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbiAoZ2FkZ2V0KSB7XG4gICAgICAgICAgICBnYWRnZXQuaW5zdGFuY2UudG9nZ2xlQ29uZmlnTW9kZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVJbnN0YW5jZShpZDogbnVtYmVyKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ1JFTU9WSU5HIEdBREdFVCcpO1xuICAgICAgICAvLyByZW1vdmUgaW5zdGFuY2UgcmVwcmVzZW50YXRpb24gZnJvbSBtb2RlbFxuICAgICAgICB0aGlzLm1vZGVsLnJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICAgICAgICByb3cuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmdhZGdldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbHVtbi5nYWRnZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZ2FkZ2V0c1tpXS5pbnN0YW5jZUlkID09PSBpZCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmdhZGdldHMuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gcmVtb3ZlcyBjb25jcmV0ZSBpbnN0YW5jZSBmcm9tIHNlcnZpY2VcbiAgICAgICAgZm9yIChsZXQgeCA9IHRoaXMuY29uY3JldGVHYWRnZXRJbnN0YW5jZXMubGVuZ3RoIC0gMTsgeCA+PSAwOyB4LS0pIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY29uY3JldGVHYWRnZXRJbnN0YW5jZXNbeF0uaW5zdGFuY2UuaW5zdGFuY2VJZCA9PT0gaWQpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IF9nYWRnZXQgPSB0aGlzLmNvbmNyZXRlR2FkZ2V0SW5zdGFuY2VzLnNwbGljZSh4LCAxKTtcblxuICAgICAgICAgICAgICAgIF9nYWRnZXRbMF0uZGVzdHJveSgpO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByYWlzZSBhbiBldmVudCBpbmRpY2F0aW5nIGEgZ2FkZ2V0IHdhcyByZW1vdmVkXG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KCdnYWRnZXQgaWQ6ICcgKyBpZCk7XG4gICAgfVxuXG4gICAgZ2V0SW5zdGFuY2VDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uY3JldGVHYWRnZXRJbnN0YW5jZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qXG4gICAgIHRoaXMgYWxsb3dzIHRoaXMgc2VydmljZSB0byB1cGRhdGUgdGhlIGJvYXJkIHdoZW4gYSBkZWxldGUgb3BlcmF0aW9uIG9jY3Vyc1xuICAgICAqL1xuICAgIHNldEN1cnJlbnRNb2RlbChtb2RlbDogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKlxuICAgICByYWlzZSBhbiBldmVudCB0aGF0IHRoZSBncmlkLmNvbXBvbmVudCBpcyBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBnYWRnZXQgaXMgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBsaXN0ZW5Gb3JJbnN0YW5jZVJlbW92ZWRFdmVudHNGcm9tR2FkZ2V0cygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGFkZFN1YnNjcmliZXIoc3Vic2NyaWJlcjogYW55KSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICB9XG5cbiAgICB1blN1YnNjcmliZUFsbCgpIHtcblxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxJbnN0YW5jZXMoKTtcblxuICAgIH1cblxuICAgIGNsZWFyQWxsSW5zdGFuY2VzKCkge1xuXG4gICAgICAgIHRoaXMuY29uY3JldGVHYWRnZXRJbnN0YW5jZXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbn1cbiJdfQ==