| @@ -15,6 +15,9 @@ import { CheckStatusComponent } from './widgets/check-status/check-status.compon | |||
| import { TableComponent } from './widgets/table/table.component'; | |||
| import { KeyValueHolderComponent } from './widgets/key-value-holder/key-value-holder.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({ | |||
| declarations: [ | |||
| @@ -29,7 +32,10 @@ import { FileComponent } from './widgets/file/file.component'; | |||
| CheckStatusComponent, | |||
| TableComponent, | |||
| KeyValueHolderComponent, | |||
| FileComponent | |||
| FileComponent, | |||
| DateInputComponent, | |||
| SelectInputComponent, | |||
| GenericInputComponent | |||
| ], | |||
| imports: [ | |||
| BrowserModule, | |||
| @@ -6,15 +6,17 @@ | |||
| <section class="form"> | |||
| <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"> | |||
| <label for="remember-me"> <input id="remember-me" type="checkbox"> Remember me </label> | |||
| @@ -41,23 +41,25 @@ | |||
| <section class="form"> | |||
| <div class="input-holder" *ngFor="let registerInput of registerForm"> | |||
| <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 *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 *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> | |||
| <label> {{ registerInput.name }}: </label> | |||
| </div> | |||
| </section> | |||
| @@ -93,7 +95,7 @@ | |||
| </div> | |||
| </div> | |||
| <div class="input-holder"> | |||
| <div class="year-select-input-holder input-holder"> | |||
| <select [(ngModel)]="noOfYears"> | |||
| <option *ngFor="let year of years" [value]="year"> {{ year }} </option> | |||
| </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 { | |||
| padding: 1rem; | |||
| @@ -1,10 +1,7 @@ | |||
| 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({ | |||
| selector: 'app-register-business', | |||
| @@ -32,27 +29,29 @@ export class RegisterBusinessComponent implements OnInit { | |||
| paymentChild: Window | null = null; | |||
| 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', | |||
| 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', | |||
| type: 'date' | |||
| }, { | |||
| name: 'Company Category', | |||
| 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', | |||
| 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; | |||
| 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; | |||
| } | |||
| } | |||