51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import { WebApplication } from './../../application';
|
|
import { SNComponent } from 'snjs';
|
|
import { WebDirective } from './../../types';
|
|
import template from '%/directives/component-modal.pug';
|
|
|
|
type ComponentModalScope = {
|
|
component: SNComponent
|
|
callback: () => void
|
|
onDismiss: (component: SNComponent) => void
|
|
application: WebApplication
|
|
}
|
|
|
|
export class ComponentModalCtrl implements ComponentModalScope {
|
|
$element: JQLite
|
|
component!: SNComponent
|
|
callback!: () => void
|
|
onDismiss!: (component: SNComponent) => void
|
|
application!: WebApplication
|
|
|
|
/* @ngInject */
|
|
constructor($element: JQLite) {
|
|
this.$element = $element;
|
|
}
|
|
|
|
dismiss() {
|
|
this.onDismiss && this.onDismiss(this.component);
|
|
this.callback && this.callback();
|
|
const elem = this.$element;
|
|
const scope = elem.scope();
|
|
scope.$destroy();
|
|
elem.remove();
|
|
}
|
|
}
|
|
|
|
export class ComponentModal extends WebDirective {
|
|
constructor() {
|
|
super();
|
|
this.restrict = 'E';
|
|
this.template = template;
|
|
this.controller = ComponentModalCtrl;
|
|
this.controllerAs = 'ctrl';
|
|
this.bindToController = true;
|
|
this.scope = {
|
|
component: '=',
|
|
callback: '=',
|
|
onDismiss: '&',
|
|
application: '='
|
|
};
|
|
}
|
|
}
|