@@ -7,6 +7,7 @@ import { MockComponent } from './widgets/mock/mock.component'; | |||
import { RegisterBusinessComponent } from './pages/register-business/register-business.component'; | |||
import { TabsComponent } from './layout/tabs/tabs.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 = [ | |||
{ path: '', pathMatch: 'full', redirectTo: 'login' }, | |||
@@ -18,6 +19,9 @@ const routes: Routes = [ | |||
}, { | |||
path: 'e-services', | |||
component: EServicesComponent, | |||
}, { | |||
path: 'dashboard', | |||
component: DashboardComponent, | |||
}, { | |||
path:'check-status', | |||
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 { 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 { DashboardComponent } from './pages/dashboard/dashboard.component'; | |||
@NgModule({ | |||
declarations: [ | |||
@@ -58,7 +59,8 @@ import { RespondToPreliminaryLetterComponent } from './pages/investigate-busines | |||
ConcurComplianceReviewComponent, | |||
ClosingRemarksComponent, | |||
PreparePreliminaryLetterComponent, | |||
RespondToPreliminaryLetterComponent | |||
RespondToPreliminaryLetterComponent, | |||
DashboardComponent | |||
], | |||
imports: [ | |||
BrowserModule, | |||
@@ -4,8 +4,8 @@ | |||
</figure> | |||
<nav> | |||
<a *ngIf="loginName === 'Officer'" [routerLink]="['/tabs/dashboard']"> Dashboard </a> | |||
<a [routerLink]="['/tabs/e-services']"> E-Services </a> | |||
<!-- <a [routerLink]="['/tabs/check-status']"> Application Status </a> --> | |||
</nav> | |||
<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 { | |||
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() { } | |||
ngOnInit(): void { | |||
@@ -1,6 +1,6 @@ | |||
<div class="input-holder"> | |||
<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> | |||
<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 { | |||
name: string, | |||
@@ -14,10 +14,18 @@ export interface SelectInputProperties { | |||
export class SelectInputComponent implements OnInit { | |||
@Input() label = ''; | |||
@Input() options: Array<string> = []; | |||
@Input() value = ''; | |||
@Output() onChange = new EventEmitter<string>(); | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
updateValue(value: string) { | |||
this.value = value; | |||
this.onChange.emit(value); | |||
} | |||
} |