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: `
{{index + 1}}
{{step.text}}
` }) 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); } } }