novo-elements
Version:
Bullhorn's NOVO Element Repository for Angular 2
60 lines (53 loc) • 1.73 kB
text/typescript
// NG2
import { Directive, ElementRef, OnInit, Input, OnChanges } from '@angular/core';
// Vendor
import * as dragula from 'dragula';
// APP
import { NovoDragulaService } from './DragulaService';
export class NovoDragulaElement implements OnInit, OnChanges {
bag: any;
dragulaModel: any;
drake: any = null;
container: any;
constructor(element: ElementRef, private dragulaService: NovoDragulaService) {
this.container = element.nativeElement;
}
ngOnInit() {
let bag = this.dragulaService.find(this.bag);
if (bag) {
this.drake = bag.drake;
this.checkModel();
this.drake.containers.push(this.container);
} else {
this.drake = dragula({
containers: [this.container]
});
this.checkModel();
this.dragulaService.add(this.bag, this.drake);
}
}
checkModel() {
if (this.dragulaModel) {
if (this.drake.models) {
this.drake.models.push(this.dragulaModel);
} else {
this.drake.models = [this.dragulaModel];
}
}
}
ngOnChanges(changes) {
if (changes && changes.dragulaModel) {
if (this.drake) {
if (this.drake.models) {
let modelIndex = this.drake.models.indexOf(changes.dragulaModel.previousValue);
this.drake.models.splice(modelIndex, 1, changes.dragulaModel.currentValue);
} else {
this.drake.models = [changes.dragulaModel.currentValue];
}
}
}
}
}