import { Component, Input, ContentChildren, Output, EventEmitter, ElementRef, ContentChild, TemplateRef, OnInit, AfterViewInit } from '@angular/core';
import { RdComponent } from '../../base/rdComponent';
import { RdLib } from "../../base/rdLib";
import { Form } from "../form/form";
declare const mWizard;
@Component({
selector: 'rd-form-content',
template: `
`
})
export class FormContent extends RdComponent {
@Input("rd-text") text: string;
@Input("rd-icon") icon: string;
@Input("rd-form") form: Form;
@Output("rd-on-open") openEvent: EventEmitter = new EventEmitter();
@ContentChild(TemplateRef) template;
active = false;
}
@Component({
selector: 'rd-form-wizard',
template: `
`
})
export class FormWizard extends RdComponent implements OnInit, AfterViewInit {
constructor(private element: ElementRef) { super(); }
@ContentChildren(FormContent) contents;
@Input("rd-text") text: string;
@Input("rd-color") color: string = "green";
@Output("rd-submit") submitEvent: EventEmitter = new EventEmitter();
container;
wizardInstance;
forms = {};
Rdlib = RdLib;
ngOnInit() {
this.container = this.jQuery(this.element.nativeElement).find("#m_wizard");
}
ngAfterViewInit() {
if (this.contents._results.length > 0) this.contents._results[0].openEvent.emit();
this.wizardInstance = new mWizard(this.container[0], { startStep: 1 })
.on("beforeNext", () => { })
.on("change", () => {
this.jQuery('html, body').animate({
scrollTop: this.jQuery(this.element.nativeElement).find("#m_wizard").offset().top
}, 1000, 'linear');
});
}
goToNextContent(step) {
let currentContent = this.contents._results[step - 1];
let nextContent = this.contents._results[step];
if (!(currentContent.form instanceof Form)) {
RdLib.screenOperations.toastr.error("This Form is not an instance of RdForm");
this.error("This Form is not an instance of RdForm");
return false;
}
else if (!this.formValidation(currentContent, step)) return false;
else {
nextContent.openEvent.emit();
return true;
}
}
currentContentEmit(step) {
let currentContent = this.contents._results[step - 1];
currentContent.openEvent.emit();
}
formValidation(content, step) {
if (content.form.validate()) {
this.forms[step] = content.form.getQuery();
return true
}
else return false
}
onSubmit() {
if (this.formValidation(this.contents.last, this.contents.length)) {
let query = {};
for (let i in this.forms) {
query = Object.assign(query, this.forms[i]);
}
this.submitEvent.emit(query);
}
}
}