Skip to content

Commit 3e2e829

Browse files
Added Phone Number Component and Editor
1 parent b180cf6 commit 3e2e829

24 files changed

+287
-7
lines changed

projects/forge-lib/src/lib/modules/form-builder/components/builder/builder.component.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { Form } from '../../../../shared/models/form';
1616
import { ComponentTypes } from '../../../../shared/constants/component-types';
1717
import { CurrencyComponent } from '../../../../shared/form-components/concrete/currency/currency.component';
1818
import { DateTimeComponent } from '../../../../shared/form-components/concrete/date-time/date-time.component';
19+
import { PhoneNumberComponent } from '../../../../shared/form-components/concrete/phone-number/phone-number.component';
1920

2021
@Component({
2122
selector: 'forge-form-builder',
@@ -45,7 +46,8 @@ export class BuilderComponent implements OnInit {
4546
ComponentTypes.Attachment,
4647
ComponentTypes.CheckboxGroup,
4748
ComponentTypes.Currency,
48-
ComponentTypes.DateTime
49+
ComponentTypes.DateTime,
50+
ComponentTypes.PhoneNumber
4951
];
5052

5153
/**
@@ -150,6 +152,9 @@ export class BuilderComponent implements OnInit {
150152
} case ComponentTypes.DateTime: {
151153
this.addComponent(new DateTimeComponent(), `${ComponentTypes.DateTime}_${this.index++}`);
152154
break;
155+
} case ComponentTypes.PhoneNumber: {
156+
this.addComponent(new PhoneNumberComponent(), `${ComponentTypes.PhoneNumber}_${this.index++}`);
157+
break;
153158
}
154159
}
155160
}

projects/forge-lib/src/lib/modules/form-builder/components/field-editor/field-editor.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,14 @@ export class FieldEditorComponent implements OnInit {
238238
this.showAbstractData = true;
239239
this.showAbstractValidation = true;
240240
}
241+
case ComponentTypes.PhoneNumber: {
242+
this.displayName = 'PhoneNumberEditorDisplayComponent';
243+
this.dataName = 'PhoneNumberEditorDataComponent';
244+
this.validationName = 'PhoneNumberEditorValidationComponent';
245+
this.showAbstractDisplay = true;
246+
this.showAbstractData = true;
247+
this.showAbstractValidation = true;
248+
}
241249
}
242250

243251
this.createDynamicComponents(this.displayName, this.vcDisplay);

projects/forge-lib/src/lib/modules/form-builder/form-builder-components.module.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { MaxValidatorDirective } from '../../shared/validators/maxValidator';
2020
import { MinValidatorDirective } from '../../shared/validators/minValidator';
2121
import { CurrencyComponent } from '../../shared/form-components/concrete/currency/currency.component';
2222
import { DateTimeComponent } from '../../shared/form-components/concrete/date-time/date-time.component';
23+
import { PhoneNumberComponent } from '../../shared/form-components/concrete/phone-number/phone-number.component';
2324

2425
@NgModule({
2526
imports: [
@@ -42,7 +43,8 @@ import { DateTimeComponent } from '../../shared/form-components/concrete/date-ti
4243
AttachmentComponent,
4344
MultiSelectComponent,
4445
CurrencyComponent,
45-
DateTimeComponent
46+
DateTimeComponent,
47+
PhoneNumberComponent
4648
],
4749
exports: [
4850
TextFieldComponent,
@@ -59,7 +61,8 @@ import { DateTimeComponent } from '../../shared/form-components/concrete/date-ti
5961
AttachmentComponent,
6062
MultiSelectComponent,
6163
CurrencyComponent,
62-
DateTimeComponent
64+
DateTimeComponent,
65+
PhoneNumberComponent
6366
],
6467
entryComponents: [
6568
TextFieldComponent,
@@ -73,7 +76,8 @@ import { DateTimeComponent } from '../../shared/form-components/concrete/date-ti
7376
AttachmentComponent,
7477
MultiSelectComponent,
7578
CurrencyComponent,
76-
DateTimeComponent
79+
DateTimeComponent,
80+
PhoneNumberComponent
7781
]
7882
})
7983
export class FormBuilderComponentsModule { }

projects/forge-lib/src/lib/modules/form-builder/form-builder-editors.module.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ import { CurrencyEditorValidationComponent } from '../../shared/form-editor-comp
3333
import { DateTimeEditorDataComponent } from '../../shared/form-editor-components/concrete/date-time-editor/data/date-time-editor-data.component';
3434
import { DateTimeEditorDisplayComponent } from '../../shared/form-editor-components/concrete/date-time-editor/display/date-time-editor-display.component';
3535
import { DateTimeEditorValidationComponent } from '../../shared/form-editor-components/concrete/date-time-editor/validation/date-time-editor-validation.component';
36+
import { PhoneNumberEditorDataComponent } from '../../shared/form-editor-components/concrete/phone-number-editor/data/phone-number-editor-data.component';
37+
import { PhoneNumberEditorDisplayComponent } from '../../shared/form-editor-components/concrete/phone-number-editor/display/phone-number-editor-display.component';
38+
import { PhoneNumberEditorValidationComponent } from '../../shared/form-editor-components/concrete/phone-number-editor/validation/phone-number-editor-validation.component';
3639

3740
@NgModule({
3841
imports: [
@@ -69,7 +72,10 @@ import { DateTimeEditorValidationComponent } from '../../shared/form-editor-comp
6972
CurrencyEditorValidationComponent,
7073
DateTimeEditorDataComponent,
7174
DateTimeEditorDisplayComponent,
72-
DateTimeEditorValidationComponent
75+
DateTimeEditorValidationComponent,
76+
PhoneNumberEditorDataComponent,
77+
PhoneNumberEditorDisplayComponent,
78+
PhoneNumberEditorValidationComponent
7379
],
7480
exports: [
7581
TextFieldEditorDisplayComponent,
@@ -101,7 +107,10 @@ import { DateTimeEditorValidationComponent } from '../../shared/form-editor-comp
101107
CurrencyEditorValidationComponent,
102108
DateTimeEditorDataComponent,
103109
DateTimeEditorDisplayComponent,
104-
DateTimeEditorValidationComponent
110+
DateTimeEditorValidationComponent,
111+
PhoneNumberEditorDataComponent,
112+
PhoneNumberEditorDisplayComponent,
113+
PhoneNumberEditorValidationComponent
105114
],
106115
entryComponents: [
107116
TextFieldEditorDisplayComponent,
@@ -133,7 +142,10 @@ import { DateTimeEditorValidationComponent } from '../../shared/form-editor-comp
133142
CurrencyEditorValidationComponent,
134143
DateTimeEditorDataComponent,
135144
DateTimeEditorDisplayComponent,
136-
DateTimeEditorValidationComponent
145+
DateTimeEditorValidationComponent,
146+
PhoneNumberEditorDataComponent,
147+
PhoneNumberEditorDisplayComponent,
148+
PhoneNumberEditorValidationComponent
137149
]
138150
})
139151
export class FormBuilderEditorsModule { }

projects/forge-lib/src/lib/shared/constants/component-types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,7 @@ export class ComponentTypes {
3131

3232
/** Date time component type */
3333
public static readonly DateTime: string = 'Date Time';
34+
35+
/** Phone number component type */
36+
public static readonly PhoneNumber: string = 'Phone Number';
3437
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { FormDisplay } from "../../abstract/form-display";
2+
3+
/**
4+
* Phone number display attributes
5+
*/
6+
export class PhoneNumberDisplay extends FormDisplay {
7+
/**
8+
* Input mask
9+
*/
10+
public inputMask: string;
11+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<div flex-container-row>
2+
<div sws-form input-active full-width>
3+
<input [id]="'input_' + id" forgeNumber [(ngModel)]="value" sws-form__input type="text" #name="ngModel"
4+
[name]="'input_' + id" [disabled]="display.disabled" [required]="validation.required"
5+
onkeyup="this.setAttribute('value', this.value);">
6+
<label sws-form__label [id]="'label_' + id" [for]="'label_' + id"
7+
*ngIf="!display.hideLabel">{{display.label}}</label>
8+
<div *ngIf="name.invalid && (name.dirty || name.touched)">'
9+
<div *ngIf="validation.customErrorMessage">
10+
<span sws-label--danger m-t-30>{{validation.customErrorMessage}}</span>
11+
</div>
12+
<div *ngIf="!validation.customErrorMessage">
13+
</div>
14+
</div>
15+
<div sws-form__bar></div>
16+
</div>
17+
<div [id]="'tooltip_' + id" sws-tooltip-right--light m-t-20 *ngIf="display.tooltip">
18+
<div sws-icon-flat--secondary rounded>
19+
<i class="fas fa-lightbulb"></i>
20+
</div>
21+
<div sws-tooltip--text>
22+
<p> {{display.tooltip}} </p>
23+
</div>
24+
</div>
25+
</div>
26+
<p *ngIf="display.description">{{display.description}}</p>

projects/forge-lib/src/lib/shared/form-components/concrete/phone-number/phone-number.component.scss

Whitespace-only changes.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { PhoneNumberComponent } from './phone-number.component';
4+
5+
describe('PhoneNumberComponent', () => {
6+
let component: PhoneNumberComponent;
7+
let fixture: ComponentFixture<PhoneNumberComponent>;
8+
9+
beforeEach(async(() => {
10+
TestBed.configureTestingModule({
11+
declarations: [ PhoneNumberComponent ]
12+
})
13+
.compileComponents();
14+
}));
15+
16+
beforeEach(() => {
17+
fixture = TestBed.createComponent(PhoneNumberComponent);
18+
component = fixture.componentInstance;
19+
fixture.detectChanges();
20+
});
21+
22+
it('should create', () => {
23+
expect(component).toBeTruthy();
24+
});
25+
});
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import { TextFieldComponent } from '../text-field/text-field.component';
3+
import { ComponentTypes } from '../../../constants/component-types';
4+
5+
/**
6+
* Phone number component
7+
*/
8+
@Component({
9+
selector: 'forge-renderer-phone-number',
10+
templateUrl: './phone-number.component.html',
11+
styleUrls: ['./phone-number.component.scss']
12+
})
13+
export class PhoneNumberComponent extends TextFieldComponent implements OnInit {
14+
/**
15+
* Component type
16+
*/
17+
public type = ComponentTypes.PhoneNumber;
18+
19+
/**
20+
* Initializes the component
21+
*/
22+
public ngOnInit(): void {
23+
if (!this.display.label) {
24+
this.display.label = 'Phone Number';
25+
this.display.inputMask = '(000) 000-0000';
26+
}
27+
28+
this.value = this.data.defaultValue;
29+
}
30+
}

0 commit comments

Comments
 (0)