Skip to content

Commit 8c7b461

Browse files
Merge pull request #697 from bcgov/olex
DSS-360, DSS-362:: Manage and add Platforms List - FE Development
2 parents b20e26a + 33f73f7 commit 8c7b461

34 files changed

+1025
-39
lines changed

frontend/src/app/app.routes.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { PageNotFoundComponent } from './common/components/page-not-found/page-n
99
import { approvedUserGuard } from './common/guards/approved-user.guard';
1010
import { activeUserGuard } from './common/guards/active-user.guard';
1111
import { accessRequestTokenGuard } from './common/guards/access-request-token.guard';
12-
import { licence_file_upload, listing_file_upload, listing_read, role_read, role_write, takedown_action, upload_history_read, user_read, user_write } from './common/consts/permissions.const';
12+
import { licence_file_upload, listing_file_upload, listing_read, platform_write, role_read, role_write, takedown_action, upload_history_read, user_read, user_write } from './common/consts/permissions.const';
1313
import { hasPermissionsGuard } from './common/guards/has-permissions.guard';
1414
import { TermsAndConditionsComponent } from './common/components/terms-and-conditions/terms-and-conditions.component';
1515
import { areTermsAceptedGuard } from './common/guards/are-terms-acepted.guard';
@@ -26,6 +26,11 @@ import { ExportListingsComponent } from './features/components/export-listings/e
2626
import { UploadBusinessLicenseComponent } from './features/components/upload-business-license/upload-business-license.component';
2727
import { AggregatedListingsTableComponent } from './features/components/listings-table/aggregated-listings-table/aggregated-listings-table.component';
2828
import { AddApsUserComponent } from './features/components/user-management/add-aps-user/add-aps-user.component';
29+
import { PlatformManagementComponent } from './features/components/platform-management/platform-management.component';
30+
import { AddNewPlatformComponent } from './features/components/platform-management/add-new-platform/add-new-platform.component';
31+
import { AddSubPlatformComponent } from './features/components/platform-management/add-sub-platform/add-sub-platform.component';
32+
import { EditPlatformComponent } from './features/components/platform-management/edit-platform/edit-platform.component';
33+
import { ViewPlatformComponent } from './features/components/platform-management/view-platform/view-platform.component';
2934

3035
export const routes: Routes = [
3136
{
@@ -108,6 +113,42 @@ export const routes: Routes = [
108113
component: UserManagementComponent,
109114
data: { permissions: [user_write] }
110115
},
116+
{
117+
path: 'user-management',
118+
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
119+
component: UserManagementComponent,
120+
data: { permissions: [user_write] }
121+
},
122+
{
123+
path: 'platform-management',
124+
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
125+
component: PlatformManagementComponent,
126+
data: { permissions: [platform_write] }
127+
},
128+
{
129+
path: 'add-new-platform',
130+
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
131+
component: AddNewPlatformComponent,
132+
data: { permissions: [platform_write] }
133+
},
134+
{
135+
path: 'add-sub-platform',
136+
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
137+
component: AddSubPlatformComponent,
138+
data: { permissions: [platform_write] }
139+
},
140+
{
141+
path: 'edit-platform',
142+
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
143+
component: EditPlatformComponent,
144+
data: { permissions: [platform_write] }
145+
},
146+
{
147+
path: 'platform/:id',
148+
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
149+
component: ViewPlatformComponent,
150+
data: { permissions: [platform_write] }
151+
},
111152
{
112153
path: 'user/:id',
113154
canActivate: [approvedUserGuard, activeUserGuard, hasPermissionsGuard, areTermsAceptedGuard],
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
export interface Platform {
2+
id?: string;
3+
organizationId: number;
4+
organizationType: string;
5+
organizationCd: string;
6+
organizationNm: string;
7+
updDtm: string;
8+
isActive: boolean;
9+
updUserGuid: string;
10+
primaryNoticeOfTakedownContactId: number;
11+
primaryNoticeOfTakedownContactEmail: string;
12+
primaryTakedownRequestContactId: number;
13+
primaryTakedownRequestContactEmail: string;
14+
secondaryNoticeOfTakedownContactId: number;
15+
secondaryNoticeOfTakedownContactEmail: string;
16+
secondaryTakedownRequestContactId: number;
17+
secondaryTakedownRequestContactEmail: string;
18+
subsidiaries: Array<Platform>;
19+
platformType: string;
20+
}
21+
22+
export interface PlatformCreate {
23+
organizationCd: string;
24+
organizationNm: string;
25+
isActive: boolean;
26+
platformType: string;
27+
primaryNoticeOfTakedownContactEmail: string;
28+
primaryTakedownRequestContactEmail: string;
29+
secondaryNoticeOfTakedownContactEmail: string;
30+
secondaryTakedownRequestContactEmail: string;
31+
}

frontend/src/app/common/services/dashboard.service.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,10 @@ export class DashboardService {
140140
buttonIcon: '',
141141
buttonText: 'Manage Platforms',
142142
description: 'Manage platform information',
143-
route: '/',
143+
route: '/platform-management',
144144
boxId: 'platformManagement_box',
145145
buttonId: 'platformManagement_btn',
146146
section: 'admin',
147-
isButtonDisabled: true,
148-
isComingSoon: true,
149147
},
150148
{
151149
title: 'Guidance for Local Government',
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { OrganizationService } from './organization.service';
4+
5+
xdescribe('OrganizationService', () => {
6+
let service: OrganizationService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(OrganizationService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { Injectable } from '@angular/core';
2+
import { DropdownOption } from '../models/dropdown-option';
3+
import { environment } from '../../../environments/environment';
4+
import { HttpClient } from '@angular/common/http';
5+
import { Observable } from 'rxjs';
6+
import { Platform } from '../models/platform';
7+
import { PagingResponse } from '../models/paging-response';
8+
9+
@Injectable({
10+
providedIn: 'root'
11+
})
12+
export class OrganizationService {
13+
14+
constructor(private httpClient: HttpClient) { }
15+
16+
getOrganizationTypes(): Observable<Array<DropdownOption>> {
17+
return this.httpClient.get<Array<DropdownOption>>(`${environment.API_HOST}/organizations/types`);
18+
}
19+
20+
getOrganizations(type?: string): Observable<Array<DropdownOption>> {
21+
if (type) {
22+
return this.httpClient.get<Array<DropdownOption>>(`${environment.API_HOST}/organizations?type=${type}`);
23+
} else {
24+
return this.httpClient.get<Array<DropdownOption>>(`${environment.API_HOST}/organizations`);
25+
}
26+
}
27+
28+
getPlatforms(pageSize = 1000, pageNumber = 1, orderBy?: string, direction?: 'asc'): Observable<PagingResponse<Platform>> {
29+
30+
let url = `${environment.API_HOST}/organizations/platforms?pageSize=${pageSize}&pageNumber=${pageNumber}`;
31+
32+
if (orderBy) {
33+
url += `&orderBy=${orderBy}&direction=${direction || 'asc'}`;
34+
}
35+
36+
return this.httpClient.get<PagingResponse<Platform>>(url);
37+
}
38+
39+
getPlatform(id: number): Observable<Platform> {
40+
return this.httpClient.get<Platform>(`${environment.API_HOST}/organizations/platform/${id}`);
41+
}
42+
43+
addPlatform(platform: Platform): Observable<Platform> {
44+
return this.httpClient.post<Platform>(`${environment.API_HOST}/organizations/platforms`, platform);
45+
}
46+
47+
addSubPlatform(platform: Platform, parentId: number): Observable<Platform> {
48+
return this.httpClient.post<Platform>(`${environment.API_HOST}/organizations/platform/${parentId}`, platform);
49+
}
50+
51+
editPlatform(platform: Platform): Observable<Platform> {
52+
return this.httpClient.put<Platform>(`${environment.API_HOST}/organizations/platform`, platform);
53+
}
54+
}

frontend/src/app/common/services/request-access.service.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,6 @@ export class RequestAccessService {
1313

1414
constructor(private httpClient: HttpClient) { }
1515

16-
getOrganizationTypes(): Observable<Array<DropdownOption>> {
17-
return this.httpClient.get<Array<DropdownOption>>(`${environment.API_HOST}/organizations/types`);
18-
}
19-
20-
getOrganizations(type?: string): Observable<Array<DropdownOption>> {
21-
if (type) {
22-
return this.httpClient.get<Array<DropdownOption>>(`${environment.API_HOST}/organizations?type=${type}`);
23-
} else {
24-
return this.httpClient.get<Array<DropdownOption>>(`${environment.API_HOST}/organizations`);
25-
}
26-
}
27-
2816
createAccessRequest(body: AccessRequest): Observable<unknown> {
2917
return this.httpClient.post<unknown>(`${environment.API_HOST}/users/accessrequests`, body);
3018
}

frontend/src/app/common/services/top-menu.service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ export class TopMenuService {
142142
accessPermission: platform_write,
143143
buttonId: 'platformManagement_mi_btn',
144144
route: '/platform-management',
145-
disabled: true,
146145
title: 'Manage Platforms',
147146
folderName: 'Admin Tools',
148147
},

frontend/src/app/features/components/access-request/access-request.component.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AccessRequest } from '../../../common/models/access-request';
1313
import { UserDataService } from '../../../common/services/user-data.service';
1414
import { GlobalLoaderService } from '../../../common/services/global-loader.service';
1515
import { forkJoin } from 'rxjs';
16+
import { OrganizationService } from '../../../common/services/organization.service';
1617

1718
@Component({
1819
selector: 'app-access-request',
@@ -51,6 +52,7 @@ export class AccessRequestComponent implements OnInit {
5152
constructor(
5253
private fb: FormBuilder,
5354
private requestAccessService: RequestAccessService,
55+
private organizationsService: OrganizationService,
5456
private userDataService: UserDataService,
5557
private loaderService: GlobalLoaderService,
5658
private cd: ChangeDetectorRef,
@@ -111,7 +113,7 @@ export class AccessRequestComponent implements OnInit {
111113
private initData(): void {
112114
this.loaderService.loadingStart();
113115
const getCurrentUser = this.userDataService.getCurrentUser();
114-
const getOrgs = this.requestAccessService.getOrganizationTypes();
116+
const getOrgs = this.organizationsService.getOrganizationTypes();
115117

116118
forkJoin([getCurrentUser, getOrgs]).subscribe({
117119
next: ([user, types]) => {

frontend/src/app/features/components/listings-table/aggregated-listings-table/aggregated-listings-table.component.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { TooltipModule } from 'primeng/tooltip';
1717
import { ListingDetailsComponent } from '../listing-details/listing-details.component';
1818
import { ListingFilter } from '../../../../common/models/listing-filter';
1919
import { environment } from '../../../../../environments/environment';
20-
import { PagingResponse, PagingResponsePageInfo } from '../../../../common/models/paging-response';
20+
import { PagingResponsePageInfo } from '../../../../common/models/paging-response';
2121
import {
2222
DropdownOption,
2323
DropdownOptionOrganization,
@@ -29,12 +29,12 @@ import {
2929
import { ListingDataService } from '../../../../common/services/listing-data.service';
3030
import { FilterPersistenceService } from '../../../../common/services/filter-persistence.service';
3131
import { GlobalLoaderService } from '../../../../common/services/global-loader.service';
32-
import { RequestAccessService } from '../../../../common/services/request-access.service';
3332
import { SelectedListingsStateService } from '../../../../common/services/selected-listings-state.service';
3433
import { UserDataService } from '../../../../common/services/user-data.service';
3534
import { User } from '../../../../common/models/user';
3635
import { ListingSearchRequest } from '../../../../common/models/listing-search-request';
3736
import { ListingDetails } from '../../../../common/models/listing-details';
37+
import { OrganizationService } from '../../../../common/services/organization.service';
3838

3939
@Component({
4040
selector: 'app-aggregated-listings-table',
@@ -88,13 +88,13 @@ export class AggregatedListingsTableComponent implements OnInit {
8888
private listingService: ListingDataService,
8989
private userService: UserDataService,
9090
private router: Router,
91-
private requestAccessService: RequestAccessService,
91+
private organizationsService: OrganizationService,
9292
private searchStateService: SelectedListingsStateService,
9393
private route: ActivatedRoute,
9494
private loaderService: GlobalLoaderService,
9595
private cd: ChangeDetectorRef,
9696
private filterPersistenceService: FilterPersistenceService,
97-
) {}
97+
) { }
9898

9999
ngOnInit(): void {
100100
this.getOrganizations();
@@ -474,7 +474,7 @@ export class AggregatedListingsTableComponent implements OnInit {
474474
}
475475

476476
private getOrganizations(): void {
477-
this.requestAccessService.getOrganizations('LG').subscribe({
477+
this.organizationsService.getOrganizations('LG').subscribe({
478478
next: (orgs) => {
479479
this.communities = orgs.map((org: DropdownOptionOrganization) => ({
480480
label: org.label,

frontend/src/app/features/components/listings-table/listings-table.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import { SidebarModule } from 'primeng/sidebar';
2626
import { ListingFilter } from '../../../common/models/listing-filter';
2727
import { AccordionModule } from 'primeng/accordion';
2828
import { RadioButtonModule } from 'primeng/radiobutton';
29-
import { RequestAccessService } from '../../../common/services/request-access.service';
3029
import { FilterPersistenceService } from '../../../common/services/filter-persistence.service';
30+
import { OrganizationService } from '../../../common/services/organization.service';
3131

3232
@Component({
3333
selector: 'app-listings-table',
@@ -78,7 +78,7 @@ export class ListingsTableComponent implements OnInit {
7878
private listingService: ListingDataService,
7979
private userService: UserDataService,
8080
private router: Router,
81-
private requestAccessService: RequestAccessService,
81+
private organizationsService: OrganizationService,
8282
private searchStateService: SelectedListingsStateService,
8383
private route: ActivatedRoute,
8484
private loaderService: GlobalLoaderService,
@@ -327,7 +327,7 @@ export class ListingsTableComponent implements OnInit {
327327
}
328328

329329
private getOrganizations(): void {
330-
this.requestAccessService.getOrganizations('LG').subscribe({
330+
this.organizationsService.getOrganizations('LG').subscribe({
331331
next: (orgs) => {
332332
this.communities = orgs.map((org: DropdownOptionOrganization) =>
333333
({ label: org.label, value: org.value, localGovernmentType: org.localGovernmentType || 'Other' }));

0 commit comments

Comments
 (0)