feat: add contact form
This commit is contained in:
29
src/app/components/contact-form/contact-form.html
Normal file
29
src/app/components/contact-form/contact-form.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<form [formGroup]="form">
|
||||
<legend>{{strings.addContact|upperfirst}}.<span>{{strings.allFieldRequired|upperfirst}}</span></legend>
|
||||
<div class="fields">
|
||||
<app-form-field
|
||||
[errorsDictionary]="companyAndNameErrorsDictionary"
|
||||
formControlName="name"
|
||||
[label]="(strings.name|upperfirst) + ':'"
|
||||
placeholder="Contact's name"
|
||||
/>
|
||||
<app-form-field
|
||||
[errorsDictionary]="companyAndNameErrorsDictionary"
|
||||
formControlName="company"
|
||||
[label]="(strings.company|upperfirst) + ':'"
|
||||
placeholder="Contact's company"
|
||||
/>
|
||||
<app-form-field
|
||||
[errorsDictionary]="phoneErrorsDictionary"
|
||||
formControlName="phone"
|
||||
[label]="(strings.phone|upperfirst) +':'"
|
||||
placeholder="Contact's phone"
|
||||
type="tel"
|
||||
/>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<app-squared-btn
|
||||
[text]="strings.add"
|
||||
></app-squared-btn>
|
||||
</div>
|
||||
</form>
|
||||
44
src/app/components/contact-form/contact-form.scss
Normal file
44
src/app/components/contact-form/contact-form.scss
Normal file
@@ -0,0 +1,44 @@
|
||||
form {
|
||||
legend {
|
||||
display: inline-block;
|
||||
font-family: var(--secondaryFont);
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
|
||||
span {
|
||||
clear: both;
|
||||
display: block;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 2rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 0.5rem 0;
|
||||
|
||||
app-squared-btn {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
app-form-field {
|
||||
flex: 0 0 calc(33.33% - 1rem);
|
||||
}
|
||||
|
||||
.fields {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.footer {
|
||||
app-squared-btn {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
27
src/app/components/contact-form/contact-form.spec.ts
Normal file
27
src/app/components/contact-form/contact-form.spec.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ContactForm } from './contact-form';
|
||||
import { STRINGS_INJECTOR } from '../../app.config';
|
||||
import { strings } from '../../strings';
|
||||
|
||||
describe('ContactForm', () => {
|
||||
let component: ContactForm;
|
||||
let fixture: ComponentFixture<ContactForm>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [ContactForm],
|
||||
providers: [{ provide: STRINGS_INJECTOR, useValue: strings }],
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
TestBed.inject(STRINGS_INJECTOR);
|
||||
fixture = TestBed.createComponent(ContactForm);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
26
src/app/components/contact-form/contact-form.ts
Normal file
26
src/app/components/contact-form/contact-form.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { Component, inject } from '@angular/core';
|
||||
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { FormField } from '../form-field/form-field';
|
||||
import { STRINGS_INJECTOR } from '../../app.config';
|
||||
import { SquaredBtn } from '../squared-btn/squared-btn';
|
||||
import { NameAndCompanyFieldsErrorsDictionary } from '../../errors-dictionaries/name-and-company-field';
|
||||
import { PhoneFieldErroresDictionary } from '../../errors-dictionaries/phone-field';
|
||||
import { UpperfirstPipe } from "../../pipes/upperfirst-pipe";
|
||||
|
||||
@Component({
|
||||
selector: 'app-contact-form',
|
||||
imports: [FormField, ReactiveFormsModule, SquaredBtn, UpperfirstPipe],
|
||||
templateUrl: './contact-form.html',
|
||||
styleUrl: './contact-form.scss',
|
||||
})
|
||||
export class ContactForm {
|
||||
form = new FormGroup({
|
||||
name: new FormControl(null, [Validators.required, Validators.maxLength(55)]),
|
||||
company: new FormControl(null, [Validators.required, Validators.maxLength(55)]),
|
||||
phone: new FormControl(null, [Validators.required, Validators.pattern( /^(\+?[\d]){12,15}$/ )]),
|
||||
});
|
||||
protected strings = inject(STRINGS_INJECTOR);
|
||||
protected companyAndNameErrorsDictionary = new NameAndCompanyFieldsErrorsDictionary().getDictionary();
|
||||
protected phoneErrorsDictionary = new PhoneFieldErroresDictionary().getDictionary();
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user