import { Component, ElementRef } from 'angular2/core';
import { FORM_DIRECTIVES, FormBuilder, Control, ControlGroup, Validators, AbstractControl } from 'angular2/common';
import { CustomValidators } from "ng2-contact-form/src/custom.validators";
declare var document;
declare var window;
const DEFAULT_TEMPLATE = `
`;
/*
@component: contact-form
@descrip: Component for implement contact form using ajax and validators
*/
@Component({
selector: 'contact-form',
directives: [FORM_DIRECTIVES],
template: DEFAULT_TEMPLATE
})
export class ContactForm {
//Properties
myForm: ControlGroup;
firstname: AbstractControl;
lastname: AbstractControl;
email: AbstractControl;
message: AbstractControl;
titleAttr: string;
firstnameAttr: string;
lastnameAttr: string;
emailAttr: string;
messageAttr: string;
sendAttr: string;
urlAttr: string;
frameworkCssAttr: string;
inputsClass: string;
btnClass: string;
textareaClass: string;
alertClass: string;
constructor(fb: FormBuilder, private element:ElementRef) {
//Get attributes values
let tag = this.element.nativeElement;
this.titleAttr = typeof tag.getAttribute('title') !== 'undefined' ? tag.getAttribute('title') : "Title";
this.firstnameAttr = typeof tag.getAttribute('firstname') !== 'undefined' ? tag.getAttribute('firstname') : "First Name";
this.lastnameAttr = typeof tag.getAttribute('lastname') !== 'undefined' ? tag.getAttribute('lastname') : "Last Name";
this.emailAttr = typeof tag.getAttribute('email') !== 'undefined' ? tag.getAttribute('email') : "Email";
this.sendAttr = typeof tag.getAttribute('send') !== 'undefined' ? tag.getAttribute('send') : "Send";
this.messageAttr = typeof tag.getAttribute('message') !== 'undefined' ? tag.getAttribute('message') : "Message";
this.urlAttr = typeof tag.getAttribute('url') !== 'undefined' ? tag.getAttribute('url') : "/send/";
this.frameworkCssAttr = typeof tag.getAttribute('frameworkCss') !== 'undefined' ? tag.getAttribute('frameworkCss') : "bootstrap";
//Check framework css to use
switch(this.frameworkCssAttr.toLowerCase()){
//MaterializeCSS
case 'materialize':
this.inputsClass = "validate";
this.btnClass = "btn-large waves-effect waves-light teal default_color scrollspy";
this.textareaClass = "materialize-textarea";
this.alertClass = "card-panel";
break;
//Bootstrap
default:
this.inputsClass = "form-control";
this.btnClass = "btn btn-default";
this.textareaClass = "";
this.alertClass = "alert alert-info";
break;
}
//Validators form
this.myForm = fb.group({
'firstname': ['', Validators.required],
'lastname': ['', Validators.required],
'email': ['', Validators.compose([Validators.required, CustomValidators.validateEmail])],
'message': ['', Validators.required]
});
this.firstname = this.myForm.controls['firstname'];
this.lastname = this.myForm.controls['lastname'];
this.email = this.myForm.controls['email'];
this.message = this.myForm.controls['message'];
}
/*
@method: sendEmail
@descrip: Event submit for contact form
*/
sendEmail(value: any): void {
//Result to send email
let result = document.querySelector("#result");
let result_card = document.querySelector("#result_card");
let progress = document.querySelector("#progress");
//Hide elements
result_card.style.display = "none";
//Show progress
progress.removeAttribute("style");
//Parameters
let creds = "firstname=" + value.firstname + "&lastname=" + value.lastname;
creds = creds + "&message=" + value.message + "&email=" + value.email;
//Send email
window.fetch(this.urlAttr, {
method: 'POST',
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: creds
})
.then((data) => {
let res = data.text();
res.then((message) => {
result.innerHTML = message;
//Show card message and hide progress
result_card.style.display = "block";
progress.style.display = "none";
});
})
.catch((error) => {
result.innerHTML = "Error al procesar el formulario";
//Show card message and hide progress
result_card.style.display = "block";
progress.style.display = "none";
});
}
}