55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { Component, Input, Inject, Host, OnChanges, OnInit, SimpleChanges, HostListener } from 'ng-metadata/core';
|
|
import { LinearWorkflowComponent } from './linear-workflow.component';
|
|
|
|
|
|
/**
|
|
* A component which displays a single section in a linear workflow.
|
|
*/
|
|
@Component({
|
|
selector: 'linear-workflow-section',
|
|
templateUrl: '/static/js/directives/ui/linear-workflow/linear-workflow-section.component.html',
|
|
legacy: {
|
|
transclude: true
|
|
}
|
|
})
|
|
export class LinearWorkflowSectionComponent implements OnChanges, OnInit {
|
|
|
|
@Input('@') public sectionId: string;
|
|
@Input('@') public sectionTitle: string;
|
|
@Input('<') public sectionValid: boolean = false;
|
|
@Input('<') public skipSection: boolean = false;
|
|
public sectionVisible: boolean = false;
|
|
public isCurrentSection: boolean = false;
|
|
|
|
constructor(@Host() @Inject(LinearWorkflowComponent) private parent: LinearWorkflowComponent) {
|
|
|
|
}
|
|
|
|
public ngOnInit(): void {
|
|
if (!this.skipSection) {
|
|
this.parent.addSection(this);
|
|
}
|
|
}
|
|
|
|
public ngOnChanges(changes: SimpleChanges): void {
|
|
switch (Object.keys(changes)[0]) {
|
|
case 'sectionValid':
|
|
if (changes['sectionValid'].previousValue && !changes['sectionValid'].currentValue && this.parent) {
|
|
this.parent.onSectionInvalid(this.sectionId);
|
|
}
|
|
break;
|
|
|
|
case 'skipSection':
|
|
if (changes['skipSection'].currentValue && this.isCurrentSection && this.parent) {
|
|
this.parent.onNextSection();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public onSubmitSection(): void {
|
|
if (this.sectionValid) {
|
|
this.parent.onNextSection();
|
|
}
|
|
}
|
|
}
|