@@ -7,6 +7,7 @@ import { MockComponent } from './widgets/mock/mock.component'; | |||||
import { RegisterBusinessComponent } from './pages/register-business/register-business.component'; | import { RegisterBusinessComponent } from './pages/register-business/register-business.component'; | ||||
import { TabsComponent } from './layout/tabs/tabs.component'; | import { TabsComponent } from './layout/tabs/tabs.component'; | ||||
import { InvestigateBusinessEntitiesAndIndividualsComponent } from './pages/investigate-business-entities-and-individuals/investigate-business-entities-and-individuals.component'; | import { InvestigateBusinessEntitiesAndIndividualsComponent } from './pages/investigate-business-entities-and-individuals/investigate-business-entities-and-individuals.component'; | ||||
import { DashboardComponent } from './pages/dashboard/dashboard.component'; | |||||
const routes: Routes = [ | const routes: Routes = [ | ||||
{ path: '', pathMatch: 'full', redirectTo: 'login' }, | { path: '', pathMatch: 'full', redirectTo: 'login' }, | ||||
@@ -18,6 +19,9 @@ const routes: Routes = [ | |||||
}, { | }, { | ||||
path: 'e-services', | path: 'e-services', | ||||
component: EServicesComponent, | component: EServicesComponent, | ||||
}, { | |||||
path: 'dashboard', | |||||
component: DashboardComponent, | |||||
}, { | }, { | ||||
path:'check-status', | path:'check-status', | ||||
component: CheckStatusComponent | component: CheckStatusComponent | ||||
@@ -30,6 +30,7 @@ import { ConcurComplianceReviewComponent } from './pages/investigate-business-en | |||||
import { ClosingRemarksComponent } from './pages/investigate-business-entities-and-individuals/closing-remarks/closing-remarks.component'; | import { ClosingRemarksComponent } from './pages/investigate-business-entities-and-individuals/closing-remarks/closing-remarks.component'; | ||||
import { PreparePreliminaryLetterComponent } from './pages/investigate-business-entities-and-individuals/prepare-preliminary-letter/prepare-preliminary-letter.component'; | import { PreparePreliminaryLetterComponent } from './pages/investigate-business-entities-and-individuals/prepare-preliminary-letter/prepare-preliminary-letter.component'; | ||||
import { RespondToPreliminaryLetterComponent } from './pages/investigate-business-entities-and-individuals/respond-to-preliminary-letter/respond-to-preliminary-letter.component'; | import { RespondToPreliminaryLetterComponent } from './pages/investigate-business-entities-and-individuals/respond-to-preliminary-letter/respond-to-preliminary-letter.component'; | ||||
import { DashboardComponent } from './pages/dashboard/dashboard.component'; | |||||
@NgModule({ | @NgModule({ | ||||
declarations: [ | declarations: [ | ||||
@@ -58,7 +59,8 @@ import { RespondToPreliminaryLetterComponent } from './pages/investigate-busines | |||||
ConcurComplianceReviewComponent, | ConcurComplianceReviewComponent, | ||||
ClosingRemarksComponent, | ClosingRemarksComponent, | ||||
PreparePreliminaryLetterComponent, | PreparePreliminaryLetterComponent, | ||||
RespondToPreliminaryLetterComponent | |||||
RespondToPreliminaryLetterComponent, | |||||
DashboardComponent | |||||
], | ], | ||||
imports: [ | imports: [ | ||||
BrowserModule, | BrowserModule, | ||||
@@ -4,8 +4,8 @@ | |||||
</figure> | </figure> | ||||
<nav> | <nav> | ||||
<a *ngIf="loginName === 'Officer'" [routerLink]="['/tabs/dashboard']"> Dashboard </a> | |||||
<a [routerLink]="['/tabs/e-services']"> E-Services </a> | <a [routerLink]="['/tabs/e-services']"> E-Services </a> | ||||
<!-- <a [routerLink]="['/tabs/check-status']"> Application Status </a> --> | |||||
</nav> | </nav> | ||||
<div class="search-input"> | <div class="search-input"> | ||||
@@ -0,0 +1,86 @@ | |||||
<header class="tab-header"> | |||||
<h2> | |||||
Dashboard | |||||
</h2> | |||||
</header> | |||||
<header class="page-heading"> | |||||
<h1> Non compliance - COM/LLPs </h1> | |||||
<p> A search module to filter down non compliant entities </p> | |||||
</header> | |||||
<div class="form-holder"> | |||||
<div class="two-column-holder"> | |||||
<app-select-input | |||||
label="Entity type" | |||||
[options]="entityTypeOptions" | |||||
></app-select-input> | |||||
<app-select-input | |||||
label="Category" | |||||
[value]="selectedCategory" | |||||
[options]="categoryOptions" | |||||
(onChange)="updateSelectedCategory($event)" | |||||
></app-select-input> | |||||
<app-generic-input | |||||
type="text" | |||||
label="UEN" | |||||
></app-generic-input> | |||||
<app-select-input | |||||
label="Enforcment status" | |||||
[options]="enforcementStatusOptions" | |||||
></app-select-input> | |||||
<app-date-input | |||||
label="AR/AD From date" | |||||
></app-date-input> | |||||
<app-date-input | |||||
label="AR/AD To date" | |||||
></app-date-input> | |||||
</div> | |||||
<div class="form-action-buttons"> | |||||
<button class="common-button" (click)="submitSearch()"> | |||||
Submit | |||||
</button> | |||||
<button class="common-button neutral" (click)="resetSearch()"> | |||||
Reset | |||||
</button> | |||||
</div> | |||||
<section class="table" *ngIf="isShowingResults"> | |||||
<header> | |||||
<div class="cell"> S/N </div> | |||||
<div class="cell"> UEN </div> | |||||
<div class="cell"> Compliance ID </div> | |||||
<div class="cell"> Entity name </div> | |||||
<div class="cell"> Last FYE </div> | |||||
<div class="cell"> Enforcment status </div> | |||||
<div class="cell"> Actions </div> | |||||
</header> | |||||
<ul> | |||||
<li> | |||||
<div class="cell"> 1 </div> | |||||
<div class="cell"> 001 </div> | |||||
<div class="cell"> 20190027N </div> | |||||
<div class="cell"> ABC PTE.LTD </div> | |||||
<div class="cell"> 01/01/2021 </div> | |||||
<div class="cell"> Closed </div> | |||||
<div class="cell"> | |||||
<button [routerLink]="['/tabs/investigate-business-entities-and-individuals']"> Initiate Enforcment </button> | |||||
</div> | |||||
</li> | |||||
<li> | |||||
<div class="cell"> 2 </div> | |||||
<div class="cell"> 002 </div> | |||||
<div class="cell"> 20190027M </div> | |||||
<div class="cell"> DEF PTE.LTD </div> | |||||
<div class="cell"> 01/01/2020 </div> | |||||
<div class="cell"> 1st EF letter </div> | |||||
<div class="cell"> | |||||
<button> Supress </button> | |||||
</div> | |||||
</li> | |||||
</ul> | |||||
</section> | |||||
</div> |
@@ -0,0 +1,136 @@ | |||||
.page-heading { | |||||
text-align: center; | |||||
line-height: 1.5; | |||||
margin: 3rem auto; | |||||
h1 { | |||||
font-size: 3rem; | |||||
color: var(--dark-grey); | |||||
filter: brightness(80%); | |||||
font-weight: 300; | |||||
letter-spacing: 0.5px; | |||||
margin-bottom: 1.5rem; | |||||
} | |||||
p { | |||||
font-size: 1.4rem; | |||||
color: var(--dark-grey); | |||||
width: 50%; | |||||
margin: 0 auto; | |||||
} | |||||
} | |||||
.form-holder { | |||||
width: calc(70% - 2rem); | |||||
padding: 4rem; | |||||
margin: 0 auto; | |||||
} | |||||
.two-column-holder { | |||||
display: grid; | |||||
grid-template-columns: 1fr 1fr; | |||||
& > * { | |||||
width: calc(100% - 2rem); | |||||
} | |||||
} | |||||
.form-action-buttons { | |||||
text-align: center; | |||||
margin-bottom: 2rem; | |||||
button { | |||||
&:first-child { | |||||
margin-right: 2rem; | |||||
} | |||||
} | |||||
} | |||||
.table { | |||||
margin: 4rem auto; | |||||
border-radius: 1rem; | |||||
overflow: auto; | |||||
border: 2px solid var(--border-grey); | |||||
min-height: 10rem; | |||||
header { | |||||
background: linear-gradient(90deg, var(--secondary) 0%, var(--primary)); | |||||
color: white; | |||||
font-size: 1.6rem; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-start; | |||||
text-align: center; | |||||
height: 5.5rem; | |||||
font-weight: 300; | |||||
letter-spacing: 0.5px; | |||||
} | |||||
.cell { | |||||
&:nth-child(1) { | |||||
width: 10%; | |||||
} | |||||
&:nth-child(2) { | |||||
width: 10%; | |||||
} | |||||
&:nth-child(3), &:nth-child(4), &:nth-child(5), &:nth-child(6) { | |||||
width: 15%; | |||||
} | |||||
&:nth-child(7) { | |||||
width: 20rem; | |||||
} | |||||
} | |||||
ul { | |||||
list-style: none; | |||||
} | |||||
li { | |||||
display: flex; | |||||
align-items: flex-start; | |||||
justify-content: flex-start; | |||||
text-align: center; | |||||
padding: 2rem 0; | |||||
&:nth-child(even) { | |||||
background-color: var(--border-grey); | |||||
} | |||||
.cell { | |||||
font-size: 1.4rem; | |||||
color: var(--dark-grey); | |||||
line-height: 1.7; | |||||
&:not(:nth-child(7)) { | |||||
margin-top: 1rem; | |||||
} | |||||
h5 { | |||||
font-weight: 500; | |||||
filter: brightness(80%); | |||||
font-size: 1.6rem; | |||||
} | |||||
button { | |||||
background-color: var(--highlight); | |||||
font-size: 1.5rem; | |||||
letter-spacing: 0.5px; | |||||
color: white; | |||||
border-radius: 4rem; | |||||
height: 4rem; | |||||
width: 90%; | |||||
display: block; | |||||
margin: 0 auto; | |||||
border: 0px; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.table-holder, .key-value-holder { | |||||
width: 90%; | |||||
margin: 0 auto; | |||||
} |
@@ -0,0 +1,25 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { DashboardComponent } from './dashboard.component'; | |||||
describe('DashboardComponent', () => { | |||||
let component: DashboardComponent; | |||||
let fixture: ComponentFixture<DashboardComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [ DashboardComponent ] | |||||
}) | |||||
.compileComponents(); | |||||
}); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(DashboardComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,48 @@ | |||||
import { Component, OnInit } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-dashboard', | |||||
templateUrl: './dashboard.component.html', | |||||
styleUrls: ['./dashboard.component.scss'] | |||||
}) | |||||
export class DashboardComponent implements OnInit { | |||||
isShowingResults = false; | |||||
entityTypeOptions = [ | |||||
'All', | |||||
'Local company', | |||||
'LLP', | |||||
]; | |||||
categoryOptions = [ | |||||
'Green', | |||||
'Amber', | |||||
'Red', | |||||
]; | |||||
enforcementStatusOptions = [ | |||||
'1st Enforcement Letter', | |||||
'2nd Enforcement Letter', | |||||
'Suppressed', | |||||
]; | |||||
selectedCategory = ''; | |||||
constructor() { } | |||||
ngOnInit(): void { | |||||
} | |||||
submitSearch() { | |||||
this.isShowingResults = true; | |||||
} | |||||
resetSearch() { | |||||
this.isShowingResults = false; | |||||
} | |||||
updateSelectedCategory(selectedCategory: string) { | |||||
this.selectedCategory = selectedCategory; | |||||
} | |||||
} |
@@ -7,29 +7,6 @@ import { Component, OnInit } from '@angular/core'; | |||||
}) | }) | ||||
export class EServicesComponent implements OnInit { | export class EServicesComponent implements OnInit { | ||||
keyValues = [{ | |||||
key: 'Receipt Number', | |||||
value: 'ACRA38293', | |||||
}, { | |||||
key: 'ARN', | |||||
value: 'ARN2021110294038', | |||||
}, { | |||||
key: 'EP Reference No.', | |||||
value: '20910038829384470' | |||||
}, { | |||||
key: 'Tax ID', | |||||
value: 'M9-0C038921', | |||||
}, { | |||||
key: 'Paid By', | |||||
value: 'KOH YA TING', | |||||
}, { | |||||
key: 'Payment Date', | |||||
value: '06/11/2021 11:28:01' | |||||
}, { | |||||
key: 'Paid Via', | |||||
value: 'Net Banking', | |||||
}]; | |||||
constructor() { } | constructor() { } | ||||
ngOnInit(): void { | ngOnInit(): void { | ||||
@@ -1,6 +1,6 @@ | |||||
<div class="input-holder"> | <div class="input-holder"> | ||||
<select> | <select> | ||||
<option *ngFor="let option of options" [value]="option"> {{ option }} </option> | |||||
<option *ngFor="let option of options" [value]="option" [selected]="value === option"> {{ option }} </option> | |||||
</select> | </select> | ||||
<img src="../../../../assets/icons/chevron-down.svg" alt="calendar icon"> | <img src="../../../../assets/icons/chevron-down.svg" alt="calendar icon"> | ||||
@@ -1,4 +1,4 @@ | |||||
import { Component, Input, OnInit } from '@angular/core'; | |||||
import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core'; | |||||
export interface SelectInputProperties { | export interface SelectInputProperties { | ||||
name: string, | name: string, | ||||
@@ -14,10 +14,18 @@ export interface SelectInputProperties { | |||||
export class SelectInputComponent implements OnInit { | export class SelectInputComponent implements OnInit { | ||||
@Input() label = ''; | @Input() label = ''; | ||||
@Input() options: Array<string> = []; | @Input() options: Array<string> = []; | ||||
@Input() value = ''; | |||||
@Output() onChange = new EventEmitter<string>(); | |||||
constructor() { } | constructor() { } | ||||
ngOnInit(): void { | ngOnInit(): void { | ||||
} | } | ||||
updateValue(value: string) { | |||||
this.value = value; | |||||
this.onChange.emit(value); | |||||
} | |||||
} | } |