@@ -15,6 +15,9 @@ import { CheckStatusComponent } from './widgets/check-status/check-status.compon | |||||
import { TableComponent } from './widgets/table/table.component'; | import { TableComponent } from './widgets/table/table.component'; | ||||
import { KeyValueHolderComponent } from './widgets/key-value-holder/key-value-holder.component'; | import { KeyValueHolderComponent } from './widgets/key-value-holder/key-value-holder.component'; | ||||
import { FileComponent } from './widgets/file/file.component'; | import { FileComponent } from './widgets/file/file.component'; | ||||
import { DateInputComponent } from './widgets/form/date-input/date-input.component'; | |||||
import { SelectInputComponent } from './widgets/form/select-input/select-input.component'; | |||||
import { GenericInputComponent } from './widgets/form/generic-input/generic-input.component'; | |||||
@NgModule({ | @NgModule({ | ||||
declarations: [ | declarations: [ | ||||
@@ -29,7 +32,10 @@ import { FileComponent } from './widgets/file/file.component'; | |||||
CheckStatusComponent, | CheckStatusComponent, | ||||
TableComponent, | TableComponent, | ||||
KeyValueHolderComponent, | KeyValueHolderComponent, | ||||
FileComponent | |||||
FileComponent, | |||||
DateInputComponent, | |||||
SelectInputComponent, | |||||
GenericInputComponent | |||||
], | ], | ||||
imports: [ | imports: [ | ||||
BrowserModule, | BrowserModule, | ||||
@@ -6,15 +6,17 @@ | |||||
<section class="form"> | <section class="form"> | ||||
<h2> Login </h2> | <h2> Login </h2> | ||||
<div class="input-holder"> | |||||
<input type="email" placeholder="johndoe@mail.com"> | |||||
<label> Email ID </label> | |||||
</div> | |||||
<app-generic-input | |||||
type="email" | |||||
placeholder="johndoe@mail.com" | |||||
label="Email ID" | |||||
></app-generic-input> | |||||
<div class="input-holder"> | |||||
<input type="password" placeholder="Do not share password with others"> | |||||
<label> Password </label> | |||||
</div> | |||||
<app-generic-input | |||||
type="password" | |||||
placeholder="Do not share password with others" | |||||
label="Password" | |||||
></app-generic-input> | |||||
<div class="other-actions"> | <div class="other-actions"> | ||||
<label for="remember-me"> <input id="remember-me" type="checkbox"> Remember me </label> | <label for="remember-me"> <input id="remember-me" type="checkbox"> Remember me </label> | ||||
@@ -41,23 +41,25 @@ | |||||
<section class="form"> | <section class="form"> | ||||
<div class="input-holder" *ngFor="let registerInput of registerForm"> | <div class="input-holder" *ngFor="let registerInput of registerForm"> | ||||
<ng-container *ngIf="registerInput.type === 'date'"> | <ng-container *ngIf="registerInput.type === 'date'"> | ||||
<input type="date"> | |||||
<img src="assets/icons/calendar-fill.svg" alt="calendar icon"> | |||||
<app-date-input | |||||
[label]="registerInput.name" | |||||
></app-date-input> | |||||
</ng-container> | </ng-container> | ||||
<ng-container *ngIf="registerInput.type === 'select'"> | <ng-container *ngIf="registerInput.type === 'select'"> | ||||
<select *ngIf="registerInput.options"> | |||||
<option *ngFor="let option of registerInput.options" value="option"> {{ option }} </option> | |||||
</select> | |||||
<img src="assets/icons/chevron-down.svg" alt="calendar icon"> | |||||
<app-select-input | |||||
[label]="registerInput.name" | |||||
[options]="registerInput.options" | |||||
></app-select-input> | |||||
</ng-container> | </ng-container> | ||||
<ng-container *ngIf="registerInput.type === 'text' || registerInput.type === 'email' || registerInput.type === 'number'"> | <ng-container *ngIf="registerInput.type === 'text' || registerInput.type === 'email' || registerInput.type === 'number'"> | ||||
<input [type]="registerInput.type" [placeholder]="registerInput.placeholder"> | |||||
<app-generic-input | |||||
[label]="registerInput.name" | |||||
[type]="registerInput.type" | |||||
[placeholder]="registerInput.placeholder" | |||||
></app-generic-input> | |||||
</ng-container> | </ng-container> | ||||
<label> {{ registerInput.name }}: </label> | |||||
</div> | </div> | ||||
</section> | </section> | ||||
@@ -93,7 +95,7 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="input-holder"> | |||||
<div class="year-select-input-holder input-holder"> | |||||
<select [(ngModel)]="noOfYears"> | <select [(ngModel)]="noOfYears"> | ||||
<option *ngFor="let year of years" [value]="year"> {{ year }} </option> | <option *ngFor="let year of years" [value]="year"> {{ year }} </option> | ||||
</select> | </select> | ||||
@@ -118,6 +118,61 @@ | |||||
} | } | ||||
} | } | ||||
.year-select-input-holder { | |||||
width: 100%; | |||||
margin: 1.5rem 0; | |||||
position: relative; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-start; | |||||
label { | |||||
font-size: 1.4rem; | |||||
background-color: white; | |||||
color: var(--primary); | |||||
position: absolute; | |||||
top: 2.2rem; | |||||
left: -0.5rem; | |||||
padding: 0 0.5rem; | |||||
font-weight: 400; | |||||
letter-spacing: 0.5px; | |||||
transform: translate(2.5rem, -3rem); | |||||
} | |||||
select { | |||||
-webkit-appearance: none; | |||||
-moz-appearance: none; | |||||
text-indent: 1px; | |||||
text-overflow: ''; | |||||
display: block; | |||||
width: 100%; | |||||
border-radius: 4rem; | |||||
height: 5.5rem; | |||||
border: 1px solid var(--border-grey); | |||||
padding: 0 2rem; | |||||
font-size: 1.5rem; | |||||
letter-spacing: 0.5px; | |||||
color: var(--dark-grey); | |||||
background-color: white; | |||||
&:focus { | |||||
border-color: var(--highlight); | |||||
&~label { | |||||
color: var(--highlight); | |||||
} | |||||
} | |||||
} | |||||
img { | |||||
position: relative; | |||||
transform: translateX(-4rem); | |||||
pointer-events: none; | |||||
background-color: white; | |||||
} | |||||
} | |||||
.payment-container { | .payment-container { | ||||
padding: 1rem; | padding: 1rem; | ||||
@@ -1,10 +1,7 @@ | |||||
import { Component, OnInit } from '@angular/core'; | import { Component, OnInit } from '@angular/core'; | ||||
interface Plan { | |||||
name: string, | |||||
amount: number, | |||||
range: string, | |||||
} | |||||
import { DateInputProperties } from 'src/app/widgets/form/date-input/date-input.component'; | |||||
import { GenericInputProperties } from 'src/app/widgets/form/generic-input/generic-input.component'; | |||||
import { SelectInputProperties } from 'src/app/widgets/form/select-input/select-input.component'; | |||||
@Component({ | @Component({ | ||||
selector: 'app-register-business', | selector: 'app-register-business', | ||||
@@ -32,27 +29,29 @@ export class RegisterBusinessComponent implements OnInit { | |||||
paymentChild: Window | null = null; | paymentChild: Window | null = null; | ||||
childCheck: number | undefined; | childCheck: number | undefined; | ||||
registerForm: Array<{ | |||||
name: string, | |||||
type: 'date' | 'select' | 'text' | 'email' | 'number', | |||||
placeholder?: string, | |||||
options?: Array<string>, | |||||
}> = [{ | |||||
registerForm: Array<SelectInputProperties|DateInputProperties|GenericInputProperties> = [{ | |||||
name: 'Entity Type', | name: 'Entity Type', | ||||
type: 'select', | type: 'select', | ||||
options: ['BUSINESS', 'LOCAL COMPANY', | |||||
'LIMITED LIABILITY PARTNERSHIP', 'FOREIGN COMPANY', | |||||
'LIMITED PARTNERSHIP', 'PUBLIC ACCOUNTING FIRM'] | |||||
options: [ | |||||
'BUSINESS', | |||||
'LOCAL COMPANY', | |||||
'LIMITED LIABILITY PARTNERSHIP', | |||||
'FOREIGN COMPANY', | |||||
'LIMITED PARTNERSHIP', | |||||
'PUBLIC ACCOUNTING FIRM' | |||||
] | |||||
}, { | }, { | ||||
name: 'Date of Incorporation', | name: 'Date of Incorporation', | ||||
type: 'date' | type: 'date' | ||||
}, { | }, { | ||||
name: 'Company Category', | name: 'Company Category', | ||||
type: 'select', | type: 'select', | ||||
options: ['PUBLIC COMPANY LIMITED BY SHARES', | |||||
'PUBLIC COMPANY LIMITED BY GUARANTEE', | |||||
'PRIVATE COMPANY LIMITED BY SHARES', | |||||
'EXEMPT PRIVATE COMPANY LIMITED BY SHARES'] | |||||
options: [ | |||||
'PUBLIC COMPANY LIMITED BY SHARES', | |||||
'PUBLIC COMPANY LIMITED BY GUARANTEE', | |||||
'PRIVATE COMPANY LIMITED BY SHARES', | |||||
'EXEMPT PRIVATE COMPANY LIMITED BY SHARES' | |||||
] | |||||
}, { | }, { | ||||
name: 'Company Suffix', | name: 'Company Suffix', | ||||
type: 'select', | type: 'select', | ||||
@@ -0,0 +1,6 @@ | |||||
<div class="input-holder"> | |||||
<input type="date"> | |||||
<img src="../../../../assets/icons/calendar-fill.svg" alt="calendar icon"> | |||||
<label> {{ label }}: </label> | |||||
</div> |
@@ -0,0 +1,52 @@ | |||||
.input-holder { | |||||
width: 100%; | |||||
margin: 1.5rem 0; | |||||
position: relative; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-start; | |||||
label { | |||||
font-size: 1.4rem; | |||||
background-color: white; | |||||
color: var(--primary); | |||||
position: absolute; | |||||
top: 2.2rem; | |||||
left: -0.5rem; | |||||
padding: 0 0.5rem; | |||||
font-weight: 400; | |||||
letter-spacing: 0.5px; | |||||
transform: translate(2.5rem, -3rem); | |||||
} | |||||
input { | |||||
display: block; | |||||
width: 100%; | |||||
border-radius: 4rem; | |||||
height: 5.5rem; | |||||
border: 1px solid var(--border-grey); | |||||
padding: 0 2rem; | |||||
font-size: 1.5rem; | |||||
letter-spacing: 0.5px; | |||||
color: var(--dark-grey); | |||||
background-color: white; | |||||
&:focus { | |||||
border-color: var(--highlight); | |||||
&~label { | |||||
color: var(--highlight); | |||||
} | |||||
} | |||||
} | |||||
img { | |||||
position: relative; | |||||
transform: translateX(-4rem); | |||||
pointer-events: none; | |||||
background-color: white; | |||||
} | |||||
} |
@@ -0,0 +1,25 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { DateInputComponent } from './date-input.component'; | |||||
describe('DateInputComponent', () => { | |||||
let component: DateInputComponent; | |||||
let fixture: ComponentFixture<DateInputComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [ DateInputComponent ] | |||||
}) | |||||
.compileComponents(); | |||||
}); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(DateInputComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,21 @@ | |||||
import { Component, Input, OnInit } from '@angular/core'; | |||||
export interface DateInputProperties { | |||||
name: string, | |||||
type: 'date', | |||||
} | |||||
@Component({ | |||||
selector: 'app-date-input', | |||||
templateUrl: './date-input.component.html', | |||||
styleUrls: ['./date-input.component.scss'] | |||||
}) | |||||
export class DateInputComponent implements OnInit { | |||||
@Input() label = ''; | |||||
constructor() { } | |||||
ngOnInit(): void { | |||||
} | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<div class="input-holder"> | |||||
<input [type]="type" [placeholder]="placeholder"> | |||||
<label> {{ label }}: </label> | |||||
</div> |
@@ -0,0 +1,52 @@ | |||||
.input-holder { | |||||
width: 100%; | |||||
margin: 1.5rem 0; | |||||
position: relative; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-start; | |||||
label { | |||||
font-size: 1.4rem; | |||||
background-color: white; | |||||
color: var(--primary); | |||||
position: absolute; | |||||
top: 2.2rem; | |||||
left: -0.5rem; | |||||
padding: 0 0.5rem; | |||||
font-weight: 400; | |||||
letter-spacing: 0.5px; | |||||
transform: translate(2.5rem, -3rem); | |||||
} | |||||
input { | |||||
display: block; | |||||
width: 100%; | |||||
border-radius: 4rem; | |||||
height: 5.5rem; | |||||
border: 1px solid var(--border-grey); | |||||
padding: 0 2rem; | |||||
font-size: 1.5rem; | |||||
letter-spacing: 0.5px; | |||||
color: var(--dark-grey); | |||||
background-color: white; | |||||
&:focus { | |||||
border-color: var(--highlight); | |||||
&~label { | |||||
color: var(--highlight); | |||||
} | |||||
} | |||||
} | |||||
img { | |||||
position: relative; | |||||
transform: translateX(-4rem); | |||||
pointer-events: none; | |||||
background-color: white; | |||||
} | |||||
} |
@@ -0,0 +1,25 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { GenericInputComponent } from './generic-input.component'; | |||||
describe('GenericInputComponent', () => { | |||||
let component: GenericInputComponent; | |||||
let fixture: ComponentFixture<GenericInputComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [ GenericInputComponent ] | |||||
}) | |||||
.compileComponents(); | |||||
}); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(GenericInputComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,24 @@ | |||||
import { Component, Input, OnInit } from '@angular/core'; | |||||
export interface GenericInputProperties { | |||||
name: string, | |||||
type: 'text' | 'email' | 'number' | 'password', | |||||
placeholder?: string, | |||||
} | |||||
@Component({ | |||||
selector: 'app-generic-input', | |||||
templateUrl: './generic-input.component.html', | |||||
styleUrls: ['./generic-input.component.scss'] | |||||
}) | |||||
export class GenericInputComponent implements OnInit { | |||||
@Input() label = ''; | |||||
@Input() placeholder: string|undefined; | |||||
@Input() type: 'text'|'email'|'number'|'password' = 'text'; | |||||
constructor() { } | |||||
ngOnInit(): void { | |||||
} | |||||
} |
@@ -0,0 +1,9 @@ | |||||
<div class="input-holder"> | |||||
<select> | |||||
<option *ngFor="let option of options" [value]="option"> {{ option }} </option> | |||||
</select> | |||||
<img src="../../../../assets/icons/chevron-down.svg" alt="calendar icon"> | |||||
<label> {{ label }}: </label> | |||||
</div> |
@@ -0,0 +1,54 @@ | |||||
.input-holder { | |||||
width: 100%; | |||||
margin: 1.5rem 0; | |||||
position: relative; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-start; | |||||
label { | |||||
font-size: 1.4rem; | |||||
background-color: white; | |||||
color: var(--primary); | |||||
position: absolute; | |||||
top: 2.2rem; | |||||
left: -0.5rem; | |||||
padding: 0 0.5rem; | |||||
font-weight: 400; | |||||
letter-spacing: 0.5px; | |||||
transform: translate(2.5rem, -3rem); | |||||
} | |||||
select { | |||||
-webkit-appearance: none; | |||||
-moz-appearance: none; | |||||
text-indent: 1px; | |||||
text-overflow: ''; | |||||
display: block; | |||||
width: 100%; | |||||
border-radius: 4rem; | |||||
height: 5.5rem; | |||||
border: 1px solid var(--border-grey); | |||||
padding: 0 2rem; | |||||
font-size: 1.5rem; | |||||
letter-spacing: 0.5px; | |||||
color: var(--dark-grey); | |||||
background-color: white; | |||||
&:focus { | |||||
border-color: var(--highlight); | |||||
&~label { | |||||
color: var(--highlight); | |||||
} | |||||
} | |||||
} | |||||
img { | |||||
position: relative; | |||||
transform: translateX(-4rem); | |||||
pointer-events: none; | |||||
background-color: white; | |||||
} | |||||
} |
@@ -0,0 +1,25 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { SelectInputComponent } from './select-input.component'; | |||||
describe('SelectInputComponent', () => { | |||||
let component: SelectInputComponent; | |||||
let fixture: ComponentFixture<SelectInputComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [ SelectInputComponent ] | |||||
}) | |||||
.compileComponents(); | |||||
}); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(SelectInputComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,23 @@ | |||||
import { Component, Input, OnInit } from '@angular/core'; | |||||
export interface SelectInputProperties { | |||||
name: string, | |||||
type: 'select', | |||||
options: Array<string>, | |||||
} | |||||
@Component({ | |||||
selector: 'app-select-input', | |||||
templateUrl: './select-input.component.html', | |||||
styleUrls: ['./select-input.component.scss'] | |||||
}) | |||||
export class SelectInputComponent implements OnInit { | |||||
@Input() label = ''; | |||||
@Input() options: Array<string> = []; | |||||
constructor() { } | |||||
ngOnInit(): void { | |||||
} | |||||
} |
@@ -114,62 +114,4 @@ button, a { | |||||
cursor: not-allowed; | cursor: not-allowed; | ||||
opacity: 0.5; | opacity: 0.5; | ||||
} | } | ||||
} | |||||
.input-holder { | |||||
width: 100%; | |||||
margin: 1.5rem 0; | |||||
position: relative; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-start; | |||||
label { | |||||
font-size: 1.4rem; | |||||
background-color: white; | |||||
color: var(--primary); | |||||
position: absolute; | |||||
top: 2.2rem; | |||||
left: -0.5rem; | |||||
padding: 0 0.5rem; | |||||
font-weight: 400; | |||||
letter-spacing: 0.5px; | |||||
transform: translate(2.5rem, -3rem); | |||||
} | |||||
input, select { | |||||
display: block; | |||||
width: 100%; | |||||
border-radius: 4rem; | |||||
height: 5.5rem; | |||||
border: 1px solid var(--border-grey); | |||||
padding: 0 2rem; | |||||
font-size: 1.5rem; | |||||
letter-spacing: 0.5px; | |||||
color: var(--dark-grey); | |||||
background-color: white; | |||||
&:focus { | |||||
border-color: var(--highlight); | |||||
&~label { | |||||
color: var(--highlight); | |||||
} | |||||
} | |||||
} | |||||
select { | |||||
-webkit-appearance: none; | |||||
-moz-appearance: none; | |||||
text-indent: 1px; | |||||
text-overflow: ''; | |||||
} | |||||
img { | |||||
position: relative; | |||||
transform: translateX(-4rem); | |||||
pointer-events: none; | |||||
background-color: white; | |||||
} | |||||
} | } |